{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Text.Pandoc.Filter.Plot.Monad.Types
( Toolkit (..),
Renderer (..),
Script,
CheckResult (..),
InclusionKey (..),
FigureSpec (..),
OutputSpec (..),
SaveFormat (..),
cls,
extension,
toolkits,
inclusionKeys,
Executable (..),
exeFromPath,
isWindows,
)
where
import Data.Char (toLower)
import Data.List (intersperse)
import Data.String (IsString (..))
import Data.Text (Text, pack, unpack)
import Data.Yaml (FromJSON(..), ToJSON (toJSON), withText)
import GHC.Generics (Generic)
import System.FilePath (splitFileName)
import System.Info (os)
import Text.Pandoc.Definition (Attr)
toolkits :: [Toolkit]
toolkits :: [Toolkit]
toolkits = Toolkit -> Toolkit -> [Toolkit]
forall a. Enum a => a -> a -> [a]
enumFromTo Toolkit
forall a. Bounded a => a
minBound Toolkit
forall a. Bounded a => a
maxBound
data Toolkit
= Matplotlib
| Matlab
| PlotlyPython
| PlotlyR
| Mathematica
| Octave
| GGPlot2
| GNUPlot
| Graphviz
| Bokeh
| Plotsjl
| PlantUML
| SageMath
deriving (Toolkit
Toolkit -> Toolkit -> Bounded Toolkit
forall a. a -> a -> Bounded a
maxBound :: Toolkit
$cmaxBound :: Toolkit
minBound :: Toolkit
$cminBound :: Toolkit
Bounded, Toolkit -> Toolkit -> Bool
(Toolkit -> Toolkit -> Bool)
-> (Toolkit -> Toolkit -> Bool) -> Eq Toolkit
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Toolkit -> Toolkit -> Bool
$c/= :: Toolkit -> Toolkit -> Bool
== :: Toolkit -> Toolkit -> Bool
$c== :: Toolkit -> Toolkit -> Bool
Eq, Int -> Toolkit
Toolkit -> Int
Toolkit -> [Toolkit]
Toolkit -> Toolkit
Toolkit -> Toolkit -> [Toolkit]
Toolkit -> Toolkit -> Toolkit -> [Toolkit]
(Toolkit -> Toolkit)
-> (Toolkit -> Toolkit)
-> (Int -> Toolkit)
-> (Toolkit -> Int)
-> (Toolkit -> [Toolkit])
-> (Toolkit -> Toolkit -> [Toolkit])
-> (Toolkit -> Toolkit -> [Toolkit])
-> (Toolkit -> Toolkit -> Toolkit -> [Toolkit])
-> Enum Toolkit
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: Toolkit -> Toolkit -> Toolkit -> [Toolkit]
$cenumFromThenTo :: Toolkit -> Toolkit -> Toolkit -> [Toolkit]
enumFromTo :: Toolkit -> Toolkit -> [Toolkit]
$cenumFromTo :: Toolkit -> Toolkit -> [Toolkit]
enumFromThen :: Toolkit -> Toolkit -> [Toolkit]
$cenumFromThen :: Toolkit -> Toolkit -> [Toolkit]
enumFrom :: Toolkit -> [Toolkit]
$cenumFrom :: Toolkit -> [Toolkit]
fromEnum :: Toolkit -> Int
$cfromEnum :: Toolkit -> Int
toEnum :: Int -> Toolkit
$ctoEnum :: Int -> Toolkit
pred :: Toolkit -> Toolkit
$cpred :: Toolkit -> Toolkit
succ :: Toolkit -> Toolkit
$csucc :: Toolkit -> Toolkit
Enum, (forall x. Toolkit -> Rep Toolkit x)
-> (forall x. Rep Toolkit x -> Toolkit) -> Generic Toolkit
forall x. Rep Toolkit x -> Toolkit
forall x. Toolkit -> Rep Toolkit x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Toolkit x -> Toolkit
$cfrom :: forall x. Toolkit -> Rep Toolkit x
Generic, Eq Toolkit
Eq Toolkit
-> (Toolkit -> Toolkit -> Ordering)
-> (Toolkit -> Toolkit -> Bool)
-> (Toolkit -> Toolkit -> Bool)
-> (Toolkit -> Toolkit -> Bool)
-> (Toolkit -> Toolkit -> Bool)
-> (Toolkit -> Toolkit -> Toolkit)
-> (Toolkit -> Toolkit -> Toolkit)
-> Ord Toolkit
Toolkit -> Toolkit -> Bool
Toolkit -> Toolkit -> Ordering
Toolkit -> Toolkit -> Toolkit
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Toolkit -> Toolkit -> Toolkit
$cmin :: Toolkit -> Toolkit -> Toolkit
max :: Toolkit -> Toolkit -> Toolkit
$cmax :: Toolkit -> Toolkit -> Toolkit
>= :: Toolkit -> Toolkit -> Bool
$c>= :: Toolkit -> Toolkit -> Bool
> :: Toolkit -> Toolkit -> Bool
$c> :: Toolkit -> Toolkit -> Bool
<= :: Toolkit -> Toolkit -> Bool
$c<= :: Toolkit -> Toolkit -> Bool
< :: Toolkit -> Toolkit -> Bool
$c< :: Toolkit -> Toolkit -> Bool
compare :: Toolkit -> Toolkit -> Ordering
$ccompare :: Toolkit -> Toolkit -> Ordering
$cp1Ord :: Eq Toolkit
Ord)
instance Show Toolkit where
show :: Toolkit -> String
show Toolkit
Matplotlib = String
"Python/Matplotlib"
show Toolkit
Matlab = String
"MATLAB"
show Toolkit
PlotlyPython = String
"Python/Plotly"
show Toolkit
PlotlyR = String
"R/Plotly"
show Toolkit
Mathematica = String
"Mathematica"
show Toolkit
Octave = String
"GNU Octave"
show Toolkit
GGPlot2 = String
"ggplot2"
show Toolkit
GNUPlot = String
"gnuplot"
show Toolkit
Graphviz = String
"graphviz"
show Toolkit
Bokeh = String
"Python/Bokeh"
show Toolkit
Plotsjl = String
"Julia/Plots.jl"
show Toolkit
PlantUML = String
"PlantUML"
show Toolkit
SageMath = String
"SageMath"
cls :: Toolkit -> Text
cls :: Toolkit -> Text
cls Toolkit
Matplotlib = Text
"matplotlib"
cls Toolkit
Matlab = Text
"matlabplot"
cls Toolkit
PlotlyPython = Text
"plotly_python"
cls Toolkit
PlotlyR = Text
"plotly_r"
cls Toolkit
Mathematica = Text
"mathplot"
cls Toolkit
Octave = Text
"octaveplot"
cls Toolkit
GGPlot2 = Text
"ggplot2"
cls Toolkit
GNUPlot = Text
"gnuplot"
cls Toolkit
Graphviz = Text
"graphviz"
cls Toolkit
Bokeh = Text
"bokeh"
cls Toolkit
Plotsjl = Text
"plotsjl"
cls Toolkit
PlantUML = Text
"plantuml"
cls Toolkit
SageMath = Text
"sageplot"
data Executable = Executable FilePath Text
exeFromPath :: FilePath -> Executable
exeFromPath :: String -> Executable
exeFromPath String
fp =
let (String
dir, String
name) = String -> (String, String)
splitFileName String
fp
in String -> Text -> Executable
Executable String
dir (String -> Text
pack String
name)
type Script = Text
data CheckResult
= CheckPassed
| CheckFailed Text
deriving (CheckResult -> CheckResult -> Bool
(CheckResult -> CheckResult -> Bool)
-> (CheckResult -> CheckResult -> Bool) -> Eq CheckResult
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CheckResult -> CheckResult -> Bool
$c/= :: CheckResult -> CheckResult -> Bool
== :: CheckResult -> CheckResult -> Bool
$c== :: CheckResult -> CheckResult -> Bool
Eq)
instance Semigroup CheckResult where
<> :: CheckResult -> CheckResult -> CheckResult
(<>) CheckResult
CheckPassed CheckResult
a = CheckResult
a
(<>) CheckResult
a CheckResult
CheckPassed = CheckResult
a
(<>) (CheckFailed Text
msg1) (CheckFailed Text
msg2) = Text -> CheckResult
CheckFailed (Text
msg1 Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
msg2)
instance Monoid CheckResult where
mempty :: CheckResult
mempty = CheckResult
CheckPassed
data InclusionKey
= DirectoryK
| CaptionK
| SaveFormatK
| WithSourceK
| CaptionFormatK
| PreambleK
| DpiK
| SourceCodeLabelK
| StrictModeK
| ExecutableK
| CommandLineArgsK
| DependenciesK
| FileK
| MatplotlibTightBBoxK
| MatplotlibTransparentK
deriving (InclusionKey
InclusionKey -> InclusionKey -> Bounded InclusionKey
forall a. a -> a -> Bounded a
maxBound :: InclusionKey
$cmaxBound :: InclusionKey
minBound :: InclusionKey
$cminBound :: InclusionKey
Bounded, InclusionKey -> InclusionKey -> Bool
(InclusionKey -> InclusionKey -> Bool)
-> (InclusionKey -> InclusionKey -> Bool) -> Eq InclusionKey
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: InclusionKey -> InclusionKey -> Bool
$c/= :: InclusionKey -> InclusionKey -> Bool
== :: InclusionKey -> InclusionKey -> Bool
$c== :: InclusionKey -> InclusionKey -> Bool
Eq, Int -> InclusionKey
InclusionKey -> Int
InclusionKey -> [InclusionKey]
InclusionKey -> InclusionKey
InclusionKey -> InclusionKey -> [InclusionKey]
InclusionKey -> InclusionKey -> InclusionKey -> [InclusionKey]
(InclusionKey -> InclusionKey)
-> (InclusionKey -> InclusionKey)
-> (Int -> InclusionKey)
-> (InclusionKey -> Int)
-> (InclusionKey -> [InclusionKey])
-> (InclusionKey -> InclusionKey -> [InclusionKey])
-> (InclusionKey -> InclusionKey -> [InclusionKey])
-> (InclusionKey -> InclusionKey -> InclusionKey -> [InclusionKey])
-> Enum InclusionKey
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: InclusionKey -> InclusionKey -> InclusionKey -> [InclusionKey]
$cenumFromThenTo :: InclusionKey -> InclusionKey -> InclusionKey -> [InclusionKey]
enumFromTo :: InclusionKey -> InclusionKey -> [InclusionKey]
$cenumFromTo :: InclusionKey -> InclusionKey -> [InclusionKey]
enumFromThen :: InclusionKey -> InclusionKey -> [InclusionKey]
$cenumFromThen :: InclusionKey -> InclusionKey -> [InclusionKey]
enumFrom :: InclusionKey -> [InclusionKey]
$cenumFrom :: InclusionKey -> [InclusionKey]
fromEnum :: InclusionKey -> Int
$cfromEnum :: InclusionKey -> Int
toEnum :: Int -> InclusionKey
$ctoEnum :: Int -> InclusionKey
pred :: InclusionKey -> InclusionKey
$cpred :: InclusionKey -> InclusionKey
succ :: InclusionKey -> InclusionKey
$csucc :: InclusionKey -> InclusionKey
Enum)
instance Show InclusionKey where
show :: InclusionKey -> String
show InclusionKey
DirectoryK = String
"directory"
show InclusionKey
CaptionK = String
"caption"
show InclusionKey
SaveFormatK = String
"format"
show InclusionKey
WithSourceK = String
"source"
show InclusionKey
CaptionFormatK = String
"caption_format"
show InclusionKey
PreambleK = String
"preamble"
show InclusionKey
DpiK = String
"dpi"
show InclusionKey
SourceCodeLabelK = String
"source_label"
show InclusionKey
StrictModeK = String
"strict"
show InclusionKey
ExecutableK = String
"executable"
show InclusionKey
CommandLineArgsK = String
"command_line_arguments"
show InclusionKey
DependenciesK = String
"dependencies"
show InclusionKey
FileK = String
"file"
show InclusionKey
MatplotlibTightBBoxK = String
"tight_bbox"
show InclusionKey
MatplotlibTransparentK = String
"transparent"
inclusionKeys :: [InclusionKey]
inclusionKeys :: [InclusionKey]
inclusionKeys = InclusionKey -> InclusionKey -> [InclusionKey]
forall a. Enum a => a -> a -> [a]
enumFromTo (InclusionKey
forall a. Bounded a => a
minBound :: InclusionKey) InclusionKey
forall a. Bounded a => a
maxBound
data FigureSpec = FigureSpec
{
FigureSpec -> Renderer
renderer_ :: !Renderer,
FigureSpec -> Text
caption :: !Text,
FigureSpec -> Bool
withSource :: !Bool,
FigureSpec -> Text
script :: !Script,
FigureSpec -> SaveFormat
saveFormat :: !SaveFormat,
FigureSpec -> String
directory :: !FilePath,
FigureSpec -> Int
dpi :: !Int,
FigureSpec -> [String]
dependencies :: ![FilePath],
:: ![(Text, Text)],
FigureSpec -> Attr
blockAttrs :: !Attr
}
data SaveFormat
=
PNG
|
PDF
|
SVG
|
JPG
|
EPS
|
GIF
|
TIF
|
WEBP
|
HTML
|
LaTeX
deriving (SaveFormat
SaveFormat -> SaveFormat -> Bounded SaveFormat
forall a. a -> a -> Bounded a
maxBound :: SaveFormat
$cmaxBound :: SaveFormat
minBound :: SaveFormat
$cminBound :: SaveFormat
Bounded, Int -> SaveFormat
SaveFormat -> Int
SaveFormat -> [SaveFormat]
SaveFormat -> SaveFormat
SaveFormat -> SaveFormat -> [SaveFormat]
SaveFormat -> SaveFormat -> SaveFormat -> [SaveFormat]
(SaveFormat -> SaveFormat)
-> (SaveFormat -> SaveFormat)
-> (Int -> SaveFormat)
-> (SaveFormat -> Int)
-> (SaveFormat -> [SaveFormat])
-> (SaveFormat -> SaveFormat -> [SaveFormat])
-> (SaveFormat -> SaveFormat -> [SaveFormat])
-> (SaveFormat -> SaveFormat -> SaveFormat -> [SaveFormat])
-> Enum SaveFormat
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: SaveFormat -> SaveFormat -> SaveFormat -> [SaveFormat]
$cenumFromThenTo :: SaveFormat -> SaveFormat -> SaveFormat -> [SaveFormat]
enumFromTo :: SaveFormat -> SaveFormat -> [SaveFormat]
$cenumFromTo :: SaveFormat -> SaveFormat -> [SaveFormat]
enumFromThen :: SaveFormat -> SaveFormat -> [SaveFormat]
$cenumFromThen :: SaveFormat -> SaveFormat -> [SaveFormat]
enumFrom :: SaveFormat -> [SaveFormat]
$cenumFrom :: SaveFormat -> [SaveFormat]
fromEnum :: SaveFormat -> Int
$cfromEnum :: SaveFormat -> Int
toEnum :: Int -> SaveFormat
$ctoEnum :: Int -> SaveFormat
pred :: SaveFormat -> SaveFormat
$cpred :: SaveFormat -> SaveFormat
succ :: SaveFormat -> SaveFormat
$csucc :: SaveFormat -> SaveFormat
Enum, Eq SaveFormat
Eq SaveFormat
-> (SaveFormat -> SaveFormat -> Ordering)
-> (SaveFormat -> SaveFormat -> Bool)
-> (SaveFormat -> SaveFormat -> Bool)
-> (SaveFormat -> SaveFormat -> Bool)
-> (SaveFormat -> SaveFormat -> Bool)
-> (SaveFormat -> SaveFormat -> SaveFormat)
-> (SaveFormat -> SaveFormat -> SaveFormat)
-> Ord SaveFormat
SaveFormat -> SaveFormat -> Bool
SaveFormat -> SaveFormat -> Ordering
SaveFormat -> SaveFormat -> SaveFormat
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: SaveFormat -> SaveFormat -> SaveFormat
$cmin :: SaveFormat -> SaveFormat -> SaveFormat
max :: SaveFormat -> SaveFormat -> SaveFormat
$cmax :: SaveFormat -> SaveFormat -> SaveFormat
>= :: SaveFormat -> SaveFormat -> Bool
$c>= :: SaveFormat -> SaveFormat -> Bool
> :: SaveFormat -> SaveFormat -> Bool
$c> :: SaveFormat -> SaveFormat -> Bool
<= :: SaveFormat -> SaveFormat -> Bool
$c<= :: SaveFormat -> SaveFormat -> Bool
< :: SaveFormat -> SaveFormat -> Bool
$c< :: SaveFormat -> SaveFormat -> Bool
compare :: SaveFormat -> SaveFormat -> Ordering
$ccompare :: SaveFormat -> SaveFormat -> Ordering
$cp1Ord :: Eq SaveFormat
Ord, SaveFormat -> SaveFormat -> Bool
(SaveFormat -> SaveFormat -> Bool)
-> (SaveFormat -> SaveFormat -> Bool) -> Eq SaveFormat
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SaveFormat -> SaveFormat -> Bool
$c/= :: SaveFormat -> SaveFormat -> Bool
== :: SaveFormat -> SaveFormat -> Bool
$c== :: SaveFormat -> SaveFormat -> Bool
Eq, Int -> SaveFormat -> ShowS
[SaveFormat] -> ShowS
SaveFormat -> String
(Int -> SaveFormat -> ShowS)
-> (SaveFormat -> String)
-> ([SaveFormat] -> ShowS)
-> Show SaveFormat
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SaveFormat] -> ShowS
$cshowList :: [SaveFormat] -> ShowS
show :: SaveFormat -> String
$cshow :: SaveFormat -> String
showsPrec :: Int -> SaveFormat -> ShowS
$cshowsPrec :: Int -> SaveFormat -> ShowS
Show, (forall x. SaveFormat -> Rep SaveFormat x)
-> (forall x. Rep SaveFormat x -> SaveFormat) -> Generic SaveFormat
forall x. Rep SaveFormat x -> SaveFormat
forall x. SaveFormat -> Rep SaveFormat x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SaveFormat x -> SaveFormat
$cfrom :: forall x. SaveFormat -> Rep SaveFormat x
Generic)
instance IsString SaveFormat where
fromString :: String -> SaveFormat
fromString String
s
| String
s String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"png", String
"PNG", String
".png"] = SaveFormat
PNG
| String
s String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"pdf", String
"PDF", String
".pdf"] = SaveFormat
PDF
| String
s String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"svg", String
"SVG", String
".svg"] = SaveFormat
SVG
| String
s String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"eps", String
"EPS", String
".eps"] = SaveFormat
EPS
| String
s String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"gif", String
"GIF", String
".gif"] = SaveFormat
GIF
| String
s String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"jpg", String
"jpeg", String
"JPG", String
"JPEG", String
".jpg", String
".jpeg"] = SaveFormat
JPG
| String
s String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"tif", String
"tiff", String
"TIF", String
"TIFF", String
".tif", String
".tiff"] = SaveFormat
TIF
| String
s String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"webp", String
"WEBP", String
".webp"] = SaveFormat
WEBP
| String
s String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"html", String
"HTML", String
".html"] = SaveFormat
HTML
| String
s String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"latex", String
"LaTeX", String
".tex"] = SaveFormat
LaTeX
| Bool
otherwise =
String -> SaveFormat
forall a. String -> a
errorWithoutStackTrace (String -> SaveFormat) -> String -> SaveFormat
forall a b. (a -> b) -> a -> b
$
[String] -> String
forall a. Monoid a => [a] -> a
mconcat
[ String
s,
String
" is not one of the valid save formats : ",
[String] -> String
forall a. Monoid a => [a] -> a
mconcat ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ String -> [String] -> [String]
forall a. a -> [a] -> [a]
intersperse String
", " ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ SaveFormat -> String
forall a. Show a => a -> String
show (SaveFormat -> String) -> [SaveFormat] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [SaveFormat]
saveFormats,
String
" (and lowercase variations). "
]
where
saveFormats :: [SaveFormat]
saveFormats = SaveFormat -> SaveFormat -> [SaveFormat]
forall a. Enum a => a -> a -> [a]
enumFromTo SaveFormat
forall a. Bounded a => a
minBound SaveFormat
forall a. Bounded a => a
maxBound :: [SaveFormat]
instance FromJSON SaveFormat where
parseJSON :: Value -> Parser SaveFormat
parseJSON = String -> (Text -> Parser SaveFormat) -> Value -> Parser SaveFormat
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"SaveFormat" (SaveFormat -> Parser SaveFormat
forall (f :: * -> *) a. Applicative f => a -> f a
pure (SaveFormat -> Parser SaveFormat)
-> (Text -> SaveFormat) -> Text -> Parser SaveFormat
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> SaveFormat
forall a. IsString a => String -> a
fromString (String -> SaveFormat) -> (Text -> String) -> Text -> SaveFormat
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> String
unpack)
instance ToJSON SaveFormat where
toJSON :: SaveFormat -> Value
toJSON = String -> Value
forall a. ToJSON a => a -> Value
toJSON (String -> Value) -> (SaveFormat -> String) -> SaveFormat -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SaveFormat -> String
extension
extension :: SaveFormat -> String
extension :: SaveFormat -> String
extension SaveFormat
LaTeX = String
".tex"
extension SaveFormat
fmt = [String] -> String
forall a. Monoid a => [a] -> a
mconcat [String
".", (Char -> Char) -> ShowS
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Char -> Char
toLower ShowS -> (SaveFormat -> String) -> SaveFormat -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SaveFormat -> String
forall a. Show a => a -> String
show (SaveFormat -> String) -> SaveFormat -> String
forall a b. (a -> b) -> a -> b
$ SaveFormat
fmt]
isWindows :: Bool
isWindows :: Bool
isWindows = String
os String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String
"mingw32", String
"win32", String
"cygwin32"]
data OutputSpec = OutputSpec
{
OutputSpec -> FigureSpec
oFigureSpec :: FigureSpec,
OutputSpec -> String
oScriptPath :: FilePath,
OutputSpec -> String
oFigurePath :: FilePath,
OutputSpec -> String
oCWD :: FilePath
}
data Renderer = Renderer
{ Renderer -> Toolkit
rendererToolkit :: Toolkit,
Renderer -> Executable
rendererExe :: Executable,
Renderer -> FigureSpec -> String -> Text
rendererCapture :: FigureSpec -> FilePath -> Script,
Renderer -> OutputSpec -> Text
rendererCommand :: OutputSpec -> Text,
Renderer -> [SaveFormat]
rendererSupportedSaveFormats :: [SaveFormat],
Renderer -> [Text -> CheckResult]
rendererChecks :: [Script -> CheckResult],
Renderer -> Text
rendererLanguage :: Text,
:: Text -> Text,
Renderer -> String
rendererScriptExtension :: String
}