lang/langfilter/Main.hs

41 lines
963 B
Haskell

import Lang
import Ebnf
import Spans
import Glosses
import Text.Pandoc.Definition
import Text.Pandoc.JSON
import Text.Pandoc.Walk
import qualified Data.Map as Map
main :: IO ()
main = toJSONFilter filter where
filter p@(Pandoc (Meta m) _) = do
lang' <- toLang $ Map.lookup "conlang" m
let ?lang = lang'
fmap (walk makeEbnf .
walk (concatMap makeBlocks) .
walk inlineLetterList) $
walkM spans =<<
walkM (fmap concat . traverse glosses) p
makeBlocks :: Block -> [Block]
makeBlocks (Div ("", [cls], []) blks)
| cls `elem` ["figure", "aside"] = [open] ++ blks ++ [close]
where
open = html $ "<" <> cls <> ">"
close = html $ "</" <> cls <> ">"
html = RawBlock (Format "html")
makeBlocks b = [b]
inlineLetterList :: Block -> Block
inlineLetterList (Div a@(_, cs, _) blks)
| "letter-list" `elem` cs = Div a (walk go blks)
where
go (Para xs) = Plain xs
go b = b
inlineLetterList b = b