/// <summary> /// Parses a rule set into a list of /// <see cref="iText.StyledXmlParser.Css.CssRuleSet"/> /// instances. /// </summary> /// <remarks> /// Parses a rule set into a list of /// <see cref="iText.StyledXmlParser.Css.CssRuleSet"/> /// instances. /// This method returns a /// <see cref="System.Collections.IList{E}"/> /// because a selector can /// be compound, like "p, div, #navbar". /// </remarks> /// <param name="selectorStr">the selector</param> /// <param name="propertiesStr">the properties</param> /// <returns> /// the resulting list of /// <see cref="iText.StyledXmlParser.Css.CssRuleSet"/> /// instances /// </returns> public static IList <CssRuleSet> ParseRuleSet(String selectorStr, String propertiesStr) { IList <CssDeclaration> declarations = ParsePropertyDeclarations(propertiesStr); IList <CssRuleSet> ruleSets = new List <CssRuleSet>(); //check for rules like p, {…} String[] selectors = iText.IO.Util.StringUtil.Split(selectorStr, ","); for (int i = 0; i < selectors.Length; i++) { selectors[i] = CssUtils.RemoveDoubleSpacesAndTrim(selectors[i]); if (selectors[i].Length == 0) { return(ruleSets); } } foreach (String currentSelectorStr in selectors) { try { ruleSets.Add(new CssRuleSet(new CssSelector(currentSelectorStr), declarations)); } catch (Exception exc) { logger.Error(MessageFormatUtil.Format(iText.StyledXmlParser.LogMessageConstant.ERROR_PARSING_CSS_SELECTOR, currentSelectorStr), exc); //if any separated selector has errors, all others become invalid. //in this case we just clear map, it is the easies way to support this. declarations.Clear(); return(ruleSets); } } return(ruleSets); }
/// <summary> /// Creates a new /// <see cref="CssPageRule"/> /// instance. /// </summary> /// <param name="ruleParameters">the rule parameters</param> public CssPageRule(String ruleParameters) : base(CssRuleName.PAGE, ruleParameters) { pageSelectors = new List <ICssSelector>(); String[] selectors = iText.IO.Util.StringUtil.Split(ruleParameters, ","); for (int i = 0; i < selectors.Length; i++) { selectors[i] = CssUtils.RemoveDoubleSpacesAndTrim(selectors[i]); } foreach (String currentSelectorStr in selectors) { pageSelectors.Add(new CssPageSelector(currentSelectorStr)); } }