From 00c175a79c6f2c89cc05426211b29b23b06cd7d7 Mon Sep 17 00:00:00 2001 From: MihaZupan Date: Sun, 14 Mar 2021 05:58:42 +0100 Subject: [PATCH 1/2] Remove char[], string allocations in HtmlBlockParser --- src/Markdig/Parsers/HtmlBlockParser.cs | 140 ++++++++++++------------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/src/Markdig/Parsers/HtmlBlockParser.cs b/src/Markdig/Parsers/HtmlBlockParser.cs index 047775c3..9ec26851 100644 --- a/src/Markdig/Parsers/HtmlBlockParser.cs +++ b/src/Markdig/Parsers/HtmlBlockParser.cs @@ -128,7 +128,7 @@ namespace Markdig.Parsers c = line.NextChar(); } - var tag = new char[10]; + Span tag = stackalloc char[10]; var count = 0; for (; count < tag.Length; count++) { @@ -152,13 +152,13 @@ namespace Markdig.Parsers return BlockState.None; } - var tagName = new string(tag, 0, count); - var tagIndex = Array.BinarySearch(HtmlTags, tagName, StringComparer.Ordinal); - if (tagIndex < 0) + if (!HtmlTags.TryMatchExact(tag.Slice(0, count), out var match)) { return BlockState.None; } + int tagIndex = match.Value; + // Cannot start with HtmlTags = new(65, 93, 82) { - "address", // 0 - "article", // 1 - "aside", // 2 - "base", // 3 - "basefont", // 4 - "blockquote", // 5 - "body", // 6 - "caption", // 7 - "center", // 8 - "col", // 9 - "colgroup", // 10 - "dd", // 11 - "details", // 12 - "dialog", // 13 - "dir", // 14 - "div", // 15 - "dl", // 16 - "dt", // 17 - "fieldset", // 18 - "figcaption", // 19 - "figure", // 20 - "footer", // 21 - "form", // 22 - "frame", // 23 - "frameset", // 24 - "h1", // 25 - "h2", // 26 - "h3", // 27 - "h4", // 28 - "h5", // 29 - "h6", // 30 - "head", // 31 - "header", // 32 - "hr", // 33 - "html", // 34 - "iframe", // 35 - "legend", // 36 - "li", // 37 - "link", // 38 - "main", // 39 - "menu", // 40 - "menuitem", // 41 - "nav", // 42 - "noframes", // 43 - "ol", // 44 - "optgroup", // 45 - "option", // 46 - "p", // 47 - "param", // 48 - "pre", // 49 <=== special group 1 - "script", // 50 <=== special group 1 - "section", // 51 - "source", // 52 - "style", // 53 <=== special group 1 - "summary", // 54 - "table", // 55 - "tbody", // 56 - "td", // 57 - "tfoot", // 58 - "th", // 59 - "thead", // 60 - "title", // 61 - "tr", // 62 - "track", // 63 - "ul", // 64 + { "address", 0 }, + { "article", 1 }, + { "aside", 2 }, + { "base", 3 }, + { "basefont", 4 }, + { "blockquote", 5 }, + { "body", 6 }, + { "caption", 7 }, + { "center", 8 }, + { "col", 9 }, + { "colgroup", 10 }, + { "dd", 11 }, + { "details", 12 }, + { "dialog", 13 }, + { "dir", 14 }, + { "div", 15 }, + { "dl", 16 }, + { "dt", 17 }, + { "fieldset", 18 }, + { "figcaption", 19 }, + { "figure", 20 }, + { "footer", 21 }, + { "form", 22 }, + { "frame", 23 }, + { "frameset", 24 }, + { "h1", 25 }, + { "h2", 26 }, + { "h3", 27 }, + { "h4", 28 }, + { "h5", 29 }, + { "h6", 30 }, + { "head", 31 }, + { "header", 32 }, + { "hr", 33 }, + { "html", 34 }, + { "iframe", 35 }, + { "legend", 36 }, + { "li", 37 }, + { "link", 38 }, + { "main", 39 }, + { "menu", 40 }, + { "menuitem", 41 }, + { "nav", 42 }, + { "noframes", 43 }, + { "ol", 44 }, + { "optgroup", 45 }, + { "option", 46 }, + { "p", 47 }, + { "param", 48 }, + { "pre", 49 }, // <=== special group 1 + { "script", 50 }, // <=== special group 1 + { "section", 51 }, + { "source", 52 }, + { "style", 53 }, // <=== special group 1 + { "summary", 54 }, + { "table", 55 }, + { "tbody", 56 }, + { "td", 57 }, + { "tfoot", 58 }, + { "th", 59 }, + { "thead", 60 }, + { "title", 61 }, + { "tr", 62 }, + { "track", 63 }, + { "ul", 64 } }; } } \ No newline at end of file From f985750b82cff7b037111b5ede785ee23313479c Mon Sep 17 00:00:00 2001 From: MihaZupan Date: Sun, 14 Mar 2021 06:06:12 +0100 Subject: [PATCH 2/2] Don't use the Roundtrip InfoParser by default --- src/Markdig/Parsers/FencedBlockParserBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Markdig/Parsers/FencedBlockParserBase.cs b/src/Markdig/Parsers/FencedBlockParserBase.cs index 8d72cfac..7462d9f1 100644 --- a/src/Markdig/Parsers/FencedBlockParserBase.cs +++ b/src/Markdig/Parsers/FencedBlockParserBase.cs @@ -45,7 +45,7 @@ namespace Markdig.Parsers /// protected FencedBlockParserBase() { - InfoParser = RoundtripInfoParser; + InfoParser = DefaultInfoParser; MinimumMatchCount = 3; MaximumMatchCount = int.MaxValue; }