summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Graphics/Fountainhead/Dumper.hs38
1 files changed, 34 insertions, 4 deletions
diff --git a/src/Graphics/Fountainhead/Dumper.hs b/src/Graphics/Fountainhead/Dumper.hs
index 5384dba..3bbbf3f 100644
--- a/src/Graphics/Fountainhead/Dumper.hs
+++ b/src/Graphics/Fountainhead/Dumper.hs
@@ -29,7 +29,7 @@ module Graphics.Fountainhead.Dumper
import Data.ByteString (ByteString)
import qualified Data.ByteString as ByteString
import qualified Data.ByteString.Char8 as Char8
-import Data.Int (Int64)
+import Data.Int (Int64, Int16)
import Data.Word (Word8, Word16, Word32)
import qualified Data.IntMap as IntMap
import qualified Data.Text as Text
@@ -71,8 +71,10 @@ import Graphics.Fountainhead.TrueType
, Os2MicrosoftFields(..)
, Os2Version1Fields(..)
, Os2Version4Fields(..)
+ , Os2Version5Fields(..)
, Os2Table(..)
, Panose(..)
+ , CVTable(..)
)
import qualified Text.Megaparsec as Megaparsec
import Graphics.Fountainhead.Parser
@@ -86,7 +88,7 @@ import Graphics.Fountainhead.Parser
, maxpTableP
, nameTableP
, os2TableP
- , postTableP
+ , postTableP, cvTableP
)
import Graphics.Fountainhead.Type (Fixed32(..), ttfEpoch)
import Data.Foldable (Foldable(..), find)
@@ -249,6 +251,17 @@ longDateTime localTime = Text.Builder.fromLazyText
$ (truncate :: NominalDiffTime -> Int)
$ diffLocalTime localTime (LocalTime ttfEpoch midnight)
+dumpCVTable :: CVTable -> Text.Builder.Builder
+dumpCVTable (CVTable cvTable) = dumpCaption "'cvt ' Table - Control Value Table"
+ <> "Size = " <> Text.Builder.decimal (tableSize * 2)
+ <> " bytes, " <> Text.Builder.decimal tableSize <> " entries\n"
+ <> foldMap (uncurry go) (zip [0..] cvTable)
+ where
+ tableSize = Prelude.length cvTable
+ go :: Int -> Int16 -> Text.Builder.Builder
+ go index' entry = justifyNumber 13 index' <> ". "
+ <> Text.Builder.decimal entry <> newlineBuilder
+
dumpOs2 :: Os2Table -> Text.Builder.Builder
dumpOs2 = (dumpCaption "'OS/2' Table - OS/2 and Windows Metrics" <>) . go
where
@@ -263,13 +276,29 @@ dumpOs2 = (dumpCaption "'OS/2' Table - OS/2 and Windows Metrics" <>) . go
<> dumpMicrosoftFields msFields <> dumpVersion4Fields extraFields
Os2Version4 baseFields msFields extraFields -> dumpBaseFields baseFields
<> dumpMicrosoftFields msFields <> dumpVersion4Fields extraFields
- Os2Version5 baseFields msFields _ -> dumpBaseFields baseFields
- <> dumpMicrosoftFields msFields
+ Os2Version5 baseFields msFields extraFields -> dumpBaseFields baseFields
+ <> dumpMicrosoftFields msFields <> dumpVersion5Fields extraFields
dumpVersion1Fields Os2Version1Fields{..}
= " CodePage Range 1( Bits 0 - 31 ): " <> paddedHexadecimal ulCodePageRange1 <> newlineBuilder
<> " CodePage Range 2( Bits 32- 63 ): " <> paddedHexadecimal ulCodePageRange2 <> newlineBuilder
dumpVersion4Fields Os2Version4Fields{..}
= dumpVersion1Fields (Os2Version1Fields ulCodePageRange1 ulCodePageRange2)
+ <> " sxHeight: " <> Text.Builder.decimal sxHeight <> newlineBuilder
+ <> " sCapHeight: " <> Text.Builder.decimal sCapHeight <> newlineBuilder
+ <> " usDefaultChar: 0x" <> halfPaddedHexadecimal usDefaultChar <> newlineBuilder
+ <> " usBreakChar: 0x" <> halfPaddedHexadecimal usBreakChar <> newlineBuilder
+ <> " usMaxContext: " <> Text.Builder.decimal usMaxContext <> newlineBuilder
+ dumpVersion5Fields Os2Version5Fields{..}
+ = dumpVersion1Fields (Os2Version1Fields ulCodePageRange1 ulCodePageRange2)
+ <> " sxHeight: " <> Text.Builder.decimal sxHeight <> newlineBuilder
+ <> " sCapHeight: " <> Text.Builder.decimal sCapHeight <> newlineBuilder
+ <> " usDefaultChar: 0x" <> halfPaddedHexadecimal usDefaultChar <> newlineBuilder
+ <> " usBreakChar: 0x" <> halfPaddedHexadecimal usBreakChar <> newlineBuilder
+ <> " usMaxContext: " <> Text.Builder.decimal usMaxContext <> newlineBuilder
+ <> " usLowerOpticalPointSize: "
+ <> Text.Builder.decimal usLowerOpticalPointSize <> newlineBuilder
+ <> " usUpperOpticalPointSize: "
+ <> Text.Builder.decimal usUpperOpticalPointSize <> newlineBuilder
dumpMicrosoftFields Os2MicrosoftFields{..}
= " sTypoAscender: " <> Text.Builder.decimal sTypoAscender <> newlineBuilder
<> " sTypoDescender: " <> Text.Builder.decimal sTypoDescender <> newlineBuilder
@@ -625,6 +654,7 @@ dumpTables processedState directory@FontDirectory{..}
"name" -> Just $ dumpName <$> parseTable tableEntry nameTableP processedState
"post" -> Just $ dumpPost <$> parseTable tableEntry postTableP processedState
"OS/2" -> Just $ dumpOs2 <$> parseTable tableEntry os2TableP processedState
+ "cvt " -> Just $ dumpCVTable <$> parseTable tableEntry cvTableP processedState
_ -> Nothing
dumpTrueType :: ByteString -> FilePath -> Either DumpError Text.Builder.Builder