summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Main.hs53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/Main.hs b/src/Main.hs
new file mode 100644
index 0000000..a87bf85
--- /dev/null
+++ b/src/Main.hs
@@ -0,0 +1,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)