{-# LANGUAGE RecordWildCards #-} 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 Options.Applicative ( ParserInfo(..) , (<**>) , argument , execParser , header , help , helper , info , long , fullDesc , metavar , optional , progDesc , short , str , strOption ) data Options = Options { tableName :: Maybe String , fontFile :: FilePath } deriving (Eq, Show) operationOptions :: ParserInfo Options operationOptions = info (options <**> helper) $ fullDesc <> progDesc "Dumping the contents of a TrueType Font file." <> header "fountainhead - font parser" where options = Options <$> tableNameArgument <*> argument str (metavar "FONTFILE") tableNameArgument = optional $ strOption $ long "table" <> short 't' <> metavar "tablename" <> help "Dump only the specified table. Otherwise dump all tables" main :: IO () main = execParser operationOptions >>= handleArguments where handleArguments Options{..} = putStrLn ("Dumping File:" <> fontFile <> "\n\n") >> dumpFontFile fontFile tableName >>= either print (Text.Lazy.putStrLn . Text.Builder.toLazyText)