diff --git a/Parsedown.php b/Parsedown.php index 3e2286e..6551e58 100755 --- a/Parsedown.php +++ b/Parsedown.php @@ -75,18 +75,6 @@ class Parsedown } } - # Extracts link references. - - if (preg_match_all('/^[ ]{0,3}\[(.+)\][ ]?:[ ]*\n?[ ]*(.+)$/m', $text, $matches, PREG_SET_ORDER)) - { - foreach ($matches as $matches) - { - $this->reference_map[strtolower($matches[1])] = $matches[2]; - - $text = str_replace($matches[0], '', $text); - } - } - # ~ $text = preg_replace('/\n\s*\n/', "\n\n", $text); @@ -217,7 +205,7 @@ class Parsedown # Quick Paragraph - if ($line[0] >= 'A' and $line[0] !== '_') + if ($line[0] >= 'A' and $line[0] !== '_' and $line[0] !== '[') { goto paragraph; # trust me } @@ -282,10 +270,22 @@ class Parsedown continue; } - # ~ + # ~ $pure_line = ltrim($line); + # Link Reference + + if ($pure_line[0] === '[' and preg_match('/^\[(.+?)\]:[ ]*([^ ]+)/', $pure_line, $matches)) + { + $label = $matches[1]; + $url = trim($matches[2], '<>'); + + $this->reference_map[$label] = $url; + + continue; + } + # Blockquote if ($pure_line[0] === '>' and preg_match('/^>[ ]?(.*)/', $pure_line, $matches)) diff --git a/tests/data/reference_link.html b/tests/data/reference_link.html index 4a7807c..63b3e25 100644 --- a/tests/data/reference_link.html +++ b/tests/data/reference_link.html @@ -1,14 +1,11 @@

Here's a reference link.

-

Here's one with an alternative syntax.

Here's one on the next line.

-

Here's one on 2 lines.

Here's one with a different URL.

Here's one with a semantic name.

Here's one with definition name on the next line.

Here's [one][404] with no definition.

Here's an image: Markdown Logo

Here's an implicit one.

-

Here's an implicit one.

Here's an implicit one with an empty link definition.

Here's a multiline one defined on 2 lines.

\ No newline at end of file diff --git a/tests/data/reference_link.md b/tests/data/reference_link.md index 76becdc..ecbcd1f 100644 --- a/tests/data/reference_link.md +++ b/tests/data/reference_link.md @@ -2,21 +2,12 @@ Here's a [reference link][1]. [1]: http://parsedown.org -Here's [one] [2] with an alternative syntax. +Here's [one][2] on the next line. +[2]: http://parsedown.org -[2] :http://parsedown.org +Here's [one][3] with a different URL. -Here's [one][3] on the next line. -[3]: http://parsedown.org - -Here's [one][4] on 2 lines. - -[4]: -http://parsedown.org - -Here's [one][5] with a different URL. - -[5]: http://parsedown.org/tests/ +[3]: http://parsedown.org/tests/ Here's [one][website] with a semantic name. @@ -33,8 +24,6 @@ Here's an image: ![Markdown Logo][image] Here's an [implicit one]. -Here's an [implicit one]. - [implicit one]: http://google.com Here's an [implicit one][] with an empty link definition.