module Cake.Rules where
import Cake.Core
import Cake.Process
import Cake.Actions
import System.Directory
import System.FilePath
import Control.Applicative
import qualified Parsek
import Data.List
import Data.List.Split
extension :: String -> P (String,String)
extension s = do
base <- Parsek.many Parsek.anyChar
Parsek.string s
return (base++s,base)
anyExtension :: [String] -> P (String,String)
anyExtension ss = foldr (<|>) empty (map extension ss)
simple outExt inExt f = extension outExt ==> \(output,base) ->
let input = base ++ inExt
in produce output $ do
need input
f output input
tex_markdown_standalone = simple ".tex" ".markdown" $ \o i ->
pandoc i "latex" ["--standalone"]
pdf_tex = simple ".pdf" ".tex" $ \o i ->
system ["latexmk","-pdf",i]
tex_lhs = extension ".tex" ==> \(_,c) -> lhs2tex c
allRules = tex_markdown_standalone
<|> tex_lhs