diff --git a/_test/extra.txt b/_test/extra.txt index c0472de..c7a4be7 100644 --- a/_test/extra.txt +++ b/_test/extra.txt @@ -63,3 +63,16 @@ _**TL/DR** - [Go see summary.](#my-summary-area)_ //- - - - - - - - -//
TL/DR - Go see summary.
//= = = = = = = = = = = = = = = = = = = = = = = =// + + + +6 +//- - - - - - - - -// +[This link won't be rendered +correctly](https://geeksocket.in/some-long-link-here "This is the +place where everything breaks") +//- - - - - - - - -// + +//= = = = = = = = = = = = = = = = = = = = = = = =// diff --git a/parser/link.go b/parser/link.go index 6326585..8611194 100644 --- a/parser/link.go +++ b/parser/link.go @@ -351,14 +351,31 @@ func parseLinkTitle(block text.Reader) ([]byte, bool) { if opener == '(' { closer = ')' } - line, _ := block.PeekLine() - pos := util.FindClosure(line[1:], opener, closer, false, true) - if pos < 0 { - return nil, false + savedLine, savedPosition := block.Position() + var title []byte + for i := 0; ; i++ { + line, _ := block.PeekLine() + if line == nil { + block.SetPosition(savedLine, savedPosition) + return nil, false + } + offset := 0 + if i == 0 { + offset = 1 + } + pos := util.FindClosure(line[offset:], opener, closer, false, true) + if pos < 0 { + title = append(title, line[offset:]...) + block.AdvanceLine() + continue + } + pos += offset + 1 // 1: closer + block.Advance(pos) + if i == 0 { // avoid allocating new slice + return line[offset : pos-1], true + } + return append(title, line[offset:pos-1]...), true } - pos += 2 // opener + closer - block.Advance(pos) - return line[1 : pos-1], true } func (s *linkParser) CloseBlock(parent ast.Node, block text.Reader, pc Context) {