public virtual void ResolveEveryCounterWithNotDefaultSymbolsTest() { CssCounterManager manager = new CssCounterManager(); IElementNode node = new _CssPseudoElementNode_272(null, "name"); manager.ResetCounter("counter", 3); manager.PushEveryCounterToCounters(node); NUnit.Framework.Assert.AreEqual("III", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_ROMAN))); manager.ResetCounter("counter", 2); NUnit.Framework.Assert.AreEqual("III.II", manager.ResolveCounters("counter", ".", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_ROMAN))); manager.ResolveTargetCounter("id", "counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum(CssConstants. UPPER_ROMAN)); manager.ResolveTargetCounters("id", "counter", ".", HtmlUtils.ConvertStringCounterGlyphStyleToEnum(CssConstants .UPPER_ROMAN)); manager.AddTargetCounterIfRequired(node); manager.AddTargetCountersIfRequired(node); NUnit.Framework.Assert.AreEqual("II", manager.ResolveTargetCounter("id", "counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_ROMAN))); NUnit.Framework.Assert.AreEqual("III.II", manager.ResolveTargetCounters("id", "counter", ".", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_ROMAN))); }
public virtual String ResolveCounters(String counterName, String counterSeparatorStr, String listSymbolType , INode node) { return(ResolveCounters(counterName, counterSeparatorStr, HtmlUtils.ConvertStringCounterGlyphStyleToEnum(listSymbolType ))); }
/// <summary>Resolves content.</summary> /// <param name="styles">the styles map</param> /// <param name="contentContainer">the content container</param> /// <param name="context">the CSS context</param> /// <returns> /// a list of /// <see cref="iText.StyledXmlParser.Node.INode"/> /// instances /// </returns> internal static IList <INode> ResolveContent(IDictionary <String, String> styles, INode contentContainer, CssContext context) { String contentStr = styles.Get(CssConstants.CONTENT); IList <INode> result = new List <INode>(); if (contentStr == null || CssConstants.NONE.Equals(contentStr) || CssConstants.NORMAL.Equals(contentStr)) { return(null); } CssDeclarationValueTokenizer tokenizer = new CssDeclarationValueTokenizer(contentStr); CssDeclarationValueTokenizer.Token token; CssQuotes quotes = null; while ((token = tokenizer.GetNextValidToken()) != null) { if (token.IsString()) { result.Add(new CssContentPropertyResolver.ContentTextNode(contentContainer, token.GetValue())); continue; } if (token.GetValue().StartsWith(CssConstants.COUNTERS + "(")) { String paramsStr = token.GetValue().JSubstring(CssConstants.COUNTERS.Length + 1, token.GetValue().Length - 1); IList <String> @params = CssUtils.SplitString(paramsStr, ',', ALLOWED_ESCAPE_CHARACTERS); if (@params.Count < COUNTERS_MIN_PARAMS_SIZE) { return(ErrorFallback(contentStr)); } // Counters are denoted by case-sensitive identifiers String counterName = @params[0].Trim(); String counterSeparationStr = @params[1].Trim(); counterSeparationStr = counterSeparationStr.JSubstring(1, counterSeparationStr.Length - 1); CounterDigitsGlyphStyle listStyleType = HtmlUtils.ConvertStringCounterGlyphStyleToEnum(@params.Count > COUNTERS_MIN_PARAMS_SIZE ? @params[COUNTERS_MIN_PARAMS_SIZE].Trim() : null); CssCounterManager counterManager = context.GetCounterManager(); INode scope = contentContainer; if (CssConstants.PAGE.Equals(counterName)) { result.Add(new PageCountElementNode(false, contentContainer).SetDigitsGlyphStyle(listStyleType)); } else { if (CssConstants.PAGES.Equals(counterName)) { result.Add(new PageCountElementNode(true, contentContainer).SetDigitsGlyphStyle(listStyleType)); } else { String resolvedCounter = counterManager.ResolveCounters(counterName, counterSeparationStr, listStyleType); result.Add(new CssContentPropertyResolver.ContentTextNode(scope, resolvedCounter)); } } } else { if (token.GetValue().StartsWith(CssConstants.COUNTER + "(")) { String paramsStr = token.GetValue().JSubstring(CssConstants.COUNTER.Length + 1, token.GetValue().Length - 1); IList <String> @params = CssUtils.SplitString(paramsStr, ',', ALLOWED_ESCAPE_CHARACTERS); if (@params.Count < COUNTER_MIN_PARAMS_SIZE) { return(ErrorFallback(contentStr)); } // Counters are denoted by case-sensitive identifiers String counterName = @params[0].Trim(); CounterDigitsGlyphStyle listStyleType = HtmlUtils.ConvertStringCounterGlyphStyleToEnum(@params.Count > COUNTER_MIN_PARAMS_SIZE ? @params[COUNTER_MIN_PARAMS_SIZE].Trim() : null); CssCounterManager counterManager = context.GetCounterManager(); INode scope = contentContainer; if (CssConstants.PAGE.Equals(counterName)) { result.Add(new PageCountElementNode(false, contentContainer).SetDigitsGlyphStyle(listStyleType)); } else { if (CssConstants.PAGES.Equals(counterName)) { result.Add(new PageCountElementNode(true, contentContainer).SetDigitsGlyphStyle(listStyleType)); } else { String resolvedCounter = counterManager.ResolveCounter(counterName, listStyleType); result.Add(new CssContentPropertyResolver.ContentTextNode(scope, resolvedCounter)); } } } else { if (token.GetValue().StartsWith(CssConstants.TARGET_COUNTER + "(")) { String paramsStr = token.GetValue().JSubstring(CssConstants.TARGET_COUNTER.Length + 1, token.GetValue().Length - 1); IList <String> @params = CssUtils.SplitString(paramsStr, ',', ALLOWED_ESCAPE_CHARACTERS); if (@params.Count < TARGET_COUNTER_MIN_PARAMS_SIZE) { return(ErrorFallback(contentStr)); } String target = CssUtils.ExtractUrl(@params[0]); String counterName = @params[1].Trim(); CounterDigitsGlyphStyle listStyleType = HtmlUtils.ConvertStringCounterGlyphStyleToEnum(@params.Count > TARGET_COUNTER_MIN_PARAMS_SIZE ? @params[TARGET_COUNTER_MIN_PARAMS_SIZE].Trim() : null); if (CssConstants.PAGE.Equals(counterName)) { result.Add(new PageTargetCountElementNode(contentContainer, target).SetDigitsGlyphStyle(listStyleType)); } else { if (CssConstants.PAGES.Equals(counterName)) { result.Add(new PageCountElementNode(true, contentContainer).SetDigitsGlyphStyle(listStyleType)); } else { String counter = context.GetCounterManager().ResolveTargetCounter(target.Replace("'", "").Replace("#", "") , counterName, listStyleType); CssContentPropertyResolver.ContentTextNode node = new CssContentPropertyResolver.ContentTextNode(contentContainer , counter == null ? "0" : counter); result.Add(node); } } } else { if (token.GetValue().StartsWith(CssConstants.TARGET_COUNTERS + "(")) { String paramsStr = token.GetValue().JSubstring(CssConstants.TARGET_COUNTERS.Length + 1, token.GetValue().Length - 1); IList <String> @params = CssUtils.SplitString(paramsStr, ',', ALLOWED_ESCAPE_CHARACTERS); if (@params.Count < TARGET_COUNTERS_MIN_PARAMS_SIZE) { return(ErrorFallback(contentStr)); } String target = CssUtils.ExtractUrl(@params[0]); String counterName = @params[1].Trim(); String counterSeparator = @params[2].Trim(); counterSeparator = counterSeparator.JSubstring(1, counterSeparator.Length - 1); CounterDigitsGlyphStyle listStyleType = HtmlUtils.ConvertStringCounterGlyphStyleToEnum(@params.Count > TARGET_COUNTERS_MIN_PARAMS_SIZE ? @params[TARGET_COUNTERS_MIN_PARAMS_SIZE].Trim() : null); if (CssConstants.PAGE.Equals(counterName)) { result.Add(new PageTargetCountElementNode(contentContainer, target).SetDigitsGlyphStyle(listStyleType)); } else { if (CssConstants.PAGES.Equals(counterName)) { result.Add(new PageCountElementNode(true, contentContainer).SetDigitsGlyphStyle(listStyleType)); } else { String counters = context.GetCounterManager().ResolveTargetCounters(target.Replace(",", "").Replace("#", "" ), counterName, counterSeparator, listStyleType); CssContentPropertyResolver.ContentTextNode node = new CssContentPropertyResolver.ContentTextNode(contentContainer , counters == null ? "0" : counters); result.Add(node); } } } else { if (token.GetValue().StartsWith("url(")) { IDictionary <String, String> attributes = new Dictionary <String, String>(); attributes.Put(AttributeConstants.SRC, CssUtils.ExtractUrl(token.GetValue())); //TODO: probably should add user agent styles on CssContentElementNode creation, not here. attributes.Put(AttributeConstants.STYLE, CssConstants.DISPLAY + ":" + CssConstants.INLINE_BLOCK); result.Add(new CssContentElementNode(contentContainer, TagConstants.IMG, attributes)); } else { if (CssGradientUtil.IsCssLinearGradientValue(token.GetValue())) { IDictionary <String, String> attributes = new Dictionary <String, String>(); attributes.Put(AttributeConstants.STYLE, CssConstants.BACKGROUND_IMAGE + ":" + token.GetValue() + ";" + CssConstants .HEIGHT + ":" + CssConstants.INHERIT + ";" + CssConstants.WIDTH + ":" + CssConstants.INHERIT + ";"); result.Add(new CssContentElementNode(contentContainer, TagConstants.DIV, attributes)); } else { if (token.GetValue().StartsWith("attr(") && contentContainer is CssPseudoElementNode) { int endBracket = token.GetValue().IndexOf(')'); if (endBracket > 5) { String attrName = token.GetValue().JSubstring(5, endBracket); if (attrName.Contains("(") || attrName.Contains(" ") || attrName.Contains("'") || attrName.Contains("\"")) { return(ErrorFallback(contentStr)); } IElementNode element = (IElementNode)contentContainer.ParentNode(); String value = element.GetAttribute(attrName); result.Add(new CssContentPropertyResolver.ContentTextNode(contentContainer, value == null ? "" : value)); } } else { if (token.GetValue().EndsWith("quote") && contentContainer is IStylesContainer) { if (quotes == null) { quotes = CssQuotes.CreateQuotes(styles.Get(CssConstants.QUOTES), true); } String value = quotes.ResolveQuote(token.GetValue(), context); if (value == null) { return(ErrorFallback(contentStr)); } result.Add(new CssContentPropertyResolver.ContentTextNode(contentContainer, value)); } else { if (token.GetValue().StartsWith(CssConstants.ELEMENT + "(") && contentContainer is PageMarginBoxContextNode ) { String paramsStr = token.GetValue().JSubstring(CssConstants.ELEMENT.Length + 1, token.GetValue().Length - 1); String[] @params = iText.IO.Util.StringUtil.Split(paramsStr, ","); if (@params.Length == 0) { return(ErrorFallback(contentStr)); } String name = @params[0].Trim(); String runningElementOccurrence = null; if (@params.Length > 1) { runningElementOccurrence = @params[1].Trim(); } result.Add(new PageMarginRunningElementNode(name, runningElementOccurrence)); } else { return(ErrorFallback(contentStr)); } } } } } } } } } } return(result); }
public virtual void ConvertCounterToSymbolTest() { CssCounterManager manager = new CssCounterManager(); manager.ResetCounter("counter", 3); NUnit.Framework.Assert.AreEqual("3", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (null))); NUnit.Framework.Assert.AreEqual("", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.NONE))); NUnit.Framework.Assert.AreEqual("\u2022", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.DISC))); NUnit.Framework.Assert.AreEqual("\u25a0", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.SQUARE))); NUnit.Framework.Assert.AreEqual("\u25e6", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.CIRCLE))); NUnit.Framework.Assert.AreEqual("C", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_ALPHA))); NUnit.Framework.Assert.AreEqual("C", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_LATIN))); NUnit.Framework.Assert.AreEqual("c", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_ALPHA))); NUnit.Framework.Assert.AreEqual("c", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_LATIN))); NUnit.Framework.Assert.AreEqual("\u03b3", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_GREEK))); NUnit.Framework.Assert.AreEqual("iii", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_ROMAN))); NUnit.Framework.Assert.AreEqual("III", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_ROMAN))); NUnit.Framework.Assert.AreEqual("03", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.DECIMAL_LEADING_ZERO))); NUnit.Framework.Assert.AreEqual("\u10D2", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.GEORGIAN))); NUnit.Framework.Assert.AreEqual("\u0533", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.ARMENIAN))); NUnit.Framework.Assert.AreEqual("3", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum ("some_script"))); manager.ResetCounter("counter", 0); NUnit.Framework.Assert.AreEqual("0", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (null))); NUnit.Framework.Assert.AreEqual("", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.NONE))); NUnit.Framework.Assert.AreEqual("\u2022", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.DISC))); NUnit.Framework.Assert.AreEqual("\u25a0", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.SQUARE))); NUnit.Framework.Assert.AreEqual("\u25e6", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.CIRCLE))); NUnit.Framework.Assert.AreEqual("0", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_ALPHA))); NUnit.Framework.Assert.AreEqual("0", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_LATIN))); NUnit.Framework.Assert.AreEqual("0", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_ALPHA))); NUnit.Framework.Assert.AreEqual("0", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_LATIN))); NUnit.Framework.Assert.AreEqual("0", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_GREEK))); NUnit.Framework.Assert.AreEqual("", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_ROMAN))); NUnit.Framework.Assert.AreEqual("", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_ROMAN))); NUnit.Framework.Assert.AreEqual("00", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.DECIMAL_LEADING_ZERO))); NUnit.Framework.Assert.AreEqual("", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.GEORGIAN))); NUnit.Framework.Assert.AreEqual("", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.ARMENIAN))); NUnit.Framework.Assert.AreEqual("0", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum ("some_script"))); manager.ResetCounter("counter", -3); NUnit.Framework.Assert.AreEqual("-3", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (null))); NUnit.Framework.Assert.AreEqual("", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.NONE))); NUnit.Framework.Assert.AreEqual("\u2022", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.DISC))); NUnit.Framework.Assert.AreEqual("\u25a0", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.SQUARE))); NUnit.Framework.Assert.AreEqual("\u25e6", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.CIRCLE))); NUnit.Framework.Assert.AreEqual("-3", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_ALPHA))); NUnit.Framework.Assert.AreEqual("-3", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_LATIN))); NUnit.Framework.Assert.AreEqual("-3", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_ALPHA))); NUnit.Framework.Assert.AreEqual("-3", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_LATIN))); NUnit.Framework.Assert.AreEqual("-3", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_GREEK))); NUnit.Framework.Assert.AreEqual("-iii", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_ROMAN))); NUnit.Framework.Assert.AreEqual("-III", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_ROMAN))); NUnit.Framework.Assert.AreEqual("0-3", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.DECIMAL_LEADING_ZERO))); NUnit.Framework.Assert.AreEqual("", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.GEORGIAN))); NUnit.Framework.Assert.AreEqual("", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.ARMENIAN))); NUnit.Framework.Assert.AreEqual("-3", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum ("some_script"))); manager.ResetCounter("counter", 5000); NUnit.Framework.Assert.AreEqual("5000", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (null))); NUnit.Framework.Assert.AreEqual("", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.NONE))); NUnit.Framework.Assert.AreEqual("\u2022", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.DISC))); NUnit.Framework.Assert.AreEqual("\u25a0", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.SQUARE))); NUnit.Framework.Assert.AreEqual("\u25e6", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.CIRCLE))); NUnit.Framework.Assert.AreEqual("GJH", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_ALPHA))); NUnit.Framework.Assert.AreEqual("GJH", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_LATIN))); NUnit.Framework.Assert.AreEqual("gjh", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_ALPHA))); NUnit.Framework.Assert.AreEqual("gjh", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_LATIN))); NUnit.Framework.Assert.AreEqual("\u03b8\u03c0\u03b8", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_GREEK))); NUnit.Framework.Assert.AreEqual("5000", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.LOWER_ROMAN))); NUnit.Framework.Assert.AreEqual("5000", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.UPPER_ROMAN))); NUnit.Framework.Assert.AreEqual("5000", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.DECIMAL_LEADING_ZERO))); NUnit.Framework.Assert.AreEqual("\u10ed", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.GEORGIAN))); NUnit.Framework.Assert.AreEqual("\u0550", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum (CssConstants.ARMENIAN))); NUnit.Framework.Assert.AreEqual("5000", manager.ResolveCounter("counter", HtmlUtils.ConvertStringCounterGlyphStyleToEnum ("some_script"))); }