module Language.Ltml.Tree.ToLtml
    ( treeToLtml
    )
where

import Language.Lsd.AST.SimpleRegex (Disjunction (Disjunction))
import Language.Lsd.Example (availableLSDs)
import Language.Ltml.AST.DocumentContainer (DocumentContainer)
import Language.Ltml.Common (Flagged')
import Language.Ltml.Tree (FlaggedInputTree')
import Language.Ltml.Tree.Parser (TreeError, runTreeParser)
import Language.Ltml.Tree.Parser.DocumentContainer (documentContainerTP)

-- | Convert an input tree to an LTML AST.
--   The boolean flags denote which part(s) of the tree output should be
--   generated for.
treeToLtml
    :: FlaggedInputTree'
    -> Either TreeError (Flagged' DocumentContainer)
treeToLtml :: FlaggedInputTree' -> Either TreeError (Flagged' DocumentContainer)
treeToLtml FlaggedInputTree'
tTree = TreeParser (Flagged' DocumentContainer)
-> Either TreeError (Flagged' DocumentContainer)
forall a. TreeParser a -> Either TreeError a
runTreeParser (TreeParser (Flagged' DocumentContainer)
 -> Either TreeError (Flagged' DocumentContainer))
-> TreeParser (Flagged' DocumentContainer)
-> Either TreeError (Flagged' DocumentContainer)
forall a b. (a -> b) -> a -> b
$ Disjunction (NamedType DocumentContainerType)
-> FlaggedInputTree' -> TreeParser (Flagged' DocumentContainer)
documentContainerTP Disjunction (NamedType DocumentContainerType)
t FlaggedInputTree'
tTree
  where
    t :: Disjunction (NamedType DocumentContainerType)
t = [NamedType DocumentContainerType]
-> Disjunction (NamedType DocumentContainerType)
forall a. [a] -> Disjunction a
Disjunction [NamedType DocumentContainerType]
availableLSDs