module MarXup.DerivationTrees (
module Data.Monoid,
module Data.LabeledTree,
haltDrv,
module Graphics.Diagrams.DerivationTrees,
derivationTree, derivationTreeD
) where
import Data.List
import Control.Monad.Writer
import Data.LabeledTree
import Data.Monoid
import MarXup (element)
import MarXup.Tex hiding (label)
import Graphics.Diagrams.DerivationTrees
import MarXup.Diagram
derivationTreeD :: Derivation TeX -> TeX
derivationTreeD d = element $ (derivationTreeDiag $ delayD d :: TexDiagram ())
derivationTree :: Derivation TeX -> TeX
derivationTree = stringizeTex
stringizeTex :: Derivation TeX -> TeX
stringizeTex (Node Rule {..} premises) = braces $ do
cmd0 "displaystyle"
cmdn "frac" [mconcat $
intersperse (cmd0 "quad")
[ stringizeTex v | _ ::> v <- premises]
,conclusion]
braces $ do cmd0 "small"
ruleLabel
haltDrv :: TeX -> Derivation TeX -> Derivation TeX
haltDrv t (Node r _) = Node r [defaultLink ::> Node dummy {conclusion = cmd "vdots" nil >> cmd "hspace" (tex "2pt") >> t} []]