-
Notifications
You must be signed in to change notification settings - Fork 1
/
env-to-div-filter.hs
28 lines (24 loc) · 1.06 KB
/
env-to-div-filter.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{-# 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