module Text.LaTeX.Arguments (
    -- * Renaming @LaTeX@
    Language
  , Encoding
  , URL
  , Color
  , Name , Title , Date
  , Word
  , Marker, Text
  , ItemOption
  , PlacementSpecifier
    -- * Classes
  , Class
  , article
  , proc
  , minimal
  , report
  , book
  , slides
    -- * Class Options
  , ClassOption
    -- ** Paper related
  , letterpaper
  , a4paper
  , a5paper
  , b5paper
  , executivepaper
  , legalpaper
    -- ** @fleqn@,@leqno@
  , fleqn , leqno
    -- ** Title related
  , titlepage
  , notitlepage
    -- ** Column related
  , onecolumn
  , twocolumn
    -- ** Sides Related
  , twoside , oneside
    -- ** Landscape
  , landscape
    -- ** @Open@
  , openright , openany
    -- * Styles
  , Style
  , plain
  , headings
  , empty
    -- * Meters
  , Width, Lift, Extend
  , width, height, depth
  , totalheight
  , mm , cm , inch
  , pt , em , ex
  ) where

import Text.LaTeX.Monad
import Text.LaTeX.Define

import Data.List

type Language = LaTeX

type Encoding = LaTeX

type URL = LaTeX

type Color = LaTeX

type Name = LaTeX

type Title = LaTeX

type Date = LaTeX

type Word = String

type Marker = LaTeX

type Text = LaTeX

type ItemOption = LaTeX

type PlacementSpecifier = LaTeX

--

type ClassOption = LaTeX

letterpaper :: ClassOption
letterpaper = "letterpaper"

a4paper :: ClassOption
a4paper = "a4paper"

a5paper :: ClassOption
a5paper = "a5paper"

b5paper :: ClassOption
b5paper = "b5paper"

executivepaper :: ClassOption
executivepaper = "executivepaper"

legalpaper :: ClassOption
legalpaper = "legalpaper"

--

fleqn :: ClassOption
fleqn = "fleqn"

leqno :: ClassOption
leqno = "leqno"

--

titlepage :: ClassOption
titlepage = "titlepage"

notitlepage :: ClassOption
notitlepage = "notitlepage"

--

onecolumn :: ClassOption
onecolumn = "onecolumn"

twocolumn :: ClassOption
twocolumn = "twocolumn"

--

twoside :: ClassOption
twoside = "twoside"

oneside :: ClassOption
oneside = "oneside"

--

landscape :: ClassOption
landscape = "landscape"

--

openright :: ClassOption
openright = "openright"

openany :: ClassOption
openany = "openany"

--

type Class = LaTeX

article :: Class
article = "article"

proc :: Class
proc = "proc"

minimal :: Class
minimal = "minimal"

report :: Class
report = "report"

book :: Class
book = "book"

slides :: Class
slides = "slides"

--


type Style = LaTeX

plain :: Style
plain = "plain"

headings :: Style
headings = "headings"

empty :: Style
empty = "empty"

-- Meters

type Width = LaTeX

type Lift = LaTeX

type Extend = LaTeX

width :: LaTeX
width = comm0_ "width"

height :: LaTeX
height = comm0_ "height"

depth :: LaTeX
depth = comm0_ "depth"

totalheight :: LaTeX
totalheight = comm0_ "totalheight"

mm :: Float -> LaTeX
mm = (>>"mm") . lxany

cm :: Float -> LaTeX
cm = (>>"cm") . lxany

inch :: Float -> LaTeX
inch = (>>"in") . lxany

pt :: Int -> LaTeX
pt = (>>"pt") . lxany

em :: Float -> LaTeX
em = (>>"em") . lxany

ex :: Float -> LaTeX
ex = (>>"ex") . lxany