module Drasil.Generator.Formats (
DocSpec(DocSpec), DocChoices(..),
DocClass(..), UsePackages(..), ExDoc(..), Filename,
Format(..),
docChoices
) where
import Build.Drasil ((+:+), Command, makeS, mkCheckedCommand, mkCommand, mkFreeVar,
mkFile, mkRule, RuleTransformer(makeRule))
import Drasil.Metadata (watermark)
type Filename = String
data Format = TeX | Plain | HTML | Jupyter | MDBook
instance Show Format where
show :: Format -> String
show Format
TeX = String
"PDF"
show Format
Plain = String
"Plain"
show Format
HTML = String
"HTML"
show Format
Jupyter = String
"Jupyter"
show Format
MDBook = String
"mdBook"
data DocChoices = DC {
DocChoices -> [Format]
format :: [Format]
}
data DocSpec = DocSpec DocChoices Filename
docChoices :: [Format] -> DocChoices
docChoices :: [Format] -> DocChoices
docChoices = [Format] -> DocChoices
DC
instance RuleTransformer DocSpec where
makeRule :: DocSpec -> [Rule]
makeRule (DocSpec (DC [Format
TeX]) String
fn) = [
Annotation -> Target -> Dependencies -> [Command] -> Rule
mkRule [String
watermark] (String -> Target
makeS String
"srs") [Target
pdfName] [],
Annotation -> Target -> Dependencies -> [Command] -> Rule
mkFile [] Target
pdfName [String -> Target
makeS (String -> Target) -> String -> Target
forall a b. (a -> b) -> a -> b
$ String
fn String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
".tex"] ([Command] -> Rule) -> [Command] -> Rule
forall a b. (a -> b) -> a -> b
$
((String -> Command) -> Command)
-> [String -> Command] -> [Command]
forall a b. (a -> b) -> [a] -> [b]
map ((String -> Command) -> String -> Command
forall a b. (a -> b) -> a -> b
$ String
fn) [String -> Command
lualatex, String -> Command
bibtex, String -> Command
lualatex, String -> Command
lualatex]] where
lualatex, bibtex :: String -> Command
lualatex :: String -> Command
lualatex = Target -> Command
mkCheckedCommand (Target -> Command) -> (String -> Target) -> String -> Command
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Target -> Target -> Target
(+:+) (String -> Target
makeS String
"lualatex" Target -> Target -> Target
+:+ String -> Target
mkFreeVar String
"TEXFLAGS") (Target -> Target) -> (String -> Target) -> String -> Target
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Target
makeS
bibtex :: String -> Command
bibtex = Target -> Command
mkCommand (Target -> Command) -> (String -> Target) -> String -> Command
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Target -> Target -> Target
(+:+) (String -> Target
makeS String
"bibtex" Target -> Target -> Target
+:+ String -> Target
mkFreeVar String
"BIBTEXFLAGS") (Target -> Target) -> (String -> Target) -> String -> Target
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Target
makeS
pdfName :: Target
pdfName = String -> Target
makeS (String -> Target) -> String -> Target
forall a b. (a -> b) -> a -> b
$ String
fn String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
".pdf"
makeRule (DocSpec (DC [Format
MDBook]) String
_) = [
Annotation -> Target -> Dependencies -> [Command] -> Rule
mkRule [String
watermark] (String -> Target
makeS String
"build") [] [Command
build],
Annotation -> Target -> Dependencies -> [Command] -> Rule
mkRule [] (String -> Target
makeS String
"server") [] [Command
server]]
where
build :: Command
build = Target -> Command
mkCheckedCommand (Target -> Command) -> Target -> Command
forall a b. (a -> b) -> a -> b
$ String -> Target
makeS String
"mdbook build"
server :: Command
server = Target -> Command
mkCheckedCommand (Target -> Command) -> Target -> Command
forall a b. (a -> b) -> a -> b
$ String -> Target
makeS String
"mdbook serve --open"
makeRule DocSpec
_ = []
data DocClass = DocClass (Maybe String) String
newtype UsePackages = UsePackages [String]
data ExDoc = ExDoc (Maybe String) String