{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PartialTypeSignatures #-} {-# LANGUAGE ViewPatterns #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FlexibleContexts #-} -- | Filtering a single code block. module Filter where import Text.Pandoc.JSON import Data.Text (Text) import qualified Data.Text as T import Prelude hiding(getLine) import Token.Haskell import FindColumns import Alignment import Render.ColSpan import qualified Render.Debug(render) import qualified Render.Latex import qualified Render.HTML import Debug.Trace(trace) -- | Render a list of `Processed` token records into the target output format. render :: Format -- ^ Format string -> Attr -- ^ Attributes -> [Processed] -- ^ Data about alignment -> Block --render "text" attrs aligned = RawBlock (Format "latex") $ processLatex aligned -- debug render (Format "text" ) attrs = CodeBlock attrs . Render.Debug.render render (Format "latex") attrs = RawBlock (Format "latex") . processLatex render (Format "html" ) attrs = RawBlock (Format "html" ) . processHTML -- Debugging option render other attrs = CodeBlock attrs . T.pack . show -- | Convert a list of input token records to raw LaTeX. processLatex :: [Processed] -> T.Text processLatex processed = Render.Latex.latexFromColSpans (length $ tableColumns processed) $ colspans processed -- | Convert a list of input token records to raw HTML. processHTML :: [Processed] -> T.Text processHTML = Render.HTML.htmlFromColSpans . colspans