Merge pull request dart-lang/markdown#54 from srawlins/fix-link-whitespace
Fix [foo] (bar) bug, and [foo]() bug.
diff --git a/pkgs/markdown/CHANGELOG.md b/pkgs/markdown/CHANGELOG.md
index 47a307c..faafc1d 100644
--- a/pkgs/markdown/CHANGELOG.md
+++ b/pkgs/markdown/CHANGELOG.md
@@ -4,6 +4,8 @@
* **Breaking:** Fenced code blocks are now considered an extension, as
they are not part of Markdown.pl.
* Inline HTML syntax supported. This is also considered an extension (#18).
+* The text `[foo] (bar)` now parses as an inline link (#53).
+* The text `[foo]()` now renders as an inline link.
## 0.8.0
diff --git a/pkgs/markdown/lib/src/inline_parser.dart b/pkgs/markdown/lib/src/inline_parser.dart
index c549067..67c5e56 100644
--- a/pkgs/markdown/lib/src/inline_parser.dart
+++ b/pkgs/markdown/lib/src/inline_parser.dart
@@ -249,17 +249,17 @@
}
}
-/// Matches inline links like `[blah] [id]` and `[blah] (url)`.
+/// Matches inline links like `[blah][id]` and `[blah](url)`.
class LinkSyntax extends TagSyntax {
final Resolver linkResolver;
- /// The regex for the end of a link needs to handle both reference style and
- /// inline styles as well as optional titles for inline links. To make that
+ /// The regex for the end of a link needs to handle both reference-style and
+ /// inline-style links as well as optional titles for inline links. To make that
/// a bit more palatable, this breaks it into pieces.
static get linkPattern {
- var refLink = r'\s?\[([^\]]*)\]'; // "[id]" reflink id.
+ var refLink = r'\[([^\]]*)\]'; // "[id]" reflink id.
var title = r'(?:[ ]*"([^"]+)"|)'; // Optional title in quotes.
- var inlineLink = '\\s?\\(([^ )]+)$title\\)'; // "(url "title")" link.
+ var inlineLink = '\\(([^ )]*)$title\\)'; // "(url "title")" link.
return '\](?:($refLink|$inlineLink)|)';
// The groups matched by this are:
@@ -275,7 +275,7 @@
Node createNode(InlineParser parser, Match match, TagState state) {
// If we didn't match refLink or inlineLink, then it means there was
- // nothing after the first square bracket, so it isn't a normal markdown
+ // nothing after the first square bracket, so it isn't a normal Markdown
// link at all. Instead, we allow users of the library to specify a special
// resolver function ([linkResolver]) that may choose to handle
// this. Otherwise, it's just treated as plain text.
@@ -311,12 +311,12 @@
}
Link getLink(InlineParser parser, Match match, TagState state) {
- if (match[3] != null && match[3] != '') {
+ if (match[3] != null) {
// Inline link like [foo](url).
var url = match[3];
var title = match[4];
- // For whatever reason, markdown allows angle-bracketed URLs here.
+ // For whatever reason, Markdown allows angle-bracketed URLs here.
if (url.startsWith('<') && url.endsWith('>')) {
url = url.substring(1, url.length - 1);
}
@@ -324,7 +324,7 @@
return new Link(null, url, title);
} else {
var id;
- // Reference link like [foo] [bar].
+ // Reference link like [foo][bar].
if (match[2] == '') {
// The id is empty ("[]") so infer it from the contents.
id = parser.source.substring(state.startPos + 1, parser.pos);
diff --git a/pkgs/markdown/test/original/inline_links.unit b/pkgs/markdown/test/original/inline_links.unit
index f42b6c6..5ab3549 100644
--- a/pkgs/markdown/test/original/inline_links.unit
+++ b/pkgs/markdown/test/original/inline_links.unit
@@ -4,7 +4,7 @@
<<<
<p>links <a href="http://foo.com" title="woo">are</a> awesome</p>
>>> no title
-links [are] (http://foo.com) awesome
+links [are](http://foo.com) awesome
<<<
<p>links <a href="http://foo.com">are</a> awesome</p>
@@ -13,3 +13,18 @@
<<<
<p>links <a href="http://foo.com"><em>are</em></a> awesome</p>
+>>> no URL
+links [are]() awesome
+
+<<<
+<p>links <a href="">are</a> awesome</p>
+>>> URL wrapped in angle brackets
+links [are](<http://example.com>) awesome
+
+<<<
+<p>links <a href="http://example.com">are</a> awesome</p>
+>>> not a real link
+links [are] (http://foo.com) awesome
+
+<<<
+<p>links [are] (http://foo.com) awesome</p>
diff --git a/pkgs/markdown/test/original/reference_links.unit b/pkgs/markdown/test/original/reference_links.unit
index e70475f..74735cd 100644
--- a/pkgs/markdown/test/original/reference_links.unit
+++ b/pkgs/markdown/test/original/reference_links.unit
@@ -1,26 +1,26 @@
>>> double quotes for title
-links [are] [a] awesome
+links [are][a] awesome
[a]: http://foo.com "woo"
<<<
<p>links <a href="http://foo.com" title="woo">are</a> awesome</p>
>>> single quoted title
-links [are] [a] awesome
+links [are][a] awesome
[a]: http://foo.com 'woo'
<<<
<p>links <a href="http://foo.com" title="woo">are</a> awesome</p>
>>> parentheses for title
-links [are] [a] awesome
+links [are][a] awesome
[a]: http://foo.com (woo)
<<<
<p>links <a href="http://foo.com" title="woo">are</a> awesome</p>
>>> no title
-links [are] [a] awesome
+links [are][a] awesome
[a]: http://foo.com
@@ -32,7 +32,7 @@
<<<
<p>[not] [known]</p>
>>> can style link contents
-links [*are*] [a] awesome
+links [*are*][a] awesome
[a]: http://foo.com