aboutsummaryrefslogtreecommitdiff
path: root/src/Text
diff options
context:
space:
mode:
authorJohn MacFarlane <[email protected]>2024-08-23 12:20:43 -0700
committerJohn MacFarlane <[email protected]>2024-08-23 12:20:43 -0700
commit6c4691324f49b0e2527a5a5df982d7845fddfa1d (patch)
treefb2d4526f8deb5ac18078a8de268f774a22e067f /src/Text
parent494716c529320124ab3690f81eeaaae0b7eddf52 (diff)
AsciiDoc writer: add `link:` prefix when needed.
AsciiDoc requires it except for http, https, irc, mailto, ftp schemes. Closes #10105.
Diffstat (limited to 'src/Text')
-rw-r--r--src/Text/Pandoc/Writers/AsciiDoc.hs9
1 files changed, 7 insertions, 2 deletions
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)