diff options
| author | John MacFarlane <[email protected]> | 2022-09-27 22:14:43 -0700 |
|---|---|---|
| committer | John MacFarlane <[email protected]> | 2022-09-28 08:34:50 -0700 |
| commit | bcf06e7f5e508f548f7060ba3e7281766aa2c1ea (patch) | |
| tree | a1206ed92ff7964ffc836b8a9aa366f11b881ffb | |
| parent | 2ff0b9a9efd959ea146d599379368ab00fae90cb (diff) | |
HTML writer: prevent `<a>` inside `<a>`.
If a link text contains a link, we replace it with a span.
See #7585.
| -rw-r--r-- | src/Text/Pandoc/Writers/HTML.hs | 12 | ||||
| -rw-r--r-- | test/command/html-writer-a-in-a.md | 7 |
2 files changed, 17 insertions, 2 deletions
diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs index f74ce75d0..06d8d4e8a 100644 --- a/src/Text/Pandoc/Writers/HTML.hs +++ b/src/Text/Pandoc/Writers/HTML.hs @@ -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 diff --git a/test/command/html-writer-a-in-a.md b/test/command/html-writer-a-in-a.md new file mode 100644 index 000000000..219496d28 --- /dev/null +++ b/test/command/html-writer-a-in-a.md @@ -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> +``` |
