1 {-# LANGUAGE LambdaCase #-}
2 module Hcompta.CLI.Command.Print where
4 -- import Control.Arrow ((>>>))
5 import Control.Monad.IO.Class (liftIO)
6 import Control.Monad.Trans.Except (runExceptT)
7 import qualified Data.Either
8 import qualified Data.List
9 import System.Console.GetOpt
13 import System.Environment (getProgName)
14 import System.Exit (exitWith, ExitCode(..))
15 import qualified System.IO as IO
17 import qualified Hcompta.CLI.Args as Args
18 import qualified Hcompta.CLI.Context as Context
19 import qualified Hcompta.CLI.Write as Write
20 import qualified Hcompta.Format.Ledger.Read
21 import qualified Hcompta.Format.Ledger.Write
22 import qualified Hcompta.Format.Ledger.Journal
23 import qualified Hcompta.Model.Journal
27 { ctx_input :: [FilePath]
41 , " "++bin++" print [option..]"
43 , usageInfo "OPTIONS" options
46 options :: Args.Options Ctx
50 usage >>= IO.hPutStr IO.stderr
51 exitWith ExitSuccess))
53 , Option "i" ["input"]
55 return $ ctx{ctx_input=s:ctx_input ctx}) "file.ledger")
56 "read data from given file"
59 run :: Context.Context -> [String] -> IO ()
61 (ctx, _) <- Args.parse context usage options (nil, args)
62 (flip mapM) (ctx_input ctx) $ \path -> do
64 Hcompta.Format.Ledger.Read.file path
66 Left ko -> return $ Left (path, ko)
67 Right ok -> return $ Right ok
68 >>= return . Data.Either.partitionEithers
71 (flip mapM_) kos $ \(_path, ko) -> Write.fatal context ko
73 with_color <- Write.with_color context IO.stdout
74 let journal = Hcompta.Model.Journal.unions $
75 Data.List.map Hcompta.Format.Ledger.Journal.to_Model journals
76 Hcompta.Format.Ledger.Write.showIO with_color IO.stdout $ do
77 Hcompta.Format.Ledger.Write.journal journal