module Development.Shake.Report(buildReport) where
import Control.Monad
import System.FilePath
import Paths_shake
buildReport :: String -> FilePath -> IO ()
buildReport json out = do
htmlDir <- getDataFileName "html"
report <- readFile $ htmlDir </> "report.html"
let f name | name == "data" = return json
| otherwise = readFile $ htmlDir </> name
writeFile out =<< runTemplate f report
runTemplate :: Monad m => (String -> m String) -> String -> m String
runTemplate ask ('$':'$':xs) = liftM ('$':) $ runTemplate ask xs
runTemplate ask ('$':xs) | (name,_:rest) <- break (== '$') xs = liftM2 (++) (ask name) (runTemplate ask rest)
runTemplate ask (x:xs) = liftM (x:) $ runTemplate ask xs
runTemplate ask [] = return []