From 6c4691324f49b0e2527a5a5df982d7845fddfa1d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 23 Aug 2024 12:20:43 -0700 Subject: [PATCH] AsciiDoc writer: add `link:` prefix when needed. AsciiDoc requires it except for http, https, irc, mailto, ftp schemes. Closes #10105. --- src/Text/Pandoc/Writers/AsciiDoc.hs | 9 +++++++-- test/command/10105.md | 8 ++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 test/command/10105.md diff --git a/src/Text/Pandoc/Writers/AsciiDoc.hs b/src/Text/Pandoc/Writers/AsciiDoc.hs index 4eeedfdc3..0508f23fb 100644 --- a/src/Text/Pandoc/Writers/AsciiDoc.hs +++ b/src/Text/Pandoc/Writers/AsciiDoc.hs @@ -34,6 +34,7 @@ import Data.Maybe (fromMaybe, isJust) import qualified Data.Set as Set import qualified Data.Text as T import Data.Text (Text) +import Network.URI (parseURI, URI(uriScheme)) import System.FilePath (dropExtension) import Text.Pandoc.Class.PandocMonad (PandocMonad, report) import Text.Pandoc.Definition @@ -603,9 +604,13 @@ inlineToAsciiDoc opts (Link _ txt (src, _tit)) = do fixCommas x = [x] linktext <- inlineListToAsciiDoc opts $ walk (concatMap fixCommas) txt - let isRelative = T.all (/= ':') src + let needsLinkPrefix = case parseURI (T.unpack src) of + Just u -> uriScheme u `notElem` ["http:","https:", + "ftp:", "irc:", + "mailto:"] + _ -> True let needsPassthrough = "--" `T.isInfixOf` src - let prefix = if isRelative + let prefix = if needsLinkPrefix then text "link:" else empty let srcSuffix = fromMaybe src (T.stripPrefix "mailto:" src) diff --git a/test/command/10105.md b/test/command/10105.md new file mode 100644 index 000000000..214dd894a --- /dev/null +++ b/test/command/10105.md @@ -0,0 +1,8 @@ +``` +% pandoc -t asciidoc --wrap=preserve +[link](https://example.com) +[link](ftps://example.com) +^D +https://example.com[link] +link:ftps://example.com[link] +```