From 0765d3e9cd0a072db6205096b508a9bcea6b2ab0 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Fri, 9 Jun 2017 11:50:02 -0700 Subject: [PATCH] tuning --- pitfall/pitfall/bbox.rkt | 1 - pitfall/pitfall/directory.rkt | 75 +++++++++++++++++++--------- pitfall/pitfall/embedded.rkt | 1 - pitfall/pitfall/glyph.rkt | 3 -- pitfall/pitfall/glyphrun.rkt | 1 - pitfall/pitfall/layout-engine.rkt | 1 - pitfall/pitfall/subset.rkt | 5 +- pitfall/pitfall/test/test12rkt.pdf | Bin 44184 -> 0 bytes pitfall/pitfall/ttfglyphencoder.rkt | 2 - pitfall/restructure/helper.rkt | 2 + pitfall/restructure/struct.rkt | 3 +- 11 files changed, 56 insertions(+), 38 deletions(-) diff --git a/pitfall/pitfall/bbox.rkt b/pitfall/pitfall/bbox.rkt index 6a398521..2f040183 100644 --- a/pitfall/pitfall/bbox.rkt +++ b/pitfall/pitfall/bbox.rkt @@ -10,7 +10,6 @@ [maxX -inf.0] ; The maxmimum Y position in the bounding box [maxY -inf.0]) - (super-new) (as-methods width diff --git a/pitfall/pitfall/directory.rkt b/pitfall/pitfall/directory.rkt index 339f1f5f..f9212938 100644 --- a/pitfall/pitfall/directory.rkt +++ b/pitfall/pitfall/directory.rkt @@ -14,8 +14,11 @@ https://github.com/mbutterick/fontkit/blob/master/src/tables/directory.js 'length uint32be))) (define-subclass RStruct (RDirectory) - (define/public (process) - 'boom)) + (define/override (process res stream) + (define new-tables-val (mhash)) + (for ([table (in-list (· res tables))]) + (hash-set! new-tables-val (· table tag) table)) + (hash-set! res 'tables new-tables-val))) (define Directory (make-object RDirectory (dictify 'tag (make-object RString 4) @@ -30,28 +33,52 @@ https://github.com/mbutterick/fontkit/blob/master/src/tables/directory.js (send Directory decode is)) (module+ test - (require rackunit) + (require rackunit racket/serialize) (define ip (open-input-file "test/assets/Charter.ttf")) (check-equal? (directory-decode ip) - (make-hasheq - (list (cons 'tables - (list (make-hasheq '((length . 96) (checkSum . 2351070438) (offset . 360) (tag . "OS/2"))) - (make-hasheq '((length . 1504) (checkSum . 1887795202) (offset . 1372) (tag . "VDMX"))) - (make-hasheq '((length . 1262) (checkSum . 1723761408) (offset . 2876) (tag . "cmap"))) - (make-hasheq '((length . 26) (checkSum . 10290865) (offset . 4592) (tag . "cvt "))) - (make-hasheq '((length . 371) (checkSum . 106535991) (offset . 4140) (tag . "fpgm"))) - (make-hasheq '((length . 34072) (checkSum . 1143629849) (offset . 4620) (tag . "glyf"))) - (make-hasheq '((length . 54) (checkSum . 4281190895) (offset . 236) (tag . "head"))) - (make-hasheq '((length . 36) (checkSum . 132056097) (offset . 292) (tag . "hhea"))) - (make-hasheq '((length . 916) (checkSum . 3982043058) (offset . 456) (tag . "hmtx"))) - (make-hasheq '((length . 460) (checkSum . 2795817194) (offset . 38692) (tag . "loca"))) - (make-hasheq '((length . 32) (checkSum . 50135594) (offset . 328) (tag . "maxp"))) - (make-hasheq '((length . 2367) (checkSum . 2629707307) (offset . 39152) (tag . "name"))) - (make-hasheq '((length . 514) (checkSum . 1670855689) (offset . 41520) (tag . "post"))) - (make-hasheq '((length . 78) (checkSum . 490862356) (offset . 4512) (tag . "prep"))))) - (cons 'entrySelector 3) - (cons 'numTables 14) - (cons 'searchRange 128) - (cons 'rangeShift 96) - (cons 'tag "\u0000\u0001\u0000\u0000"))))) \ No newline at end of file + (deserialize '((3) + 0 + () + 14 + ((u . "head") + (u . "prep") + (u . "fpgm") + (u . "hmtx") + (u . "hhea") + (u . "maxp") + (u . "VDMX") + (u . "loca") + (u . "name") + (u . "cvt ") + (u . "OS/2") + (u . "post") + (u . "glyf") + (u . "cmap")) + () + (h + ! + () + (tag u . "\u0000\u0001\u0000\u0000") + (rangeShift . 96) + (searchRange . 128) + (numTables . 14) + (entrySelector . 3) + (tables + h + ! + (equal) + ((? . 0) h ! () (tag ? . 0) (offset . 236) (checkSum . 4281190895) (length . 54)) + ((? . 1) h ! () (tag ? . 1) (offset . 4512) (checkSum . 490862356) (length . 78)) + ((? . 2) h ! () (tag ? . 2) (offset . 4140) (checkSum . 106535991) (length . 371)) + ((? . 3) h ! () (tag ? . 3) (offset . 456) (checkSum . 3982043058) (length . 916)) + ((? . 4) h ! () (tag ? . 4) (offset . 292) (checkSum . 132056097) (length . 36)) + ((? . 5) h ! () (tag ? . 5) (offset . 328) (checkSum . 50135594) (length . 32)) + ((? . 6) h ! () (tag ? . 6) (offset . 1372) (checkSum . 1887795202) (length . 1504)) + ((? . 7) h ! () (tag ? . 7) (offset . 38692) (checkSum . 2795817194) (length . 460)) + ((? . 8) h ! () (tag ? . 8) (offset . 39152) (checkSum . 2629707307) (length . 2367)) + ((? . 9) h ! () (tag ? . 9) (offset . 4592) (checkSum . 10290865) (length . 26)) + ((? . 10) h ! () (tag ? . 10) (offset . 360) (checkSum . 2351070438) (length . 96)) + ((? . 11) h ! () (tag ? . 11) (offset . 41520) (checkSum . 1670855689) (length . 514)) + ((? . 12) h ! () (tag ? . 12) (offset . 4620) (checkSum . 1143629849) (length . 34072)) + ((? . 13) h ! () (tag ? . 13) (offset . 2876) (checkSum . 1723761408) (length . 1262)))))))) \ No newline at end of file diff --git a/pitfall/pitfall/embedded.rkt b/pitfall/pitfall/embedded.rkt index f2c9c265..399e9daa 100644 --- a/pitfall/pitfall/embedded.rkt +++ b/pitfall/pitfall/embedded.rkt @@ -3,7 +3,6 @@ (provide EmbeddedFont) (define-subclass PDFFont (EmbeddedFont document font id) - (super-new) (field [subset (· this font createSubset)] ;; we make `unicode` and `width` fields integer-keyed hashes not lists ;; because they offer better random access and growability diff --git a/pitfall/pitfall/glyph.rkt b/pitfall/pitfall/glyph.rkt index 88bf0434..659bf331 100644 --- a/pitfall/pitfall/glyph.rkt +++ b/pitfall/pitfall/glyph.rkt @@ -27,7 +27,6 @@ (check-false (and (is-mark? #x2ee) #t))) (define-subclass object% (Glyph id codePoints font) - (super-new) (field [_font font] [isMark (andmap is-mark? codePoints)] [isLigature (> (length codePoints) 1)] @@ -58,11 +57,9 @@ (define-subclass Glyph (CFFGlyph) - (super-new) (error 'cff-glyph-unimplemented)) (define-subclass Glyph (TTFGlyph) - (super-new) ) \ No newline at end of file diff --git a/pitfall/pitfall/glyphrun.rkt b/pitfall/pitfall/glyphrun.rkt index da1a1467..050adfbc 100644 --- a/pitfall/pitfall/glyphrun.rkt +++ b/pitfall/pitfall/glyphrun.rkt @@ -10,7 +10,6 @@ script ; The script that was requested for shaping. This was either passed in or detected automatically. language) ; The language requested for shaping, as passed in. If `null`, the default language for the script was used. - (super-new) ;; An array of GlyphPosition objects for each glyph in the run (field [positions #f]) diff --git a/pitfall/pitfall/layout-engine.rkt b/pitfall/pitfall/layout-engine.rkt index 9fc56479..bd4540cb 100644 --- a/pitfall/pitfall/layout-engine.rkt +++ b/pitfall/pitfall/layout-engine.rkt @@ -3,7 +3,6 @@ (provide LayoutEngine) (define-subclass object% (LayoutEngine font) - (super-new) (field [unicodeLayoutEngine #f] [kernProcessor #f] [engine diff --git a/pitfall/pitfall/subset.rkt b/pitfall/pitfall/subset.rkt index 6b566f7d..3d7a6ed2 100644 --- a/pitfall/pitfall/subset.rkt +++ b/pitfall/pitfall/subset.rkt @@ -6,7 +6,6 @@ ;; https://github.com/devongovett/fontkit/blob/master/src/subset/Subset.js (define-subclass object% (Subset font) - (super-new) (field [glyphs empty] ; list of glyph ids in the subset [mapping (mhash)] ; mapping of glyph ids to indexes in `glyphs` ) @@ -28,7 +27,6 @@ (define-subclass Subset (CFFSubset) - (super-new) (error 'cff-subset-unimplemented)) @@ -36,7 +34,6 @@ ;; https://github.com/devongovett/fontkit/blob/master/src/subset/TTFSubset.js (define-subclass Subset (TTFSubset) - (super-new) (field [glyphEncoder (make-object TTFGlyphEncoder)]) (field [glyf #f] [offset #f] @@ -68,7 +65,7 @@ (for ([gid (in-list (· this glyphs))]) (send this _addGlyph gid)) - (define maxp (cloneDeep (· this font maxp))) + #;(define maxp (cloneDeep (· this font maxp))) (unfinished) ) diff --git a/pitfall/pitfall/test/test12rkt.pdf b/pitfall/pitfall/test/test12rkt.pdf index d43571b4d91ffd28c1b419fa8fc4c800f2c6aeae..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 GIT binary patch literal 0 HcmV?d00001 literal 44184 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