module Language.Ltml.AST.DocumentContainer
    ( DocumentContainer (..)
    , DocumentContainerHeader (..)
    )
where

import Data.Text (Text)
import Language.Lsd.AST.Type.DocumentContainer (DocumentContainerFormat)
import Language.Ltml.AST.AppendixSection (AppendixSection)
import Language.Ltml.AST.Document (Document)
import Language.Ltml.Common (Flagged', NavTocHeaded, Parsed)

-- Note: The NavTocHeaded wrapper arguably should better wrap the entire
--   DocumentContainer rather than its header; but this would mean that the
--   root node would be a `NavTocHeaded DocumentContainer`, which seems
--   annoying.
data DocumentContainer
    = DocumentContainer
        DocumentContainerFormat
        (NavTocHeaded (Parsed DocumentContainerHeader))
        (Flagged' Document)
        [Flagged' AppendixSection]
    deriving (Int -> DocumentContainer -> ShowS
[DocumentContainer] -> ShowS
DocumentContainer -> String
(Int -> DocumentContainer -> ShowS)
-> (DocumentContainer -> String)
-> ([DocumentContainer] -> ShowS)
-> Show DocumentContainer
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DocumentContainer -> ShowS
showsPrec :: Int -> DocumentContainer -> ShowS
$cshow :: DocumentContainer -> String
show :: DocumentContainer -> String
$cshowList :: [DocumentContainer] -> ShowS
showList :: [DocumentContainer] -> ShowS
Show)

data DocumentContainerHeader = DocumentContainerHeader
    { DocumentContainerHeader -> Text
dchPdfTitle :: Text
    , DocumentContainerHeader -> Text
dchHeaderFooterSuperTitle :: Text
    , DocumentContainerHeader -> Text
dchHeaderFooterTitle :: Text
    , DocumentContainerHeader -> Text
dchHeaderFooterDate :: Text
    }
    deriving (Int -> DocumentContainerHeader -> ShowS
[DocumentContainerHeader] -> ShowS
DocumentContainerHeader -> String
(Int -> DocumentContainerHeader -> ShowS)
-> (DocumentContainerHeader -> String)
-> ([DocumentContainerHeader] -> ShowS)
-> Show DocumentContainerHeader
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DocumentContainerHeader -> ShowS
showsPrec :: Int -> DocumentContainerHeader -> ShowS
$cshow :: DocumentContainerHeader -> String
show :: DocumentContainerHeader -> String
$cshowList :: [DocumentContainerHeader] -> ShowS
showList :: [DocumentContainerHeader] -> ShowS
Show)