-------------------------------------------------------------------------------- {-# LANGUAGE OverloadedStrings #-} module Main ( main ) where -------------------------------------------------------------------------------- import qualified Data.Aeson as Aeson import qualified Data.ByteString.Char8 as BC8 import qualified Data.ByteString.Lazy as BL import qualified Data.Text as T import qualified Data.Text.Encoding as T import qualified Data.Text.Lazy.IO as TL import qualified Language.Javascript.JQuery as JQuery import System.Environment (getArgs, getProgName) import System.Exit (exitFailure) import System.FilePath (takeBaseName) import qualified System.IO as IO -------------------------------------------------------------------------------- import Paths_profiteur (getDataFileName) import Profiteur.Core import Profiteur.Parser -------------------------------------------------------------------------------- includeFile :: IO.Handle -> FilePath -> IO () includeFile h filePath = BL.hPutStr h =<< BL.readFile filePath -------------------------------------------------------------------------------- writeReport :: String -> NodeMap -> IO () writeReport profFile prof = IO.withBinaryFile htmlFile IO.WriteMode $ \h -> do BC8.hPutStrLn h $ "\n\ \\n\ \ \n\ \ \n\ \ " `mappend` T.encodeUtf8 title `mappend` "" BC8.hPutStr h "" BC8.hPutStrLn h "" includeJs h =<< JQuery.file includeJs h =<< getDataFileName "data/js/unicode.js" includeJs h =<< getDataFileName "data/js/model.js" includeJs h =<< getDataFileName "data/js/resizing-canvas.js" includeJs h =<< getDataFileName "data/js/node.js" includeJs h =<< getDataFileName "data/js/selection.js" includeJs h =<< getDataFileName "data/js/zoom.js" includeJs h =<< getDataFileName "data/js/details.js" includeJs h =<< getDataFileName "data/js/sorting.js" includeJs h =<< getDataFileName "data/js/tree-map.js" includeJs h =<< getDataFileName "data/js/tree-browser.js" includeJs h =<< getDataFileName "data/js/main.js" BC8.hPutStrLn h " \n\ \ " includeFile h =<< getDataFileName "data/html/body.html" BC8.hPutStrLn h " \ \" putStrLn $ "Wrote " ++ htmlFile where htmlFile = profFile ++ ".html" title = T.pack $ takeBaseName profFile includeJs h file = do BC8.hPutStrLn h "" -------------------------------------------------------------------------------- main :: IO () main = do progName <- getProgName args <- getArgs case args of [profFile] -> do profOrErr <- decode <$> TL.readFile profFile case profOrErr of Right prof -> writeReport profFile $ nodeMapFromCostCentre prof Left err -> do putStrLn $ profFile ++ ": " ++ err exitFailure _ -> do putStrLn $ "Usage: " ++ progName ++ " " exitFailure