packages feed

pandoc-japanese-filters-0.1.0.0: env-to-div-filter.hs

{-# 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