diff options
author | Yuchen Pei <hi@ypei.me> | 2022-09-14 13:41:54 +1000 |
---|---|---|
committer | Yuchen Pei <hi@ypei.me> | 2022-09-14 13:41:54 +1000 |
commit | 33f47d6d86246160cceb14804c6bd9746aad3b1e (patch) | |
tree | 92e577dbdfb880408d38155664eaf867add2f8f8 | |
parent | 5893a125ff90b51b40cc8375a2a4acf629da8935 (diff) |
[server] remove refs from infobox
-rw-r--r-- | src/Servall/WikiParser.hs | 33 |
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 |