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