{-# LANGUAGE PatternGuards #-} module Development.Shake.Report(buildReport) where import Control.Monad import Data.Char import Data.List import System.FilePath import Paths_shake -- | Generates an HTML report given some build system -- profiling data in JSON format. buildReport :: String -> FilePath -> IO () buildReport json out = do htmlDir <- getDataFileName "html" report <- readFile $ htmlDir "report.html" let f name | name == "data.js" = return $ "var shake = \n" ++ json | otherwise = readFile $ htmlDir name writeFile out =<< runTemplate f report -- | Template Engine. Perform the following replacements on a line basis: -- -- * ==> -- -- * ==> runTemplate :: Monad m => (String -> m String) -> String -> m String runTemplate ask = liftM unlines . mapM f . lines where f x | Just file <- stripPrefix "" | Just file <- stripPrefix "\n" ++ res ++ "\n" | otherwise = return x where y = dropWhile isSpace x grab = ask . takeWhile (/= '\"')