54 lines
1.4 KiB
Haskell
54 lines
1.4 KiB
Haskell
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)
|