示例#1
0
        public static void CopySelector(StyleSheet sheet, UssComments comments, StyleComplexSelector complexSelector, StyleSheetBuilderHelper helper)
        {
            helper.BeginRule(comments.Get(complexSelector.rule));
            BuildSelector(complexSelector, helper);

            foreach (var property in complexSelector.rule.properties)
            {
                CopyProperty(sheet, comments, property, helper);
            }

            helper.EndRule();
        }
示例#2
0
        public static void CopyProperty(StyleSheet sheet, UssComments comments, StyleProperty property, StyleSheetBuilderHelper helper)
        {
            var propertyCopy = helper.builder.BeginProperty(property.name);

            helper.options.comments.AddComment(propertyCopy, comments.Get(property));

            foreach (var value in property.values)
            {
                switch (value.valueType)
                {
                case StyleValueType.Color:
                    helper.builder.AddValue(sheet.ReadColor(value));
                    break;

                case StyleValueType.Enum:
                    helper.builder.AddValue(sheet.ReadEnum(value), StyleValueType.Enum);
                    break;

                case StyleValueType.Float:
                    helper.builder.AddValue(sheet.ReadFloat(value));
                    break;

                case StyleValueType.Dimension:
                    helper.builder.AddValue(sheet.ReadDimension(value));
                    break;

                case StyleValueType.Keyword:
                    helper.builder.AddValue(sheet.ReadKeyword(value));
                    break;

                case StyleValueType.ResourcePath:
                    helper.builder.AddValue(sheet.ReadResourcePath(value), StyleValueType.ResourcePath);
                    break;

                case StyleValueType.String:
                    helper.builder.AddValue(sheet.ReadString(value), StyleValueType.String);
                    break;
                }
            }
            helper.builder.EndProperty();
        }
        private void Split(StyleComplexSelector complexSelector1, StyleComplexSelector complexSelector2)
        {
            var comment1 = s1Comments.Get(complexSelector1.rule);

            s1Builder.BeginRule(comment1);
            StyleSheetBuilderHelper.BuildSelector(complexSelector1, s1Builder);

            var comment2 = s2Comments.Get(complexSelector2.rule);

            s2Builder.BeginRule(comment2);
            StyleSheetBuilderHelper.BuildSelector(complexSelector2, s2Builder);

            commonBuilder.BeginRule(string.IsNullOrEmpty(comment1) ? comment2 : comment1);
            StyleSheetBuilderHelper.BuildSelector(complexSelector2, commonBuilder);

            // This is a common selector to both s1 and s2, for each properties determine what is common:
            var properties = new Dictionary <string, PropertyPair>();

            StyleSheetBuilderHelper.PopulateProperties(complexSelector1.rule.properties, properties, true);
            StyleSheetBuilderHelper.PopulateProperties(complexSelector2.rule.properties, properties, false);

            foreach (var propertyPair in properties.Values)
            {
                if (propertyPair.p1 != null)
                {
                    if (propertyPair.p2 != null)
                    {
                        // Extend needs to be in common, s1 and s2:
                        if (propertyPair.p1.name == ConverterUtils.k_Extend)
                        {
                            StyleSheetBuilderHelper.CopyProperty(s1Cache.sheet, s1Comments, propertyPair.p1, commonBuilder);
                            StyleSheetBuilderHelper.CopyProperty(s1Cache.sheet, s1Comments, propertyPair.p1, s1Builder);
                            StyleSheetBuilderHelper.CopyProperty(s2Cache.sheet, s2Comments, propertyPair.p2, s2Builder);
                        }
                        // Possibly common property
                        else if (CompareProperty(propertyPair.p1, propertyPair.p2))
                        {
                            StyleSheetBuilderHelper.CopyProperty(s1Cache.sheet, s1Comments, propertyPair.p1, commonBuilder);
                        }
                        else
                        {
                            StyleSheetBuilderHelper.CopyProperty(s1Cache.sheet, s1Comments, propertyPair.p1, s1Builder);
                            StyleSheetBuilderHelper.CopyProperty(s2Cache.sheet, s2Comments, propertyPair.p2, s2Builder);
                        }
                    }
                    else
                    {
                        // Only in s1: copy straight
                        StyleSheetBuilderHelper.CopyProperty(s1Cache.sheet, s1Comments, propertyPair.p1, s1Builder);
                    }
                }
                else
                {
                    // Only in s2: copy straight
                    StyleSheetBuilderHelper.CopyProperty(s2Cache.sheet, s2Comments, propertyPair.p2, s2Builder);
                }
            }

            s1Builder.EndRule();
            s2Builder.EndRule();
            commonBuilder.EndRule();
        }