{-# LANGUAGE OverloadedStrings, PatternGuards, ViewPatterns #-} module Main where import PandocCompat (readLaTeX) import Data.Default (def) import qualified Data.Text as T import Text.LaTeX (render) import Text.LaTeX.Base.Parser (parseLaTeX) import Text.LaTeX.Base.Syntax (LaTeX (..)) import Text.LaTeX.Utils (stripTeX) import Text.Pandoc (bottomUp) import Text.Pandoc.Definition (Block (..), Pandoc (..)) import Text.Pandoc.JSON (toJSONFilter) import Text.Pandoc.Options (ReaderOptions (..)) main :: IO () main = toJSONFilter envToDiv envToDiv :: Block -> Block envToDiv (RawBlock "latex" src) | Right lat <- parseLaTeX (T.pack src) , TeXEnv name args body <- stripTeX lat = let Right (Pandoc _ bs) = readLaTeX def { readerParseRaw = True } $ T.unpack $ render body in Div ([], [name], [("data-tex-args", T.unpack $ T.concat $ map render args)]) $ map (bottomUp envToDiv) bs envToDiv b = b