mutational propaganda

main
Matthew Butterick 7 years ago
parent e84037e0b2
commit bf36013ef3

@ -15,7 +15,7 @@
(define-subclass object% (DefaultShaper)
(define/public (plan plan_ glyphs features)
(report*/file plan_ glyphs features)
#;(report*/file plan_ glyphs features)
;; Plan the features we want to apply
(planPreprocessing 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?)
(unless (· this _layoutEngine)
(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))

@ -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) 'c)
(check-false (send gi move 1))
(check-false (send gi cur))
(check-equal? (send gi increment -3) 'a)
(check-equal? (send gi cur) 'a)
(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])
(cond
[(not id-in) _id]
[else (set! _id id-in)
(set! substituted #t)
[else (set-field! _id this id-in)
(set-field! substituted this #t)
(cond
[(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/override (applyLookup lookupType table)
(report* 'GSUBProcessor:applyLookup lookupType)
(report lookupType 'GSUBProcessor:applyLookup)
(case lookupType
[(1) ;; Single Substitution
(report 'single-substitution)
@ -18,7 +18,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/GSUBProcessor.js
(cond
[(= index -1) #f]
[else (define glyph (· this glyphIterator cur))
(set-field! id glyph
(send glyph id
(case (· table version)
[(1) (bitwise-and (+ (· glyph id) (· table deltaGlyphID)) #xffff)]
[(2) (send (· table substitute) get index)]))
@ -29,7 +29,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/GSUBProcessor.js
(cond
[(= index -1) #f]
[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)
(define features (· this glyphIterator cur features))
@ -52,7 +52,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/GSUBProcessor.js
(cond
[(= index -1) #f]
[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])]
[(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)))
;; 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 (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)]
[else #f])])))

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

@ -13,7 +13,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/OTLayoutEngine.js
[GSUBProcessor #f]
[GPOSProcessor #f])
(report/file 'starting-ot-layout-engine)
#;(report/file 'starting-ot-layout-engine)
(when (· font has-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.
(set! shaper (Shapers-choose script))
(set! plan (+ShapingPlan (· this font) script language))
(report/file shaper)
#;(report/file shaper)
(send (make-object shaper) plan (· this plan) (· this glyphInfos) features))
(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])
(report*/file 'ot-proc:lookupsForFeatures)
#;(report*/file 'ot-proc:lookupsForFeatures)
(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
[lookupIndex (in-list (· feature lookupListIndexes))]
#:unless (and exclude (index-of exclude lookupIndex)))
(report*/file tag lookupIndex)
#;(report*/file tag lookupIndex)
(mhasheq 'feature tag
'index lookupIndex
'lookup (send (· this table lookupList) get lookupIndex)))
< #:key (λ (i) (report*/file (· i index)))))
< #:key (λ (i) (· i index))))
(define/public (applyFeatures userFeatures glyphs advances)
(report/file 'ot-proc:applyFeatures-part1)
#;(report/file 'ot-proc:applyFeatures-part1)
(define lookups (send this lookupsForFeatures userFeatures))
(report/file 'ot-proc:applyFeatures-part2)
#;(report/file 'ot-proc:applyFeatures-part2)
(report (length lookups))
(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)
(set-field! glyphs this glyphs)
(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))
(for* ([lookup-entry (in-list lookups)])
(define feature (dict-ref lookup-entry 'feature))
(define lookup (dict-ref lookup-entry 'lookup))
(define feature (· lookup-entry feature))
(define lookup (· lookup-entry lookup))
(report 'resetting-iterator)
(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))])
(send this applyLookup (· lookup lookupType) table)))
(send (· this glyphIterator) next))))
(send this applyLookup (· lookup lookupType) table))
(report 'incrementing-iterator-at-bottom)
(send (· this glyphIterator) next)
(report* (· this glyphIterator cur) (· this glyphIterator index))]))))
(abstract applyLookup)
@ -117,8 +133,7 @@ https://github.com/mbutterick/fontkit/blob/master/src/opentype/OTProcessor.js
(error))
(define/public (coverageIndex coverage [glyph #f])
(unless glyph
(set! glyph (· this glyphIterator cur id)))
(unless glyph (set! glyph (· this glyphIterator cur id)))
(or (case (· coverage version)
[(1) (index-of (· coverage glyphs) glyph)]
[(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.
;; Ignores features that have already been applied.
(define/public (_addFeatures features)
(report*/file 'stages-before stages)
#;(report*/file 'stages-before stages)
(match-define (list head-stages ... last-stage) stages)
(set! 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))
(dict-set! (· this allFeatures) feature #t)
feature))))
(report*/file 'stages-after stages))
#;(report*/file 'stages-after stages)
stages)
;; Adds the given features to the global list
(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
(define/public (assignGlobalFeatures glyphs)
(report*/file glyphs (· this globalFeatures))
#;(report*/file glyphs (· this globalFeatures))
(for* ([glyph (in-list glyphs)]
[feature (in-dict-keys (· this globalFeatures))])
(dict-set! (· glyph features) feature #t)))
;; Executes the planned stages using the given OTProcessor
(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))
(report/file stages)
#;(report/file stages)
(for ([stage (in-list stages)])
(cond
[(and (procedure? stage) (not positions))
(stage (· this font) glyphs positions)]
[(> (length stage) 0)
(report*/file 'shaping-plan:applying-features processor)
#;(report*/file 'shaping-plan:applying-features processor)
(send processor applyFeatures stage glyphs positions)]))))

@ -7273,6 +7273,7 @@ var OTProcessor = function () {
this.glyphs = glyphs;
this.positions = positions;
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);;) {
var _ref8;
@ -7290,14 +7291,29 @@ var OTProcessor = function () {
feature = _ref9.feature,
lookup = _ref9.lookup;
console.log("resetting iterator");
this.glyphIterator.reset(lookup.flags);
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)) {
this.glyphIterator.next();
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);;) {
var _ref10;
@ -7318,7 +7334,10 @@ var OTProcessor = function () {
}
}
console.log("incrementing iterator at bottom");
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
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--) {
this.glyphs.splice(matched[_i5], 1);
}
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;
}

@ -43,7 +43,7 @@ https://github.com/mbutterick/pdfkit/blob/master/lib/font/embedded.coffee
(define/contract (encode this text [features #f])
((string?) ((option/c list?)) . ->*m .
(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 glyphs (· glyphRun 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
doc.font('the-font')
.fontSize(100)
.text('fifl', 100, 100, {width: false})
.text('fi', 100, 100, {width: false})
doc.end()

Binary file not shown.

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

Loading…
Cancel
Save