module Ipe.IpeRender where
import System.OsPath
import qualified System.Process.Typed as Process
ipeRenderWith :: Options
-> FileType
-> OsPath
-> OsPath
-> IO ()
ipeRenderWith :: Options -> FileType -> OsPath -> OsPath -> IO ()
ipeRenderWith Options
options FileType
fType OsPath
inFp OsPath
outFp =
do
inFp' <- OsPath -> IO String
decodeFS OsPath
inFp
outFp' <- decodeFS outFp
Process.withProcessWait (Process.proc "iperender" $ args inFp' outFp') $ \Process () () ()
_iperenderProc ->
() -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
where
args :: String -> String -> [String]
args String
inFp' String
outFp' =
[ String
"-" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> FileType -> String
forall a. Show a => a -> String
show FileType
fType
, String
"-page", Int -> String
forall a. Show a => a -> String
show (Options -> Int
pageNumber Options
options)
, String
"-view", Int -> String
forall a. Show a => a -> String
show (Options -> Int
viewNumber Options
options)
, String
"-resolution", Int -> String
forall a. Show a => a -> String
show (Options -> Int
resolution Options
options)
] [String] -> [String] -> [String]
forall a. Semigroup a => a -> a -> a
<>
[ String
"-transparent" | Background
TransparentBackground Background -> Background -> Bool
forall a. Eq a => a -> a -> Bool
== Options -> Background
transparent Options
options ] [String] -> [String] -> [String]
forall a. Semigroup a => a -> a -> a
<>
[ String
"-nocrop" | Crop
NoCrop Crop -> Crop -> Bool
forall a. Eq a => a -> a -> Bool
== Options -> Crop
crop Options
options ] [String] -> [String] -> [String]
forall a. Semigroup a => a -> a -> a
<>
[ String
inFp'
, String
outFp'
]
ipeRender :: FileType -> OsPath -> OsPath -> IO ()
ipeRender :: FileType -> OsPath -> OsPath -> IO ()
ipeRender = Options -> FileType -> OsPath -> OsPath -> IO ()
ipeRenderWith Options
defaultOptions
data FileType = PNG | EPS | PDF | SVG
deriving (FileType -> FileType -> Bool
(FileType -> FileType -> Bool)
-> (FileType -> FileType -> Bool) -> Eq FileType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: FileType -> FileType -> Bool
== :: FileType -> FileType -> Bool
$c/= :: FileType -> FileType -> Bool
/= :: FileType -> FileType -> Bool
Eq,Eq FileType
Eq FileType =>
(FileType -> FileType -> Ordering)
-> (FileType -> FileType -> Bool)
-> (FileType -> FileType -> Bool)
-> (FileType -> FileType -> Bool)
-> (FileType -> FileType -> Bool)
-> (FileType -> FileType -> FileType)
-> (FileType -> FileType -> FileType)
-> Ord FileType
FileType -> FileType -> Bool
FileType -> FileType -> Ordering
FileType -> FileType -> FileType
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
$ccompare :: FileType -> FileType -> Ordering
compare :: FileType -> FileType -> Ordering
$c< :: FileType -> FileType -> Bool
< :: FileType -> FileType -> Bool
$c<= :: FileType -> FileType -> Bool
<= :: FileType -> FileType -> Bool
$c> :: FileType -> FileType -> Bool
> :: FileType -> FileType -> Bool
$c>= :: FileType -> FileType -> Bool
>= :: FileType -> FileType -> Bool
$cmax :: FileType -> FileType -> FileType
max :: FileType -> FileType -> FileType
$cmin :: FileType -> FileType -> FileType
min :: FileType -> FileType -> FileType
Ord,Int -> FileType
FileType -> Int
FileType -> [FileType]
FileType -> FileType
FileType -> FileType -> [FileType]
FileType -> FileType -> FileType -> [FileType]
(FileType -> FileType)
-> (FileType -> FileType)
-> (Int -> FileType)
-> (FileType -> Int)
-> (FileType -> [FileType])
-> (FileType -> FileType -> [FileType])
-> (FileType -> FileType -> [FileType])
-> (FileType -> FileType -> FileType -> [FileType])
-> Enum FileType
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: FileType -> FileType
succ :: FileType -> FileType
$cpred :: FileType -> FileType
pred :: FileType -> FileType
$ctoEnum :: Int -> FileType
toEnum :: Int -> FileType
$cfromEnum :: FileType -> Int
fromEnum :: FileType -> Int
$cenumFrom :: FileType -> [FileType]
enumFrom :: FileType -> [FileType]
$cenumFromThen :: FileType -> FileType -> [FileType]
enumFromThen :: FileType -> FileType -> [FileType]
$cenumFromTo :: FileType -> FileType -> [FileType]
enumFromTo :: FileType -> FileType -> [FileType]
$cenumFromThenTo :: FileType -> FileType -> FileType -> [FileType]
enumFromThenTo :: FileType -> FileType -> FileType -> [FileType]
Enum)
instance Show FileType where
show :: FileType -> String
show = \case
FileType
PNG -> String
"png"
FileType
EPS -> String
"eps"
FileType
PDF -> String
"pdf"
FileType
SVG -> String
"svg"
data Options = Options { Options -> Int
pageNumber :: Int
, Options -> Int
viewNumber :: Int
, Options -> Int
resolution :: Int
, Options -> Background
transparent :: Background
, Options -> Crop
crop :: Crop
} deriving (Int -> Options -> String -> String
[Options] -> String -> String
Options -> String
(Int -> Options -> String -> String)
-> (Options -> String)
-> ([Options] -> String -> String)
-> Show Options
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> Options -> String -> String
showsPrec :: Int -> Options -> String -> String
$cshow :: Options -> String
show :: Options -> String
$cshowList :: [Options] -> String -> String
showList :: [Options] -> String -> String
Show,Options -> Options -> Bool
(Options -> Options -> Bool)
-> (Options -> Options -> Bool) -> Eq Options
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Options -> Options -> Bool
== :: Options -> Options -> Bool
$c/= :: Options -> Options -> Bool
/= :: Options -> Options -> Bool
Eq,Eq Options
Eq Options =>
(Options -> Options -> Ordering)
-> (Options -> Options -> Bool)
-> (Options -> Options -> Bool)
-> (Options -> Options -> Bool)
-> (Options -> Options -> Bool)
-> (Options -> Options -> Options)
-> (Options -> Options -> Options)
-> Ord Options
Options -> Options -> Bool
Options -> Options -> Ordering
Options -> Options -> Options
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
$ccompare :: Options -> Options -> Ordering
compare :: Options -> Options -> Ordering
$c< :: Options -> Options -> Bool
< :: Options -> Options -> Bool
$c<= :: Options -> Options -> Bool
<= :: Options -> Options -> Bool
$c> :: Options -> Options -> Bool
> :: Options -> Options -> Bool
$c>= :: Options -> Options -> Bool
>= :: Options -> Options -> Bool
$cmax :: Options -> Options -> Options
max :: Options -> Options -> Options
$cmin :: Options -> Options -> Options
min :: Options -> Options -> Options
Ord)
defaultOptions :: Options
defaultOptions :: Options
defaultOptions = Int -> Int -> Int -> Background -> Crop -> Options
Options Int
1 Int
1 Int
72 Background
TransparentBackground Crop
Crop
data Background = OpaqueBackground | TransparentBackground
deriving (Int -> Background -> String -> String
[Background] -> String -> String
Background -> String
(Int -> Background -> String -> String)
-> (Background -> String)
-> ([Background] -> String -> String)
-> Show Background
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> Background -> String -> String
showsPrec :: Int -> Background -> String -> String
$cshow :: Background -> String
show :: Background -> String
$cshowList :: [Background] -> String -> String
showList :: [Background] -> String -> String
Show,ReadPrec [Background]
ReadPrec Background
Int -> ReadS Background
ReadS [Background]
(Int -> ReadS Background)
-> ReadS [Background]
-> ReadPrec Background
-> ReadPrec [Background]
-> Read Background
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Background
readsPrec :: Int -> ReadS Background
$creadList :: ReadS [Background]
readList :: ReadS [Background]
$creadPrec :: ReadPrec Background
readPrec :: ReadPrec Background
$creadListPrec :: ReadPrec [Background]
readListPrec :: ReadPrec [Background]
Read,Background -> Background -> Bool
(Background -> Background -> Bool)
-> (Background -> Background -> Bool) -> Eq Background
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Background -> Background -> Bool
== :: Background -> Background -> Bool
$c/= :: Background -> Background -> Bool
/= :: Background -> Background -> Bool
Eq,Eq Background
Eq Background =>
(Background -> Background -> Ordering)
-> (Background -> Background -> Bool)
-> (Background -> Background -> Bool)
-> (Background -> Background -> Bool)
-> (Background -> Background -> Bool)
-> (Background -> Background -> Background)
-> (Background -> Background -> Background)
-> Ord Background
Background -> Background -> Bool
Background -> Background -> Ordering
Background -> Background -> Background
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
$ccompare :: Background -> Background -> Ordering
compare :: Background -> Background -> Ordering
$c< :: Background -> Background -> Bool
< :: Background -> Background -> Bool
$c<= :: Background -> Background -> Bool
<= :: Background -> Background -> Bool
$c> :: Background -> Background -> Bool
> :: Background -> Background -> Bool
$c>= :: Background -> Background -> Bool
>= :: Background -> Background -> Bool
$cmax :: Background -> Background -> Background
max :: Background -> Background -> Background
$cmin :: Background -> Background -> Background
min :: Background -> Background -> Background
Ord,Int -> Background
Background -> Int
Background -> [Background]
Background -> Background
Background -> Background -> [Background]
Background -> Background -> Background -> [Background]
(Background -> Background)
-> (Background -> Background)
-> (Int -> Background)
-> (Background -> Int)
-> (Background -> [Background])
-> (Background -> Background -> [Background])
-> (Background -> Background -> [Background])
-> (Background -> Background -> Background -> [Background])
-> Enum Background
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: Background -> Background
succ :: Background -> Background
$cpred :: Background -> Background
pred :: Background -> Background
$ctoEnum :: Int -> Background
toEnum :: Int -> Background
$cfromEnum :: Background -> Int
fromEnum :: Background -> Int
$cenumFrom :: Background -> [Background]
enumFrom :: Background -> [Background]
$cenumFromThen :: Background -> Background -> [Background]
enumFromThen :: Background -> Background -> [Background]
$cenumFromTo :: Background -> Background -> [Background]
enumFromTo :: Background -> Background -> [Background]
$cenumFromThenTo :: Background -> Background -> Background -> [Background]
enumFromThenTo :: Background -> Background -> Background -> [Background]
Enum)
data Crop = NoCrop | Crop
deriving (Int -> Crop -> String -> String
[Crop] -> String -> String
Crop -> String
(Int -> Crop -> String -> String)
-> (Crop -> String) -> ([Crop] -> String -> String) -> Show Crop
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> Crop -> String -> String
showsPrec :: Int -> Crop -> String -> String
$cshow :: Crop -> String
show :: Crop -> String
$cshowList :: [Crop] -> String -> String
showList :: [Crop] -> String -> String
Show,ReadPrec [Crop]
ReadPrec Crop
Int -> ReadS Crop
ReadS [Crop]
(Int -> ReadS Crop)
-> ReadS [Crop] -> ReadPrec Crop -> ReadPrec [Crop] -> Read Crop
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Crop
readsPrec :: Int -> ReadS Crop
$creadList :: ReadS [Crop]
readList :: ReadS [Crop]
$creadPrec :: ReadPrec Crop
readPrec :: ReadPrec Crop
$creadListPrec :: ReadPrec [Crop]
readListPrec :: ReadPrec [Crop]
Read,Crop -> Crop -> Bool
(Crop -> Crop -> Bool) -> (Crop -> Crop -> Bool) -> Eq Crop
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Crop -> Crop -> Bool
== :: Crop -> Crop -> Bool
$c/= :: Crop -> Crop -> Bool
/= :: Crop -> Crop -> Bool
Eq,Eq Crop
Eq Crop =>
(Crop -> Crop -> Ordering)
-> (Crop -> Crop -> Bool)
-> (Crop -> Crop -> Bool)
-> (Crop -> Crop -> Bool)
-> (Crop -> Crop -> Bool)
-> (Crop -> Crop -> Crop)
-> (Crop -> Crop -> Crop)
-> Ord Crop
Crop -> Crop -> Bool
Crop -> Crop -> Ordering
Crop -> Crop -> Crop
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
$ccompare :: Crop -> Crop -> Ordering
compare :: Crop -> Crop -> Ordering
$c< :: Crop -> Crop -> Bool
< :: Crop -> Crop -> Bool
$c<= :: Crop -> Crop -> Bool
<= :: Crop -> Crop -> Bool
$c> :: Crop -> Crop -> Bool
> :: Crop -> Crop -> Bool
$c>= :: Crop -> Crop -> Bool
>= :: Crop -> Crop -> Bool
$cmax :: Crop -> Crop -> Crop
max :: Crop -> Crop -> Crop
$cmin :: Crop -> Crop -> Crop
min :: Crop -> Crop -> Crop
Ord,Int -> Crop
Crop -> Int
Crop -> [Crop]
Crop -> Crop
Crop -> Crop -> [Crop]
Crop -> Crop -> Crop -> [Crop]
(Crop -> Crop)
-> (Crop -> Crop)
-> (Int -> Crop)
-> (Crop -> Int)
-> (Crop -> [Crop])
-> (Crop -> Crop -> [Crop])
-> (Crop -> Crop -> [Crop])
-> (Crop -> Crop -> Crop -> [Crop])
-> Enum Crop
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: Crop -> Crop
succ :: Crop -> Crop
$cpred :: Crop -> Crop
pred :: Crop -> Crop
$ctoEnum :: Int -> Crop
toEnum :: Int -> Crop
$cfromEnum :: Crop -> Int
fromEnum :: Crop -> Int
$cenumFrom :: Crop -> [Crop]
enumFrom :: Crop -> [Crop]
$cenumFromThen :: Crop -> Crop -> [Crop]
enumFromThen :: Crop -> Crop -> [Crop]
$cenumFromTo :: Crop -> Crop -> [Crop]
enumFromTo :: Crop -> Crop -> [Crop]
$cenumFromThenTo :: Crop -> Crop -> Crop -> [Crop]
enumFromThenTo :: Crop -> Crop -> Crop -> [Crop]
Enum)