~jaro/balkon

a2d7901c83754bbfdede238f916cd231ef50ed24 — Jaro 1 year, 4 months ago a1a78d2
Add shaped runs for demo.
M .gitignore => .gitignore +2 -1
@@ 1,3 1,4 @@
/dist/
/dist-newstyle/
/.golden/*/actual
/.golden/**/actual
/.golden/**/fontInfo

A .golden/shapedRuns/spannedLoremIpsum20em/golden => .golden/shapedRuns/spannedLoremIpsum20em/golden +493 -0
@@ 0,0 1,493 @@
[(0,-14,
    [(GlyphInfo {codepoint = 47, cluster = 4, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 5, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 6, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 7, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 8, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 9, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 10, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 83, cluster = 11, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 12, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 13, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 14, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 15, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 16, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 17, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 18, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 19, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 20, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 21, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(132,-14,
    [(GlyphInfo {codepoint = 86, cluster = 22, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 23, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 24, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 25, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 26, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 27, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 28, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 29, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 15, cluster = 30, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 31, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 32, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 33, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 34, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 35, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 36, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 37, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 38, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 39, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 40, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 41, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 42, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(0,-31,
    [(GlyphInfo {codepoint = 68, cluster = 44, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 45, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 46, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 83, cluster = 47, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 48, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 49, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 50, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 51, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 52, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 74, cluster = 53, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 54, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 55, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 56, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 57, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 58, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 15, cluster = 59, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 60, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 61, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 62, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 63, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 64, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(129,-31,
    [(GlyphInfo {codepoint = 71, cluster = 65, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 66, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 67, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 68, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 69, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 70, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 71, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 72, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 73, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 74, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 75, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 76, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 77, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 78, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 83, cluster = 79, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 80, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 81, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(0,-48,
    [(GlyphInfo {codepoint = 76, cluster = 83, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 84, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 85, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 86, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 87, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 88, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 89, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 90, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 91, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 92, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 93, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 94, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 95, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 96, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 97, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 98, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 69, cluster = 99, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 100, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 101, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 102, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 103, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(138,-48,
    [(GlyphInfo {codepoint = 72, cluster = 104, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 105, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 106, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 107, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 108, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 109, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 110, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 111, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 112, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 113, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 114, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 115, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 74, cluster = 116, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 117, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 118, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(250,-48,
    [(GlyphInfo {codepoint = 3, cluster = 119, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 120, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 121, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 122, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 84, cluster = 123, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 124, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 125, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 17, cluster = 126, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(0,-65,
    [(GlyphInfo {codepoint = 56, cluster = 128, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 10, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 129, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 130, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 131, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 132, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 133, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 134, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 135, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(56,-65,
    [(GlyphInfo {codepoint = 68, cluster = 136, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 137, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 138, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 139, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 140, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 141, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 142, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 143, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 144, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 89, cluster = 145, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 146, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 147, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 148, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 149, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 150, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 15, cluster = 151, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(176,-65,
    [(GlyphInfo {codepoint = 3, cluster = 152, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 84, cluster = 153, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 154, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 155, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 156, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 157, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 158, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 159, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 160, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 161, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 162, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 163, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 164, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(0,-82,
    [(GlyphInfo {codepoint = 72, cluster = 166, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 91, cluster = 167, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 168, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 169, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 170, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 171, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 172, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 173, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 174, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 175, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 176, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 177, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 178, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(86,-82,
    [(GlyphInfo {codepoint = 88, cluster = 179, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 180, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 181, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 182, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 183, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 184, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 185, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 186, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 187, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 188, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 69, cluster = 189, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 190, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 191, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 192, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 193, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 194, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 195, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 196, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 197, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 198, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(217,-82,
    [(GlyphInfo {codepoint = 3, cluster = 199, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 200, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 201, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 202, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 203, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 204, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 205, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 84, cluster = 206, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 207, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 208, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 83, cluster = 209, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(0,-99,
    [(GlyphInfo {codepoint = 72, cluster = 211, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 91, cluster = 212, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 213, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(19,-99,
    [(GlyphInfo {codepoint = 72, cluster = 214, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 215, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 216, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 217, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 218, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 219, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 220, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 221, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 222, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 223, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 224, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 225, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 226, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 227, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 228, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 229, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 84, cluster = 230, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 231, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 232, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 233, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 17, cluster = 234, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(186,-99,
    [(GlyphInfo {codepoint = 3, cluster = 235, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 39, cluster = 236, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 11, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 237, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 238, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 239, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 240, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 241, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 242, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 243, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 244, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 245, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 246, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 247, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 248, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 249, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 250, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(0,-116,
    [(GlyphInfo {codepoint = 71, cluster = 252, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 253, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 254, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 255, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 256, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 257, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 258, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 259, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 260, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 261, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 262, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 83, cluster = 263, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 264, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 265, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 75, cluster = 266, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 267, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 268, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 269, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 270, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 271, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 272, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 273, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(152,-116,
    [(GlyphInfo {codepoint = 3, cluster = 274, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 275, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 276, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 277, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 89, cluster = 278, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 279, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 280, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 281, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 83, cluster = 282, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 283, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 284, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 285, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 286, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 287, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 89, cluster = 288, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 289, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 290, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 291, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 292, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(0,-133,
    [(GlyphInfo {codepoint = 72, cluster = 294, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 295, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 296, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 297, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 298, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 299, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 300, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 301, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 302, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 303, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 304, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 305, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 306, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 307, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 308, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 309, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 310, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 311, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(122,-133,
    [(GlyphInfo {codepoint = 3, cluster = 312, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 313, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 314, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 315, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 73, cluster = 316, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 317, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 74, cluster = 318, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 319, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 320, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 321, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 322, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 323, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 324, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 325, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 326, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 327, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 328, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(227,-133,
    [(GlyphInfo {codepoint = 83, cluster = 329, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 330, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 331, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 332, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 333, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 334, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 335, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 336, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 5, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 17, cluster = 337, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(0,-150,
    [(GlyphInfo {codepoint = 40, cluster = 339, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 91, cluster = 340, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 341, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 342, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 83, cluster = 343, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 344, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 345, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 346, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 347, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(70,-150,
    [(GlyphInfo {codepoint = 3, cluster = 348, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 349, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 350, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 351, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 352, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 353, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 354, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 355, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 356, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 357, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 358, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 359, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 360, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 361, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 362, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 363, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 364, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 83, cluster = 365, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 366, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 367, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 368, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 369, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 370, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 371, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 372, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(234,-150,
    [(GlyphInfo {codepoint = 81, cluster = 373, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 374, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 375, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(0,-167,
    [(GlyphInfo {codepoint = 83, cluster = 377, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 378, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 379, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 380, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 381, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 382, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 383, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 384, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 15, cluster = 385, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 386, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 387, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 388, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 389, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 390, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(98,-167,
    [(GlyphInfo {codepoint = 3, cluster = 391, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 392, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 393, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 394, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 395, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 396, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 397, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 83, cluster = 398, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 399, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 400, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 84, cluster = 401, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 402, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 403, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 404, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(182,-167,
    [(GlyphInfo {codepoint = 82, cluster = 405, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 431, cluster = 406, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 15, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 70, cluster = 409, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 410, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 411, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 412, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 413, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 414, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 415, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 416, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 417, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 418, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 419, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 420, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(0,-184,
    [(GlyphInfo {codepoint = 80, cluster = 422, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 423, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 424, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 79, cluster = 425, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 426, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 427, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(40,-184,
    [(GlyphInfo {codepoint = 3, cluster = 428, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 429, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 81, cluster = 430, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 431, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 432, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 433, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 76, cluster = 434, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 71, cluster = 435, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 436, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 72, cluster = 437, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 86, cluster = 438, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 7, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 87, cluster = 439, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 3, cluster = 440, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 3, y_advance = 0, x_offset = 0, y_offset = 0})]
),
(120,-184,
    [(GlyphInfo {codepoint = 79, cluster = 441, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 68, cluster = 442, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 8, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 69, cluster = 443, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 82, cluster = 444, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 85, cluster = 445, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 6, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 88, cluster = 446, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 9, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 80, cluster = 447, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 13, y_advance = 0, x_offset = 0, y_offset = 0}),
    (GlyphInfo {codepoint = 17, cluster = 448, unsafeToBreak = False, unsafeToConcat = False, safeToInsertTatweel = False},GlyphPos {x_advance = 4, y_advance = 0, x_offset = 0, y_offset = 0})]
)]
\ No newline at end of file

M CHANGELOG.md => CHANGELOG.md +3 -0
@@ 5,6 5,9 @@
* Internally, language tags will be cut at the first invalid character before
  being passed to ICU.

* Tests will generate output in "shaped runs" format which can be passed to
  a text rendering application.

## 0.1.0.0 -- 2023-03-13

* Text shaping using HarfBuzz.

M test/Data/Text/ParagraphLayout/FontLoader.hs => test/Data/Text/ParagraphLayout/FontLoader.hs +24 -2
@@ 3,20 3,26 @@ module Data.Text.ParagraphLayout.FontLoader
    ,devanagariFont
    ,latinFont
    ,loadFont
    ,writeFontInfo
    )
where

import Data.ByteString (readFile)
import Data.Int (Int32)
import Data.Text.Glyphize
    (Font
    ,FontOptions
    ,createFace
    ,createFontWithOptions
    ,faceIndex
    ,fontFace
    ,fontPPEm
    ,fontScale
    )
import Data.Word (Word)
import Prelude (return)
import Prelude (concat, fromIntegral, return, show, ($), (++))
import System.FilePath (FilePath, (</>))
import System.IO (IO)
import System.IO (IO, writeFile)

arabicFont :: FilePath
arabicFont = "assets" </> "fonts" </> "plex" </> "IBMPlexSansArabic-Regular.ttf"


@@ 33,3 39,19 @@ loadFont path index opts = do
    let face = createFace ttf index
    let font = createFontWithOptions opts face
    return font

-- | Write a file containing information about the font and options used in a
-- test, to be passed to Typograffiti.
--
-- Note: The font path will not be escaped.
writeFontInfo :: FilePath -> FilePath -> Font -> IO ()
writeFontInfo outputPath fontPath font = writeFile outputPath info
    where
        info = concat [fontPath, " ", index, " ", pixelSize, " ", scale, "\n"]
        index = show $ faceIndex face
        pixelSize = let (x, y) = fontPPEm font in (show x) ++ "," ++ (show y)
        scale = let (x, y) = fontScale font in (show32 x) ++ "," ++ (show32 y)
        -- Workaround for:
        -- https://todo.argonaut-constellation.org/~alcinnz/harfbuzz-pure/3
        show32 x = show (fromIntegral x :: Int32)
        face = fontFace font

M test/Data/Text/ParagraphLayoutSpec.hs => test/Data/Text/ParagraphLayoutSpec.hs +81 -1
@@ 1,7 1,8 @@
module Data.Text.ParagraphLayoutSpec (spec) where

import Data.Text.Glyphize
    (FontOptions(optionPPEm, optionScale)
    (Font
    ,FontOptions(optionPPEm, optionScale)
    ,defaultFontOptions
    )



@@ 10,12 11,42 @@ import Test.Hspec.Golden
import System.FilePath ((</>))
import Data.Text.ParagraphLayout
import Data.Text.ParagraphLayout.FontLoader
import Data.Text.ParagraphLayout.Internal.Fragment
import Data.Text.ParagraphLayout.Internal.Paragraph
import Data.Text.ParagraphLayout.ParagraphData
import Data.Text.ParagraphLayout.Rect

class PrettyShow a where
    prettyShow :: a -> String

newtype ShapedRuns = ShapedRuns { getShapedRuns :: [ShapedRun] }
    deriving (Eq)

instance PrettyShow ShapedRuns where
    prettyShow (ShapedRuns xs) = concat
        [ "["
        , concat $ indentedList indent0 $ map (prettyShow . ShapedRun') xs
        , "]"
        ]

newtype ShapedRun' = ShapedRun' ShapedRun

instance PrettyShow ShapedRun' where
    prettyShow (ShapedRun' (x, y, glyphs)) = concat
        [ "("
        , show x
        , ","
        , show y
        , ","
        , newline
        , indent1
        , "["
        , concat $ indentedList indent1 $ map show glyphs
        , "]"
        , newline
        , ")"
        ]

instance PrettyShow ParagraphLayout where
    prettyShow (ParagraphLayout pr sls) = concat
        [ "ParagraphLayout {paragraphRect = "


@@ 77,6 108,9 @@ mapTail :: (a -> a) -> [a] -> [a]
mapTail _ [] = []
mapTail f (x:xs) = x:(map f xs)

indent0 :: String
indent0 = ""

indent1 :: String
indent1 = "    "



@@ 106,6 140,23 @@ instance ShouldBeGolden ParagraphLayout where
        , failFirstTime = False
        }

instance ShouldBeGolden ShapedRuns where
    shouldBeGolden output_ name = Golden
        { output = output_
        , encodePretty = show . getShapedRuns
        , writeToFile = \path -> writeFile path . prettyShow
        , readFromFile = \path -> readFile path >>= return . ShapedRuns . read
        , goldenFile = ".golden" </> "shapedRuns" </> name </> "golden"
        , actualFile = Just (".golden" </> "shapedRuns" </> name </> "actual")
        , failFirstTime = False
        }

fontInfoPath :: String -> FilePath
fontInfoPath name = ".golden" </> "shapedRuns" </> name </> "fontInfo"

shapedRuns' :: ParagraphLayout -> ShapedRuns
shapedRuns' = ShapedRuns . shapedRuns

emptyLayout :: ParagraphLayout
emptyLayout = ParagraphLayout (Rect 0 0 0 0) []



@@ 121,6 172,23 @@ testingOptions = defaultFontOptions {
    optionScale = Just (1000, 1000)
}

-- For the demo, use a 15px font size with exactly one scale unit per pixel.
demoOptions :: FontOptions
demoOptions = defaultFontOptions {
    optionPPEm = Just (15, 15),
    optionScale = Just (15, 15)
}

-- | Test shaped runs against an expected value, and write metadata about the
-- used font afterwards.
shapedRunsSpecWithFont ::
    FilePath -> Font -> String -> FilePath -> Paragraph -> SpecWith ()
shapedRunsSpecWithFont fontPath font subject name p = do
    let writeInfo = writeFontInfo (fontInfoPath name) fontPath font
    after_ writeInfo $ it subject $ do
        let result = layoutPlain p
        shapedRuns' result `shouldBeGolden` name

spec :: Spec
spec = do



@@ 271,3 339,15 @@ spec = do
                let opts = ParagraphOptions font Normal 6000
                let result = layoutPlain $ mixedScriptWordsParagraph opts
                result `shouldBeGolden` "mixedScriptWordsParagraph"

    describe "shaped runs for demo" $ do

        describe "with Latin font" $ do
            let fontPath = latinFont
            font <- runIO $ loadFont fontPath 0 demoOptions
            let shapedRunsSpec = shapedRunsSpecWithFont fontPath font

            shapedRunsSpec "wraps lorem ipsum with spans at 20em"
                "spannedLoremIpsum20em" $
                spannedLoremIpsumParagraph $
                ParagraphOptions font Normal 300