mutational propaganda

main
Matthew Butterick 7 years ago
parent e84037e0b2
commit bf36013ef3

@ -15,7 +15,7 @@
(define-subclass object% (DefaultShaper) (define-subclass object% (DefaultShaper)
(define/public (plan plan_ glyphs features) (define/public (plan plan_ glyphs features)
(report*/file plan_ glyphs features) #;(report*/file plan_ glyphs features)
;; Plan the features we want to apply ;; Plan the features we want to apply
(planPreprocessing plan_) (planPreprocessing plan_)
(planFeatures plan_) (planFeatures plan_)

@ -236,7 +236,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/TTFFont.js
((string?) ((option/c (listof symbol?)) (option/c symbol?) (option/c symbol?)) . ->*m . GlyphRun?) ((string?) ((option/c (listof symbol?)) (option/c symbol?) (option/c symbol?)) . ->*m . GlyphRun?)
(unless (· this _layoutEngine) (unless (· this _layoutEngine)
(set-field! _layoutEngine this (+LayoutEngine this))) (set-field! _layoutEngine this (+LayoutEngine this)))
(report*/file 'in-layout (· this _layoutEngine)) #;(report*/file 'in-layout (· this _layoutEngine))
(send (· this _layoutEngine) layout string userFeatures script language)) (send (· this _layoutEngine) layout string userFeatures script language))

@ -67,6 +67,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/GlyphIterator.js
(check-equal? (send gi move 1) 'b) (check-equal? (send gi move 1) 'b)
(check-equal? (send gi move 1) 'c) (check-equal? (send gi move 1) 'c)
(check-false (send gi move 1)) (check-false (send gi move 1))
(check-false (send gi cur))
(check-equal? (send gi increment -3) 'a) (check-equal? (send gi increment -3) 'a)
(check-equal? (send gi cur) 'a) (check-equal? (send gi cur) 'a)
(check-equal? (send gi peek 1) 'b) (check-equal? (send gi peek 1) 'b)

@ -32,8 +32,8 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/GlyphInfo.js
(define/public (id [id-in #f]) (define/public (id [id-in #f])
(cond (cond
[(not id-in) _id] [(not id-in) _id]
[else (set! _id id-in) [else (set-field! _id this id-in)
(set! substituted #t) (set-field! substituted this #t)
(cond (cond
[(and (· this _font GDEF) (· this _font GDEF glyphClassDef)) [(and (· this _font GDEF) (· this _font GDEF glyphClassDef))

@ -10,7 +10,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/GSUBProcessor.js
(define-subclass OTProcessor (GSUBProcessor) (define-subclass OTProcessor (GSUBProcessor)
(define/override (applyLookup lookupType table) (define/override (applyLookup lookupType table)
(report* 'GSUBProcessor:applyLookup lookupType) (report lookupType 'GSUBProcessor:applyLookup)
(case lookupType (case lookupType
[(1) ;; Single Substitution [(1) ;; Single Substitution
(report 'single-substitution) (report 'single-substitution)
@ -18,7 +18,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/GSUBProcessor.js
(cond (cond
[(= index -1) #f] [(= index -1) #f]
[else (define glyph (· this glyphIterator cur)) [else (define glyph (· this glyphIterator cur))
(set-field! id glyph (send glyph id
(case (· table version) (case (· table version)
[(1) (bitwise-and (+ (· glyph id) (· table deltaGlyphID)) #xffff)] [(1) (bitwise-and (+ (· glyph id) (· table deltaGlyphID)) #xffff)]
[(2) (send (· table substitute) get index)])) [(2) (send (· table substitute) get index)]))
@ -29,7 +29,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/GSUBProcessor.js
(cond (cond
[(= index -1) #f] [(= index -1) #f]
[else (define sequence (send (· table sequences) get index)) [else (define sequence (send (· table sequences) get index))
(set-field! id (· this glyphIterator cur) (list-ref sequence 0)) (send (· this glyphIterator cur) id (list-ref sequence 0))
(set-field! ligatureComponent (· this glyphIterator cur) 0) (set-field! ligatureComponent (· this glyphIterator cur) 0)
(define features (· this glyphIterator cur features)) (define features (· this glyphIterator cur features))
@ -52,7 +52,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/GSUBProcessor.js
(cond (cond
[(= index -1) #f] [(= index -1) #f]
[else (define USER_INDEX 0) [else (define USER_INDEX 0)
(set-field! id (· this glyphIterator cur) (list-ref (send (· table alternateSet) get index) USER_INDEX)) (send (· this glyphIterator cur) id (list-ref (send (· table alternateSet) get index) USER_INDEX))
#t])] #t])]
[(4) ;; Ligature substitution [(4) ;; Ligature substitution
@ -151,8 +151,11 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/GSUBProcessor.js
(set-field! ligatureComponent (list-ref (· this glyphs) i) ligatureComponent))) (set-field! ligatureComponent (list-ref (· this glyphs) i) ligatureComponent)))
;; Delete the matched glyphs, and replace the current glyph with the ligature glyph ;; Delete the matched glyphs, and replace the current glyph with the ligature glyph
(report* (for/list ([g (· this glyphs)]) (· g id)) (· this glyphIterator index))
(set-field! glyphs this (drop-right (· this glyphs) (length matched))) (set-field! glyphs this (drop-right (· this glyphs) (length matched)))
(set-field! glyphs this (list-set (· this glyphs) (· this glyphIterator index) ligatureGlyph)) (set-field! glyphs this (list-set (· this glyphs) (· this glyphIterator index) ligatureGlyph))
(set-field! glyphs (· this glyphIterator) (· this glyphs))
(report* (for/list ([g (· this glyphs)]) (· g id)) (· this glyphIterator index))
#t)] #t)]
[else #f])]))) [else #f])])))

@ -18,7 +18,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/layout/LayoutEngine.js
(cond (cond
[(· this font has-morx-table?) (error 'morx-layout-unimplemented)] [(· this font has-morx-table?) (error 'morx-layout-unimplemented)]
[(or (· this font has-gsub-table?) (· this font has-gpos-table?)) [(or (· this font has-gsub-table?) (· this font has-gpos-table?))
(report/file 'starting-layout-engine) #;(report/file 'starting-layout-engine)
(+OTLayoutEngine (· this font))] (+OTLayoutEngine (· this font))]
[else #f])]) [else #f])])
@ -43,7 +43,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/layout/LayoutEngine.js
(send (· this font) glyphsForString str-or-glyphs) (send (· this font) glyphsForString str-or-glyphs)
str-or-glyphs)) str-or-glyphs))
(report*/file 'starting-layout-in-layout-engine glyphs) #;(report*/file 'starting-layout-in-layout-engine glyphs)
(cond (cond
[(empty? glyphs) (+GlyphRun glyphs empty)] ; Return early if there are no glyphs [(empty? glyphs) (+GlyphRun glyphs empty)] ; Return early if there are no glyphs
[else [else
@ -53,6 +53,8 @@ https://github.com/mbutterick/fontkit/blob/master/src/layout/LayoutEngine.js
;; Substitute and position the glyphs ;; Substitute and position the glyphs
(set! glyphs (send this substitute glyphs features script language)) (set! glyphs (send this substitute glyphs features script language))
(report/file 'end-sub)
(error 'stop)
(report/file 'ready-position) (report/file 'ready-position)
(define positions (send this position glyphs features script language)) (define positions (send this position glyphs features script language))
(report/file 'fired-position) (report/file 'fired-position)

@ -13,7 +13,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/OTLayoutEngine.js
[GSUBProcessor #f] [GSUBProcessor #f]
[GPOSProcessor #f]) [GPOSProcessor #f])
(report/file 'starting-ot-layout-engine) #;(report/file 'starting-ot-layout-engine)
(when (· font has-gsub-table?) (when (· font has-gsub-table?)
(set-field! GSUBProcessor this (+GSUBProcessor font (or (· font GSUB) (error 'no-gsub-table))))) (set-field! GSUBProcessor this (+GSUBProcessor font (or (· font GSUB) (error 'no-gsub-table)))))
@ -31,7 +31,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/OTLayoutEngine.js
;; This determines which features to apply to which glyphs. ;; This determines which features to apply to which glyphs.
(set! shaper (Shapers-choose script)) (set! shaper (Shapers-choose script))
(set! plan (+ShapingPlan (· this font) script language)) (set! plan (+ShapingPlan (· this font) script language))
(report/file shaper) #;(report/file shaper)
(send (make-object shaper) plan (· this plan) (· this glyphInfos) features)) (send (make-object shaper) plan (· this plan) (· this glyphInfos) features))
(define/public (substitute glyphs . _) (define/public (substitute glyphs . _)

@ -74,23 +74,23 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/OTProcessor.js
(define/public (lookupsForFeatures [userFeatures empty] [exclude #f]) (define/public (lookupsForFeatures [userFeatures empty] [exclude #f])
(report*/file 'ot-proc:lookupsForFeatures) #;(report*/file 'ot-proc:lookupsForFeatures)
(sort (for*/list ([tag (in-list userFeatures)] (sort (for*/list ([tag (in-list userFeatures)]
[feature (in-value (dict-ref (report/file (· this features)) tag #f))] [feature (in-value (dict-ref (· this features) tag #f))]
#:when feature #:when feature
[lookupIndex (in-list (· feature lookupListIndexes))] [lookupIndex (in-list (· feature lookupListIndexes))]
#:unless (and exclude (index-of exclude lookupIndex))) #:unless (and exclude (index-of exclude lookupIndex)))
(report*/file tag lookupIndex) #;(report*/file tag lookupIndex)
(mhasheq 'feature tag (mhasheq 'feature tag
'index lookupIndex 'index lookupIndex
'lookup (send (· this table lookupList) get lookupIndex))) 'lookup (send (· this table lookupList) get lookupIndex)))
< #:key (λ (i) (report*/file (· i index))))) < #:key (λ (i) (· i index))))
(define/public (applyFeatures userFeatures glyphs advances) (define/public (applyFeatures userFeatures glyphs advances)
(report/file 'ot-proc:applyFeatures-part1) #;(report/file 'ot-proc:applyFeatures-part1)
(define lookups (send this lookupsForFeatures userFeatures)) (define lookups (send this lookupsForFeatures userFeatures))
(report/file 'ot-proc:applyFeatures-part2) #;(report/file 'ot-proc:applyFeatures-part2)
(report (length lookups)) (report (length lookups))
(send this applyLookups lookups glyphs advances)) (send this applyLookups lookups glyphs advances))
@ -98,17 +98,33 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/OTProcessor.js
(define/public (applyLookups lookups glyphs positions) (define/public (applyLookups lookups glyphs positions)
(set-field! glyphs this glyphs) (set-field! glyphs this glyphs)
(set-field! positions this positions) (set-field! positions this positions)
(report/file 'ot-proc:applyLookups) #;(report/file 'ot-proc:applyLookups)
(report (for/list ([g glyphs]) (· g id)))
(set-field! glyphIterator this (+GlyphIterator glyphs)) (set-field! glyphIterator this (+GlyphIterator glyphs))
(for* ([lookup-entry (in-list lookups)]) (for* ([lookup-entry (in-list lookups)])
(define feature (dict-ref lookup-entry 'feature)) (define feature (· lookup-entry feature))
(define lookup (dict-ref lookup-entry 'lookup)) (define lookup (· lookup-entry lookup))
(report 'resetting-iterator)
(send (· this glyphIterator) reset (· lookup flags)) (send (· this glyphIterator) reset (· lookup flags))
(while (< (· this glyphIterator index) (length glyphs))
(when (dict-has-key? (· this glyphIterator cur features) feature) (while (< (or (· this glyphIterator index) 0) (length (· this glyphs)))
(report (length (· this glyphs)) 'glyphs-length-top)
(report (for/list ([g (· this glyphs)]) (· g id)) 'gids-top)
(report (· this glyphIterator index) giterator-idx-top)
(report* feature (· this glyphIterator cur id) (· this glyphIterator cur features))
(report (dict-has-key? (· this glyphIterator cur features) feature))
(cond
[(not (dict-has-key? (· this glyphIterator cur features) feature))
(send (· this glyphIterator) next)]
[else
(report/file '=================)
(report* (for/list ([g (· this glyphs)]) (· g id)) (for/list ([g (· this glyphIterator glyphs)]) (· g id)) (for/list ([g glyphs]) (· g id)) (· this glyphIterator index) (· this glyphIterator cur id) (· this glyphIterator peekIndex))
(for/or ([table (in-list (· lookup subTables))]) (for/or ([table (in-list (· lookup subTables))])
(send this applyLookup (· lookup lookupType) table))) (send this applyLookup (· lookup lookupType) table))
(send (· this glyphIterator) next)))) (report 'incrementing-iterator-at-bottom)
(send (· this glyphIterator) next)
(report* (· this glyphIterator cur) (· this glyphIterator index))]))))
(abstract applyLookup) (abstract applyLookup)
@ -117,8 +133,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/OTProcessor.js
(error)) (error))
(define/public (coverageIndex coverage [glyph #f]) (define/public (coverageIndex coverage [glyph #f])
(unless glyph (unless glyph (set! glyph (· this glyphIterator cur id)))
(set! glyph (· this glyphIterator cur id)))
(or (case (· coverage version) (or (case (· coverage version)
[(1) (index-of (· coverage glyphs) glyph)] [(1) (index-of (· coverage glyphs) glyph)]
[(2) (for/first ([range (in-list (· coverage rangeRecords))] [(2) (for/first ([range (in-list (· coverage rangeRecords))]

@ -22,7 +22,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/ShapingPlan.js
;; Adds the given features to the last stage. ;; Adds the given features to the last stage.
;; Ignores features that have already been applied. ;; Ignores features that have already been applied.
(define/public (_addFeatures features) (define/public (_addFeatures features)
(report*/file 'stages-before stages) #;(report*/file 'stages-before stages)
(match-define (list head-stages ... last-stage) stages) (match-define (list head-stages ... last-stage) stages)
(set! stages (set! stages
`(,@head-stages `(,@head-stages
@ -31,7 +31,8 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/ShapingPlan.js
#:unless (dict-ref (· this allFeatures) feature #f)) #:unless (dict-ref (· this allFeatures) feature #f))
(dict-set! (· this allFeatures) feature #t) (dict-set! (· this allFeatures) feature #t)
feature)))) feature))))
(report*/file 'stages-after stages)) #;(report*/file 'stages-after stages)
stages)
;; Adds the given features to the global list ;; Adds the given features to the global list
(define/public (_addGlobal features) (define/public (_addGlobal features)
@ -69,23 +70,23 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/ShapingPlan.js
;; Assigns the global features to the given glyphs ;; Assigns the global features to the given glyphs
(define/public (assignGlobalFeatures glyphs) (define/public (assignGlobalFeatures glyphs)
(report*/file glyphs (· this globalFeatures)) #;(report*/file glyphs (· this globalFeatures))
(for* ([glyph (in-list glyphs)] (for* ([glyph (in-list glyphs)]
[feature (in-dict-keys (· this globalFeatures))]) [feature (in-dict-keys (· this globalFeatures))])
(dict-set! (· glyph features) feature #t))) (dict-set! (· glyph features) feature #t)))
;; Executes the planned stages using the given OTProcessor ;; Executes the planned stages using the given OTProcessor
(define/public (process processor glyphs [positions #f]) (define/public (process processor glyphs [positions #f])
(report*/file 'shaping-plan-process processor) #;(report*/file 'shaping-plan-process processor)
(send processor selectScript (· this script) (· this language)) (send processor selectScript (· this script) (· this language))
(report/file stages) #;(report/file stages)
(for ([stage (in-list stages)]) (for ([stage (in-list stages)])
(cond (cond
[(and (procedure? stage) (not positions)) [(and (procedure? stage) (not positions))
(stage (· this font) glyphs positions)] (stage (· this font) glyphs positions)]
[(> (length stage) 0) [(> (length stage) 0)
(report*/file 'shaping-plan:applying-features processor) #;(report*/file 'shaping-plan:applying-features processor)
(send processor applyFeatures stage glyphs positions)])))) (send processor applyFeatures stage glyphs positions)]))))

@ -7273,6 +7273,7 @@ var OTProcessor = function () {
this.glyphs = glyphs; this.glyphs = glyphs;
this.positions = positions; this.positions = positions;
this.glyphIterator = new GlyphIterator(glyphs); this.glyphIterator = new GlyphIterator(glyphs);
console.log("glyph ids =" + glyphs.map(function(o) { return o.id;}))
for (var _iterator8 = lookups, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _getIterator(_iterator8);;) { for (var _iterator8 = lookups, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _getIterator(_iterator8);;) {
var _ref8; var _ref8;
@ -7290,14 +7291,29 @@ var OTProcessor = function () {
feature = _ref9.feature, feature = _ref9.feature,
lookup = _ref9.lookup; lookup = _ref9.lookup;
console.log("resetting iterator");
this.glyphIterator.reset(lookup.flags); this.glyphIterator.reset(lookup.flags);
while (this.glyphIterator.index < glyphs.length) { while (this.glyphIterator.index < glyphs.length) {
console.log("glyphs.length at top = " + glyphs.length);
console.log("glyph ids at top =" + glyphs.map(function(o) { return o.id;}))
console.log("this.glyphIterator.index at top = " + this.glyphIterator.index);
console.log("feature = " + feature);
console.log("this.glyphIterator.cur.id = " + this.glyphIterator.cur.id);
console.log("(feature in this.glyphIterator.cur.features) = " + (feature in this.glyphIterator.cur.features))
if (!(feature in this.glyphIterator.cur.features)) { if (!(feature in this.glyphIterator.cur.features)) {
this.glyphIterator.next(); this.glyphIterator.next();
continue; continue;
} }
console.log("==================================");
console.log("glyph ids =" + glyphs.map(function(o) { return o.id;}))
console.log("this.glyph ids =" + this.glyphs.map(function(o) { return o.id;}))
console.log("glyphIterator.glyph ids =" + this.glyphIterator.glyphs.map(function(o) { return o.id;}))
console.log("this.glyphIterator.index = " + this.glyphIterator.index);
console.log("this.glyphIterator.cur.id = " + this.glyphIterator.cur.id);
console.log("this.glyphIterator.peekIndex() = " + this.glyphIterator.peekIndex());
for (var _iterator9 = lookup.subTables, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _getIterator(_iterator9);;) { for (var _iterator9 = lookup.subTables, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _getIterator(_iterator9);;) {
var _ref10; var _ref10;
@ -7318,7 +7334,10 @@ var OTProcessor = function () {
} }
} }
console.log("incrementing iterator at bottom");
this.glyphIterator.next(); this.glyphIterator.next();
console.log("this.glyphIterator.cur = bottom = " + this.glyphIterator.cur);
console.log("this.glyphIterator.index = bottom = " + this.glyphIterator.index);
} }
} }
}; };
@ -8608,11 +8627,16 @@ var GSUBProcessor = function (_OTProcessor) {
} }
// Delete the matched glyphs, and replace the current glyph with the ligature glyph // Delete the matched glyphs, and replace the current glyph with the ligature glyph
console.log("glyph ids before =" + this.glyphs.map(function(o) { return o.id;}))
console.log("this.glyphIterator.index = " + this.glyphIterator.index)
for (var _i5 = matched.length - 1; _i5 >= 0; _i5--) { for (var _i5 = matched.length - 1; _i5 >= 0; _i5--) {
this.glyphs.splice(matched[_i5], 1); this.glyphs.splice(matched[_i5], 1);
} }
this.glyphs[this.glyphIterator.index] = ligatureGlyph; this.glyphs[this.glyphIterator.index] = ligatureGlyph;
console.log("glyph ids after =" + this.glyphs.map(function(o) { return o.id;}))
console.log("this.glyphIterator.index = " + this.glyphIterator.index)
return true; return true;
} }

@ -43,7 +43,7 @@ https://github.com/mbutterick/pdfkit/blob/master/lib/font/embedded.coffee
(define/contract (encode this text [features #f]) (define/contract (encode this text [features #f])
((string?) ((option/c list?)) . ->*m . ((string?) ((option/c list?)) . ->*m .
(list/c (listof string?) (listof GlyphPosition?))) (list/c (listof string?) (listof GlyphPosition?)))
(report*/file 'starting-layout-in-embedded (description (· this font))) #;(report*/file 'starting-layout-in-embedded (description (· this font)))
(define glyphRun (send (· this font) layout text features)) (define glyphRun (send (· this font) layout text features))
(define glyphs (· glyphRun glyphs)) (define glyphs (· glyphRun glyphs))
(for ([g (in-list glyphs)]) (for ([g (in-list glyphs)])

Binary file not shown.

@ -0,0 +1,201 @@
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 450
forker = 0
table.ligatureSets.get(_index3) = [object Object],[object Object]
starting index = 0
ligature.components = 480
in match loop
idx = 0
glyph.id = 480
matched = 1
index = 1
characters = 102,105
ligatureGlyph.id = 731
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 450
forker = 0
table.ligatureSets.get(_index3) = [object Object],[object Object]
starting index = 0
ligature.components = 480
matched = false
starting index = 0
ligature.components = 514
in match loop
idx = 0
glyph.id = 514
matched = 2
index = 2
characters = 102,108
ligatureGlyph.id = 732
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 373,393,450,532,538,598,609,616,625,640,718,2127
forker = -1
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 373,393,450,532,538,598,609,616,625,640,718,2127
forker = -1
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 450
forker = 0
table.ligatureSets.get(_index3) = [object Object],[object Object]
starting index = 0
ligature.components = 480
in match loop
idx = 0
glyph.id = 480
matched = 1
index = 1
characters = 102,105
ligatureGlyph.id = 731
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 450
forker = 0
table.ligatureSets.get(_index3) = [object Object],[object Object]
starting index = 0
ligature.components = 480
matched = false
starting index = 0
ligature.components = 514
in match loop
idx = 0
glyph.id = 514
matched = 2
index = 2
characters = 102,108
ligatureGlyph.id = 732
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 373,393,450,532,538,598,609,616,625,640,718,2127
forker = -1
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 373,393,450,532,538,598,609,616,625,640,718,2127
forker = -1
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 450
forker = 0
table.ligatureSets.get(_index3) = [object Object],[object Object]
starting index = 0
ligature.components = 480
in match loop
idx = 0
glyph.id = 480
matched = 1
index = 1
characters = 102,105
ligatureGlyph.id = 731
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 450
forker = 0
table.ligatureSets.get(_index3) = [object Object],[object Object]
starting index = 0
ligature.components = 480
matched = false
starting index = 0
ligature.components = 514
in match loop
idx = 0
glyph.id = 514
matched = 2
index = 2
characters = 102,108
ligatureGlyph.id = 732
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 373,393,450,532,538,598,609,616,625,640,718,2127
forker = -1
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 373,393,450,532,538,598,609,616,625,640,718,2127
forker = -1
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6

@ -0,0 +1,201 @@
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 450
forker = 0
table.ligatureSets.get(_index3) = [object Object],[object Object]
starting index = 0
ligature.components = 480
in match loop
idx = 0
glyph.id = 480
matched = 1
index = 1
characters = 102,105
ligatureGlyph.id = 731
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 450
forker = 0
table.ligatureSets.get(_index3) = [object Object],[object Object]
starting index = 0
ligature.components = 480
matched = false
starting index = 0
ligature.components = 514
in match loop
idx = 0
glyph.id = 514
matched = 2
index = 2
characters = 102,108
ligatureGlyph.id = 732
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 373,393,450,532,538,598,609,616,625,640,718,2127
forker = -1
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 373,393,450,532,538,598,609,616,625,640,718,2127
forker = -1
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 450
forker = 0
table.ligatureSets.get(_index3) = [object Object],[object Object]
starting index = 0
ligature.components = 480
in match loop
idx = 0
glyph.id = 480
matched = 1
index = 1
characters = 102,105
ligatureGlyph.id = 731
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 450
forker = 0
table.ligatureSets.get(_index3) = [object Object],[object Object]
starting index = 0
ligature.components = 480
matched = false
starting index = 0
ligature.components = 514
in match loop
idx = 0
glyph.id = 514
matched = 2
index = 2
characters = 102,108
ligatureGlyph.id = 732
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 373,393,450,532,538,598,609,616,625,640,718,2127
forker = -1
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 373,393,450,532,538,598,609,616,625,640,718,2127
forker = -1
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 450
forker = 0
table.ligatureSets.get(_index3) = [object Object],[object Object]
starting index = 0
ligature.components = 480
in match loop
idx = 0
glyph.id = 480
matched = 1
index = 1
characters = 102,105
ligatureGlyph.id = 731
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 450
forker = 0
table.ligatureSets.get(_index3) = [object Object],[object Object]
starting index = 0
ligature.components = 480
matched = false
starting index = 0
ligature.components = 514
in match loop
idx = 0
glyph.id = 514
matched = 2
index = 2
characters = 102,108
ligatureGlyph.id = 732
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 373,393,450,532,538,598,609,616,625,640,718,2127
forker = -1
'GSUBProcessor:applyLookup 4
----------------------------
start ligature-substitution
lookupType = 4
table.coverage.glyphs = 373,393,450,532,538,598,609,616,625,640,718,2127
forker = -1
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6
'GSUBProcessor:applyLookup 6

@ -9,7 +9,7 @@ make = (doc) ->
# Set the font, draw some text # Set the font, draw some text
doc.font('the-font') doc.font('the-font')
.fontSize(100) .fontSize(100)
.text('fifl', 100, 100, {width: false}) .text('fi', 100, 100, {width: false})
doc.end() doc.end()

Binary file not shown.

@ -12,7 +12,7 @@
(send* doc (send* doc
[font "the-font"] [font "the-font"]
[fontSize 100] [fontSize 100]
[text "fifl" 100 100 (hash 'width #f)])) [text "fi" 100 100 (hash 'width #f)]))
(define-runtime-path this "test16rkt.pdf") (define-runtime-path this "test16rkt.pdf")

Loading…
Cancel
Save