/// <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);
        }
Пример #2
0
 /// <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));
     }
 }