module Main ( main ) where import qualified Data.Text.Lazy.Builder as Text.Builder import qualified Data.Text.Lazy.IO as Text.Lazy import Graphics.Fountainhead (dumpFontFile) import System.Exit (exitWith) import GHC.IO.Exception (ExitCode(..)) import Options.Applicative ( Parser , ParserInfo(..) , argument , command , execParser , info , fullDesc , metavar , progDesc , str , subparser ) data Operation = Dump FilePath | Afm FilePath deriving (Eq, Show) dump :: Parser Operation dump = Dump <$> argument str (metavar "FONTFILE") afm :: Parser Operation afm = Afm <$> argument str (metavar "FONTFILE") operationOptions :: ParserInfo Operation operationOptions = info commands fullDesc where commands = subparser $ command "dump" (info dump (progDesc "Dumping the contents of a TrueType Font file")) <> command "afm" (info afm (progDesc "Generating Adobe Font Metrics files for TrueType fonts")) main :: IO () main = execParser operationOptions >>= handleArguments where handleArguments (Dump fontFile) = putStrLn ("Dumping File:" <> fontFile <> "\n\n") >> dumpFontFile fontFile >>= either print (Text.Lazy.putStrLn . Text.Builder.toLazyText) handleArguments (Afm _) = putStrLn "The program expects exactly one argument, the font file path." >> exitWith (ExitFailure 2)