Add an option for dumping a single table
This commit is contained in:
@@ -3,27 +3,66 @@
|
||||
obtain one at https://mozilla.org/MPL/2.0/. -}
|
||||
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
{-# LANGUAGE RecordWildCards #-}
|
||||
|
||||
module Graphics.Fountainhead.Metrics
|
||||
( FontMetrics(..)
|
||||
, afmFontMetrics
|
||||
( FontBBox(..)
|
||||
, FontDescriptor(..)
|
||||
, Number
|
||||
, FontDescriptorFlag(..)
|
||||
) where
|
||||
|
||||
import qualified Data.Text.Lazy.Builder as Text.Builder
|
||||
import Data.Version (Version(..), showVersion)
|
||||
import Graphics.Fountainhead.Type (newlineBuilder)
|
||||
import Data.Text (Text)
|
||||
|
||||
newtype FontMetrics = FontMetrics
|
||||
{ version :: Version
|
||||
type Number = Double
|
||||
|
||||
data FontDescriptorFlag
|
||||
= FixedPitch
|
||||
| Serif
|
||||
| Symbolic
|
||||
| Script
|
||||
| Nonsymbolic
|
||||
| Italic
|
||||
| AllCap
|
||||
| SmallCap
|
||||
| ForceBold
|
||||
deriving (Eq, Show)
|
||||
|
||||
instance Enum FontDescriptorFlag
|
||||
where
|
||||
toEnum 1 = FixedPitch
|
||||
toEnum 2 = Serif
|
||||
toEnum 3 = Symbolic
|
||||
toEnum 4 = Script
|
||||
toEnum 6 = Nonsymbolic
|
||||
toEnum 7 = Italic
|
||||
toEnum 17 = AllCap
|
||||
toEnum 18 = SmallCap
|
||||
toEnum 19 = ForceBold
|
||||
toEnum _ = error "Font description flag is not supported."
|
||||
fromEnum FixedPitch = 1
|
||||
fromEnum Serif = 2
|
||||
fromEnum Symbolic = 3
|
||||
fromEnum Script = 4
|
||||
fromEnum Nonsymbolic = 6
|
||||
fromEnum Italic = 7
|
||||
fromEnum AllCap = 17
|
||||
fromEnum SmallCap = 18
|
||||
fromEnum ForceBold = 19
|
||||
|
||||
data FontBBox = FontBBox Number Number Number Number
|
||||
deriving (Eq, Show)
|
||||
|
||||
data FontDescriptor = FontDescriptor
|
||||
{ fontName :: Text
|
||||
, flags :: [FontDescriptorFlag]
|
||||
, fullName :: Text
|
||||
, familyName :: Text
|
||||
, weight :: Text
|
||||
, fontBBox :: FontBBox
|
||||
, version :: Text
|
||||
, notice :: Text
|
||||
, encodingScheme :: Text
|
||||
, isFixedPitch :: Bool
|
||||
, ascender :: Number
|
||||
, descender :: Number
|
||||
} deriving (Eq, Show)
|
||||
|
||||
afmKeyString :: Text.Builder.Builder -> String -> Text.Builder.Builder
|
||||
afmKeyString key value = key <> Text.Builder.singleton '\t'
|
||||
<> Text.Builder.fromString value <> newlineBuilder
|
||||
|
||||
afmFontMetrics :: FontMetrics -> Text.Builder.Builder
|
||||
afmFontMetrics FontMetrics{..}
|
||||
= afmKeyString "StartFontMetrics" (showVersion version)
|
||||
<> afmKeyString "Comment" "Generated by Fountainhead"
|
||||
<> "EndFontMetrics" <> newlineBuilder
|
||||
|
Reference in New Issue
Block a user