packages feed

LiterateMarkdown-0.1.0.1: literate_converter.hs

module Main where

import Converter
import Data.Char (toLower)
import Control.Monad (when)
import System.Environment (getArgs)
import System.Exit (exitWith, ExitCode (..))

useage :: String
useage = "Useage: \
         \lhsc (toLhs|toMd) file1 [file2] [...]"

exitErr :: String -> IO a
exitErr msg = putStrLn (msg ++ "\n" ++ useage) >> exitWith (ExitFailure 1)

main = do
    args <- getArgs

    when (length args < 2) $
        exitErr "not enough arguments given."

    let paths = tail args

    files <- mapM (readFile) paths

    let (func, ex) = case (map toLower $ head args) of
                "tolhs" -> (convertToLhs, "lhs")
                "tomd"  -> (convertToMd, "md")
                _       -> (id, "id") 
    
    when (ex == "id") $
        exitErr $ "command " ++ head args ++ " not recongised"

    -- convert
    converted <- return $ map func files
    -- write back
    mapM_ (uncurry writeFile) $ zip (map (++ "." ++ ex) paths) converted
    -- print finished
    putStrLn "finished conversions"