From 5dcd4610e2301baf73f96abcd80315be45d41f3e Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Sun, 29 Aug 2021 10:12:20 -0700
Subject: [PATCH] Improve asciidoc escaping for `--` in URLs.  Closes #7529.

---
 src/Text/Pandoc/Writers/AsciiDoc.hs | 14 +++++++++++---
 test/command/7529.md                |  7 +++++++
 2 files changed, 18 insertions(+), 3 deletions(-)
 create mode 100644 test/command/7529.md

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++[]
+```
+