diff options
author | John MacFarlane <jgm@berkeley.edu> | 2021-08-29 10:12:20 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2021-08-29 10:12:20 -0700 |
commit | 5dcd4610e2301baf73f96abcd80315be45d41f3e (patch) | |
tree | a3d312cb28b62af00b82c0760040155ef88df441 | |
parent | 6180d42434526c4c5137ceb4e7bfa284daaf6089 (diff) | |
download | pandoc-5dcd4610e2301baf73f96abcd80315be45d41f3e.tar.gz |
Improve asciidoc escaping for `--` in URLs. Closes #7529.
-rw-r--r-- | src/Text/Pandoc/Writers/AsciiDoc.hs | 14 | ||||
-rw-r--r-- | test/command/7529.md | 7 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/Text/Pandoc/Writers/AsciiDoc.hs b/src/Text/Pandoc/Writers/AsciiDoc.hs index ab7e5f1a9..bcef4a089 100644 --- a/src/Text/Pandoc/Writers/AsciiDoc.hs +++ b/src/Text/Pandoc/Writers/AsciiDoc.hs @@ -546,6 +546,7 @@ inlineToAsciiDoc opts (Link _ txt (src, _tit)) = do -- or my@email.com[email john] linktext <- inlineListToAsciiDoc opts txt let isRelative = T.all (/= ':') src + let needsPassthrough = "--" `T.isInfixOf` src let prefix = if isRelative then text "link:" else empty @@ -553,9 +554,16 @@ inlineToAsciiDoc opts (Link _ txt (src, _tit)) = do let useAuto = case txt of [Str s] | escapeURI s == srcSuffix -> True _ -> False - return $ if useAuto - then literal srcSuffix - else prefix <> literal src <> "[" <> linktext <> "]" + return $ + if needsPassthrough + then + if useAuto + then "link:++" <> literal srcSuffix <> "++[]" + else "link:++" <> literal src <> "++[" <> linktext <> "]" + else + if useAuto + then literal srcSuffix + else prefix <> literal src <> "[" <> linktext <> "]" inlineToAsciiDoc opts (Image attr alternate (src, tit)) = ("image:" <>) <$> imageArguments opts attr alternate src tit inlineToAsciiDoc opts (Note [Para inlines]) = diff --git a/test/command/7529.md b/test/command/7529.md new file mode 100644 index 000000000..f0c443d73 --- /dev/null +++ b/test/command/7529.md @@ -0,0 +1,7 @@ +``` +pandoc -f html -t asciidoc +<a href="https://example.com/show.cgi?id=hi--there--everyone">https://example.com/show.cgi?id=hi--there--everyone</a> +^D +link:++https://example.com/show.cgi?id=hi--there--everyone++[] +``` + |