diff options
Diffstat (limited to 'vendor/github.com/gomarkdown/markdown/parser/inline.go')
-rw-r--r-- | vendor/github.com/gomarkdown/markdown/parser/inline.go | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/vendor/github.com/gomarkdown/markdown/parser/inline.go b/vendor/github.com/gomarkdown/markdown/parser/inline.go index 2a8ac77c..9bb5b30b 100644 --- a/vendor/github.com/gomarkdown/markdown/parser/inline.go +++ b/vendor/github.com/gomarkdown/markdown/parser/inline.go @@ -326,6 +326,7 @@ func link(p *Parser, data []byte, offset int) (int, ast.Node) { i = skipSpace(data, i) linkB := i + brace := 0 // look for link end: ' " ) findlinkend: @@ -334,7 +335,18 @@ func link(p *Parser, data []byte, offset int) (int, ast.Node) { 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: @@ -352,19 +364,21 @@ func link(p *Parser, data []byte, offset int) (int, ast.Node) { if data[i] == '\'' || data[i] == '"' { i++ titleB = i + titleEndCharFound := false findtitleend: for i < len(data) { switch { case data[i] == '\\': - i += 2 + i++ - case data[i] == ')': - break findtitleend + case data[i] == data[titleB-1]: // matching title delimiter + titleEndCharFound = true - default: - i++ + case titleEndCharFound && data[i] == ')': + break findtitleend } + i++ } if i >= len(data) { |