module Control.Monad.Takahashi
( module Control.Monad.Takahashi.Monad
, takaCont
, parCont
, listCont
, takaCont2
, parCont2
, listCont2
, horizonCont
, verticalCont
, annotationCont
, imgCont
, codeCont
, titleCont
, twinTopCont
, twinBottomCont
, twinLeftCont
, twinRightCont
, title
, taka
, par
, list
, taka2
, par2
, list2
, horizon
, vertical
, annotation
, img
, code
, code2
, twinTop
, twinBottom
, twinLeft
, twinRight
, makePage
, BlockOption
, fontColor, bgColor, frameColor, frameStyle
, SlideOption
, slideTitle, slideFontSize, titleOption, codeOption
, contentsOption, contentsOption2, annotationOption, blockFontSize
, defaultSlideOption
, Taka(..)
, buildTakahashi
, writeSlide
, runTakahashi
, showTakahashi
, makeSlide
, contents
, central
, Contents
, bindPage
, Color(..)
, DrawType(..)
, BorderStyle(..)
, stateSandbox
) where
import Control.Lens
import Control.Monad.State
import Control.Monad.Takahashi.Slide
import Control.Monad.Takahashi.Monad
import Control.Monad.Takahashi.HtmlBuilder
import Control.Monad.Takahashi.Util
takaCont :: String -> Contents
takaCont = takaContBase makeContentsStyle
listCont :: [String] -> Contents
listCont = listContBase basicContents
parCont :: String -> Contents
parCont = parContBase basicContents
takaCont2 :: String -> Contents
takaCont2 = takaContBase makeContentsStyle2
listCont2 :: [String] -> Contents
listCont2 = listContBase basicContents2
parCont2 :: String -> Contents
parCont2 = parContBase basicContents2
imgCont :: DrawType -> String -> Contents
imgCont dt fp = Contents $
\option -> central (return ()) $ drawPicture dt fp
codeCont :: String -> Contents
codeCont s = Contents $
\option -> contents (codeContents option) $ writeParagraph s
horizonCont :: [Contents] -> Contents
horizonCont cs = Contents $
\option -> horizonDiv . map (contents2DivInfo option) $ cs
verticalCont :: [Contents] -> Contents
verticalCont cs = Contents $
\option -> verticalDiv . map (contents2DivInfo option) $ cs
annotationCont :: Contents -> String -> Contents
annotationCont p s = Contents $ \option -> do
verticalDiv
[ divInfo
{ divRatio = 11
, divData = do
display .= Just Table
extructHBuilder p option
}
, divInfo
{ divData = do
writeParagraph s
, divMakeStyle = do
display .= Just Table
makeAnnotationStyle option
}
]
twinTopCont :: Contents -> Contents -> Contents
twinTopCont c1 c2 = makeTwinCont verticalDiv 2 1 c1 c2
twinBottomCont :: Contents -> Contents -> Contents
twinBottomCont c1 c2 = makeTwinCont verticalDiv 1 2 c1 c2
twinLeftCont :: Contents -> Contents -> Contents
twinLeftCont c1 c2 = makeTwinCont horizonDiv 2 1 c1 c2
twinRightCont :: Contents -> Contents -> Contents
twinRightCont c1 c2 = makeTwinCont horizonDiv 2 1 c1 c2
titleCont :: String -> String -> Contents
titleCont t s = Contents $
\option -> central (makeTitleStyle option) $ do
writeHeader1 t
writeParagraph s
subTitlePage :: String -> Contents -> Contents
subTitlePage s p = Contents $ \option -> do
verticalDiv
[ divInfo
{ divRatio = 10
, divData = do
central (return ()) $ writeHeader2 s
, divMakeStyle = do
display .= Just Table
makeTitleStyle option
}
, divInfo
{ divRatio = 45
, divData = extructHBuilder p option
, divMakeStyle = display .= Just Table
}
]
takaContBase :: (SlideOption -> MakeStyle ()) -> String -> Contents
takaContBase m s = Contents $
\option -> central (m option) $ writeHeader1 s
listContBase :: (SlideOption -> MakeStyle ()) -> [String] -> Contents
listContBase m xs = Contents $
\option -> contents (m option) $ writeList xs
parContBase :: (SlideOption -> MakeStyle ()) -> String -> Contents
parContBase m s = Contents $
\option -> contents (m option) $ writeParagraph s
title :: String -> String -> Taka ()
title t s = get >>= slide . extructHBuilder (titleCont t s)
taka :: String -> Taka ()
taka s = makePage $ takaCont s
list :: [String] -> Taka ()
list xs = makePage $ listCont xs
par :: String -> Taka ()
par s = makePage $ parCont s
taka2 :: String -> Taka ()
taka2 s = makePage $ takaCont2 s
list2 :: [String] -> Taka ()
list2 xs = makePage $ listCont2 xs
par2 :: String -> Taka ()
par2 s = makePage $ parCont2 s
horizon :: [Contents] -> Taka ()
horizon ps = makePage $ horizonCont ps
vertical :: [Contents] -> Taka ()
vertical ps = makePage $ verticalCont ps
annotation :: Contents -> String -> Taka ()
annotation p s = makePage $ annotationCont p s
img :: DrawType -> String -> Taka ()
img dt s = makePage $ imgCont dt s
code :: String -> String -> Taka ()
code s c = twinBottom (parCont s) (codeCont c)
code2 :: String -> String -> Taka ()
code2 s c = twinBottom (parCont2 s) (codeCont c)
twinTop :: Contents -> Contents -> Taka ()
twinTop c1 c2 = makePage $ twinTopCont c1 c2
twinBottom :: Contents -> Contents -> Taka ()
twinBottom c1 c2 = makePage $ twinBottomCont c1 c2
twinLeft :: Contents -> Contents -> Taka ()
twinLeft c1 c2 = makePage $ twinLeftCont c1 c2
twinRight :: Contents -> Contents -> Taka ()
twinRight c1 c2 = makePage $ twinRightCont c1 c2
makePage :: Contents -> Taka ()
makePage p = do
s <- use slideTitle
case s of
"" -> bindPage p
_ -> bindPage (subTitlePage s p)
contents2DivInfo :: SlideOption -> Contents -> DivInfo Style
contents2DivInfo o f = divInfo { divData = extructHBuilder f o }
basicContents :: SlideOption -> MakeStyle ()
basicContents o = do
makeContentsStyle o
setPadding
basicContents2 :: SlideOption -> MakeStyle ()
basicContents2 o = do
makeContentsStyle2 o
setPadding
codeContents :: SlideOption -> MakeStyle ()
codeContents o = do
makeCodeStyle o
margin.paddingLeft .= Just (Per 8)
setPadding :: MakeStyle ()
setPadding = do
margin.paddingTop .= Just (Per 3)
margin.paddingLeft .= Just (Per 8)
makeTwinCont :: ([DivInfo Style] -> HBuilder ())
-> Int -> Int -> Contents -> Contents -> Contents
makeTwinCont builder i1 i2 c1 c2 = Contents $ \option -> do
builder
[ divInfo
{ divRatio = i1
, divData = do
display .= Just Table
extructHBuilder c1 option
}
, divInfo
{ divRatio = i2
, divData = do
display .= Just Table
extructHBuilder c2 option
}
]