Fix links (#241)
* Fixes #230: links with unbalanced parentheses
* Fixes #233: exception on invalid link
* fix formatting
diff --git a/lib/src/inline_parser.dart b/lib/src/inline_parser.dart
index 92572df..c03cd8a 100644
--- a/lib/src/inline_parser.dart
+++ b/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/test/markdown_test.dart b/test/markdown_test.dart
index 87b5093..0c8d598 100644
--- a/test/markdown_test.dart
+++ b/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/test/original/inline_links.unit b/test/original/inline_links.unit
index e62cddd..74afe5a 100644
--- a/test/original/inline_links.unit
+++ b/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>