transf-0.10: src/Main.hs
module Main where
import System.Console.GetOpt
import Data.Default
import Data.Maybe
import Data.Semigroup hiding (Option)
import Text.Transf
import Text.Transf.Process
main = defaultMain' "transf" optDesc transf
transf opts = haskellT <> musicT' (getMusicOpts opts) <> musicHaskellT' (getMusicOpts opts) <> musicExtraT
data Opt
= Format String
| Resolution Int
| Resize Int
getFormat :: Opt -> Maybe String
getFormat (Format a) = Just a
getFormat _ = Nothing
getResolution (Resolution a) = Just a
getResolution _ = Nothing
getResize (Resize a) = Just a
getResize _ = Nothing
firstJust :: [Maybe a] -> Maybe a
firstJust = listToMaybe . catMaybes
getMusicOpts :: [Opt] -> MusicOpts
getMusicOpts xs = MusicOpts {
format = fromMaybe (format def) $ firstJust $ fmap getFormat xs,
resolution = fromMaybe (resolution def) $ firstJust $ fmap getResolution xs,
resize = fromMaybe (resize def) $ firstJust $ fmap getResize xs
}
optDesc :: [OptDescr Opt]
optDesc = [
Option [] ["format"] (ReqArg Format "pdf|png|ps") "Music output format",
Option [] ["resolution"] (ReqArg (Resolution . read) "N") "Music resolution",
Option [] ["resize"] (ReqArg (Resize . read) "N") "Music resize factor"
]