module Data.Conf.PrettyPrint
(
pPrintConf
, Pretty (..)
, Doc (..)
)
where
import Data.Conf.Types
import Data.Text (Text)
import qualified Data.Text as Text
import Text.PrettyPrint.HughesPJClass
pPrintConf = pPrint :: Conf -> Doc
instance Pretty ConfStatement where
pPrint s = case s of
ConfStatementEmptyLine -> text ""
ConfStatementComment (Comment c) ->
"#" <> ttext c
ConfStatementBlock (Block ks ss) ->
thsep ks <+> "{"
$+$ nest 2 (pPrintList (PrettyLevel 0) ss) $+$
"}"
ConfStatementExpression (Expression t ts) ->
ttext t <+> thsep ts <> ";"
pPrintList _ ss = foldl ($+$) empty (map pPrint ss)
thsep :: [Text] -> Doc
thsep = hsep . map ttext
ttext :: Text -> Doc
ttext = text . Text.unpack