Fix links (dart-lang/markdown#241) * Fixes dart-lang/markdown#230: links with unbalanced parentheses * Fixes dart-lang/markdown#233: exception on invalid link * fix formatting
diff --git a/pkgs/markdown/lib/src/inline_parser.dart b/pkgs/markdown/lib/src/inline_parser.dart index 92572df..c03cd8a 100644 --- a/pkgs/markdown/lib/src/inline_parser.dart +++ b/pkgs/markdown/lib/src/inline_parser.dart
@@ -895,7 +895,8 @@ case $ff: var destination = buffer.toString(); var title = _parseTitle(parser); - if (title == null && parser.charAt(parser.pos) != $rparen) { + if (title == null && + (parser.isDone || parser.charAt(parser.pos) != $rparen)) { // This looked like an inline link, until we found this $space // followed by mystery characters; no longer a link. return null; @@ -933,7 +934,7 @@ // Walk the parser forward through any whitespace. void _moveThroughWhitespace(InlineParser parser) { - while (true) { + while (!parser.isDone) { var char = parser.charAt(parser.pos); if (char != $space && char != $tab && @@ -944,7 +945,6 @@ return; } parser.advanceBy(1); - if (parser.isDone) return; } }
diff --git a/pkgs/markdown/test/markdown_test.dart b/pkgs/markdown/test/markdown_test.dart index 87b5093..0c8d598 100644 --- a/pkgs/markdown/test/markdown_test.dart +++ b/pkgs/markdown/test/markdown_test.dart
@@ -23,6 +23,14 @@ testFile('extensions/emojis.unit', inlineSyntaxes: [EmojiSyntax()]); testFile('extensions/inline_html.unit', inlineSyntaxes: [InlineHtmlSyntax()]); + group('Corner cases', () { + validateCore('Incorrect Links', ''' +5 Ethernet ([Music]( +''', ''' +<p>5 Ethernet ([Music](</p> +'''); + }); + group('Resolver', () { Node nyanResolver(String text, [_]) => text.isEmpty ? null : Text('~=[,,_${text}_,,]:3');
diff --git a/pkgs/markdown/test/original/inline_links.unit b/pkgs/markdown/test/original/inline_links.unit index e62cddd..74afe5a 100644 --- a/pkgs/markdown/test/original/inline_links.unit +++ b/pkgs/markdown/test/original/inline_links.unit
@@ -76,3 +76,7 @@ <a href="(yes-a-link)">a</a> [a](\(not-a-link)) <a href="(yes-a-link))">a</a></p> +>>> links with unbalanced parentheses +[foo](link(1.png) (what?) +<<< +<p>[foo](link(1.png) (what?)</p>