summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Text/Pandoc/Readers/Markdown.hs27
-rw-r--r--test/Tests/Readers/Markdown.hs4
2 files changed, 16 insertions, 15 deletions
diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs
index 9f45154ed..31d1b5198 100644
--- a/src/Text/Pandoc/Readers/Markdown.hs
+++ b/src/Text/Pandoc/Readers/Markdown.hs
@@ -1843,19 +1843,20 @@ linkTitle = quotedTitle '"' <|> quotedTitle '\''
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
- swap (a, b) = (b, a)
- wikilink' order = try $ do
- string "[["
- notFollowedBy' (char '[')
- raw <- many1TillChar (noneOf "\n\r\f\t") (try $ string "]]")
- let (title, url) = case T.break (== '|') raw of
- (before, "") -> (before, before)
- (before, after) -> order (before, T.drop 1 after)
- return . pure . constructor nullAttr url "wikilink" $ B.str title
+wikilink constructor = do
+ titleAfter <-
+ (True <$ guardEnabled Ext_wikilinks_title_after_pipe) <|>
+ (False <$ guardEnabled Ext_wikilinks_title_before_pipe)
+ string "[[" *> notFollowedBy' (char '[')
+ raw <- many1TillChar anyChar (try $ string "]]")
+ let (title, url) = case T.break (== '|') raw of
+ (before, "") -> (before, before)
+ (before, after)
+ | titleAfter -> (T.drop 1 after, before)
+ | otherwise -> (before, T.drop 1 after)
+ guard $ T.all (`notElem` ['\n','\r','\f','\t']) url
+ return . pure . constructor nullAttr url "wikilink" $
+ B.text $ fromEntities title
link :: PandocMonad m => MarkdownParser m (F Inlines)
link = try $ do
diff --git a/test/Tests/Readers/Markdown.hs b/test/Tests/Readers/Markdown.hs
index 86c424d4b..001ca0207 100644
--- a/test/Tests/Readers/Markdown.hs
+++ b/test/Tests/Readers/Markdown.hs
@@ -321,10 +321,10 @@ tests = [ testGroup "inline code"
para (link "random string" "wikilink" (str "title"))
, test markdownGH "autolink not being a link" $
"[[Name of page]]" =?>
- para (link "Name of page" "wikilink" (str "Name of page"))
+ para (link "Name of page" "wikilink" (text "Name of page"))
, test markdownGH "autolink not being a link with a square bracket" $
"[[Name of ]page]]" =?>
- para (link "Name of ]page" "wikilink" (str "Name of ]page"))
+ para (link "Name of ]page" "wikilink" (text "Name of ]page"))
, test markdownGH "link with inline start should be a link" $
"[[t`i*t_le|https://example.org]]" =?>
para (link "https://example.org" "wikilink" (str "t`i*t_le"))