aboutsummaryrefslogtreecommitdiff
path: root/src/Text
diff options
context:
space:
mode:
authorJohn MacFarlane <[email protected]>2024-07-03 15:45:29 -0600
committerJohn MacFarlane <[email protected]>2024-07-03 15:45:52 -0600
commit5604ca612c5e66ce6ef9c4f633bafb11d7fd2fda (patch)
treece9c23bef10d6a9a058c3a353d0e260cd1974394 /src/Text
parente594cea9ca787002411a216b5fcfc5ea0eafb662 (diff)
TWiki Reader: recognize WikiWords as internal links.
Fixes #9941.
Diffstat (limited to 'src/Text')
-rw-r--r--src/Text/Pandoc/Readers/TWiki.hs16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/Text/Pandoc/Readers/TWiki.hs b/src/Text/Pandoc/Readers/TWiki.hs
index 07b9d8393..ff966d262 100644
--- a/src/Text/Pandoc/Readers/TWiki.hs
+++ b/src/Text/Pandoc/Readers/TWiki.hs
@@ -16,7 +16,7 @@ module Text.Pandoc.Readers.TWiki ( readTWiki
import Control.Monad
import Control.Monad.Except (throwError)
-import Data.Char (isAlphaNum)
+import Data.Char (isAlphaNum, isDigit, isUpperCase, isLowerCase, isLetter)
import qualified Data.Foldable as F
import Data.Maybe (fromMaybe)
import Data.Text (Text)
@@ -469,7 +469,7 @@ link = try $ do
st <- getState
guard $ stateAllowLinks st
setState $ st{ stateAllowLinks = False }
- (url, title, content) <- linkText
+ (url, title, content) <- linkText <|> simpleWikiLink
setState $ st{ stateAllowLinks = True }
return $ B.link url title content
@@ -483,3 +483,15 @@ linkText = do
where
linkContent = char '[' >> many1Till anyChar (char ']') >>= parseLinkContent . T.pack
parseLinkContent = parseFromString' $ many1 inline
+
+simpleWikiLink :: PandocMonad m => TWParser m (Text, Text, B.Inlines)
+simpleWikiLink = do
+ w <- wikiWord
+ return (w, "wikilink", B.str w)
+ where
+ wikiWord = do
+ cs <- many1 $ satisfy (\x -> isLetter x && isUpperCase x)
+ ds <- many1 $ satisfy (\x -> isDigit x || (isLetter x && isLowerCase x))
+ es <- many1 $ satisfy (\x -> isLetter x && isUpperCase x)
+ fs <- many $ satisfy isAlphaNum
+ return $ T.pack $ cs ++ ds ++ es ++ fs