From a2d7901c83754bbfdede238f916cd231ef50ed24 Mon Sep 17 00:00:00 2001 From: Jaro Date: Mon, 20 Mar 2023 05:06:42 +0100 Subject: [PATCH] Add shaped runs for demo. --- .gitignore | 3 +- .../shapedRuns/spannedLoremIpsum20em/golden | 493 ++++++++++++++++++ CHANGELOG.md | 3 + test/Data/Text/ParagraphLayout/FontLoader.hs | 26 +- test/Data/Text/ParagraphLayoutSpec.hs | 82 ++- 5 files changed, 603 insertions(+), 4 deletions(-) create mode 100644 .golden/shapedRuns/spannedLoremIpsum20em/golden diff --git a/.gitignore b/.gitignore index c4c6f76..675b649 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /dist/ /dist-newstyle/ -/.golden/*/actual +/.golden/**/actual +/.golden/**/fontInfo diff --git a/.golden/shapedRuns/spannedLoremIpsum20em/golden b/.golden/shapedRuns/spannedLoremIpsum20em/golden new file mode 100644 index 0000000..55ba233 --- /dev/null +++ b/.golden/shapedRuns/spannedLoremIpsum20em/golden @@ -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 diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e0b68b..8a416bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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. diff --git a/test/Data/Text/ParagraphLayout/FontLoader.hs b/test/Data/Text/ParagraphLayout/FontLoader.hs index 057c994..36d2958 100644 --- a/test/Data/Text/ParagraphLayout/FontLoader.hs +++ b/test/Data/Text/ParagraphLayout/FontLoader.hs @@ -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 diff --git a/test/Data/Text/ParagraphLayoutSpec.hs b/test/Data/Text/ParagraphLayoutSpec.hs index bccf991..b6c3d8f 100644 --- a/test/Data/Text/ParagraphLayoutSpec.hs +++ b/test/Data/Text/ParagraphLayoutSpec.hs @@ -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 -- 2.30.2