module Control.Monad.Takahashi.Slide
( BlockOption(..)
, fontColor, bgColor, frameColor, frameStyle
, SlideOption(..)
, slideTitle, slideFontSize, titleOption, codeOption
, contentsOption, contentsOption2, annotationOption, blockFontSize
, defaultSlideOption
, Taka(..)
, buildTakahashi
, writeSlideWithTemplate
, writeSlide
, runTakahashi
, showTakahashi
, makeSlideWithTemplate
, makeSlide
) where
import Control.Lens
import Control.Monad.RWS
import Data.List
import Control.Monad.Skeleton
import Paths_takahashi
import Control.Monad.Takahashi.Monad
import Control.Monad.Takahashi.HtmlBuilder
import Control.Monad.Takahashi.Util
type TakahashiRWS a = RWS () Html SlideOption a
buildTakahashi :: Taka a -> TakahashiRWS a
buildTakahashi t = interpret advent t
where
advent :: TakahashiBase a -> TakahashiRWS a
advent GetSlideOption = get
advent (PutSlideOption o) = put o
advent (Slide t) = do
style <- mkStyle
tell $ Div Nothing (Just "pages") (Just style) (runBuildHtml t) Emp
mkStyle :: TakahashiRWS Style
mkStyle = do
option <- get
return . execMakeStyle defaultStyle $ do
font.fontSize .= option^.slideFontSize
runTakahashi :: Taka a -> Html
runTakahashi t = snd $ execRWS (buildTakahashi t) () defaultSlideOption
showTakahashi :: Taka a -> String
showTakahashi = showHtml . runTakahashi
makeSlideWithTemplate :: String -> Taka a -> IO String
makeSlideWithTemplate r t = do
instr <- readFile r
return $ sub "##Presentation" (showTakahashi t) instr
makeSlide :: Taka a -> IO String
makeSlide t = getDataFileName "html/Temp.html" >>= flip makeSlideWithTemplate t
writeSlideWithTemplate :: String -> String -> Taka a -> IO ()
writeSlideWithTemplate r w = makeSlideWithTemplate r >=> writeFile w
writeSlide :: String -> Taka a -> IO ()
writeSlide w = makeSlide >=> writeFile w