{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE TemplateHaskell #-} module Text.Heterocephalus.Parse ( module Text.Heterocephalus.Parse , module Text.Heterocephalus.Parse.Control , module Text.Heterocephalus.Parse.Doc , module Text.Heterocephalus.Parse.Option ) where import Text.Heterocephalus.Parse.Control (Content(..), parseLineControl) import Text.Heterocephalus.Parse.Doc (Doc(..), parseDocFromControls) import Text.Heterocephalus.Parse.Option (ParseOptions(..), createParseOptions, defaultParseOptions) docFromString :: ParseOptions -> String -> [Doc] docFromString opts s = case parseDoc opts s of Left s' -> error s' Right d -> d parseDoc :: ParseOptions -> String -> Either String [Doc] parseDoc opts s = do controls <- parseLineControl opts s case parseDocFromControls controls of Left parseError -> Left $ show parseError Right docs -> Right docs