summaryrefslogtreecommitdiff
path: root/src/Main.hs
blob: a87bf8547885883822a98098b9c5136e7e0b1f7e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
    , helper
    , info
    , fullDesc
    , metavar
    , progDesc
    , str
    , subparser
    )

data Operation
    = Dump
    | Afm
    deriving (Eq, Show)

data Options = Options Operation FilePath
    deriving (Eq, Show)

operationOptions :: ParserInfo Options
operationOptions = info (options <**> helper) fullDesc
  where
    options = Options
        <$> commands
        <*> argument str (metavar "FONTFILE")
    commands = subparser
        $ command "dump" (info (pure Dump) (progDesc "Dumping the contents of a TrueType Font file."))
        <> command "afm" (info (pure Afm) (progDesc "Generating Adobe Font Metrics files for TrueType fonts."))

main :: IO ()
main = execParser operationOptions >>= handleArguments
  where
    handleArguments (Options Dump fontFile)
        = putStrLn ("Dumping File:" <> fontFile <> "\n\n")
        >> dumpFontFile fontFile
        >>= either print (Text.Lazy.putStrLn . Text.Builder.toLazyText)
    handleArguments (Options Afm _)
        = putStrLn "The program expects exactly one argument, the font file path."
        >> exitWith (ExitFailure 2)