module Graphics.Gnuplot.Terminal.PostScript (
T, cons,
encoding,
landscape, portrait, eps,
color, monochrome,
font, embedFont,
) where
import qualified Graphics.Gnuplot.Private.Terminal as Terminal
import qualified Graphics.Gnuplot.Private.Encoding as Encoding
import Graphics.Gnuplot.Utility (listFromMaybeWith, quote, )
import Data.Foldable (foldMap, )
data T =
Cons {
filename_ :: FilePath,
encoding_ :: Maybe Encoding.T,
mode_ :: Maybe Mode,
color_ :: Maybe Bool,
embedFont_ :: [FilePath],
font_ :: Maybe (String, Int)
}
cons :: FilePath -> T
cons path =
Cons {
filename_ = path,
encoding_ = Nothing,
mode_ = Nothing,
color_ = Nothing,
embedFont_ = [],
font_ = Nothing
}
encoding :: Encoding.T -> T -> T
encoding enc term = term{encoding_ = Just enc}
landscape :: T -> T
landscape = setMode Landscape
portrait :: T -> T
portrait = setMode Portrait
eps :: T -> T
eps = setMode EPS
color :: T -> T
color term =
term{color_ = Just True}
monochrome :: T -> T
monochrome term =
term{color_ = Just False}
font :: String -> Int -> T -> T
font fontName fontSize term =
term{font_ = Just (fontName, fontSize)}
embedFont :: FilePath -> T -> T
embedFont fontFile term =
term{embedFont_ = fontFile : embedFont_ term}
data Mode =
Landscape
| Portrait
| EPS
formatMode :: Mode -> String
formatMode mode =
case mode of
Landscape -> "landscape"
Portrait -> "portrait"
EPS -> "eps"
setMode :: Mode -> T -> T
setMode mode term = term{mode_ = Just mode}
instance Terminal.C T where
canonical term =
Terminal.Cons {
Terminal.precommands = Encoding.formatMaybe $ encoding_ term,
Terminal.options =
"postscript" :
(listFromMaybeWith formatMode $ mode_ term) ++
(listFromMaybeWith (\b -> if b then "color" else "monochrome") $ color_ term) ++
(concatMap (\path -> "fontfile" : quote path : []) $ embedFont_ term) ++
(foldMap (\(name,size) -> "font" : quote name : show size : []) $ font_ term) ++
[],
Terminal.commands =
["set output " ++ (quote $ filename_ term)],
Terminal.interactive = False
}