ref: d1b0478470d6cffc5c89a457ae357adab199b37c
parent: df052be4b98c368684f1c26b206a5a80c67eaf03
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Sun Jun 16 21:48:56 EDT 2024
add more types
--- a/otf.rkt
+++ b/otf.rkt
@@ -13,7 +13,7 @@
(define tagged '()) ; complex types set that also have a defined tag
; types allowed to be used as index
-(define-for-syntax (type-index? type) (member type '(uint16)))
+(define-for-syntax (type-index? type) (member type '(uint16 uint32)))
(define size-in-bits/c
(make-contract #:name 'size-in-bits/c #:first-order (λ (x) (member x '(8 16 24 32 40 48 64)))))
@@ -429,7 +429,7 @@
#:tag "hhea")
(mkcmplx TableMaxp
- (mkfields {Version16Dot16 version (= #x05000 #x10000)}
+ (mkfields {Version16Dot16 version (= #x05000 #x10000) unused}
{uint16 numGlyphs}
; a bunch of fields ignored here
)
@@ -436,7 +436,7 @@
#:tag "maxp")
(mkcmplx TablePost
- (mkfields {Version16Dot16 version (= #x10000 #x20000 #x25000 #x30000)}
+ (mkfields {Version16Dot16 version (= #x10000 #x20000 #x25000 #x30000) unused}
{Fixed italicAngle}
{FWORD underlinePosition}
{FWORD underlineThickness}
@@ -444,6 +444,53 @@
; a bunch of fields ignored here
)
#:tag "post")
+
+(mkcmplx BigGlyphMetrics
+ (mkfields {uint8 height}
+ {uint8 width}
+ {int8 horiBearingX}
+ {int8 horiBearingY}
+ {uint8 horiAdvance}
+ {int8 vertBearingX}
+ {int8 vertBearingY}
+ {uint8 vertAdvance}))
+
+(mkcmplx SmallGlyphMetrics
+ (mkfields {uint8 height} {uint8 width} {int8 bearingX} {int8 bearingY} {uint8 advance}))
+
+(mkcmplx SbitLineMetrics
+ (mkfields {int8 ascender}
+ {int8 descender}
+ {uint8 widthMax}
+ {int8 caretSlopeNumerator}
+ {int8 caretSlopeDenumerator}
+ {int8 caretOffset}
+ {int8 minOriginSB}
+ {int8 minAdvanceSB}
+ {int8 maxBeforeBL}
+ {int8 minAfterBL}
+ {int8 pad [2] unused}))
+
+(mkcmplx BitmapSize
+ (mkfields {Offset32 indexSubtableListOffset}
+ {uint32 indexSubtableListSize}
+ {uint32 numberOfIndexSubtables}
+ {uint32 colorRef unused}
+ {SbitLineMetrics hori}
+ {SbitLineMetrics vert}
+ {uint16 startGlyphIndex}
+ {uint16 endGlyphIndex}
+ {uint8 ppemX}
+ {uint8 ppemY}
+ {uint8 bitDepth}
+ {int8 flags}))
+
+(mkcmplx TableEBLC
+ (mkfields {uint16 majorVersion (= 2) unused}
+ {uint16 minorVersion (= 0) unused}
+ {uint32 numSizes}
+ {BitmapSize bitmapSizes (count numSizes)})
+ #:tag "EBLC")
(mkcmplx TableOS∕2
(mkfields {uint16 version (<= 5)}