packages feed

PageIO-0.0.3: pio.hs

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