HTML writer: prevent <a> inside <a>.

If a link text contains a link, we replace it with a span.
See #7585.
This commit is contained in:
John MacFarlane
2022-09-27 22:14:43 -07:00
parent 2ff0b9a9ef
commit bcf06e7f5e
2 changed files with 17 additions and 2 deletions
+10 -2
View File
@@ -1547,10 +1547,10 @@ inlineToHtml opts inline = do
_ -> do report $ InlineNotRendered inline
return mempty
(Link attr txt (s,_)) | "mailto:" `T.isPrefixOf` s -> do
linkText <- inlineListToHtml opts txt
linkText <- inlineListToHtml opts (removeLinks txt)
obfuscateLink opts attr linkText s
(Link (ident,classes,kvs) txt (s,tit)) -> do
linkText <- inlineListToHtml opts txt
linkText <- inlineListToHtml opts (removeLinks txt)
slideVariant <- gets stSlideVariant
let s' = case T.uncons s of
Just ('#',xs) -> let prefix = if slideVariant == RevealJsSlides
@@ -1731,3 +1731,11 @@ isRawHtml f = do
html5 <- gets stHtml5
return $ f == Format "html" ||
((html5 && f == Format "html5") || f == Format "html4")
-- We need to remove links from link text, because an <a> element is
-- not allowed inside another <a> element.
removeLinks :: [Inline] -> [Inline]
removeLinks = walk go
where
go (Link attr ils _) = Span attr ils
go x = x
+7
View File
@@ -0,0 +1,7 @@
a is not allowed inside a in HTML, so we remove links in link text:
```
% pandoc -f native -t html
[ Link ("",[],[]) [Link ("",[],[]) [Str "Lo"] ("url2","") ] ("url","") ]
^D
<a href="url"><span>Lo</span></a>
```