Merge pull request #222 from icco/parens

Allow parentheses inside of links
pull/224/head
Vytautas Šaltenis 2015-12-06 18:44:17 +02:00
commit ce3ffa70a0
2 changed files with 31 additions and 2 deletions

View File

@ -240,6 +240,8 @@ func link(p *parser, out *bytes.Buffer, data []byte, offset int) int {
i++
}
brace := 0
// look for the matching closing bracket
for level := 1; level > 0 && i < len(data); i++ {
switch {
@ -285,14 +287,27 @@ func link(p *parser, out *bytes.Buffer, data []byte, offset int) int {
linkB := i
// look for link end: ' " )
// look for link end: ' " ), check for new opening braces and take this
// into account, this may lead for overshooting and probably will require
// some fine-tuning.
findlinkend:
for i < len(data) {
switch {
case data[i] == '\\':
i += 2
case data[i] == ')' || data[i] == '\'' || data[i] == '"':
case data[i] == '(':
brace++
i++
case data[i] == ')':
if brace <= 0 {
break findlinkend
}
brace--
i++
case data[i] == '\'' || data[i] == '"':
break findlinkend
default:

View File

@ -541,6 +541,20 @@ func TestInlineLink(t *testing.T) {
"[link](<../>)\n",
"<p><a href=\"../\">link</a></p>\n",
// Issue 116 in blackfriday
"![](http://www.broadgate.co.uk/Content/Upload/DetailImages/Cyclus700(1).jpg)",
"<p><img src=\"http://www.broadgate.co.uk/Content/Upload/DetailImages/Cyclus700(1).jpg\" alt=\"\" /></p>\n",
// no closing ), autolinking detects the url next
"[disambiguation](http://en.wikipedia.org/wiki/Disambiguation_(disambiguation) is the",
"<p>[disambiguation](<a href=\"http://en.wikipedia.org/wiki/Disambiguation_(disambiguation\">http://en.wikipedia.org/wiki/Disambiguation_(disambiguation</a>) is the</p>\n",
"[disambiguation](http://en.wikipedia.org/wiki/Disambiguation_(disambiguation)) is the",
"<p><a href=\"http://en.wikipedia.org/wiki/Disambiguation_(disambiguation)\">disambiguation</a> is the</p>\n",
"[disambiguation](http://en.wikipedia.org/wiki/Disambiguation_(disambiguation))",
"<p><a href=\"http://en.wikipedia.org/wiki/Disambiguation_(disambiguation)\">disambiguation</a></p>\n",
}
doLinkTestsInline(t, tests)