{-# LANGUAGE OverloadedStrings #-}
module Text.LaTeX.Packages.Geometry (
geometry
, importGeometry
, GeometryOption (..)
, applyGeometry
) where
import Text.LaTeX
import Text.LaTeX.Base.Syntax
import Text.LaTeX.Base.Class
geometry :: PackageName
geometry :: PackageName
geometry = PackageName
"geometry"
data GeometryOption =
GHeight Measure
| GWidth Measure
| GPaper PaperType
| GCentered
| GPaperHeight Measure
| GPaperWidth Measure
| GLandscape Bool
deriving Int -> GeometryOption -> ShowS
[GeometryOption] -> ShowS
GeometryOption -> PackageName
(Int -> GeometryOption -> ShowS)
-> (GeometryOption -> PackageName)
-> ([GeometryOption] -> ShowS)
-> Show GeometryOption
forall a.
(Int -> a -> ShowS)
-> (a -> PackageName) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GeometryOption -> ShowS
showsPrec :: Int -> GeometryOption -> ShowS
$cshow :: GeometryOption -> PackageName
show :: GeometryOption -> PackageName
$cshowList :: [GeometryOption] -> ShowS
showList :: [GeometryOption] -> ShowS
Show
renderOption :: Render a => Text -> a -> Text
renderOption :: forall a. Render a => Text -> a -> Text
renderOption Text
t a
x = Text
t Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"=" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> a -> Text
forall a. Render a => a -> Text
render a
x
instance Render GeometryOption where
render :: GeometryOption -> Text
render (GHeight Measure
m) = Text -> Measure -> Text
forall a. Render a => Text -> a -> Text
renderOption Text
"height" Measure
m
render (GWidth Measure
m) = Text -> Measure -> Text
forall a. Render a => Text -> a -> Text
renderOption Text
"width" Measure
m
render (GPaper PaperType
p) = ClassOption -> Text
forall a. Render a => a -> Text
render (PaperType -> ClassOption
Paper PaperType
p)
render GeometryOption
GCentered = Text
"centered"
render (GPaperHeight Measure
m) = Text -> Measure -> Text
forall a. Render a => Text -> a -> Text
renderOption Text
"paperheight" Measure
m
render (GPaperWidth Measure
m) = Text -> Measure -> Text
forall a. Render a => Text -> a -> Text
renderOption Text
"paperwidth" Measure
m
render (GLandscape Bool
b) = Text -> Bool -> Text
forall a. Render a => Text -> a -> Text
renderOption Text
"landscape" Bool
b
applyGeometry :: LaTeXC l => [GeometryOption] -> l
applyGeometry :: forall l. LaTeXC l => [GeometryOption] -> l
applyGeometry [GeometryOption]
opts = 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
"geometry" [LaTeX -> TeXArg
FixArg (LaTeX -> TeXArg) -> LaTeX -> TeXArg
forall a b. (a -> b) -> a -> b
$ Text -> LaTeX
forall l. LaTeXC l => Text -> l
raw (Text -> LaTeX) -> Text -> LaTeX
forall a b. (a -> b) -> a -> b
$ [GeometryOption] -> Text
forall a. Render a => [a] -> Text
renderCommas [GeometryOption]
opts]
importGeometry :: LaTeXC l => [GeometryOption] -> l
importGeometry :: forall l. LaTeXC l => [GeometryOption] -> l
importGeometry [GeometryOption]
opts = [l] -> PackageName -> l
forall l. LaTeXC l => [l] -> PackageName -> l
usepackage ((GeometryOption -> l) -> [GeometryOption] -> [l]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GeometryOption -> l
forall a l. (Render a, LaTeXC l) => a -> l
rendertex [GeometryOption]
opts) PackageName
geometry