public void ParseCSSWithComments_Performance() { var css = commentedCSS; int repeatCount = 1000; Stopwatch counter = Stopwatch.StartNew(); for (int i = 0; i < repeatCount; i++) { var cssparser = new Scryber.Styles.Parsing.CSSStyleParser(css, null); StyleCollection col = new StyleCollection(); foreach (var style in cssparser) { col.Add(style); } } counter.Stop(); var elapsed = counter.Elapsed.TotalMilliseconds / repeatCount; Assert.IsTrue(elapsed < 0.20, "Took too long to parse. Expected < 0.15ms per string, Actual : " + elapsed + "ms"); }
public CSSStyleEnumerator(StringEnumerator str, CSSStyleParser owner, PDFContextBase context) { this._str = str; this._owner = owner; this._context = context; this._log = context == null ? new DoNothingTraceLog(TraceRecordLevel.Off) : context.TraceLog; }
public void CSSParserWithComments() { var css = @" /* This is the grey body */ body.grey { background-color:#808080; /* body background */ color: #222; } body.grey div /* Inner divs */{ padding: 10px; /*color: #AAA;*/ margin:15px; } body.grey div.reverse{ /* Reverse the colors */ background-color: #222; color:#808080; }"; var cssparser = new Scryber.Styles.Parsing.CSSStyleParser(css, null); StyleCollection col = new StyleCollection(); foreach (var style in cssparser) { col.Add(style); } Assert.AreEqual(3, col.Count); //First one var one = col[0] as StyleDefn; Assert.AreEqual("body.grey", one.Match.ToString()); Assert.AreEqual(2, one.ValueCount); Assert.AreEqual((PDFColor)"#808080", one.GetValue(StyleKeys.BgColorKey, PDFColors.Transparent)); Assert.AreEqual((PDFColor)"#222", one.GetValue(StyleKeys.FillColorKey, PDFColors.Transparent)); var two = col[1] as StyleDefn; Assert.AreEqual("body.grey div", two.Match.ToString()); Assert.AreEqual(10, two.ValueCount); //All, Top, Left, Bottom and Right are all set for Margins and Padding // 96 pixels per inch, 72 points per inch Assert.AreEqual(7.5, two.GetValue(StyleKeys.PaddingAllKey, PDFUnit.Zero).PointsValue); Assert.AreEqual(11.25, two.GetValue(StyleKeys.MarginsAllKey, PDFUnit.Zero).PointsValue); var three = col[2] as StyleDefn; Assert.AreEqual("body.grey div.reverse", three.Match.ToString()); Assert.AreEqual(2, one.ValueCount); Assert.AreEqual((PDFColor)"#222", three.GetValue(StyleKeys.BgColorKey, PDFColors.Transparent)); Assert.AreEqual((PDFColor)"#808080", three.GetValue(StyleKeys.FillColorKey, PDFColors.Transparent)); }
public void ParseCSSWithComments() { var css = commentedCSS; var cssparser = new Scryber.Styles.Parsing.CSSStyleParser(css, null); StyleCollection col = new StyleCollection(); foreach (var style in cssparser) { col.Add(style); } Assert.AreEqual(3, col.Count); //First one var one = col[0] as StyleDefn; Assert.AreEqual("body.grey", one.Match.ToString()); Assert.AreEqual(2, one.ValueCount); Assert.AreEqual((PDFColor)"#808080", one.GetValue(StyleKeys.BgColorKey, PDFColors.Transparent)); Assert.AreEqual((PDFColor)"#222", one.GetValue(StyleKeys.FillColorKey, PDFColors.Transparent)); var two = col[1] as StyleDefn; Assert.AreEqual("body.grey div", two.Match.ToString()); Assert.AreEqual(10, two.ValueCount); //All, Top, Left, Bottom and Right are all set for Margins and Padding // 96 pixels per inch, 72 points per inch Assert.AreEqual(7.5, two.GetValue(StyleKeys.PaddingAllKey, PDFUnit.Zero).PointsValue); Assert.AreEqual(11.25, two.GetValue(StyleKeys.MarginsAllKey, PDFUnit.Zero).PointsValue); var three = col[2] as StyleDefn; Assert.AreEqual("body.grey div.reverse", three.Match.ToString()); Assert.AreEqual(2 + 4 + 4, three.ValueCount); //2 colors and 4 each for margins and padding Assert.AreEqual((PDFColor)"#222", three.GetValue(StyleKeys.BgColorKey, PDFColors.Transparent)); Assert.AreEqual((PDFColor)"#808080", three.GetValue(StyleKeys.FillColorKey, PDFColors.Transparent)); Assert.AreEqual((PDFUnit)20, three.GetValue(StyleKeys.MarginsTopKey, 0.0)); Assert.AreEqual((PDFUnit)20, three.GetValue(StyleKeys.MarginsBottomKey, 0.0)); Assert.AreEqual((PDFUnit)10, three.GetValue(StyleKeys.MarginsLeftKey, 0.0)); Assert.AreEqual((PDFUnit)10, three.GetValue(StyleKeys.MarginsRightKey, 0.0)); Assert.AreEqual((PDFUnit)10, three.GetValue(StyleKeys.PaddingTopKey, 0.0)); Assert.AreEqual((PDFUnit)5, three.GetValue(StyleKeys.PaddingRightKey, 0.0)); Assert.AreEqual((PDFUnit)15, three.GetValue(StyleKeys.PaddingBottomKey, 0.0)); Assert.AreEqual((PDFUnit)1, three.GetValue(StyleKeys.PaddingLeftKey, 0.0)); }
public CSSStyleEnumerator(StringEnumerator str, CSSStyleParser owner, PDFTraceLog log) { this._str = str; this._owner = owner; this._log = log; }
public void ParseMinifiedCssFile() { //This is a minimised version of the styles above var path = System.Environment.CurrentDirectory; path = System.IO.Path.Combine(path, "../../../Content/HTML/CSS/include.min.css"); path = System.IO.Path.GetFullPath(path); var css = System.IO.File.ReadAllText(path); var cssparser = new Scryber.Styles.Parsing.CSSStyleParser(css, null); StyleCollection col = new StyleCollection(); foreach (var style in cssparser) { col.Add(style); } //Sames tests, just with a minimised file Assert.AreEqual(6, col.Count); //Top one should be a media query Assert.IsInstanceOfType(col[0], typeof(StyleMediaGroup)); var media = (StyleMediaGroup)col[0]; Assert.AreEqual("screen", media.Media.Type); Assert.AreEqual(2, media.Styles.Count); Assert.AreEqual("body.grey", (media.Styles[0] as StyleDefn).Match.ToString()); //Second one normal style Assert.IsInstanceOfType(col[1], typeof(StyleDefn)); Assert.AreEqual("body.grey", (media.Styles[0] as StyleDefn).Match.ToString()); Assert.AreEqual(2, col[1].ValueCount); //Third is a media for print Assert.IsInstanceOfType(col[2], typeof(StyleMediaGroup)); media = (StyleMediaGroup)col[2]; Assert.AreEqual("print", media.Media.Type); Assert.AreEqual(1, media.Styles.Count); Assert.AreEqual("body.grey", (media.Styles[0] as StyleDefn).Match.ToString()); //Fourth and Fifth are normal Assert.IsInstanceOfType(col[3], typeof(StyleDefn)); Assert.AreEqual(10, col[3].ValueCount); //All, Top, Left, Bottom and Right are all set for Margins and Padding Assert.AreEqual("body.grey div", (col[3] as StyleDefn).Match.ToString()); Assert.IsInstanceOfType(col[4], typeof(StyleDefn)); Assert.AreEqual(2, col[4].ValueCount); //Include the background type Assert.AreEqual("body.grey div.reverse", (col[4] as StyleDefn).Match.ToString()); //Sixth is nested Assert.IsInstanceOfType(col[5], typeof(StyleMediaGroup)); media = (StyleMediaGroup)col[5]; Assert.AreEqual("print", media.Media.Type); Assert.AreEqual(1, media.Styles.Count); Assert.IsInstanceOfType(media.Styles[0], typeof(StyleMediaGroup)); //inner item media = media.Styles[0] as StyleMediaGroup; Assert.IsTrue(string.IsNullOrEmpty(media.Media.Type)); Assert.AreEqual("(orientation:portrait)", media.Media.Features); //one inner style Assert.AreEqual(1, media.Styles.Count); Assert.AreEqual("body.grey", (media.Styles[0] as StyleDefn).Match.ToString()); }
public void ParseCSSWithMedia() { var css = @" @media only screen and (min-width : 1224px) { body.grey{ font-family:'Times New Roman', Times, serif } body.grey div{ font-family:'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif } } /* This is the grey body */ body.grey { background-color:#808080; /* body background */ color: #222; } @media print and (orientation: landscape) { body.grey{ font-family:'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif } } body.grey div{ padding: 10px; /*color: #AAA;*/ margin:10px; } body.grey div.reverse{ /* Reverse the colors */ background-color: #222; color:#808080; } @media print { /* Nested media selector*/ @media (orientation: portrait) { body.grey { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; font-weight: bold; } } } "; var cssparser = new Scryber.Styles.Parsing.CSSStyleParser(css, null); StyleCollection col = new StyleCollection(); foreach (var style in cssparser) { col.Add(style); } Assert.AreEqual(6, col.Count); //Top one should be a media query Assert.IsInstanceOfType(col[0], typeof(StyleMediaGroup)); var media = (StyleMediaGroup)col[0]; Assert.AreEqual("screen", media.Media.Type); Assert.AreEqual(2, media.Styles.Count); Assert.AreEqual("body.grey", (media.Styles[0] as StyleDefn).Match.ToString()); //Second one normal style Assert.IsInstanceOfType(col[1], typeof(StyleDefn)); Assert.AreEqual(2, col[1].ValueCount); //Third is a media for print Assert.IsInstanceOfType(col[2], typeof(StyleMediaGroup)); media = (StyleMediaGroup)col[2]; Assert.AreEqual("print", media.Media.Type); Assert.AreEqual(1, media.Styles.Count); Assert.AreEqual("body.grey", (media.Styles[0] as StyleDefn).Match.ToString()); //Fourth and Fifth are normal Assert.IsInstanceOfType(col[3], typeof(StyleDefn)); Assert.AreEqual(10, col[3].ValueCount); //All, Top, Left, Bottom and Right are all set for Margins and Padding Assert.AreEqual("body.grey div", (col[3] as StyleDefn).Match.ToString()); Assert.IsInstanceOfType(col[4], typeof(StyleDefn)); Assert.AreEqual(2, col[4].ValueCount); //Include the background type Assert.AreEqual("body.grey div.reverse", (col[4] as StyleDefn).Match.ToString()); //Sixth is nested Assert.IsInstanceOfType(col[5], typeof(StyleMediaGroup)); media = (StyleMediaGroup)col[5]; Assert.AreEqual("print", media.Media.Type); Assert.AreEqual(1, media.Styles.Count); Assert.IsInstanceOfType(media.Styles[0], typeof(StyleMediaGroup)); //inner item media = media.Styles[0] as StyleMediaGroup; Assert.IsTrue(string.IsNullOrEmpty(media.Media.Type)); Assert.AreEqual("(orientation: portrait)", media.Media.Features); //one inner style Assert.AreEqual(1, media.Styles.Count); Assert.AreEqual("body.grey", (media.Styles[0] as StyleDefn).Match.ToString()); }