summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuchen Pei <hi@ypei.me>2022-09-14 13:41:54 +1000
committerYuchen Pei <hi@ypei.me>2022-09-14 13:41:54 +1000
commit33f47d6d86246160cceb14804c6bd9746aad3b1e (patch)
tree92e577dbdfb880408d38155664eaf867add2f8f8
parent5893a125ff90b51b40cc8375a2a4acf629da8935 (diff)
[server] remove refs from infobox
-rw-r--r--src/Servall/WikiParser.hs33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/Servall/WikiParser.hs b/src/Servall/WikiParser.hs
index d240c3b..d509412 100644
--- a/src/Servall/WikiParser.hs
+++ b/src/Servall/WikiParser.hs
@@ -12,6 +12,7 @@ import Data.Attoparsec.Text ( Parser
, choice
, many'
, manyTill
+ , notChar
, parse
, parseOnly
, sepBy
@@ -45,6 +46,9 @@ import Text.Pandoc.Definition ( Block(..)
)
import Text.Pandoc.Generic ( topDown )
+wikilinkPrefix :: Text
+wikilinkPrefix = "wiki:"
+
parseWikiTemplates :: Text -> Either String [WikiTemplate]
parseWikiTemplates = parseOnly wikiP
@@ -94,7 +98,14 @@ tempFieldValueP :: Parser Text
tempFieldValueP = do
skipSpace
T.concat <$> many'
- (choice [templateP >> return "", commentP >> return "", wikilinkP, simpleP])
+ (choice
+ [ skipRefP
+ , templateP >> return ""
+ , commentP >> return ""
+ , wikilinkP
+ , simpleP
+ ]
+ )
where
simpleP :: Parser Text
simpleP = do
@@ -106,6 +117,8 @@ tempFieldValueP = do
<|> string "<!--"
<|> (char '|' >> return "")
<|> string "}}"
+ <|> (string "<ref ")
+ <|> (string "<ref>")
)
)
if T.null t then fail "simpleP" else return $ T.unwords $ T.words t
@@ -124,7 +137,23 @@ wikilinkP :: Parser Text
wikilinkP = do
beg <- string "[["
content <- T.pack <$> manyTill anyChar (string "]]")
- return $ beg <> content <> "]]"
+ let (first, second) = T.breakOn "|" content
+ return
+ $ "[["
+ <> wikilinkPrefix
+ <> first
+ <> "]["
+ <> (if T.null second then first else T.tail second)
+ <> "]]"
+
+-- refs
+skipRefP :: Parser Text
+skipRefP = (ref1 <|> ref2) >> ""
+ where
+ ref1 = string "<ref" >> (char '>' <|> char ' ') >> manyTill
+ anyChar
+ (string "</ref>")
+ ref2 = string "<ref " >> manyTill (notChar '>') (string "/>")
wikiFilter :: Text -> Pandoc -> Pandoc
wikiFilter title = fixHeaderTemplates . topDown fixInline . insertHeader title