{-# LANGUAGE OverloadedStrings, CPP #-}
module Text.LaTeX.Packages.Graphicx
(
graphicx
, dvips
, dvipdfm
, pdftex
, IGOption (..)
, includegraphics
, rotatebox
, scalebox
, reflectbox
, resizebox
) where
import Text.LaTeX.Base.Syntax
import Text.LaTeX.Base.Class
import Text.LaTeX.Base.Render
import Text.LaTeX.Base.Types
import Data.Char (toLower)
#if !MIN_VERSION_base(4,8,0)
import Data.Functor ((<$>))
#endif
graphicx :: PackageName
graphicx :: PackageName
graphicx = PackageName
"graphicx"
dvips, dvipdfm, pdftex :: LaTeXC l => l
dvips :: forall l. LaTeXC l => l
dvips = l
"dvips"
dvipdfm :: forall l. LaTeXC l => l
dvipdfm = l
"dvipdfm"
pdftex :: forall l. LaTeXC l => l
pdftex = l
"pdftex"
data IGOption =
IGWidth Measure
| IGHeight Measure
| KeepAspectRatio Bool
| IGScale Float
| IGAngle Int
| IGTrim Measure Measure Measure Measure
| IGClip Bool
| IGPage Int
deriving Int -> IGOption -> ShowS
[IGOption] -> ShowS
IGOption -> PackageName
forall a.
(Int -> a -> ShowS)
-> (a -> PackageName) -> ([a] -> ShowS) -> Show a
showList :: [IGOption] -> ShowS
$cshowList :: [IGOption] -> ShowS
show :: IGOption -> PackageName
$cshow :: IGOption -> PackageName
showsPrec :: Int -> IGOption -> ShowS
$cshowsPrec :: Int -> IGOption -> ShowS
Show
instance Render IGOption where
render :: IGOption -> Text
render (IGWidth Measure
m) = Text
"width=" forall a. Semigroup a => a -> a -> a
<> forall a. Render a => a -> Text
render Measure
m
render (IGHeight Measure
m) = Text
"height=" forall a. Semigroup a => a -> a -> a
<> forall a. Render a => a -> Text
render Measure
m
render (KeepAspectRatio Bool
b) = Text
"keepaspectratio=" forall a. Semigroup a => a -> a -> a
<> forall a. IsString a => PackageName -> a
fromString (Char -> Char
toLower forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. Show a => a -> PackageName
show Bool
b)
render (IGScale Float
r) = Text
"scale=" forall a. Semigroup a => a -> a -> a
<> forall a. Render a => a -> Text
render Float
r
render (IGAngle Int
a) = Text
"angle=" forall a. Semigroup a => a -> a -> a
<> forall a. Render a => a -> Text
render Int
a
render (IGTrim Measure
l Measure
b Measure
r Measure
t) = Text
"trim=" forall a. Semigroup a => a -> a -> a
<> forall a. Render a => Char -> [a] -> Text
renderChars Char
' ' [Measure
l,Measure
b,Measure
r,Measure
t]
render (IGClip Bool
b) = Text
"clip=" forall a. Semigroup a => a -> a -> a
<> forall a. IsString a => PackageName -> a
fromString (Char -> Char
toLower forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. Show a => a -> PackageName
show Bool
b)
render (IGPage Int
p) = Text
"page=" forall a. Semigroup a => a -> a -> a
<> forall a. Render a => a -> Text
render Int
p
includegraphics :: LaTeXC l =>
[IGOption]
-> FilePath
-> l
includegraphics :: forall l. LaTeXC l => [IGOption] -> PackageName -> l
includegraphics [IGOption]
opts PackageName
fp = forall l. LaTeXC l => LaTeX -> l
fromLaTeX forall a b. (a -> b) -> a -> b
$ PackageName -> [TeXArg] -> LaTeX
TeXComm PackageName
"includegraphics"
[ [LaTeX] -> TeXArg
MOptArg forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a l. (Render a, LaTeXC l) => a -> l
rendertex [IGOption]
opts, LaTeX -> TeXArg
FixArg forall a b. (a -> b) -> a -> b
$ Text -> LaTeX
TeXRaw forall a b. (a -> b) -> a -> b
$ forall a. IsString a => PackageName -> a
fromString PackageName
fp ]
rotatebox :: LaTeXC l => Float -> l -> l
rotatebox :: forall l. LaTeXC l => Float -> l -> l
rotatebox Float
a = forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL forall a b. (a -> b) -> a -> b
$ \LaTeX
l -> PackageName -> [TeXArg] -> LaTeX
TeXComm PackageName
"rotatebox" [LaTeX -> TeXArg
FixArg forall a b. (a -> b) -> a -> b
$ forall a l. (Render a, LaTeXC l) => a -> l
rendertex Float
a , LaTeX -> TeXArg
FixArg LaTeX
l]
scalebox :: LaTeXC l =>
Float
-> Maybe Float
-> l
-> l
scalebox :: forall l. LaTeXC l => Float -> Maybe Float -> l -> l
scalebox Float
h Maybe Float
mv = forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL forall a b. (a -> b) -> a -> b
$ \LaTeX
l ->
PackageName -> [TeXArg] -> LaTeX
TeXComm PackageName
"rotatebox" forall a b. (a -> b) -> a -> b
$ [LaTeX -> TeXArg
FixArg forall a b. (a -> b) -> a -> b
$ forall a l. (Render a, LaTeXC l) => a -> l
rendertex Float
h]
forall a. [a] -> [a] -> [a]
++ forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] ((forall a. a -> [a] -> [a]
:[]) forall b c a. (b -> c) -> (a -> b) -> a -> c
. LaTeX -> TeXArg
OptArg forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a l. (Render a, LaTeXC l) => a -> l
rendertex) Maybe Float
mv
forall a. [a] -> [a] -> [a]
++ [LaTeX -> TeXArg
FixArg LaTeX
l]
reflectbox :: LaTeXC l => l -> l
reflectbox :: forall l. LaTeXC l => l -> l
reflectbox = forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL forall a b. (a -> b) -> a -> b
$ \LaTeX
l -> PackageName -> [TeXArg] -> LaTeX
TeXComm PackageName
"reflectbox" [LaTeX -> TeXArg
FixArg LaTeX
l]
resizebox :: LaTeXC l =>
Measure
-> Measure
-> l
-> l
resizebox :: forall l. LaTeXC l => Measure -> Measure -> l -> l
resizebox Measure
h Measure
v = forall l. LaTeXC l => (LaTeX -> LaTeX) -> l -> l
liftL forall a b. (a -> b) -> a -> b
$ \LaTeX
l ->
PackageName -> [TeXArg] -> LaTeX
TeXComm PackageName
"resizebox" [LaTeX -> TeXArg
FixArg forall a b. (a -> b) -> a -> b
$ forall a l. (Render a, LaTeXC l) => a -> l
rendertex Measure
h,LaTeX -> TeXArg
FixArg forall a b. (a -> b) -> a -> b
$ forall a l. (Render a, LaTeXC l) => a -> l
rendertex Measure
v,LaTeX -> TeXArg
FixArg LaTeX
l]