diff --git a/_test/extra.txt b/_test/extra.txt
index f8d89e6..7e849f1 100644
--- a/_test/extra.txt
+++ b/_test/extra.txt
@@ -542,7 +542,6 @@ _a[b_c_](d)
[o] :x
//= = = = = = = = = = = = = = = = = = = = = = = =//
-
42: Unclosed link reference titles can interrupt link references
//- - - - - - - - -//
[r]:
@@ -556,3 +555,10 @@ x
'
'
//= = = = = = = = = = = = = = = = = = = = = = = =//
+
+43: A link containing an image containing a link should disable the outer link
+//- - - - - - - - -//
+[  ](x) ](y)
+//- - - - - - - - -//
+[
](y)
+//= = = = = = = = = = = = = = = = = = = = = = = =//
diff --git a/parser/link.go b/parser/link.go
index 4717d6e..bd96dfb 100644
--- a/parser/link.go
+++ b/parser/link.go
@@ -140,7 +140,7 @@ func (s *linkParser) Parse(parent ast.Node, block text.Reader, pc Context) ast.N
}
block.Advance(1)
removeLinkLabelState(pc, last)
- if s.containsLink(last) { // a link in a link text is not allowed
+ if !last.IsImage && s.containsLink(last) { // a link in a link text is not allowed
ast.MergeOrReplaceTextSegment(last.Parent(), last, last.Segment)
return nil
}
@@ -182,15 +182,17 @@ func (s *linkParser) Parse(parent ast.Node, block text.Reader, pc Context) ast.N
return link
}
-func (s *linkParser) containsLink(last *linkLabelState) bool {
- if last.IsImage {
+func (s *linkParser) containsLink(n ast.Node) bool {
+ if n == nil {
return false
}
- var c ast.Node
- for c = last; c != nil; c = c.NextSibling() {
+ for c := n; c != nil; c = c.NextSibling() {
if _, ok := c.(*ast.Link); ok {
return true
}
+ if s.containsLink(c.FirstChild()) {
+ return true
+ }
}
return false
}