public static void PopulateSheet(StyleSheet sheet, IEnumerable <Rule> rules, ResolvingOptions options = null) { options = options ?? new ResolvingOptions(); var helper = new StyleSheetBuilderHelper(); if (options.SortRules) { rules = rules.OrderBy(rule => rule.SelectorName); } foreach (var rule in rules) { helper.BeginRule(string.Empty, rule.LineNumber); StyleSheetBuilderHelper.BuildSelector(rule.Selector, helper); var propertyValues = rule.Properties.Values.ToList(); if (options.SortProperties) { propertyValues.Sort((p1, p2) => p1.Name.CompareTo(p2.Name)); } foreach (var property in propertyValues) { helper.builder.BeginProperty(property.Name); AddValues(helper, property.Values); helper.builder.EndProperty(); } helper.EndRule(); } helper.PopulateSheet(sheet); }
public static StyleSheet ConvertToStyleSheet(IEnumerable <Rule> rules, Dictionary <string, Property> variables = null, ResolvingOptions options = null) { options = options ?? new ResolvingOptions(); variables = variables ?? new Dictionary <string, Property>(); var helper = new StyleSheetBuilderHelper(); if (options.SortRules) { rules = rules.OrderBy(rule => rule.SelectorName); } foreach (var rule in rules) { helper.BeginRule(); StyleSheetBuilderHelper.BuildSelector(rule.Selector, helper); var propertyValues = rule.Properties.Values.ToList(); if (options.SortProperties) { propertyValues.Sort((p1, p2) => p1.Name.CompareTo(p2.Name)); } foreach (var property in propertyValues) { helper.builder.BeginProperty(property.Name); // Try to resolve variable var values = ResolveValues(property, variables, options); AddValues(helper, values); helper.builder.EndProperty(); } helper.EndRule(); } helper.PopulateSheet(); return(helper.sheet); }
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(); }