check for multiple glyphs per codepoint

main
Matthew Butterick 5 years ago
parent b8b878b7d0
commit f7456c764a

@ -9,6 +9,7 @@
"table-stream.rkt" "table-stream.rkt"
xenomorph xenomorph
racket/match racket/match
racket/list
sugar/unstable/dict sugar/unstable/dict
"unsafe/harfbuzz.rkt" "unsafe/harfbuzz.rkt"
"glyph-position.rkt" "glyph-position.rkt"
@ -92,7 +93,8 @@ https://github.com/mbutterick/fontkit/blob/master/src/TTFFont.js
(hb_shape (hb-font font) buf (map (λ (fpr) (tag->hb-feature (car fpr) (cdr fpr))) features)) (hb_shape (hb-font font) buf (map (λ (fpr) (tag->hb-feature (car fpr) (cdr fpr))) features))
(define gis (hb_buffer_get_glyph_infos buf)) (define gis (hb_buffer_get_glyph_infos buf))
(define hb-gids (map hb_glyph_info_t-codepoint gis)) (define hb-gids (map hb_glyph_info_t-codepoint gis))
(define hb-clusters (break-at codepoints (map hb_glyph_info_t-cluster gis))) ;; `remove-duplicates` in case we get a funny codepoint that expands into multiple glyphs (rare but possible)
(define hb-clusters (break-at codepoints (remove-duplicates (map hb_glyph_info_t-cluster gis) eq?)))
(define hb-positions (map hb_glyph_position_t->list (hb_buffer_get_glyph_positions buf))) (define hb-positions (map hb_glyph_position_t->list (hb_buffer_get_glyph_positions buf)))
(define glyphs (for/vector ([gidx (in-list hb-gids)] (define glyphs (for/vector ([gidx (in-list hb-gids)]
[cluster (in-list hb-clusters)]) [cluster (in-list hb-clusters)])

Loading…
Cancel
Save