Allow space in a pointy-bracked inline link (dart-lang/markdown#349)
diff --git a/pkgs/markdown/lib/src/inline_parser.dart b/pkgs/markdown/lib/src/inline_parser.dart index ccdb3d2..46db2e6 100644 --- a/pkgs/markdown/lib/src/inline_parser.dart +++ b/pkgs/markdown/lib/src/inline_parser.dart
@@ -93,7 +93,7 @@ syntaxes.addAll(_defaultSyntaxes); - if (document.encodeHtml) { + if (_encodeHtml) { syntaxes.addAll(_htmlSyntaxes); } } @@ -337,6 +337,8 @@ pos += length; start = pos; } + + bool get _encodeHtml => document.encodeHtml; } /// Represents one kind of Markdown tag that can be parsed. @@ -486,7 +488,7 @@ @override bool onMatch(InlineParser parser, Match match) { var url = match[1]!; - var text = parser.document.encodeHtml ? escapeHtml(url) : url; + var text = parser._encodeHtml ? escapeHtml(url) : url; var anchor = Element.text('a', text); anchor.attributes['href'] = Uri.encodeFull('mailto:$url'); parser.addNode(anchor); @@ -502,7 +504,7 @@ @override bool onMatch(InlineParser parser, Match match) { var url = match[1]!; - var text = parser.document.encodeHtml ? escapeHtml(url) : url; + var text = parser._encodeHtml ? escapeHtml(url) : url; var anchor = Element.text('a', text); anchor.attributes['href'] = Uri.encodeFull(url); parser.addNode(anchor); @@ -619,7 +621,7 @@ href = 'http://$href'; } - final text = parser.document.encodeHtml ? escapeHtml(url) : url; + final text = parser._encodeHtml ? escapeHtml(url) : url; final anchor = Element.text('a', text); anchor.attributes['href'] = Uri.encodeFull(href); parser.addNode(anchor); @@ -1170,19 +1172,17 @@ if (char == $backslash) { parser.advanceBy(1); var next = parser.charAt(parser.pos); - if (char == $space || char == $lf || char == $cr || char == $ff) { - // Not a link (no whitespace allowed within `<...>`). - return null; - } // TODO: Follow the backslash spec better here. - // http://spec.commonmark.org/0.28/#backslash-escapes + // http://spec.commonmark.org/0.29/#backslash-escapes if (next != $backslash && next != $gt) { buffer.writeCharCode(char); } buffer.writeCharCode(next); - } else if (char == $space || char == $lf || char == $cr || char == $ff) { - // Not a link (no whitespace allowed within `<...>`). + } else if (char == $lf || char == $cr || char == $ff) { + // Not a link (no line breaks allowed within `<...>`). return null; + } else if (char == $space) { + buffer.write('%20'); } else if (char == $gt) { break; } else { @@ -1419,7 +1419,7 @@ @override bool onMatch(InlineParser parser, Match match) { var code = match[2]!.trim().replaceAll('\n', ' '); - if (parser.document.encodeHtml) code = escapeHtml(code); + if (parser._encodeHtml) code = escapeHtml(code); parser.addNode(Element.text('code', code)); return true;
diff --git a/pkgs/markdown/test/common_mark/links.unit b/pkgs/markdown/test/common_mark/links.unit index e362ba8..2274ba7 100644 --- a/pkgs/markdown/test/common_mark/links.unit +++ b/pkgs/markdown/test/common_mark/links.unit
@@ -21,7 +21,7 @@ >>> Links - 486 [link](</my uri>) <<< -<p>[link](</my uri>)</p> +<p><a href="/my%20uri">link</a></p> >>> Links - 487 [link](foo bar)
diff --git a/pkgs/markdown/test/gfm/links.unit b/pkgs/markdown/test/gfm/links.unit index 9b56101..35266a9 100644 --- a/pkgs/markdown/test/gfm/links.unit +++ b/pkgs/markdown/test/gfm/links.unit
@@ -21,7 +21,7 @@ >>> Links - 498 [link](</my uri>) <<< -<p>[link](</my uri>)</p> +<p><a href="/my%20uri">link</a></p> >>> Links - 499 [link](foo bar)
diff --git a/pkgs/markdown/tool/common_mark_stats.json b/pkgs/markdown/tool/common_mark_stats.json index 46f7044..901460b 100644 --- a/pkgs/markdown/tool/common_mark_stats.json +++ b/pkgs/markdown/tool/common_mark_stats.json
@@ -431,7 +431,7 @@ "483": "strict", "484": "strict", "485": "strict", - "486": "fail", + "486": "strict", "487": "strict", "488": "strict", "489": "strict",
diff --git a/pkgs/markdown/tool/common_mark_stats.txt b/pkgs/markdown/tool/common_mark_stats.txt index 2a5cc91..495ba67 100644 --- a/pkgs/markdown/tool/common_mark_stats.txt +++ b/pkgs/markdown/tool/common_mark_stats.txt
@@ -13,7 +13,7 @@ 11 of 12 – 91.7% Indented code blocks 1 of 1 – 100.0% Inlines 21 of 28 – 75.0% Link reference definitions - 81 of 87 – 93.1% Links + 82 of 87 – 94.3% Links 45 of 48 – 93.8% List items 22 of 26 – 84.6% Lists 8 of 8 – 100.0% Paragraphs @@ -24,5 +24,5 @@ 11 of 11 – 100.0% Tabs 3 of 3 – 100.0% Textual content 19 of 19 – 100.0% Thematic breaks - 610 of 649 – 94.0% TOTAL - 543 of 610 – 89.0% TOTAL Strict + 611 of 649 – 94.1% TOTAL + 544 of 611 – 89.0% TOTAL Strict
diff --git a/pkgs/markdown/tool/gfm_stats.json b/pkgs/markdown/tool/gfm_stats.json index 91699ff..1619615 100644 --- a/pkgs/markdown/tool/gfm_stats.json +++ b/pkgs/markdown/tool/gfm_stats.json
@@ -447,7 +447,7 @@ "495": "strict", "496": "strict", "497": "strict", - "498": "fail", + "498": "strict", "499": "strict", "500": "strict", "501": "strict",
diff --git a/pkgs/markdown/tool/gfm_stats.txt b/pkgs/markdown/tool/gfm_stats.txt index c1e1819..59a193c 100644 --- a/pkgs/markdown/tool/gfm_stats.txt +++ b/pkgs/markdown/tool/gfm_stats.txt
@@ -15,7 +15,7 @@ 11 of 12 – 91.7% Indented code blocks 1 of 1 – 100.0% Inlines 21 of 28 – 75.0% Link reference definitions - 81 of 87 – 93.1% Links + 82 of 87 – 94.3% Links 45 of 48 – 93.8% List items 22 of 26 – 84.6% Lists 8 of 8 – 100.0% Paragraphs @@ -28,5 +28,5 @@ 11 of 11 – 100.0% Tabs 3 of 3 – 100.0% Textual content 19 of 19 – 100.0% Thematic breaks - 625 of 671 – 93.1% TOTAL - 549 of 625 – 87.8% TOTAL Strict + 626 of 671 – 93.3% TOTAL + 550 of 626 – 87.9% TOTAL Strict