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(); }
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(); }