TWiki Reader: recognize WikiWords as internal links.

Fixes #9941.
This commit is contained in:
John MacFarlane
2024-07-03 15:45:29 -06:00
parent e594cea9ca
commit 5604ca612c
3 changed files with 36 additions and 2 deletions
+14 -2
View File
@@ -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
+16
View File
@@ -147,6 +147,22 @@ Pandoc
]
]
, Para [ Str "Nother" , Space , Str "paragraph." ]
, Header
1
( "internal-links" , [] , [] )
[ Str "internal" , Space , Str "links" ]
, Para
[ Link
( "" , [] , [] )
[ Str "MySimplePage" ]
( "MySimplePage" , "wikilink" )
]
, Para
[ Link
( "" , [] , [] )
[ Str "My23Page23" ]
( "My23Page23" , "wikilink" )
]
, Header
1
( "external-links" , [] , [] )
+6
View File
@@ -93,6 +93,12 @@ With two paragraphs.
</blockquote>
Nother paragraph.
---+ internal links
MySimplePage
My23Page23
---+ external links
[[http://google.com][<i>Google</i> search engine]]