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