diff options
| author | John MacFarlane <[email protected]> | 2024-07-03 15:45:29 -0600 |
|---|---|---|
| committer | John MacFarlane <[email protected]> | 2024-07-03 15:45:52 -0600 |
| commit | 5604ca612c5e66ce6ef9c4f633bafb11d7fd2fda (patch) | |
| tree | ce9c23bef10d6a9a058c3a353d0e260cd1974394 /src/Text | |
| parent | e594cea9ca787002411a216b5fcfc5ea0eafb662 (diff) | |
TWiki Reader: recognize WikiWords as internal links.
Fixes #9941.
Diffstat (limited to 'src/Text')
| -rw-r--r-- | src/Text/Pandoc/Readers/TWiki.hs | 16 |
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 |
