From 09de84fff41d4a6e8d227baeea0037531fcef9e2 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 29 Aug 2023 20:04:10 -0700 Subject: Support images with wikilink syntax. E.g. `![[foo|bar]]`. (This requires enabling one of the `wikilinks` extensions.) Closes #8853. --- src/Text/Pandoc/Readers/Markdown.hs | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index 89b194767..d88c5d995 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -1527,7 +1527,7 @@ inline = do '_' -> strongOrEmph '*' -> strongOrEmph '^' -> superscript <|> inlineNote -- in this order bc ^[link](/foo)^ - '[' -> note <|> cite <|> bracketedSpan <|> wikilink <|> link + '[' -> note <|> cite <|> bracketedSpan <|> wikilink B.linkWith <|> link '!' -> image '$' -> math '~' -> strikeout <|> subscript @@ -1844,8 +1844,10 @@ source = do linkTitle :: PandocMonad m => MarkdownParser m Text linkTitle = quotedTitle '"' <|> quotedTitle '\'' -wikilink :: PandocMonad m => MarkdownParser m (F Inlines) -wikilink = +wikilink :: PandocMonad m + => (Attr -> Text -> Text -> Inlines -> Inlines) + -> MarkdownParser m (F Inlines) +wikilink constructor = (guardEnabled Ext_wikilinks_title_after_pipe *> wikilink' swap) <|> (guardEnabled Ext_wikilinks_title_before_pipe *> wikilink' id) where @@ -1857,7 +1859,7 @@ wikilink = let (title, url) = case T.break (== '|') raw of (before, "") -> (before, before) (before, after) -> order (before, T.drop 1 after) - return . pure . B.link url "wikilink" $ B.str title + return . pure . constructor nullAttr url "wikilink" $ B.str title link :: PandocMonad m => MarkdownParser m (F Inlines) link = try $ do @@ -2015,14 +2017,15 @@ rebasePath pos path = do image :: PandocMonad m => MarkdownParser m (F Inlines) image = try $ do char '!' - (lab,raw) <- reference - defaultExt <- getOption readerDefaultImageExtension - let constructor attr' src = - case takeExtension (T.unpack src) of - "" -> B.imageWith attr' (T.pack $ addExtension (T.unpack src) - $ T.unpack defaultExt) - _ -> B.imageWith attr' src - regLink constructor lab <|> referenceLink constructor (lab, "!" <> raw) + wikilink B.imageWith <|> + do (lab,raw) <- reference + defaultExt <- getOption readerDefaultImageExtension + let constructor attr' src = + case takeExtension (T.unpack src) of + "" -> B.imageWith attr' (T.pack $ addExtension (T.unpack src) + $ T.unpack defaultExt) + _ -> B.imageWith attr' src + regLink constructor lab <|> referenceLink constructor (lab, "!" <> raw) note :: PandocMonad m => MarkdownParser m (F Inlines) note = try $ do -- cgit v1.2.3