{-# LANGUAGE OverloadedStrings #-}

module Text.LaTeX.Packages.LongTable
 ( -- * longtable package
   longtablep
   -- * longtable commands
 , longtable
 , endfirsthead
 , endhead
 , endfoot
 , endlastfoot
   -- * Package Options
   ) where

import Text.LaTeX.Base.Syntax (LaTeX(TeXEnv, TeXRaw, TeXComm), TeXArg(FixArg, OptArg))
import Text.LaTeX.Base.Class (LaTeXC, fromLaTeX, liftL)
import Text.LaTeX.Base.Render (render, renderAppend)
import Text.LaTeX.Base.Types (PackageName, Pos, TableSpec)

-- | longtable package. Use it to import it like this:
--
-- > usepackage [] longtable
longtablep :: PackageName
longtablep :: PackageName
longtablep = PackageName
"longtable"


-- | The 'longtable' environment can be used to typeset multi-page tables.
longtable :: LaTeXC l =>
             Maybe Pos   -- ^ This optional parameter can be used to specify the vertical position of the table.
                         --   Defaulted to 'Center'.
          -> [TableSpec] -- ^ Table specification of columns and vertical lines.
          -> l           -- ^ Table content. See '&', 'lnbk', 'hline' and 'cline'.
          -> l           -- ^ Resulting table syntax.
longtable :: Maybe Pos -> [TableSpec] -> l -> l
longtable Maybe Pos
Nothing [TableSpec]
ts  = (LaTeX -> LaTeX) -> l -> l
forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL ((LaTeX -> LaTeX) -> l -> l) -> (LaTeX -> LaTeX) -> l -> l
forall a b. (a -> b) -> a -> b
$ PackageName -> [TeXArg] -> LaTeX -> LaTeX
TeXEnv PackageName
"longtable" [ LaTeX -> TeXArg
FixArg (LaTeX -> TeXArg) -> LaTeX -> TeXArg
forall a b. (a -> b) -> a -> b
$ Text -> LaTeX
TeXRaw (Text -> LaTeX) -> Text -> LaTeX
forall a b. (a -> b) -> a -> b
$ [TableSpec] -> Text
forall a. Render a => [a] -> Text
renderAppend [TableSpec]
ts ]
longtable (Just Pos
p) [TableSpec]
ts = (LaTeX -> LaTeX) -> l -> l
forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL ((LaTeX -> LaTeX) -> l -> l) -> (LaTeX -> LaTeX) -> l -> l
forall a b. (a -> b) -> a -> b
$ PackageName -> [TeXArg] -> LaTeX -> LaTeX
TeXEnv PackageName
"longtable" [ LaTeX -> TeXArg
OptArg (LaTeX -> TeXArg) -> LaTeX -> TeXArg
forall a b. (a -> b) -> a -> b
$ Text -> LaTeX
TeXRaw (Text -> LaTeX) -> Text -> LaTeX
forall a b. (a -> b) -> a -> b
$ Pos -> Text
forall a. Render a => a -> Text
render Pos
p , LaTeX -> TeXArg
FixArg (LaTeX -> TeXArg) -> LaTeX -> TeXArg
forall a b. (a -> b) -> a -> b
$ Text -> LaTeX
TeXRaw (Text -> LaTeX) -> Text -> LaTeX
forall a b. (a -> b) -> a -> b
$ [TableSpec] -> Text
forall a. Render a => [a] -> Text
renderAppend [TableSpec]
ts ]

-- | End the first head.
--
-- Everything above this command will appear at the beginning of the
-- table, in the first page.
endfirsthead :: LaTeXC l => l
endfirsthead :: l
endfirsthead = LaTeX -> l
forall l. LaTeXC l => LaTeX -> l
fromLaTeX (LaTeX -> l) -> LaTeX -> l
forall a b. (a -> b) -> a -> b
$ PackageName -> [TeXArg] -> LaTeX
TeXComm PackageName
"endfirsthead" []

-- | End the head.
--
-- Whatever you put before this command and below \endfirsthead will
-- be displayed at the top of the table in every page except the first
-- one.
endhead :: LaTeXC l => l
endhead :: l
endhead = LaTeX -> l
forall l. LaTeXC l => LaTeX -> l
fromLaTeX (LaTeX -> l) -> LaTeX -> l
forall a b. (a -> b) -> a -> b
$ PackageName -> [TeXArg] -> LaTeX
TeXComm PackageName
"endhead" []

-- | End the foot.
--
-- Similar to \endhead, what you put after \endhead and before this
-- command will appear at the bottom of the table in every page except
-- the last one.
endfoot :: LaTeXC l => l
endfoot :: l
endfoot = LaTeX -> l
forall l. LaTeXC l => LaTeX -> l
fromLaTeX (LaTeX -> l) -> LaTeX -> l
forall a b. (a -> b) -> a -> b
$ PackageName -> [TeXArg] -> LaTeX
TeXComm PackageName
"endfoot" []

-- | End the last foot.
--
-- Similar to \endfisthead. The elements after \endfoot and before
-- this command will be displayed at the bottom of the table but only
-- in the last page where the table appears.
endlastfoot :: LaTeXC l => l
endlastfoot :: l
endlastfoot = LaTeX -> l
forall l. LaTeXC l => LaTeX -> l
fromLaTeX (LaTeX -> l) -> LaTeX -> l
forall a b. (a -> b) -> a -> b
$ PackageName -> [TeXArg] -> LaTeX
TeXComm PackageName
"endlastfoot" []