{-# LANGUAGE MultiWayIf #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TupleSections #-} ----------------------------------------------------------------------------- -- | -- Module : Hoodle.Coroutine.LaTeX -- Copyright : (c) 2011-2014 Ian-Woo Kim -- -- License : BSD3 -- Maintainer : Ian-Woo Kim -- Stability : experimental -- Portability : GHC -- ----------------------------------------------------------------------------- module Hoodle.Coroutine.LaTeX where import Control.Lens import Control.Monad.Trans.Maybe import Control.Monad.State import Data.Function (on) import Data.List (sortBy) import Data.Maybe import qualified Data.Text as T import qualified Data.Text.Encoding as TE -- import Data.Hoodle.Simple -- import Hoodle.ModelAction.Text -- hoistMaybe :: (Monad m) => Maybe a -> MaybeT m a hoistMaybe = MaybeT . return getLaTeXComponentsFromHdl :: Hoodle -> [(Maybe T.Text,(Int,Double,T.Text))] getLaTeXComponentsFromHdl hdl = let mlatex_components = do (pgnum,pg) <- (zip ([1..] :: [Int]) . view pages) hdl l <- view layers pg i <- view items l case i of ItemSVG svg -> runMaybeT $ do v <- hoistMaybe (svg_command svg) guard (v == "latex") svgtextbstr <- hoistMaybe (svg_text svg) let (_,y) = svg_pos svg svgtext = TE.decodeUtf8 svgtextbstr mk = extractKeyword svgtext return (mk,(pgnum,y,svgtext)) _ -> [] cfunc :: (Ord a,Ord b,Ord c) => (a,b,c) -> (a,b,c) -> Ordering cfunc x y | view _1 x > view _1 y = GT | view _1 x < view _1 y = LT | otherwise = if | view _2 x > view _2 y -> GT | view _2 x < view _2 y -> LT | otherwise -> EQ latex_components = catMaybes mlatex_components sorted = sortBy (cfunc `on` snd) latex_components in sorted {- updateLaTeX :: MainCoroutine () updateLaTeX = do rhdl <- getHoodle <$> get let hdl = rHoodle2Hoodle rhdl runMaybeT $ do {- txtsrc <- -} MaybeT $ return (rhdl ^. gembeddedtext) -- let km = getKeywordMap txtsrc -- liftIO $ print km -- let sorted = getLaTeXComponentsFromHdl hdl -- liftIO $ print sorted return () -} laTeXHeader :: T.Text laTeXHeader = "\\documentclass[a4paper]{article}\n\ \\\usepackage[affil-it]{authblk}\n\ \\\usepackage{xeCJK}\n\ \\\xeCJKsetup{\n\ \ CJKspace=true,\n\ \ CJKecglue={}\n\ \}\n\ \\\usepackage{setspace}\n\ \\\onehalfspacing\n\ \\\usepackage{fontspec}\n\ \\\setCJKmainfont{NanumGothic}\n\ \\\usepackage{minted}\n\ \\\pagestyle{empty}\n\ \\\begin{document}\n" -- \\\\documentclass{article}\n\ -- \\\pagestyle{empty}\n\ -- \\\begin{document}\n laTeXFooter :: T.Text laTeXFooter = "\\end{document}\n"