{-# LANGUAGE RecordWildCards, DeriveDataTypeable #-}
import Data.Maybe
import System.Console.CmdArgs as CA
import Text.Pandoc
import HTML5Slide as S
import Monitor
data HTML5Slide
= HTML5Slide
{ argSlideScriptURL :: Maybe String
, argSlideClass :: Maybe String
, argSlideStyleCss :: Maybe String
, argSlideSyntaxCss :: Maybe String
, argPoll :: Bool
, filename :: String
}
deriving (Show, Data, Typeable)
main :: IO ()
main = do
HTML5Slide {..} <- cmdArgs $ HTML5Slide
{ argSlideScriptURL =
CA.def
&= explicit &= name "script-url"
&= typ "URL"
&= help "URL of Google HTML5 slide script"
, argSlideClass =
CA.def
&= explicit &= name "slide-class"
&= typ "CLASSNAME"
&= help "CSS class name of slide"
, argSlideStyleCss =
CA.def
&= explicit &= name "style-css"
&= typFile
&= help "Style CSS file"
, argSlideSyntaxCss =
CA.def
&= explicit &= name "syntax-css"
&= typFile
&= help "Syntax CSS file"
, argPoll =
CA.def
&= explicit &= name "poll"
&= help "Poll filesystem for changes"
, filename =
CA.def
&= argPos 0 &= typFile
}
styleCss <- maybe (return $ slideStyleCss S.def) readFile argSlideStyleCss
syntaxCss <- maybe (return $ slideSyntaxCss S.def) readFile argSlideSyntaxCss
let outname = (++".html") $ takeWhile (/='.') filename
slideOpt = S.def
{ slideScriptURL =
fromMaybe (slideScriptURL S.def) argSlideScriptURL
, slideClass =
fromMaybe (slideClass S.def) argSlideClass
, slideStyleCss =
styleCss
, slideSyntaxCss =
syntaxCss
}
let compile src =
writeFile outname
$ writeHTML5SlideString defaultWriterOptions slideOpt
$ readMarkdown defaultParserState { stateStandalone = True } src
if argPoll
then monitor filename $ compile
else readFile filename >>= compile