module Main where import Text.PageIO import System.Exit import System.Environment (getArgs, getProgName) import Codec.Text.IConv import qualified Data.ByteString.Char8 as S main :: IO () main = do args <- getArgs case args of ("--dump":rest) -> do (_, docs) <- runFromArgs rest (`mapM_` docs) $ \(MkDoc _ lns) -> do let lns' = S.lines . packLBS $ convert "CP950" "UTF-8" lns (`mapM_` lns') $ S.putStrLn ("--meta":rest) -> do (_, docs) <- runFromArgs rest (`mapM_` docs) $ \(MkDoc meta _) -> print meta _ -> do (sheet, docs) <- runFromArgs args indexDocs sheet docs runFromArgs args = case args of [fileIn] -> do pagesIn <- readPages fileIn let docs = parsePages sheetIn pagesIn sheetIn = inferSheet fileIn pagesIn return (sheetIn, docs) [fileIn, duxIn] -> do sheetIn <- readSheet duxIn pagesIn <- readPages fileIn let docs = parsePages sheetIn pagesIn return (sheetIn, docs) (fileIn:duxIn:fileOut:duxOut:_) -> do sheetIn <- readSheet duxIn sheetOut <- readSheet duxOut pagesIn <- readPages fileIn pagesOut <- readPages fileOut let docs = transformPages sheetIn pagesIn sheetOut pagesOut return (sheetOut, docs) _ -> do prog <- getProgName putStrLn $ "Usage: " ++ prog ++ " input.txt [input.dux] [output.txt] [output.dux]" exitWith ExitSuccess