From 33eb81450f8572762a5b805cf0bb4740c86f45cf Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 21 Jan 2022 13:51:46 -0500 Subject: Regenerate layout tests The serialization format has changed, so these need to be regenerated to match. --- tests/layouts/aaa.layout | 600 +++--- tests/layouts/arabic-format.layout | 132 +- tests/layouts/bratwurst.layout | 372 ++-- tests/layouts/bratwurst2.layout | 318 +-- tests/layouts/bratwurst3.layout | 593 +++--- tests/layouts/bratwurst4.layout | 433 ++-- tests/layouts/effigy.layout | 323 +-- tests/layouts/kebab.layout | 453 +++-- tests/layouts/letterspacing.layout | 206 +- tests/layouts/no-space.layout | 238 +-- tests/layouts/tab-assert.layout | 312 +-- tests/layouts/tab-crash.layout | 2778 +++++++++++++------------- tests/layouts/tabs-nowrap.layout | 665 +++--- tests/layouts/tabs.layout | 3480 ++++++++++++++++---------------- tests/layouts/valid-1.layout | 1268 ++++++------ tests/layouts/valid-10.layout | 729 +++---- tests/layouts/valid-11.layout | 788 ++++---- tests/layouts/valid-12.layout | 1311 ++++++------ tests/layouts/valid-13.layout | 1402 +++++++------ tests/layouts/valid-14.layout | 973 ++++----- tests/layouts/valid-15.layout | 2001 ++++++++++--------- tests/layouts/valid-16.layout | 2003 ++++++++++--------- tests/layouts/valid-17.layout | 844 ++++---- tests/layouts/valid-18.layout | 1445 +++++++------- tests/layouts/valid-19.layout | 1132 +++++------ tests/layouts/valid-2.layout | 1116 ++++++----- tests/layouts/valid-20.layout | 358 ++-- tests/layouts/valid-21.layout | 274 +-- tests/layouts/valid-22.layout | 1180 +++++------ tests/layouts/valid-3.layout | 356 ++-- tests/layouts/valid-4.layout | 3888 ++++++++++++++++++------------------ tests/layouts/valid-5.layout | 3539 ++++++++++++++++---------------- tests/layouts/valid-6.layout | 710 +++---- tests/layouts/valid-7.layout | 1160 +++++------ tests/layouts/valid-8.layout | 733 +++---- tests/layouts/valid-9.layout | 969 ++++----- tests/layouts/vertical.layout | 462 ++--- 37 files changed, 20229 insertions(+), 19315 deletions(-) diff --git a/tests/layouts/aaa.layout b/tests/layouts/aaa.layout index 829e74c8..d290e7eb 100644 --- a/tests/layouts/aaa.layout +++ b/tests/layouts/aaa.layout @@ -19,276 +19,372 @@ "wrap" : "char", "width" : 0, "line-spacing" : 1.2999999523162842, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : false, + "wrapped" : true, + "ellipsized" : false, + "hypenated" : true, "unknown-glyphs" : 0, "width" : 41984, - "height" : 318464, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "word-boundary" : true - } - ], + "height" : 323792, "lines" : [ { - "start-index" : 0, - "length" : 1, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 1, - "text" : "a", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 32", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 - ] - }, - "flags" : 4, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 68, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 0 + "position" : [ + 0, + 40960 + ], + "line" : { + "start-index" : 0, + "length" : 1, + "start-offset" : 0, + "n-chars" : 1, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : true, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 1, + "text" : "a", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 32", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 2803, - "width" : 15360, - "log-cluster" : 0 - } - ] - } - ] + "flags" : 4, + "extra-attributes" : [ + { + "type" : "line-height", + "value" : 1.2999999523162842 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 68, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 2803, + "width" : 15360, + "log-cluster" : 0 + } + ] + } + ] + } }, { - "start-index" : 1, - "length" : 1, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 1, - "length" : 1, - "text" : "a", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 32", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 - ] - }, - "flags" : 4, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 68, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 0 + "position" : [ + 0, + 108852 + ], + "line" : { + "start-index" : 1, + "length" : 1, + "start-offset" : 1, + "n-chars" : 1, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : true, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 1, + "length" : 1, + "text" : "a", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 32", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 2803, - "width" : 15360, - "log-cluster" : 0 - } - ] - } - ] + "flags" : 4, + "extra-attributes" : [ + { + "type" : "line-height", + "value" : 1.2999999523162842 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 68, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 2803, + "width" : 15360, + "log-cluster" : 0 + } + ] + } + ] + } }, { - "start-index" : 2, - "length" : 1, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 2, - "length" : 1, - "text" : "a", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 32", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 - ] - }, - "flags" : 4, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 68, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 0 + "position" : [ + 0, + 176744 + ], + "line" : { + "start-index" : 2, + "length" : 1, + "start-offset" : 2, + "n-chars" : 1, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : true, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 2, + "length" : 1, + "text" : "a", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 32", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 2803, - "width" : 15360, - "log-cluster" : 0 - } - ] - } - ] + "flags" : 4, + "extra-attributes" : [ + { + "type" : "line-height", + "value" : 1.2999999523162842 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 68, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 2803, + "width" : 15360, + "log-cluster" : 0 + } + ] + } + ] + } }, { - "start-index" : 3, - "length" : 1, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 3, - "length" : 1, - "text" : "a", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 32", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 244636 + ], + "line" : { + "start-index" : 3, + "length" : 1, + "start-offset" : 3, + "n-chars" : 1, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 3, + "length" : 1, + "text" : "a", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 32", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "type" : "line-height", + "value" : 1.2999999523162842 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 68, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 68, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } }, { - "start-index" : 4, - "length" : 1, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 4, - "length" : 1, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 32", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 312528 + ], + "line" : { + "start-index" : 4, + "length" : 1, + "start-offset" : 4, + "n-chars" : 1, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 4, + "length" : 1, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 32", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "type" : "line-height", + "value" : 1.2999999523162842 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 3, + "width" : 14336, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 3, - "width" : 14336, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/arabic-format.layout b/tests/layouts/arabic-format.layout index 83c3d5ab..b583ddc1 100644 --- a/tests/layouts/arabic-format.layout +++ b/tests/layouts/arabic-format.layout @@ -17,72 +17,86 @@ "comment" : "Test that font fallback works\nfor visible format characters\nin the Arabic block.", "text" : "۝", "font" : "Sans 32", + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 56320, "height" : 77824, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 2, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 2, - "text" : "۝", - "bidi-level" : 2, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Amiri 32", - "checksum" : "d5e6374130d6df09e66f80f0bbcb7262112584ebadb861f0a412a21cc742a5dd", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 49152 + ], + "line" : { + "start-index" : 0, + "length" : 2, + "start-offset" : 0, + "n-chars" : 1, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 2, + "text" : "۝", + "bidi-level" : 2, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Amiri 32", + "checksum" : "d5e6374130d6df09e66f80f0bbcb7262112584ebadb861f0a412a21cc742a5dd", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1, + "width" : 56320, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1, - "width" : 56320, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/bratwurst.layout b/tests/layouts/bratwurst.layout index 06ec8272..609c8e8e 100644 --- a/tests/layouts/bratwurst.layout +++ b/tests/layouts/bratwurst.layout @@ -26,196 +26,210 @@ ], "font" : "Cantarell Bold 32", "width" : 87040, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 200704, "height" : 53248, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 9, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 4, - "text" : "Brat", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell Bold 32", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 8374 + "position" : [ + 0, + 43008 + ], + "line" : { + "start-index" : 0, + "length" : 9, + "start-offset" : 0, + "n-chars" : 9, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 4, + "text" : "Brat", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell Bold 32", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 8374 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 29, + "width" : 28672, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 409, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 244, + "width" : 23552, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 430, + "width" : 16384, + "is-cluster-start" : true, + "log-cluster" : 3 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 29, - "width" : 28672, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 409, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 1 + { + "offset" : 4, + "length" : 5, + "text" : "wurst", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell Bold 32", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 8374 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 244, - "width" : 23552, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 430, - "width" : 16384, - "is-cluster-start" : true, - "log-cluster" : 3 - } - ] - }, - { - "offset" : 4, - "length" : 5, - "text" : "wurst", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell Bold 32", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 8374 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 467, + "width" : 35840, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 438, + "width" : 24576, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 409, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 417, + "width" : 20480, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 430, + "width" : 16384, + "is-cluster-start" : true, + "log-cluster" : 4 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 467, - "width" : 35840, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 438, - "width" : 24576, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 409, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 417, - "width" : 20480, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 430, - "width" : 16384, - "is-cluster-start" : true, - "log-cluster" : 4 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/bratwurst2.layout b/tests/layouts/bratwurst2.layout index 0c3be229..20b803d9 100644 --- a/tests/layouts/bratwurst2.layout +++ b/tests/layouts/bratwurst2.layout @@ -19,166 +19,180 @@ "text" : "Bratwurst", "font" : "Cantarell Bold 32", "width" : 87040, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 200704, "height" : 53248, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 9, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 9, - "text" : "Bratwurst", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell Bold 32", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 8374 + "position" : [ + 0, + 43008 + ], + "line" : { + "start-index" : 0, + "length" : 9, + "start-offset" : 0, + "n-chars" : 9, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 9, + "text" : "Bratwurst", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell Bold 32", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 8374 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 29, + "width" : 28672, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 409, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 244, + "width" : 23552, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 430, + "width" : 16384, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 467, + "width" : 35840, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 438, + "width" : 24576, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 409, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 417, + "width" : 20480, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 430, + "width" : 16384, + "is-cluster-start" : true, + "log-cluster" : 8 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 29, - "width" : 28672, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 409, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 244, - "width" : 23552, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 430, - "width" : 16384, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 467, - "width" : 35840, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 438, - "width" : 24576, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 409, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 417, - "width" : 20480, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 430, - "width" : 16384, - "is-cluster-start" : true, - "log-cluster" : 8 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/bratwurst3.layout b/tests/layouts/bratwurst3.layout index 42c6a487..8f899c9a 100644 --- a/tests/layouts/bratwurst3.layout +++ b/tests/layouts/bratwurst3.layout @@ -18,297 +18,350 @@ "comment" : "A single word with word-char wrapping,\nexpected to be broken to fit the line width.", "text" : "Bratwurst", "font" : "Cantarell Bold 32", - "wrap" : "word-char", + "wrap" : "word | char", "width" : 87040, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : false, + "wrapped" : true, + "ellipsized" : false, + "hypenated" : true, "unknown-glyphs" : 0, "width" : 78848, "height" : 212992, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 2, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 2, - "text" : "Br", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell Bold 32", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 8374 + "position" : [ + 0, + 43008 + ], + "line" : { + "start-index" : 0, + "length" : 2, + "start-offset" : 0, + "n-chars" : 2, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : true, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 2, + "text" : "Br", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell Bold 32", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 8374 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 4, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 29, + "width" : 28672, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 409, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 1081, + "width" : 18432, + "log-cluster" : 1 + } ] - }, - "flags" : 4, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 29, - "width" : 28672, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 409, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 1081, - "width" : 18432, - "log-cluster" : 1 - } - ] - } - ] + } + ] + } }, { - "start-index" : 2, - "length" : 2, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 2, - "length" : 2, - "text" : "at", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell Bold 32", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 8374 + "position" : [ + 0, + 96256 + ], + "line" : { + "start-index" : 2, + "length" : 2, + "start-offset" : 2, + "n-chars" : 2, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : true, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 2, + "length" : 2, + "text" : "at", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell Bold 32", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 8374 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 4, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 244, + "width" : 23552, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 430, + "width" : 16384, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 1081, + "width" : 18432, + "log-cluster" : 1 + } ] - }, - "flags" : 4, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 244, - "width" : 23552, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 430, - "width" : 16384, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 1081, - "width" : 18432, - "log-cluster" : 1 - } - ] - } - ] + } + ] + } }, { - "start-index" : 4, - "length" : 2, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 4, - "length" : 2, - "text" : "wu", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell Bold 32", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 8374 + "position" : [ + 0, + 149504 + ], + "line" : { + "start-index" : 4, + "length" : 2, + "start-offset" : 4, + "n-chars" : 2, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : true, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 4, + "length" : 2, + "text" : "wu", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell Bold 32", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 8374 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 4, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 467, + "width" : 35840, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 438, + "width" : 24576, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 1081, + "width" : 18432, + "log-cluster" : 1 + } ] - }, - "flags" : 4, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 467, - "width" : 35840, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 438, - "width" : 24576, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 1081, - "width" : 18432, - "log-cluster" : 1 - } - ] - } - ] + } + ] + } }, { - "start-index" : 6, - "length" : 3, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 6, - "length" : 3, - "text" : "rst", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell Bold 32", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 8374 + "position" : [ + 0, + 202752 + ], + "line" : { + "start-index" : 6, + "length" : 3, + "start-offset" : 6, + "n-chars" : 3, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 6, + "length" : 3, + "text" : "rst", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell Bold 32", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 8374 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 409, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 417, + "width" : 20480, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 430, + "width" : 16384, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 409, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 417, - "width" : 20480, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 430, - "width" : 16384, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/bratwurst4.layout b/tests/layouts/bratwurst4.layout index 34a4e1aa..1ba8872d 100644 --- a/tests/layouts/bratwurst4.layout +++ b/tests/layouts/bratwurst4.layout @@ -19,221 +19,248 @@ "text" : "Brat­wurst", "font" : "Cantarell Bold 32", "width" : 87040, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : false, + "wrapped" : true, + "ellipsized" : false, + "hypenated" : true, "unknown-glyphs" : 0, "width" : 114688, "height" : 106496, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 6, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 6, - "text" : "Brat­", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell Bold 32", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 8374 + "position" : [ + 0, + 43008 + ], + "line" : { + "start-index" : 0, + "length" : 6, + "start-offset" : 0, + "n-chars" : 5, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : true, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 6, + "text" : "Brat­", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell Bold 32", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 8374 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 4, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 29, + "width" : 28672, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 409, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 244, + "width" : 23552, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 430, + "width" : 16384, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 1081, + "width" : 18432, + "log-cluster" : 4 + } ] - }, - "flags" : 4, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 29, - "width" : 28672, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 409, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 244, - "width" : 23552, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 430, - "width" : 16384, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 1081, - "width" : 18432, - "log-cluster" : 4 - } - ] - } - ] + } + ] + } }, { - "start-index" : 6, - "length" : 5, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 6, - "length" : 5, - "text" : "wurst", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell Bold 32", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 8374 + "position" : [ + 0, + 96256 + ], + "line" : { + "start-index" : 6, + "length" : 5, + "start-offset" : 5, + "n-chars" : 5, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 6, + "length" : 5, + "text" : "wurst", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell Bold 32", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 8374 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 467, + "width" : 35840, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 438, + "width" : 24576, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 409, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 417, + "width" : 20480, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 430, + "width" : 16384, + "is-cluster-start" : true, + "log-cluster" : 4 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 467, - "width" : 35840, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 438, - "width" : 24576, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 409, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 417, - "width" : 20480, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 430, - "width" : 16384, - "is-cluster-start" : true, - "log-cluster" : 4 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/effigy.layout b/tests/layouts/effigy.layout index f8a24abd..2c4ea1fe 100644 --- a/tests/layouts/effigy.layout +++ b/tests/layouts/effigy.layout @@ -21,164 +21,191 @@ "wrap" : "char", "width" : 81920, "height" : 2048, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : false, + "wrapped" : true, + "ellipsized" : false, + "hypenated" : true, "unknown-glyphs" : 0, "width" : 71680, "height" : 104448, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 3, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 3, - "text" : "eff", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 32", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 - ] - }, - "flags" : 4, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 72, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 0 + "position" : [ + 0, + 40960 + ], + "line" : { + "start-index" : 0, + "length" : 3, + "start-offset" : 0, + "n-chars" : 3, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : true, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 3, + "text" : "eff", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 32", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 5041, - "width" : 29696, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 2803, - "width" : 15360, - "log-cluster" : 1 - } - ] - } - ] + "flags" : 4, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 72, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 5041, + "width" : 29696, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 2803, + "width" : 15360, + "log-cluster" : 1 + } + ] + } + ] + } }, { - "start-index" : 3, - "length" : 3, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 3, - "length" : 3, - "text" : "igy", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 32", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 - ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 76, - "width" : 12288, - "is-cluster-start" : true, - "log-cluster" : 0 + "position" : [ + 0, + 93184 + ], + "line" : { + "start-index" : 3, + "length" : 3, + "start-offset" : 3, + "n-chars" : 3, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 3, + "length" : 3, + "text" : "igy", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 32", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 74, - "width" : 27648, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 92, - "width" : 25600, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - } - ] + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 76, + "width" : 12288, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 74, + "width" : 27648, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 92, + "width" : 25600, + "is-cluster-start" : true, + "log-cluster" : 2 + } + ] + } + ] + } } ] } diff --git a/tests/layouts/kebab.layout b/tests/layouts/kebab.layout index a0efe11d..f8fc941b 100644 --- a/tests/layouts/kebab.layout +++ b/tests/layouts/kebab.layout @@ -19,231 +19,258 @@ "text" : "Döner Kebab", "font" : "Cantarell Bold 32", "width" : 87040, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : false, + "wrapped" : true, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 126976, "height" : 106496, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 7, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 7, - "text" : "Döner ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell Bold 32", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 8374 + "position" : [ + 0, + 43008 + ], + "line" : { + "start-index" : 0, + "length" : 7, + "start-offset" : 0, + "n-chars" : 6, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 7, + "text" : "Döner ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell Bold 32", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 8374 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 37, + "width" : 31744, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 381, + "width" : 25600, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 360, + "width" : 25600, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 287, + "width" : 23552, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 409, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 6 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 37, - "width" : 31744, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 381, - "width" : 25600, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 360, - "width" : 25600, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 287, - "width" : 23552, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 409, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 6 - } - ] - } - ] + } + ] + } }, { - "start-index" : 7, - "length" : 5, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 7, - "length" : 5, - "text" : "Kebab", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell Bold 32", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 8374 + "position" : [ + 0, + 96256 + ], + "line" : { + "start-index" : 7, + "length" : 5, + "start-offset" : 6, + "n-chars" : 5, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 7, + "length" : 5, + "text" : "Kebab", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell Bold 32", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 8374 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 100, + "width" : 28672, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 287, + "width" : 23552, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 272, + "width" : 25600, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 244, + "width" : 23552, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 272, + "width" : 25600, + "is-cluster-start" : true, + "log-cluster" : 4 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 100, - "width" : 28672, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 287, - "width" : 23552, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 272, - "width" : 25600, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 244, - "width" : 23552, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 272, - "width" : 25600, - "is-cluster-start" : true, - "log-cluster" : 4 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/letterspacing.layout b/tests/layouts/letterspacing.layout index f1eb5fa5..4bd681ec 100644 --- a/tests/layouts/letterspacing.layout +++ b/tests/layouts/letterspacing.layout @@ -26,109 +26,123 @@ } ], "font" : "DejaVu Sans 32", + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 63488, "height" : 52224, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 3, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 3, - "text" : "ffi", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 32", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 - ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "letter-spacing", - "value" : 10240 - }, - { - "type" : "font-features", - "value" : "liga=1" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 73, - "width" : 20480, - "is-cluster-start" : true, - "log-cluster" : 0 + "position" : [ + 0, + 40960 + ], + "line" : { + "start-index" : 0, + "length" : 3, + "start-offset" : 0, + "n-chars" : 3, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 3, + "text" : "ffi", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 32", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 73, - "width" : 25600, - "x-offset" : 5120, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 76, - "width" : 17408, - "x-offset" : 5120, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - } - ] + "flags" : 0, + "extra-attributes" : [ + { + "type" : "letter-spacing", + "value" : 10240 + }, + { + "type" : "font-features", + "value" : "liga=1" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 73, + "width" : 20480, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 73, + "width" : 25600, + "x-offset" : 5120, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 76, + "width" : 17408, + "x-offset" : 5120, + "is-cluster-start" : true, + "log-cluster" : 2 + } + ] + } + ] + } } ] } diff --git a/tests/layouts/no-space.layout b/tests/layouts/no-space.layout index b9bef178..03c75f27 100644 --- a/tests/layouts/no-space.layout +++ b/tests/layouts/no-space.layout @@ -17,125 +17,139 @@ "comment" : "Test that we get synthesized spaces\nfrom HarfBuzz.", "text" : "  ", "font" : "Font Awesome 5 Free 32", + "log-attrs" : [ + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "backspace-deletes-character" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "sentence-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-end" : true, + "backspace-deletes-character" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 4, "width" : 89088, "height" : 45056, - "log-attrs" : [ - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "backspace-deletes-character" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "sentence-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-end" : true, - "backspace-deletes-character" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 7, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 7, - "text" : "  ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Font Awesome 5 Free Solid Heavy 32", - "checksum" : "8fe6cd51391fa6f8c2008609ddd489bb81a6d7674f3a1c8b7fa07efd026a6397", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 - ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435488, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 268435488, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 1 + "position" : [ + 0, + 38912 + ], + "line" : { + "start-index" : 0, + "length" : 7, + "start-offset" : 0, + "n-chars" : 5, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 7, + "text" : "  ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Font Awesome 5 Free Solid Heavy 32", + "checksum" : "8fe6cd51391fa6f8c2008609ddd489bb81a6d7674f3a1c8b7fa07efd026a6397", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 1, - "width" : 44032, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 268435488, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 268435488, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 6 - } - ] - } - ] + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435488, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 268435488, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 1, + "width" : 44032, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 268435488, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 268435488, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 6 + } + ] + } + ] + } } ] } diff --git a/tests/layouts/tab-assert.layout b/tests/layouts/tab-assert.layout index 3b8ce5e5..2366bfb1 100644 --- a/tests/layouts/tab-assert.layout +++ b/tests/layouts/tab-assert.layout @@ -17,166 +17,180 @@ "comment" : "This layout was triggering an assertion in process_line", "text" : " \t ", "width" : 0, + "log-attrs" : [ + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "backspace-deletes-character" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 56320, "height" : 19456, - "log-attrs" : [ - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "backspace-deletes-character" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 4, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 1, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "DejaVu Sans 12", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 - ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 3, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 1, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "DejaVu Sans 12", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 4, + "start-offset" : 0, + "n-chars" : 4, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 1, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "DejaVu Sans 12", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 3, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 40960, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 2, - "length" : 2, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "DejaVu Sans 12", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 1, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "DejaVu Sans 12", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 40960, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 3, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 0 + { + "offset" : 2, + "length" : 2, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "DejaVu Sans 12", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 3, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 1 - } - ] - } - ] + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 3, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 3, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 1 + } + ] + } + ] + } } ] } diff --git a/tests/layouts/tab-crash.layout b/tests/layouts/tab-crash.layout index 3fb0ab54..d021df08 100644 --- a/tests/layouts/tab-crash.layout +++ b/tests/layouts/tab-crash.layout @@ -35,1394 +35,1434 @@ ] }, "width" : 587776, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : false, + "wrapped" : true, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 585728, "height" : 58368, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 55, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 55, - "text" : "id=3 UNION ALL SELECT NULL, NULL, CONCAT(0x7373737373, ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 12", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 55, + "start-offset" : 0, + "n-chars" : 55, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 55, + "text" : "id=3 UNION ALL SELECT NULL, NULL, CONCAT(0x7373737373, ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 12", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 76, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 71, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 32, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 22, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 3, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 56, + "width" : 12288, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 49, + "width" : 12288, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 44, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 50, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 49, + "width" : 12288, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 3, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 36, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 47, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 47, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 3, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 54, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 40, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 47, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 40, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 38, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 55, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 3, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 21 + }, + { + "glyph" : 49, + "width" : 12288, + "is-cluster-start" : true, + "log-cluster" : 22 + }, + { + "glyph" : 56, + "width" : 12288, + "is-cluster-start" : true, + "log-cluster" : 23 + }, + { + "glyph" : 47, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 24 + }, + { + "glyph" : 47, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 25 + }, + { + "glyph" : 15, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 26 + }, + { + "glyph" : 3, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 27 + }, + { + "glyph" : 49, + "width" : 12288, + "is-cluster-start" : true, + "log-cluster" : 28 + }, + { + "glyph" : 56, + "width" : 12288, + "is-cluster-start" : true, + "log-cluster" : 29 + }, + { + "glyph" : 47, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 30 + }, + { + "glyph" : 47, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 31 + }, + { + "glyph" : 15, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 32 + }, + { + "glyph" : 3, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 33 + }, + { + "glyph" : 38, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 34 + }, + { + "glyph" : 50, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 35 + }, + { + "glyph" : 49, + "width" : 12288, + "is-cluster-start" : true, + "log-cluster" : 36 + }, + { + "glyph" : 38, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 37 + }, + { + "glyph" : 36, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 38 + }, + { + "glyph" : 55, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 39 + }, + { + "glyph" : 11, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 40 + }, + { + "glyph" : 19, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 41 + }, + { + "glyph" : 91, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 42 + }, + { + "glyph" : 26, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 43 + }, + { + "glyph" : 22, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 44 + }, + { + "glyph" : 26, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 45 + }, + { + "glyph" : 22, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 46 + }, + { + "glyph" : 26, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 47 + }, + { + "glyph" : 22, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 48 + }, + { + "glyph" : 26, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 49 + }, + { + "glyph" : 22, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 50 + }, + { + "glyph" : 26, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 51 + }, + { + "glyph" : 22, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 52 + }, + { + "glyph" : 15, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 53 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 54 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 76, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 71, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 32, - "width" : 13312, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 22, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 3, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 56, - "width" : 12288, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 49, - "width" : 12288, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 44, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 50, - "width" : 13312, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 49, - "width" : 12288, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 3, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 36, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 47, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 47, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 3, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 54, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 40, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 47, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 40, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 38, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 55, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 3, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 21 - }, - { - "glyph" : 49, - "width" : 12288, - "is-cluster-start" : true, - "log-cluster" : 22 - }, - { - "glyph" : 56, - "width" : 12288, - "is-cluster-start" : true, - "log-cluster" : 23 - }, - { - "glyph" : 47, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 24 - }, - { - "glyph" : 47, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 25 - }, - { - "glyph" : 15, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 26 - }, - { - "glyph" : 3, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 27 - }, - { - "glyph" : 49, - "width" : 12288, - "is-cluster-start" : true, - "log-cluster" : 28 - }, - { - "glyph" : 56, - "width" : 12288, - "is-cluster-start" : true, - "log-cluster" : 29 - }, - { - "glyph" : 47, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 30 - }, - { - "glyph" : 47, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 31 - }, - { - "glyph" : 15, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 32 - }, - { - "glyph" : 3, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 33 - }, - { - "glyph" : 38, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 34 - }, - { - "glyph" : 50, - "width" : 13312, - "is-cluster-start" : true, - "log-cluster" : 35 - }, - { - "glyph" : 49, - "width" : 12288, - "is-cluster-start" : true, - "log-cluster" : 36 - }, - { - "glyph" : 38, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 37 - }, - { - "glyph" : 36, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 38 - }, - { - "glyph" : 55, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 39 - }, - { - "glyph" : 11, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 40 - }, - { - "glyph" : 19, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 41 - }, - { - "glyph" : 91, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 42 - }, - { - "glyph" : 26, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 43 - }, - { - "glyph" : 22, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 44 - }, - { - "glyph" : 26, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 45 - }, - { - "glyph" : 22, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 46 - }, - { - "glyph" : 26, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 47 - }, - { - "glyph" : 22, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 48 - }, - { - "glyph" : 26, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 49 - }, - { - "glyph" : 22, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 50 - }, - { - "glyph" : 26, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 51 - }, - { - "glyph" : 22, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 52 - }, - { - "glyph" : 15, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 53 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 54 - } - ] - } - ] - }, - { - "start-index" : 55, - "length" : 37, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 55, - "length" : 31, - "text" : "0x73323173656374657374), NULL--", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 12", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 34816 + ], + "line" : { + "start-index" : 55, + "length" : 37, + "start-offset" : 55, + "n-chars" : 37, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 55, + "length" : 31, + "text" : "0x73323173656374657374), NULL--", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 12", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 19, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 91, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 26, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 22, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 22, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 21, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 22, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 20, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 26, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 22, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 25, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 24, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 25, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 22, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 26, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 23, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 25, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 24, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 26, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 22, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 26, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 23, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 21 + }, + { + "glyph" : 12, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 22 + }, + { + "glyph" : 15, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 23 + }, + { + "glyph" : 3, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 24 + }, + { + "glyph" : 49, + "width" : 12288, + "is-cluster-start" : true, + "log-cluster" : 25 + }, + { + "glyph" : 56, + "width" : 12288, + "is-cluster-start" : true, + "log-cluster" : 26 + }, + { + "glyph" : 47, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 27 + }, + { + "glyph" : 47, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 28 + }, + { + "glyph" : 16, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 29 + }, + { + "glyph" : 16, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 30 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 19, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 91, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 26, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 22, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 22, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 21, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 22, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 20, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 26, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 22, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 25, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 24, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 25, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 22, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 26, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 23, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 25, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 24, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 26, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 22, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 26, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 23, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 21 - }, - { - "glyph" : 12, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 22 - }, - { - "glyph" : 15, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 23 - }, - { - "glyph" : 3, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 24 - }, - { - "glyph" : 49, - "width" : 12288, - "is-cluster-start" : true, - "log-cluster" : 25 - }, - { - "glyph" : 56, - "width" : 12288, - "is-cluster-start" : true, - "log-cluster" : 26 - }, - { - "glyph" : 47, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 27 - }, - { - "glyph" : 47, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 28 - }, - { - "glyph" : 16, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 29 - }, - { - "glyph" : 16, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 30 - } - ] - }, - { - "offset" : 86, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 12", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 86, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 12", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 31744, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 31744, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 87, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 12", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 87, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 12", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 81920, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 81920, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 88, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 12", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 88, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 12", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 81920, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 81920, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 89, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 12", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 89, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 12", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 81920, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 81920, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 90, - "length" : 2, - "text" : "--", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 12", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 90, + "length" : 2, + "text" : "--", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 12", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 16, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 16, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 1 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 16, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 16, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 1 - } - ] - } - ] - }, - { - "start-index" : 92, - "length" : 8, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 92, - "length" : 8, - "text" : ">(MYSQL)", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 12", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 54272 + ], + "line" : { + "start-index" : 92, + "length" : 8, + "start-offset" : 92, + "n-chars" : 8, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 92, + "length" : 8, + "text" : ">(MYSQL)", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 12", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 33, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 11, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 48, + "width" : 14336, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 60, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 54, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 52, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 47, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 12, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 7 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 33, - "width" : 13312, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 11, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 48, - "width" : 14336, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 60, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 54, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 52, - "width" : 13312, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 47, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 12, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 7 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/tabs-nowrap.layout b/tests/layouts/tabs-nowrap.layout index 31ff3ea2..f80cc266 100644 --- a/tests/layouts/tabs-nowrap.layout +++ b/tests/layouts/tabs-nowrap.layout @@ -23,340 +23,367 @@ } ], "font" : "DejaVu Sans Mono 32", + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 239616, "height" : 104448, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 5, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 3, - "text" : "123", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "DejaVu Sans Mono 32", - "checksum" : "84c5467cadd1f6f23db0d9fbb6377e0d301334d3b5f36e6d5acebd34d0857d3a", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 40960 + ], + "line" : { + "start-index" : 0, + "length" : 5, + "start-offset" : 0, + "n-chars" : 5, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 3, + "text" : "123", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "DejaVu Sans Mono 32", + "checksum" : "84c5467cadd1f6f23db0d9fbb6377e0d301334d3b5f36e6d5acebd34d0857d3a", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "type" : "font-features", + "value" : "tnum=1" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 20, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 21, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 22, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "font-features", - "value" : "tnum=1" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 20, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 21, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 1 + { + "offset" : 3, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "DejaVu Sans Mono 32", + "checksum" : "84c5467cadd1f6f23db0d9fbb6377e0d301334d3b5f36e6d5acebd34d0857d3a", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 22, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - }, - { - "offset" : 3, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "DejaVu Sans Mono 32", - "checksum" : "84c5467cadd1f6f23db0d9fbb6377e0d301334d3b5f36e6d5acebd34d0857d3a", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "type" : "font-features", + "value" : "tnum=1" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 133120, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "font-features", - "value" : "tnum=1" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 133120, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 4, - "length" : 1, - "text" : "9", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "DejaVu Sans Mono 32", - "checksum" : "84c5467cadd1f6f23db0d9fbb6377e0d301334d3b5f36e6d5acebd34d0857d3a", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 4, + "length" : 1, + "text" : "9", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "DejaVu Sans Mono 32", + "checksum" : "84c5467cadd1f6f23db0d9fbb6377e0d301334d3b5f36e6d5acebd34d0857d3a", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "type" : "font-features", + "value" : "tnum=1" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 28, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "font-features", - "value" : "tnum=1" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 28, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } }, { - "start-index" : 6, - "length" : 9, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 6, - "length" : 9, - "text" : "123456789", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "DejaVu Sans Mono 32", - "checksum" : "84c5467cadd1f6f23db0d9fbb6377e0d301334d3b5f36e6d5acebd34d0857d3a", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 - ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "font-features", - "value" : "tnum=1" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 20, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 0 + "position" : [ + 0, + 93184 + ], + "line" : { + "start-index" : 6, + "length" : 9, + "start-offset" : 6, + "n-chars" : 9, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 6, + "length" : 9, + "text" : "123456789", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "DejaVu Sans Mono 32", + "checksum" : "84c5467cadd1f6f23db0d9fbb6377e0d301334d3b5f36e6d5acebd34d0857d3a", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 21, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 22, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 23, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 24, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 25, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 26, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 27, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 28, - "width" : 26624, - "is-cluster-start" : true, - "log-cluster" : 8 - } - ] - } - ] + "flags" : 0, + "extra-attributes" : [ + { + "type" : "font-features", + "value" : "tnum=1" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 20, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 21, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 22, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 23, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 24, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 25, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 26, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 27, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 28, + "width" : 26624, + "is-cluster-start" : true, + "log-cluster" : 8 + } + ] + } + ] + } } ] } diff --git a/tests/layouts/tabs.layout b/tests/layouts/tabs.layout index 6ed604d7..76ce2f0c 100644 --- a/tests/layouts/tabs.layout +++ b/tests/layouts/tabs.layout @@ -47,1789 +47,1829 @@ ] }, "width" : 460800, + "log-attrs" : [ + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "cursor-position" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 460800, "height" : 73728, - "log-attrs" : [ - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "cursor-position" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 21, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 19456 + ], + "line" : { + "start-index" : 0, + "length" : 21, + "start-offset" : 0, + "n-chars" : 21, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 37376, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 37376, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 1, - "length" : 3, - "text" : "0.1", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 1, + "length" : 3, + "text" : "0.1", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 964, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 1058, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 965, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 964, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 1058, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 965, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - }, - { - "offset" : 4, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 4, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 58368, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 58368, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 5, - "length" : 5, - "text" : "100.5", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 5, + "length" : 5, + "text" : "100.5", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 965, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 964, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 964, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 1058, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 969, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 4 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 965, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 964, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 964, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 1058, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 969, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 4 - } - ] - }, - { - "offset" : 10, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 10, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 89600, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 89600, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 11, - "length" : 2, - "text" : "so", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 11, + "length" : 2, + "text" : "so", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 417, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 370, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 1 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 417, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 370, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 1 - } - ] - }, - { - "offset" : 13, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 13, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 58880, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 58880, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 14, - "length" : 4, - "text" : "more", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 14, + "length" : 4, + "text" : "more", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 358, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 370, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 409, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 287, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 3 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 358, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 370, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 409, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 287, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 3 - } - ] - }, - { - "offset" : 18, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 18, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 58880, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 58880, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 19, - "length" : 2, - "text" : "so", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 19, + "length" : 2, + "text" : "so", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 417, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 370, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 1 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 417, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 370, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 1 - } - ] - } - ] - }, - { - "start-index" : 22, - "length" : 23, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 22, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 44032 + ], + "line" : { + "start-index" : 22, + "length" : 23, + "start-offset" : 22, + "n-chars" : 23, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 22, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 37376, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 37376, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 23, - "length" : 4, - "text" : "0.02", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 23, + "length" : 4, + "text" : "0.02", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 964, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 1058, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 964, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 966, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 3 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 964, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 1058, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 964, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 966, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 3 - } - ] - }, - { - "offset" : 27, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 27, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 54272, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 54272, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 28, - "length" : 5, - "text" : "20.25", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 28, + "length" : 5, + "text" : "20.25", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 966, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 964, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 1058, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 966, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 969, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 4 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 966, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 964, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 1058, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 966, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 969, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 4 - } - ] - }, - { - "offset" : 33, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 33, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 79360, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 79360, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 34, - "length" : 3, - "text" : "and", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 34, + "length" : 3, + "text" : "and", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 244, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 360, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 280, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 244, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 360, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 280, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - }, - { - "offset" : 37, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 37, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 53248, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 53248, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 38, - "length" : 3, - "text" : "and", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 38, + "length" : 3, + "text" : "and", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 244, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 360, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 280, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 244, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 360, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 280, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - }, - { - "offset" : 41, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 41, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 53248, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 53248, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 42, - "length" : 3, - "text" : "and", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 42, + "length" : 3, + "text" : "and", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 244, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 360, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 280, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 244, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 360, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 280, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - } - ] - }, - { - "start-index" : 46, - "length" : 23, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 46, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 68608 + ], + "line" : { + "start-index" : 46, + "length" : 23, + "start-offset" : 46, + "n-chars" : 23, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 46, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 37376, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 37376, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 47, - "length" : 5, - "text" : "0.003", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 47, + "length" : 5, + "text" : "0.003", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 964, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 1058, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 964, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 964, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 967, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 4 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 964, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 1058, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 964, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 964, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 967, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 4 - } - ] - }, - { - "offset" : 52, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 52, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 56320, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 56320, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 53, - "length" : 3, - "text" : "1.9", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 53, + "length" : 3, + "text" : "1.9", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 965, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 1058, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 973, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 965, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 1058, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 973, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - }, - { - "offset" : 56, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 56, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 88576, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 88576, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 57, - "length" : 4, - "text" : "more", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 57, + "length" : 4, + "text" : "more", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 358, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 370, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 409, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 287, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 3 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 358, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 370, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 409, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 287, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 3 - } - ] - }, - { - "offset" : 61, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 61, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 46080, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 46080, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 62, - "length" : 2, - "text" : "so", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 62, + "length" : 2, + "text" : "so", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 417, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 370, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 1 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 417, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 370, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 1 - } - ] - }, - { - "offset" : 64, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 64, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 46080, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 46080, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 65, - "length" : 4, - "text" : "more", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 14 @wght=400", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 65, + "length" : 4, + "text" : "more", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 14 @wght=400", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 358, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 370, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 409, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 287, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 3 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 358, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 370, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 409, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 287, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 3 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-1.layout b/tests/layouts/valid-1.layout index ad5e78dc..8e173884 100644 --- a/tests/layouts/valid-1.layout +++ b/tests/layouts/valid-1.layout @@ -33,644 +33,658 @@ "font" : "Cantarell 11", "ellipsize" : "end", "width" : 225280, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : true, + "wrapped" : false, + "ellipsized" : true, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 225280, "height" : 19456, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 48, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 22, - "text" : "This is a test of the ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 48, + "start-offset" : 0, + "n-chars" : 48, + "wrapped" : false, + "ellipsized" : true, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 22, + "text" : "This is a test of the ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 187, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 311, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 21 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 187, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 311, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 21 - } - ] - }, - { - "offset" : 22, - "length" : 11, - "text" : "automatic e", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 22, + "length" : 11, + "text" : "automatic e", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "start" : 22, + "end" : 41, + "type" : "foreground", + "value" : "#00000000ffff" + }, + { + "start" : 22, + "end" : 41, + "type" : "underline", + "value" : "single" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 438, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 358, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 273, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 10 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 22, - "end" : 41, - "type" : "foreground", - "value" : "#00000000ffff" - }, - { - "start" : 22, - "end" : 41, - "type" : "underline", - "value" : "single" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 438, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 358, - "width" : 13312, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 273, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 10 - } - ] - }, - { - "offset" : 33, - "length" : 15, - "text" : "mergency brake!", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 33, + "length" : 15, + "text" : "mergency brake!", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 2, + "extra-attributes" : [ + { + "end" : 2147483647, + "type" : "fallback", + "value" : false + }, + { + "start" : 22, + "end" : 41, + "type" : "foreground", + "value" : "#00000000ffff" + }, + { + "start" : 22, + "end" : 41, + "type" : "underline", + "value" : "single" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1062, + "width" : 20480, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 2, - "extra-attributes" : [ - { - "end" : 2147483647, - "type" : "fallback", - "value" : false - }, - { - "start" : 22, - "end" : 41, - "type" : "foreground", - "value" : "#00000000ffff" - }, - { - "start" : 22, - "end" : 41, - "type" : "underline", - "value" : "single" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1062, - "width" : 20480, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-10.layout b/tests/layouts/valid-10.layout index 95655633..042d4101 100644 --- a/tests/layouts/valid-10.layout +++ b/tests/layouts/valid-10.layout @@ -18,386 +18,399 @@ "comment" : "Mixed-direction ellipsization", "text" : "Hello שלום Γειά σας", "font" : "Cantarell 11", - "justify" : true, "ellipsize" : "end", "width" : 102400, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "backspace-deletes-character" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : true, + "wrapped" : false, + "ellipsized" : true, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 102400, "height" : 19456, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "backspace-deletes-character" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 30, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 6, - "text" : "Hello ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 30, + "start-offset" : 0, + "n-chars" : 19, + "wrapped" : false, + "ellipsized" : true, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 6, + "text" : "Hello ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 76, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 5 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 76, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 + { + "offset" : 6, + "length" : 8, + "text" : "שלום", + "bidi-level" : 1, + "gravity" : "south", + "language" : "he", + "script" : "hebrew", + "font" : { + "description" : "DejaVu Sans 11", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 5 - } - ] - }, - { - "offset" : 6, - "length" : 8, - "text" : "שלום", - "bidi-level" : 1, - "gravity" : "south", - "language" : "he", - "script" : "hebrew", - "font" : { - "description" : "DejaVu Sans 11", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1332, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 1324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 1331, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 1344, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1332, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 1324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 4 + { + "offset" : 14, + "length" : 1, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "he", + "script" : "hebrew", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 1331, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 1344, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 14, - "length" : 1, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "he", - "script" : "hebrew", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 15, - "length" : 2, - "text" : "Γ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "el", - "script" : "greek", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 15, + "length" : 2, + "text" : "Γ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "el", + "script" : "greek", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 677, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 677, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 17, - "length" : 13, - "text" : "ειά σας", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 17, + "length" : 13, + "text" : "ειά σας", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 2, + "extra-attributes" : [ + { + "end" : 2147483647, + "type" : "fallback", + "value" : false + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1062, + "width" : 19456, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 2, - "extra-attributes" : [ - { - "end" : 2147483647, - "type" : "fallback", - "value" : false - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1062, - "width" : 19456, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-11.layout b/tests/layouts/valid-11.layout index f057aed2..b5511f86 100644 --- a/tests/layouts/valid-11.layout +++ b/tests/layouts/valid-11.layout @@ -55,413 +55,427 @@ "font" : "Cantarell 11", "wrap" : "char", "width" : 225280, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 109568, "height" : 20480, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 16, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 6, - "text" : "double", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 16384 + ], + "line" : { + "start-index" : 0, + "length" : 16, + "start-offset" : 0, + "n-chars" : 16, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 6, + "text" : "double", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "end" : 6, + "type" : "underline", + "value" : "double" + }, + { + "end" : 6, + "type" : "overline", + "value" : "single" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 280, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 438, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 272, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 5 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "end" : 6, - "type" : "underline", - "value" : "double" - }, - { - "end" : 6, - "type" : "overline", - "value" : "single" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 280, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 438, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 2 + { + "offset" : 6, + "length" : 1, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 272, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 5 - } - ] - }, - { - "offset" : 6, - "length" : 1, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 7, - "length" : 3, - "text" : "low", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 7, + "length" : 3, + "text" : "low", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "start" : 7, + "end" : 10, + "type" : "underline", + "value" : "low" + }, + { + "start" : 7, + "end" : 10, + "type" : "strikethrough", + "value" : true + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 467, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 7, - "end" : 10, - "type" : "underline", - "value" : "low" - }, - { - "start" : 7, - "end" : 10, - "type" : "strikethrough", - "value" : true - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 0 + { + "offset" : 10, + "length" : 1, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 467, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - }, - { - "offset" : 10, - "length" : 1, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 11, - "length" : 5, - "text" : "error", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 11, + "length" : 5, + "text" : "error", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "start" : 11, + "end" : 16, + "type" : "rise", + "value" : 1024 + }, + { + "start" : 11, + "end" : 16, + "type" : "underline", + "value" : "error" + } + ], + "y-offset" : 1024, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 4 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 11, - "end" : 16, - "type" : "rise", - "value" : 1024 - }, - { - "start" : 11, - "end" : 16, - "type" : "underline", - "value" : "error" - } - ], - "y-offset" : 1024, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 4 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-12.layout b/tests/layouts/valid-12.layout index f47ae17a..753b703e 100644 --- a/tests/layouts/valid-12.layout +++ b/tests/layouts/valid-12.layout @@ -48,699 +48,726 @@ } ] }, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : false, + "wrapped" : true, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 1, "width" : 179200, "height" : 38912, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 10, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 1, - "text" : "a", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 10, + "start-offset" : 0, + "n-chars" : 8, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 1, + "text" : "a", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 1, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 1, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 43008, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 43008, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 2, - "length" : 1, - "text" : "b", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 2, + "length" : 1, + "text" : "b", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 272, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 272, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 3, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 3, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 43008, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 43008, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 4, - "length" : 1, - "text" : "c", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 4, + "length" : 1, + "text" : "c", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 273, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 273, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 5, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 5, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 44032, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 44032, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 6, - "length" : 1, - "text" : "d", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 6, + "length" : 1, + "text" : "d", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 280, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 280, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 7, - "length" : 3, - "text" : "
", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 7, + "length" : 3, + "text" : "
", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268443688, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268443688, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } }, { - "start-index" : 10, - "length" : 7, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 10, - "length" : 1, - "text" : "e", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 34816 + ], + "line" : { + "start-index" : 10, + "length" : 7, + "start-offset" : 8, + "n-chars" : 7, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 10, + "length" : 1, + "text" : "e", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 11, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 11, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 43008, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 43008, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 12, - "length" : 1, - "text" : "f", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 12, + "length" : 1, + "text" : "f", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 311, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 311, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 13, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 13, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 46080, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 46080, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 14, - "length" : 1, - "text" : "g", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 14, + "length" : 1, + "text" : "g", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 15, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 15, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 43008, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 43008, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 16, - "length" : 1, - "text" : "h", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 16, + "length" : 1, + "text" : "h", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-13.layout b/tests/layouts/valid-13.layout index b690fa9c..16f7824e 100644 --- a/tests/layouts/valid-13.layout +++ b/tests/layouts/valid-13.layout @@ -48,782 +48,726 @@ } ] }, - "single-paragraph" : true, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : true, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 1, - "width" : 315392, - "height" : 19456, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], + "width" : 179200, + "height" : 38912, "lines" : [ { - "start-index" : 0, - "length" : 17, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 1, - "text" : "a", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 10, + "start-offset" : 0, + "n-chars" : 8, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 1, + "text" : "a", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 1, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 1, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 43008, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 43008, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 2, - "length" : 1, - "text" : "b", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 2, + "length" : 1, + "text" : "b", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 272, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 272, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 3, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 3, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 43008, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 43008, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 4, - "length" : 1, - "text" : "c", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 4, + "length" : 1, + "text" : "c", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 273, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 273, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 5, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 5, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 44032, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 44032, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 6, - "length" : 1, - "text" : "d", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 6, + "length" : 1, + "text" : "d", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 280, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 280, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 7, - "length" : 3, - "text" : "
", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 7, + "length" : 3, + "text" : "
", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268443688, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268443688, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 10, - "length" : 1, - "text" : "e", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + } + ] + } + }, + { + "position" : [ + 0, + 34816 + ], + "line" : { + "start-index" : 10, + "length" : 7, + "start-offset" : 8, + "n-chars" : 7, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 10, + "length" : 1, + "text" : "e", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 11, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 11, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 43008, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 12, - "length" : 1, - "text" : "f", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 12, + "length" : 1, + "text" : "f", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 311, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 311, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 13, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 13, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 46080, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 46080, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 14, - "length" : 1, - "text" : "g", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 14, + "length" : 1, + "text" : "g", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 15, - "length" : 1, - "text" : "\t", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 15, + "length" : 1, + "text" : "\t", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 43008, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 43008, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 16, - "length" : 1, - "text" : "h", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 16, + "length" : 1, + "text" : "h", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 2 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-14.layout b/tests/layouts/valid-14.layout index 427cb5ee..acb3ab44 100644 --- a/tests/layouts/valid-14.layout +++ b/tests/layouts/valid-14.layout @@ -20,491 +20,540 @@ "ellipsize" : "start", "width" : 161792, "line-spacing" : 1.5, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "backspace-deletes-character" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "backspace-deletes-character" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : true, + "wrapped" : false, + "ellipsized" : true, + "hypenated" : false, "unknown-glyphs" : 1, "width" : 161792, "height" : 20480, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "backspace-deletes-character" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "backspace-deletes-character" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 37, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 6, - "text" : "你好", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 16384 + ], + "line" : { + "start-index" : 0, + "length" : 37, + "start-offset" : 0, + "n-chars" : 22, + "wrapped" : false, + "ellipsized" : true, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 6, + "text" : "你好", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 2, + "extra-attributes" : [ + { + "end" : 2147483647, + "type" : "line-height", + "value" : 1.5 + }, + { + "end" : 2147483647, + "type" : "fallback", + "value" : true + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1058, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 1058, + "width" : 4096, + "log-cluster" : 0 + }, + { + "glyph" : 1058, + "width" : 17408, + "log-cluster" : 0 + } ] }, - "flags" : 2, - "extra-attributes" : [ - { - "end" : 2147483647, - "type" : "fallback", - "value" : true - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1058, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 1058, - "width" : 4096, - "log-cluster" : 0 + { + "offset" : 6, + "length" : 1, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "xx", + "script" : "han", + "font" : { + "description" : "Droid Sans Japanese 11", + "checksum" : "9e7449c453527829c963330ba36f4de3b20911e185a1df08a97082bb69e795d7", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 1058, - "width" : 17408, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 6, - "length" : 1, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "xx", - "script" : "han", - "font" : { - "description" : "Droid Sans Japanese 11", - "checksum" : "9e7449c453527829c963330ba36f4de3b20911e185a1df08a97082bb69e795d7", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "type" : "line-height", + "value" : 1.5 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435488, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435488, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 7, - "length" : 6, - "text" : "Hello ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 7, + "length" : 6, + "text" : "Hello ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "type" : "line-height", + "value" : 1.5 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 76, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 5 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 76, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 0 + { + "offset" : 13, + "length" : 8, + "text" : "שלום", + "bidi-level" : 1, + "gravity" : "south", + "language" : "he", + "script" : "hebrew", + "font" : { + "description" : "DejaVu Sans 11", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 5 - } - ] - }, - { - "offset" : 13, - "length" : 8, - "text" : "שלום", - "bidi-level" : 1, - "gravity" : "south", - "language" : "he", - "script" : "hebrew", - "font" : { - "description" : "DejaVu Sans 11", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "type" : "line-height", + "value" : 1.5 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1332, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 1324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 1331, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 1344, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1332, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 1324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 4 + { + "offset" : 21, + "length" : 1, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "he", + "script" : "hebrew", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 1331, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 1344, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 21, - "length" : 1, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "he", - "script" : "hebrew", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "type" : "line-height", + "value" : 1.5 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 22, - "length" : 15, - "text" : "Γειά σας", - "bidi-level" : 0, - "gravity" : "south", - "language" : "el", - "script" : "greek", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 22, + "length" : 15, + "text" : "Γειά σας", + "bidi-level" : 0, + "gravity" : "south", + "language" : "el", + "script" : "greek", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "type" : "line-height", + "value" : 1.5 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 677, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 808, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 812, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 837, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 822, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 804, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 821, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 13 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 677, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 808, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 812, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 837, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 822, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 804, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 821, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 13 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-15.layout b/tests/layouts/valid-15.layout index f65f4076..fbe78ca7 100644 --- a/tests/layouts/valid-15.layout +++ b/tests/layouts/valid-15.layout @@ -21,1006 +21,1033 @@ "ellipsize" : "end", "width" : 153600, "height" : 40960, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : true, + "wrapped" : true, + "ellipsized" : true, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 153600, "height" : 38912, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 25, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 25, - "text" : "Lets see if this text is ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 25, + "start-offset" : 0, + "n-chars" : 25, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 25, + "text" : "Lets see if this text is ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 103, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 311, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 472, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 21 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 22 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 23 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 24 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 103, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 311, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 16 + } + ] + } + }, + { + "position" : [ + 0, + 34816 + ], + "line" : { + "start-index" : 25, + "length" : 73, + "start-offset" : 25, + "n-chars" : 73, + "wrapped" : false, + "ellipsized" : true, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 25, + "length" : 20, + "text" : "long enough to wrap ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 472, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 21 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 22 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 23 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 24 - } - ] - } - ] - }, - { - "start-index" : 25, - "length" : 73, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 25, - "length" : 20, - "text" : "long enough to wrap ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 438, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 467, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 406, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 19 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 5 + { + "offset" : 45, + "length" : 53, + "text" : "due to height limitations. It might, or it might not.", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 438, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 467, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 406, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 19 - } - ] - }, - { - "offset" : 45, - "length" : 53, - "text" : "due to height limitations. It might, or it might not.", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 2, + "extra-attributes" : [ + { + "end" : 2147483647, + "type" : "fallback", + "value" : false + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1062, + "width" : 16384, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 2, - "extra-attributes" : [ - { - "end" : 2147483647, - "type" : "fallback", - "value" : false - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1062, - "width" : 16384, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-16.layout b/tests/layouts/valid-16.layout index 16a035af..37268057 100644 --- a/tests/layouts/valid-16.layout +++ b/tests/layouts/valid-16.layout @@ -18,1010 +18,1037 @@ "comment" : "", "text" : "Lets see if this text is long enough to wrap due to height limitations. It might, or it might not.", "font" : "Cantarell 11", - "wrap" : "word-char", + "wrap" : "word | char", "ellipsize" : "end", "width" : 153600, "height" : -2, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : true, + "wrapped" : true, + "ellipsized" : true, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 153600, "height" : 38912, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 25, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 25, - "text" : "Lets see if this text is ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 25, + "start-offset" : 0, + "n-chars" : 25, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 25, + "text" : "Lets see if this text is ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 103, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 311, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 472, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 21 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 22 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 23 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 24 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 103, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 311, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 16 + } + ] + } + }, + { + "position" : [ + 0, + 34816 + ], + "line" : { + "start-index" : 25, + "length" : 73, + "start-offset" : 25, + "n-chars" : 73, + "wrapped" : false, + "ellipsized" : true, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 25, + "length" : 20, + "text" : "long enough to wrap ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 472, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 21 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 22 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 23 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 24 - } - ] - } - ] - }, - { - "start-index" : 25, - "length" : 73, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 25, - "length" : 20, - "text" : "long enough to wrap ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 438, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 467, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 406, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 19 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 5 + { + "offset" : 45, + "length" : 53, + "text" : "due to height limitations. It might, or it might not.", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 438, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 467, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 406, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 19 - } - ] - }, - { - "offset" : 45, - "length" : 53, - "text" : "due to height limitations. It might, or it might not.", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 2, + "extra-attributes" : [ + { + "end" : 2147483647, + "type" : "fallback", + "value" : false + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1062, + "width" : 16384, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 2, - "extra-attributes" : [ - { - "end" : 2147483647, - "type" : "fallback", - "value" : false - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1062, - "width" : 16384, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-17.layout b/tests/layouts/valid-17.layout index edd50822..2e9405c4 100644 --- a/tests/layouts/valid-17.layout +++ b/tests/layouts/valid-17.layout @@ -18,448 +18,462 @@ "comment" : "Hyphenation point should get replaced with a hyphen", "text" : "some‧bla‧bla‧bla", "font" : "Cantarell 11", - "justify" : true, "width" : 102400, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true, + "break-removes-preceding" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true, + "break-removes-preceding" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true, + "break-removes-preceding" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : false, + "wrapped" : true, + "ellipsized" : false, + "hypenated" : true, "unknown-glyphs" : 0, - "width" : 96976, + "width" : 93184, "height" : 38912, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true, - "break-removes-preceding" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true, - "break-removes-preceding" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true, - "break-removes-preceding" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 19, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 4, - "text" : "some", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 19, + "start-offset" : 0, + "n-chars" : 13, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : true, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 4, + "text" : "some", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 358, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 417, - "width" : 7326, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 370, - "width" : 8508, - "x-offset" : 158, - "is-cluster-start" : true, - "log-cluster" : 1 + { + "offset" : 4, + "length" : 3, + "text" : "‧", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 11", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 358, - "width" : 13628, - "x-offset" : 158, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 287, - "width" : 8508, - "x-offset" : 158, - "is-cluster-start" : true, - "log-cluster" : 3 - } - ] - }, - { - "offset" : 4, - "length" : 3, - "text" : "‧", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 11", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 2826, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 2826, - "width" : 5436, - "x-offset" : 158, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 7, - "length" : 3, - "text" : "bla", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 7, + "length" : 3, + "text" : "bla", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 272, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 272, - "width" : 8508, - "x-offset" : 158, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 349, - "width" : 4412, - "x-offset" : 158, - "is-cluster-start" : true, - "log-cluster" : 1 + { + "offset" : 10, + "length" : 3, + "text" : "‧", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 11", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 244, - "width" : 8508, - "x-offset" : 158, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - }, - { - "offset" : 10, - "length" : 3, - "text" : "‧", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 11", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 2826, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 2826, - "width" : 5436, - "x-offset" : 158, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 13, - "length" : 3, - "text" : "bla", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 13, + "length" : 3, + "text" : "bla", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 272, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 272, - "width" : 8508, - "x-offset" : 158, - "is-cluster-start" : true, - "log-cluster" : 0 + { + "offset" : 16, + "length" : 3, + "text" : "‧", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "DejaVu Sans 11", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 349, - "width" : 4412, - "x-offset" : 158, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 244, - "width" : 8508, - "x-offset" : 158, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - }, - { - "offset" : 16, - "length" : 3, - "text" : "‧", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "DejaVu Sans 11", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 4, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 2803, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 4, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 2803, - "width" : 5278, - "x-offset" : 158, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } }, { - "start-index" : 19, - "length" : 3, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 19, - "length" : 3, - "text" : "bla", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 34816 + ], + "line" : { + "start-index" : 19, + "length" : 3, + "start-offset" : 13, + "n-chars" : 3, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 19, + "length" : 3, + "text" : "bla", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 272, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 272, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-18.layout b/tests/layouts/valid-18.layout index 849b136e..763cba88 100644 --- a/tests/layouts/valid-18.layout +++ b/tests/layouts/valid-18.layout @@ -25,725 +25,752 @@ } ], "font" : "Cantarell 11", + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : false, + "wrapped" : true, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 5, "width" : 302080, "height" : 38912, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 19, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 16, - "text" : "some line breaks", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 19, + "start-offset" : 0, + "n-chars" : 17, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 16, + "text" : "some line breaks", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "end" : 57, + "type" : "show", + "value" : 7 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 358, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 1195, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 1195, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 272, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 345, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 15 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "end" : 57, - "type" : "show", - "value" : 7 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 358, - "width" : 13312, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 1195, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 1195, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 272, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 345, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 15 - } - ] - }, - { - "offset" : 16, - "length" : 3, - "text" : "
", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 16, + "length" : 3, + "text" : "
", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "end" : 57, + "type" : "show", + "value" : 7 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268443688, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "end" : 57, - "type" : "show", - "value" : 7 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268443688, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] - }, - { - "start-index" : 19, - "length" : 38, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 19, - "length" : 38, - "text" : "and mis­ce­llaneous ignora‌bles", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 34816 + ], + "line" : { + "start-index" : 19, + "length" : 38, + "start-offset" : 17, + "n-chars" : 32, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 19, + "length" : 38, + "text" : "and mis­ce­llaneous ignora‌bles", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "end" : 57, + "type" : "show", + "value" : 7 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 280, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 1195, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 358, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 268435629, + "width" : 23552, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 273, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 268435629, + "width" : 23552, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 438, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 1195, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 21 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 22 + }, + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 23 + }, + { + "glyph" : 268500735, + "width" : 23552, + "is-cluster-start" : true, + "log-cluster" : 24 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 27 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 28 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 29 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 30 + }, + { + "glyph" : 268443660, + "width" : 17408, + "is-cluster-start" : true, + "log-cluster" : 31 + }, + { + "glyph" : 272, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 34 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 35 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 36 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 37 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "end" : 57, - "type" : "show", - "value" : 7 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 280, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 1195, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 358, - "width" : 13312, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 268435629, - "width" : 23552, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 273, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 268435629, - "width" : 23552, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 438, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 1195, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 21 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 22 - }, - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 23 - }, - { - "glyph" : 268500735, - "width" : 23552, - "is-cluster-start" : true, - "log-cluster" : 24 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 27 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 28 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 29 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 30 - }, - { - "glyph" : 268443660, - "width" : 17408, - "is-cluster-start" : true, - "log-cluster" : 31 - }, - { - "glyph" : 272, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 34 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 35 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 36 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 37 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-19.layout b/tests/layouts/valid-19.layout index 38b9f292..3abfade3 100644 --- a/tests/layouts/valid-19.layout +++ b/tests/layouts/valid-19.layout @@ -18,599 +18,613 @@ "comment" : "Emoji", "text" : "😊︎ 😊️ 🇩🇪 ✊ ✋🏾 0 # 🏴󠁵󠁳󠁣󠁡󠁿 ©", "font" : "Cantarell 11", + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + {}, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + {}, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + {}, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + {}, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + {}, + {}, + {}, + {}, + {}, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 166912, "height" : 19456, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - {}, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - {}, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - {}, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - {}, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - {}, - {}, - {}, - {}, - {}, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 68, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 8, - "text" : "😊︎ ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "DejaVu Sans 11", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 - ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 5867, - "width" : 15360, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 4 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 68, + "start-offset" : 0, + "n-chars" : 26, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 8, + "text" : "😊︎ ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "DejaVu Sans 11", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 3, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 7 - } - ] - }, - { - "offset" : 8, - "length" : 7, - "text" : "😊️", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Noto Color Emoji 11", - "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", - "matrix" : [ - 0.13455956135321101, - -0, - -0, - 0.13455956135321101, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 5867, + "width" : 15360, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 3, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 7 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 13, - "width" : 18432, - "is-cluster-start" : true, - "is-color" : true, - "log-cluster" : 0 + { + "offset" : 8, + "length" : 7, + "text" : "😊️", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Noto Color Emoji 11", + "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", + "matrix" : [ + 0.13455956135321101, + -0, + -0, + 0.13455956135321101, + 0, + 0 + ] }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 4 - } - ] - }, - { - "offset" : 15, - "length" : 1, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 13, + "width" : 18432, + "is-cluster-start" : true, + "is-color" : true, + "log-cluster" : 0 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 4 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 16, - "length" : 8, - "text" : "🇩🇪", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Noto Color Emoji 11", - "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", - "matrix" : [ - 0.13455956135321101, - -0, - -0, - 0.13455956135321101, - 0, - 0 + { + "offset" : 15, + "length" : 1, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 22, - "width" : 18432, - "is-cluster-start" : true, - "is-color" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 24, - "length" : 1, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 16, + "length" : 8, + "text" : "🇩🇪", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Noto Color Emoji 11", + "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", + "matrix" : [ + 0.13455956135321101, + -0, + -0, + 0.13455956135321101, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 22, + "width" : 18432, + "is-cluster-start" : true, + "is-color" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 25, - "length" : 3, - "text" : "✊", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Noto Color Emoji 11", - "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", - "matrix" : [ - 0.13455956135321101, - -0, - -0, - 0.13455956135321101, - 0, - 0 + { + "offset" : 24, + "length" : 1, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 6, - "width" : 18432, - "is-cluster-start" : true, - "is-color" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 28, - "length" : 1, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 25, + "length" : 3, + "text" : "✊", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Noto Color Emoji 11", + "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", + "matrix" : [ + 0.13455956135321101, + -0, + -0, + 0.13455956135321101, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 6, + "width" : 18432, + "is-cluster-start" : true, + "is-color" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 29, - "length" : 7, - "text" : "✋🏾", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Noto Color Emoji 11", - "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", - "matrix" : [ - 0.13455956135321101, - -0, - -0, - 0.13455956135321101, - 0, - 0 + { + "offset" : 28, + "length" : 1, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 21, - "width" : 18432, - "is-cluster-start" : true, - "is-color" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 36, - "length" : 5, - "text" : " 0 # ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 29, + "length" : 7, + "text" : "✋🏾", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Noto Color Emoji 11", + "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", + "matrix" : [ + 0.13455956135321101, + -0, + -0, + 0.13455956135321101, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 21, + "width" : 18432, + "is-cluster-start" : true, + "is-color" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 964, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 2 + { + "offset" : 36, + "length" : 5, + "text" : " 0 # ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 1070, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 4 - } - ] - }, - { - "offset" : 41, - "length" : 24, - "text" : "🏴󠁵󠁳󠁣󠁡󠁿", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Noto Color Emoji 11", - "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", - "matrix" : [ - 0.13455956135321101, - -0, - -0, - 0.13455956135321101, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 964, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 1070, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 4 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 10, - "width" : 18432, - "is-cluster-start" : true, - "is-color" : true, - "log-cluster" : 0 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 16 + { + "offset" : 41, + "length" : 24, + "text" : "🏴󠁵󠁳󠁣󠁡󠁿", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Noto Color Emoji 11", + "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", + "matrix" : [ + 0.13455956135321101, + -0, + -0, + 0.13455956135321101, + 0, + 0 + ] }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 20 - } - ] - }, - { - "offset" : 65, - "length" : 3, - "text" : " ©", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 10, + "width" : 18432, + "is-cluster-start" : true, + "is-color" : true, + "log-cluster" : 0 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 20 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 + { + "offset" : 65, + "length" : 3, + "text" : " ©", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 1182, - "width" : 13312, - "is-cluster-start" : true, - "log-cluster" : 1 - } - ] - } - ] + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 1182, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 1 + } + ] + } + ] + } } ] } diff --git a/tests/layouts/valid-2.layout b/tests/layouts/valid-2.layout index e51c9b57..cc6a9630 100644 --- a/tests/layouts/valid-2.layout +++ b/tests/layouts/valid-2.layout @@ -32,572 +32,586 @@ } ], "font" : "Cantarell 11", + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 200704, "height" : 19456, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 32, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 9, - "text" : "test the ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 32, + "start-offset" : 0, + "n-chars" : 32, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 9, + "text" : "test the ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 8 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 8 - } - ] - }, - { - "offset" : 9, - "length" : 4, - "text" : "blue", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 9, + "length" : 4, + "text" : "blue", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 272, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 438, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 272, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 438, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - } - ] - }, - { - "offset" : 13, - "length" : 7, - "text" : " drink ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 13, + "length" : 7, + "text" : " drink ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 280, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 345, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 6 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 280, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 345, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 6 - } - ] - }, - { - "offset" : 20, - "length" : 5, - "text" : "after", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 20, + "length" : 5, + "text" : "after", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "start" : 20, + "end" : 25, + "type" : "underline", + "value" : "single" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 311, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 4 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 20, - "end" : 25, - "type" : "underline", - "value" : "single" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 311, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 4 - } - ] - }, - { - "offset" : 25, - "length" : 7, - "text" : " dinner", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 25, + "length" : 7, + "text" : " dinner", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 280, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 6 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 280, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 6 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-20.layout b/tests/layouts/valid-20.layout index 93b8a1b1..75edc52f 100644 --- a/tests/layouts/valid-20.layout +++ b/tests/layouts/valid-20.layout @@ -36,189 +36,203 @@ } ], "font" : "Cantarell 11", + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 67584, "height" : 25600, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 6, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 3, - "text" : "abc", - "bidi-level" : 0, - "gravity" : "east", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell Rotated-Left 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 6, + "start-offset" : 0, + "n-chars" : 6, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 3, + "text" : "abc", + "bidi-level" : 0, + "gravity" : "east", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell Rotated-Left 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "end" : 3, + "type" : "gravity", + "value" : "east" + }, + { + "end" : 3, + "type" : "gravity-hint", + "value" : "strong" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 244, + "width" : 15360, + "x-offset" : 14764, + "y-offset" : 3845, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 272, + "width" : 15360, + "x-offset" : 14764, + "y-offset" : 4280, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 273, + "width" : 15360, + "x-offset" : 14764, + "y-offset" : 3507, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "end" : 3, - "type" : "gravity", - "value" : "east" - }, - { - "end" : 3, - "type" : "gravity-hint", - "value" : "strong" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 244, - "width" : 15360, - "x-offset" : 14764, - "y-offset" : 3844, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 272, - "width" : 15360, - "x-offset" : 14764, - "y-offset" : 4280, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 273, - "width" : 15360, - "x-offset" : 14764, - "y-offset" : 3506, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - }, - { - "offset" : 3, - "length" : 3, - "text" : "def", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 3, + "length" : 3, + "text" : "def", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "start" : 3, + "end" : 6, + "type" : "gravity", + "value" : "south" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 280, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 311, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 3, - "end" : 6, - "type" : "gravity", - "value" : "south" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 280, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 311, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-21.layout b/tests/layouts/valid-21.layout index 5901ebcd..bd2e9f86 100644 --- a/tests/layouts/valid-21.layout +++ b/tests/layouts/valid-21.layout @@ -24,146 +24,160 @@ } ], "font" : "Cantarell 11", + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + {}, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 1, "width" : 45056, "height" : 19456, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - {}, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 11, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 7, - "text" : "😊️", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Noto Color Emoji 11", - "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", - "matrix" : [ - 0.13455956135321101, - -0, - -0, - 0.13455956135321101, - 0, - 0 - ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 4 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 13, - "width" : 18432, - "is-cluster-start" : true, - "is-color" : true, - "log-cluster" : 0 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 4 - } - ] - }, - { - "offset" : 7, - "length" : 4, - "text" : " ‍", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 11, + "start-offset" : 0, + "n-chars" : 4, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 7, + "text" : "😊️", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Noto Color Emoji 11", + "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", + "matrix" : [ + 0.13455956135321101, + -0, + -0, + 0.13455956135321101, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "type" : "show", + "value" : 4 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 13, + "width" : 18432, + "is-cluster-start" : true, + "is-color" : true, + "log-cluster" : 0 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 4 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "type" : "show", - "value" : 4 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 + { + "offset" : 7, + "length" : 4, + "text" : " ‍", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 268443661, - "width" : 23552, - "is-cluster-start" : true, - "log-cluster" : 1 - } - ] - } - ] + "flags" : 0, + "extra-attributes" : [ + { + "type" : "show", + "value" : 4 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 268443661, + "width" : 23552, + "is-cluster-start" : true, + "log-cluster" : 1 + } + ] + } + ] + } } ] } diff --git a/tests/layouts/valid-22.layout b/tests/layouts/valid-22.layout index 6be94c32..bd6fc5c9 100644 --- a/tests/layouts/valid-22.layout +++ b/tests/layouts/valid-22.layout @@ -98,610 +98,624 @@ } ], "font" : "Cantarell 11", + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 49152, "height" : 22658, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 11, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 1, - "text" : "e", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 16312 + ], + "line" : { + "start-index" : 0, + "length" : 11, + "start-offset" : 0, + "n-chars" : 11, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 1, + "text" : "e", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 1, - "length" : 1, - "text" : "0", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 7.1484375", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 1, + "length" : 1, + "text" : "0", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 7.1484375", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "start" : 1, + "end" : 2, + "type" : "font-scale", + "value" : "subscript" + }, + { + "start" : 1, + "end" : 2, + "type" : "baseline-shift", + "value" : "subscript" + } + ], + "y-offset" : -3274, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 964, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 1, - "end" : 2, - "type" : "font-scale", - "value" : "subscript" - }, - { - "start" : 1, - "end" : 2, - "type" : "baseline-shift", - "value" : "subscript" - } - ], - "y-offset" : -3274, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 964, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 2, - "length" : 4, - "text" : " = o", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 2, + "length" : 4, + "text" : " = o", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 1147, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 1147, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - } - ] - }, - { - "offset" : 6, - "length" : 1, - "text" : "o", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 7.1484375", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 6, + "length" : 1, + "text" : "o", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 7.1484375", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "start" : 6, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 6, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + } + ], + "y-offset" : 5542, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 370, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 6, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 6, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - } - ], - "y-offset" : 5542, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 370, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 7, - "length" : 1, - "text" : "o", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 4.646484375", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 7, + "length" : 1, + "text" : "o", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 4.646484375", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "start" : 6, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 6, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 7, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 7, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + } + ], + "y-offset" : 9144, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 370, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 6, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 6, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - }, - { - "start" : 7, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 7, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - } - ], - "y-offset" : 9144, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 370, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 8, - "length" : 1, - "text" : ".", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 3.0205078125", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 8, + "length" : 1, + "text" : ".", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 3.0205078125", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "start" : 6, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 6, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 7, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 7, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 8, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 8, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + } + ], + "y-offset" : 11485, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1058, + "width" : 1024, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 6, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 6, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - }, - { - "start" : 7, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 7, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - }, - { - "start" : 8, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 8, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - } - ], - "y-offset" : 11485, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1058, - "width" : 1024, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 9, - "length" : 1, - "text" : ".", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 1.962890625", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 9, + "length" : 1, + "text" : ".", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 1.962890625", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "start" : 6, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 6, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 7, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 7, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 8, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 8, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 9, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 9, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + } + ], + "y-offset" : 13007, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1058, + "width" : 1024, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 6, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 6, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - }, - { - "start" : 7, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 7, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - }, - { - "start" : 8, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 8, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - }, - { - "start" : 9, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 9, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - } - ], - "y-offset" : 13007, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1058, - "width" : 1024, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 10, - "length" : 1, - "text" : ".", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 1.2763671875", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + { + "offset" : 10, + "length" : 1, + "text" : ".", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 1.2763671875", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "start" : 6, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 6, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 7, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 7, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 8, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 8, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 9, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 9, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + }, + { + "start" : 10, + "end" : 11, + "type" : "font-scale", + "value" : "superscript" + }, + { + "start" : 10, + "end" : 11, + "type" : "baseline-shift", + "value" : "superscript" + } + ], + "y-offset" : 13996, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1058, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 6, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 6, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - }, - { - "start" : 7, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 7, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - }, - { - "start" : 8, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 8, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - }, - { - "start" : 9, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 9, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - }, - { - "start" : 10, - "end" : 11, - "type" : "font-scale", - "value" : "superscript" - }, - { - "start" : 10, - "end" : 11, - "type" : "baseline-shift", - "value" : "superscript" - } - ], - "y-offset" : 13996, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1058, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-3.layout b/tests/layouts/valid-3.layout index 8ff1dd05..ca2f608b 100644 --- a/tests/layouts/valid-3.layout +++ b/tests/layouts/valid-3.layout @@ -18,191 +18,205 @@ "comment" : "Emoji", "text" : "ABC😀️D", "font" : "Cantarell 11", + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + {}, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 56320, "height" : 19456, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - {}, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 11, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 3, - "text" : "ABC", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 11, + "start-offset" : 0, + "n-chars" : 6, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 3, + "text" : "ABC", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 29, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 30, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 29, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 1 + { + "offset" : 3, + "length" : 7, + "text" : "😀️", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Noto Color Emoji 11", + "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", + "matrix" : [ + 0.13455956135321101, + -0, + -0, + 0.13455956135321101, + 0, + 0 + ] }, - { - "glyph" : 30, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - }, - { - "offset" : 3, - "length" : 7, - "text" : "😀️", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Noto Color Emoji 11", - "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", - "matrix" : [ - 0.13455956135321101, - -0, - -0, - 0.13455956135321101, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 12, + "width" : 18432, + "is-cluster-start" : true, + "is-color" : true, + "log-cluster" : 0 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 4 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 12, - "width" : 18432, - "is-cluster-start" : true, - "is-color" : true, - "log-cluster" : 0 + { + "offset" : 10, + "length" : 1, + "text" : "D", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 4 - } - ] - }, - { - "offset" : 10, - "length" : 1, - "text" : "D", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 37, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 37, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-4.layout b/tests/layouts/valid-4.layout index b9d4f8fb..f57ae082 100644 --- a/tests/layouts/valid-4.layout +++ b/tests/layouts/valid-4.layout @@ -18,1928 +18,1994 @@ "text" : "This paragraph should ac­tual­ly have multiple lines, unlike all the other wannabe äöü pa­ra­graph tests in this ugh test-case. Grow some lines!", "font" : "Cantarell 11", "width" : 198656, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : false, + "wrapped" : true, + "ellipsized" : false, + "hypenated" : true, "unknown-glyphs" : 0, "width" : 197632, "height" : 97280, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 32, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 32, - "text" : "This paragraph should ac­tual­", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 32, + "start-offset" : 0, + "n-chars" : 30, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : true, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 32, + "text" : "This paragraph should ac­tual­", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 4, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 187, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 406, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 406, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 438, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 280, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 21 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 22 + }, + { + "glyph" : 273, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 23 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 24 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 26 + }, + { + "glyph" : 438, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 27 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 28 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 29 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 30 + }, + { + "glyph" : 1081, + "width" : 6144, + "log-cluster" : 30 + } ] - }, - "flags" : 4, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 187, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 406, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 406, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 438, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 280, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 21 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 22 - }, - { - "glyph" : 273, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 23 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 24 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 26 - }, - { - "glyph" : 438, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 27 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 28 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 29 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 30 - }, - { - "glyph" : 1081, - "width" : 6144, - "log-cluster" : 30 - } - ] - } - ] - }, - { - "start-index" : 32, - "length" : 31, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 32, - "length" : 31, - "text" : "ly have multiple lines, unlike ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 34816 + ], + "line" : { + "start-index" : 32, + "length" : 31, + "start-offset" : 30, + "n-chars" : 31, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 32, + "length" : 31, + "text" : "ly have multiple lines, unlike ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 473, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 466, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 358, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 438, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 406, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 21 + }, + { + "glyph" : 1059, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 22 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 23 + }, + { + "glyph" : 438, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 24 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 25 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 26 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 27 + }, + { + "glyph" : 345, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 28 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 29 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 30 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 473, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 466, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 358, - "width" : 13312, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 438, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 406, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 21 - }, - { - "glyph" : 1059, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 22 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 23 - }, - { - "glyph" : 438, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 24 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 25 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 26 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 27 - }, - { - "glyph" : 345, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 28 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 29 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 30 - } - ] - } - ] - }, - { - "start-index" : 63, - "length" : 33, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 63, - "length" : 33, - "text" : "all the other wannabe äöü pa­", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 54272 + ], + "line" : { + "start-index" : 63, + "length" : 33, + "start-offset" : 61, + "n-chars" : 29, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : true, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 63, + "length" : 33, + "text" : "all the other wannabe äöü pa­", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 4, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 467, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 272, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 21 + }, + { + "glyph" : 260, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 22 + }, + { + "glyph" : 381, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 24 + }, + { + "glyph" : 444, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 26 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 28 + }, + { + "glyph" : 406, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 29 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 30 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 31 + }, + { + "glyph" : 1081, + "width" : 6144, + "log-cluster" : 31 + } ] - }, - "flags" : 4, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 467, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 272, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 21 - }, - { - "glyph" : 260, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 22 - }, - { - "glyph" : 381, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 24 - }, - { - "glyph" : 444, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 26 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 28 - }, - { - "glyph" : 406, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 29 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 30 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 31 - }, - { - "glyph" : 1081, - "width" : 6144, - "log-cluster" : 31 - } - ] - } - ] - }, - { - "start-index" : 96, - "length" : 33, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 96, - "length" : 33, - "text" : "ra­graph tests in this ugh test-", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 73728 + ], + "line" : { + "start-index" : 96, + "length" : 33, + "start-offset" : 90, + "n-chars" : 32, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 96, + "length" : 33, + "text" : "ra­graph tests in this ugh test-", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 406, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 21 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 22 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 23 + }, + { + "glyph" : 438, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 24 + }, + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 25 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 26 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 27 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 28 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 29 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 30 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 31 + }, + { + "glyph" : 1081, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 32 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 406, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 21 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 22 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 23 - }, - { - "glyph" : 438, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 24 - }, - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 25 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 26 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 27 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 28 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 29 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 30 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 31 - }, - { - "glyph" : 1081, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 32 - } - ] - } - ] - }, - { - "start-index" : 129, - "length" : 22, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 129, - "length" : 22, - "text" : "case. Grow some lines!", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 93184 + ], + "line" : { + "start-index" : 129, + "length" : 22, + "start-offset" : 122, + "n-chars" : 22, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 129, + "length" : 22, + "text" : "case. Grow some lines!", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 273, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 1058, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 69, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 467, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 358, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 1063, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 21 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 273, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 1058, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 69, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 467, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 358, - "width" : 13312, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 1063, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 21 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-5.layout b/tests/layouts/valid-5.layout index 92e2b9ce..f899c0f4 100644 --- a/tests/layouts/valid-5.layout +++ b/tests/layouts/valid-5.layout @@ -26,1748 +26,1827 @@ ], "font" : "Cantarell 11", "width" : 194560, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : false, + "wrapped" : true, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 194560, "height" : 116736, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 21, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 21, - "text" : "A test with multiple ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 21, + "start-offset" : 0, + "n-chars" : 21, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 21, + "text" : "A test with multiple ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "start" : 21, + "end" : 31, + "type" : "font-features", + "value" : "tnum=1" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 467, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 358, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 438, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 406, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 20 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 21, - "end" : 31, - "type" : "font-features", - "value" : "tnum=1" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 467, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 358, - "width" : 13312, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 438, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 406, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 20 - } - ] - } - ] - }, - { - "start-index" : 21, - "length" : 23, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 21, - "length" : 23, - "text" : "paragraphs and with no-", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 34816 + ], + "line" : { + "start-index" : 21, + "length" : 23, + "start-offset" : 21, + "n-chars" : 23, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 21, + "length" : 23, + "text" : "paragraphs and with no-", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "start" : 21, + "end" : 31, + "type" : "font-features", + "value" : "tnum=1" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 406, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 406, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 280, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 467, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 21 + }, + { + "glyph" : 1081, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 22 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 21, - "end" : 31, - "type" : "font-features", - "value" : "tnum=1" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 406, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 406, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 280, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 467, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 21 - }, - { - "glyph" : 1081, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 22 - } - ] - } - ] - }, - { - "start-index" : 44, - "length" : 30, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 44, - "length" : 30, - "text" : "break attributes, which might ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 54272 + ], + "line" : { + "start-index" : 44, + "length" : 30, + "start-offset" : 44, + "n-chars" : 30, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 44, + "length" : 30, + "text" : "break attributes, which might ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "start" : 21, + "end" : 31, + "type" : "font-features", + "value" : "tnum=1" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 272, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 345, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 272, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 438, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 1059, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 467, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 19 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 273, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 21 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 22 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 23 + }, + { + "glyph" : 358, + "width" : 13312, + "is-cluster-start" : true, + "log-cluster" : 24 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 25 + }, + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 26 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 27 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 28 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 29 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 21, - "end" : 31, - "type" : "font-features", - "value" : "tnum=1" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 272, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 345, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 272, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 438, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 1059, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 467, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 19 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 273, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 21 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 22 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 23 - }, - { - "glyph" : 358, - "width" : 13312, - "is-cluster-start" : true, - "log-cluster" : 24 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 25 - }, - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 26 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 27 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 28 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 29 - } - ] - } - ] - }, - { - "start-index" : 74, - "length" : 16, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 74, - "length" : 16, - "text" : "trigger a crash.", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 73728 + ], + "line" : { + "start-index" : 74, + "length" : 16, + "start-offset" : 74, + "n-chars" : 16, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 74, + "length" : 16, + "text" : "trigger a crash.", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "start" : 21, + "end" : 31, + "type" : "font-features", + "value" : "tnum=1" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 273, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 1058, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 15 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 21, - "end" : 31, - "type" : "font-features", - "value" : "tnum=1" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 273, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 1058, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 15 - } - ] - } - ] - }, - { - "start-index" : 91, - "length" : 26, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 91, - "length" : 26, - "text" : "If it doesn't the fix has ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 93184 + ], + "line" : { + "start-index" : 91, + "length" : 26, + "start-offset" : 91, + "n-chars" : 26, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 91, + "length" : 26, + "text" : "If it doesn't the fix has ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 81, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 311, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 280, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 1099, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 17 + }, + { + "glyph" : 489, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 18 + }, + { + "glyph" : 472, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 20 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 21 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 22 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 23 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 24 + }, + { + "glyph" : 268435455, + "width" : 0, + "is-cluster-start" : true, + "log-cluster" : 25 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 81, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 311, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 280, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 1099, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 17 - }, - { - "glyph" : 489, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 18 - }, - { - "glyph" : 472, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 20 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 21 - }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 22 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 23 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 24 - }, - { - "glyph" : 268435455, - "width" : 0, - "is-cluster-start" : true, - "log-cluster" : 25 - } - ] - } - ] - }, - { - "start-index" : 117, - "length" : 7, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 117, - "length" : 7, - "text" : "worked.", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + } + ] + } + }, + { + "position" : [ + 0, + 112640 + ], + "line" : { + "start-index" : 117, + "length" : 7, + "start-offset" : 117, + "n-chars" : 7, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 117, + "length" : 7, + "text" : "worked.", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 467, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 345, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 280, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 1058, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 6 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 467, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 345, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 280, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 1058, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 6 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-6.layout b/tests/layouts/valid-6.layout index c2868598..e213690a 100644 --- a/tests/layouts/valid-6.layout +++ b/tests/layouts/valid-6.layout @@ -18,367 +18,381 @@ "comment" : "A keycap sequence", "text" : " 0️⃣ Keycap Digit Zero", "font" : "Cantarell 11", + "log-attrs" : [ + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "backspace-deletes-character" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-start" : true, + "word-boundary" : true + }, + {}, + { + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 142336, "height" : 19456, - "log-attrs" : [ - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "backspace-deletes-character" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-start" : true, - "word-boundary" : true - }, - {}, - { - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 26, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 1, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 26, + "start-offset" : 0, + "n-chars" : 22, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 1, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 - ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 1, - "length" : 7, - "text" : "0️⃣", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Noto Color Emoji 11", - "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", - "matrix" : [ - 0.13455956135321101, - -0, - -0, - 0.13455956135321101, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 19, - "width" : 18432, - "is-cluster-start" : true, - "is-color" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 8, - "length" : 18, - "text" : " Keycap Digit Zero", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 1, + "length" : 7, + "text" : "0️⃣", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Noto Color Emoji 11", + "checksum" : "054c1c2e2ca956b920262840dcad39dcf27bb88d6f70b892b2b1180de2c2ab47", + "matrix" : [ + 0.13455956135321101, + -0, + -0, + 0.13455956135321101, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 19, + "width" : 18432, + "is-cluster-start" : true, + "is-color" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 100, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 473, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 273, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 406, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 7 + { + "offset" : 8, + "length" : 18, + "text" : " Keycap Digit Zero", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 37, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 312, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 12 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 13 - }, - { - "glyph" : 239, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 14 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 15 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 16 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 17 - } - ] - } - ] + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 100, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 473, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 273, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 406, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 37, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 312, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 12 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 13 + }, + { + "glyph" : 239, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 14 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 15 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 16 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 17 + } + ] + } + ] + } } ] } diff --git a/tests/layouts/valid-7.layout b/tests/layouts/valid-7.layout index 7324e650..f10b4a6f 100644 --- a/tests/layouts/valid-7.layout +++ b/tests/layouts/valid-7.layout @@ -34,596 +34,610 @@ "ellipsize" : "middle", "width" : 204800, "indent" : 51200, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "word-end" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : true, + "wrapped" : false, + "ellipsized" : true, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 153600, "height" : 19456, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "word-end" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 48, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 12, - "text" : "This is a te", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 51200, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 48, + "start-offset" : 0, + "n-chars" : 48, + "wrapped" : false, + "ellipsized" : true, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 12, + "text" : "This is a te", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 187, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 319, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 417, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 7 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 430, + "width" : 5120, + "is-cluster-start" : true, + "log-cluster" : 10 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 11 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 187, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 + { + "offset" : 12, + "length" : 26, + "text" : "st of the automatic emerge", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "common", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 319, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 417, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 7 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 430, - "width" : 5120, - "is-cluster-start" : true, - "log-cluster" : 10 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 11 - } - ] - }, - { - "offset" : 12, - "length" : 26, - "text" : "st of the automatic emerge", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "common", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 2, + "extra-attributes" : [ + { + "end" : 2147483647, + "type" : "fallback", + "value" : false + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1062, + "width" : 16384, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 2, - "extra-attributes" : [ - { - "end" : 2147483647, - "type" : "fallback", - "value" : false - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1062, - "width" : 16384, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 38, - "length" : 3, - "text" : "ncy", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 38, + "length" : 3, + "text" : "ncy", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "start" : 22, + "end" : 41, + "type" : "foreground", + "value" : "#00000000ffff" + }, + { + "start" : 22, + "end" : 41, + "type" : "underline", + "value" : "single" + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 360, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 273, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 473, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "start" : 22, - "end" : 41, - "type" : "foreground", - "value" : "#00000000ffff" + { + "offset" : 41, + "length" : 7, + "text" : " brake!", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "start" : 22, - "end" : 41, - "type" : "underline", - "value" : "single" - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 360, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 273, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 473, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - }, - { - "offset" : 41, - "length" : 7, - "text" : " brake!", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 272, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 409, + "width" : 6144, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 244, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 345, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 5 + }, + { + "glyph" : 1063, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 6 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 272, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 409, - "width" : 6144, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 244, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 345, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 5 - }, - { - "glyph" : 1063, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 6 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-8.layout b/tests/layouts/valid-8.layout index e5cedbba..7a98ea27 100644 --- a/tests/layouts/valid-8.layout +++ b/tests/layouts/valid-8.layout @@ -20,383 +20,396 @@ "font" : "Cantarell 11", "auto-dir" : false, "alignment" : "center", - "spacing" : 51200, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "backspace-deletes-character" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 132096, "height" : 19456, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "backspace-deletes-character" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 30, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 6, - "text" : "Hello ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 30, + "start-offset" : 0, + "n-chars" : 19, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 6, + "text" : "Hello ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 76, + "width" : 11264, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 287, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 349, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 370, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 5 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 76, - "width" : 11264, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 287, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 2 + { + "offset" : 6, + "length" : 8, + "text" : "שלום", + "bidi-level" : 1, + "gravity" : "south", + "language" : "he", + "script" : "hebrew", + "font" : { + "description" : "DejaVu Sans 11", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 349, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 370, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 5 - } - ] - }, - { - "offset" : 6, - "length" : 8, - "text" : "שלום", - "bidi-level" : 1, - "gravity" : "south", - "language" : "he", - "script" : "hebrew", - "font" : { - "description" : "DejaVu Sans 11", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1332, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 1324, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 1331, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 1344, + "width" : 10240, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1332, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 1324, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 1331, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 2 + { + "offset" : 14, + "length" : 1, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "he", + "script" : "hebrew", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 1344, - "width" : 10240, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 14, - "length" : 1, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "he", - "script" : "hebrew", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 15, - "length" : 15, - "text" : "Γειά σας", - "bidi-level" : 0, - "gravity" : "south", - "language" : "el", - "script" : "greek", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + { + "offset" : 15, + "length" : 15, + "text" : "Γειά σας", + "bidi-level" : 0, + "gravity" : "south", + "language" : "el", + "script" : "greek", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 677, + "width" : 8192, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 808, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 812, + "width" : 4096, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 837, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 1109, + "width" : 3072, + "is-cluster-start" : true, + "log-cluster" : 8 + }, + { + "glyph" : 822, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 9 + }, + { + "glyph" : 804, + "width" : 9216, + "is-cluster-start" : true, + "log-cluster" : 11 + }, + { + "glyph" : 821, + "width" : 7168, + "is-cluster-start" : true, + "log-cluster" : 13 + } ] - }, - "flags" : 0, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 677, - "width" : 8192, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 808, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 812, - "width" : 4096, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 837, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 1109, - "width" : 3072, - "is-cluster-start" : true, - "log-cluster" : 8 - }, - { - "glyph" : 822, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 9 - }, - { - "glyph" : 804, - "width" : 9216, - "is-cluster-start" : true, - "log-cluster" : 11 - }, - { - "glyph" : 821, - "width" : 7168, - "is-cluster-start" : true, - "log-cluster" : 13 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/valid-9.layout b/tests/layouts/valid-9.layout index 5cdf53f9..5878257b 100644 --- a/tests/layouts/valid-9.layout +++ b/tests/layouts/valid-9.layout @@ -26,486 +26,539 @@ ], "font" : "Cantarell 11", "width" : 102400, + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "backspace-deletes-character" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "expandable-space" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : true, - "is-ellipsized" : false, + "wrapped" : true, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 71392, "height" : 77824, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "backspace-deletes-character" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "expandable-space" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 6, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 6, - "text" : "Hello ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 15360 + ], + "line" : { + "start-index" : 0, + "length" : 6, + "start-offset" : 0, + "n-chars" : 6, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 6, + "text" : "Hello ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "end" : 30, + "type" : "letter-spacing", + "value" : 8888 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 76, + "width" : 15708, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 287, + "width" : 17080, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 349, + "width" : 12984, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 349, + "width" : 12984, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 370, + "width" : 12636, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 268435455, + "width" : 0, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 5 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "end" : 30, - "type" : "letter-spacing", - "value" : 8888 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 76, - "width" : 15708, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 287, - "width" : 17080, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 349, - "width" : 12984, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 349, - "width" : 12984, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 3 - }, - { - "glyph" : 370, - "width" : 12636, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 268435455, - "width" : 0, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 5 - } - ] - } - ] + } + ] + } }, { - "start-index" : 6, - "length" : 9, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 6, - "length" : 8, - "text" : "שלום", - "bidi-level" : 1, - "gravity" : "south", - "language" : "he", - "script" : "hebrew", - "font" : { - "description" : "DejaVu Sans 11", - "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "position" : [ + 0, + 34816 + ], + "line" : { + "start-index" : 6, + "length" : 9, + "start-offset" : 6, + "n-chars" : 5, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 6, + "length" : 8, + "text" : "שלום", + "bidi-level" : 1, + "gravity" : "south", + "language" : "he", + "script" : "hebrew", + "font" : { + "description" : "DejaVu Sans 11", + "checksum" : "69ccd07023a72ceb27a5e5c22f728627353b60a198170f5e58dd7014221abf01", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] + }, + "flags" : 0, + "extra-attributes" : [ + { + "end" : 30, + "type" : "letter-spacing", + "value" : 8888 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1332, + "width" : 14684, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 1324, + "width" : 12984, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 1331, + "width" : 17080, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 1344, + "width" : 19128, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] }, - "flags" : 0, - "extra-attributes" : [ - { - "end" : 30, - "type" : "letter-spacing", - "value" : 8888 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1332, - "width" : 14684, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 1324, - "width" : 12984, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 1331, - "width" : 17080, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 2 + { + "offset" : 14, + "length" : 1, + "text" : " ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "he", + "script" : "hebrew", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 1344, - "width" : 19128, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - }, - { - "offset" : 14, - "length" : 1, - "text" : " ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "he", - "script" : "hebrew", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 - }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "end" : 30, + "type" : "letter-spacing", + "value" : 8888 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 268435455, + "width" : 0, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 0 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "end" : 30, - "type" : "letter-spacing", - "value" : 8888 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 268435455, - "width" : 0, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 0 - } - ] - } - ] + } + ] + } }, { - "start-index" : 15, - "length" : 9, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 15, - "length" : 9, - "text" : "Γειά ", - "bidi-level" : 0, - "gravity" : "south", - "language" : "el", - "script" : "greek", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 54272 + ], + "line" : { + "start-index" : 15, + "length" : 9, + "start-offset" : 11, + "n-chars" : 5, + "wrapped" : true, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : false, + "direction" : "ltr", + "runs" : [ + { + "offset" : 15, + "length" : 9, + "text" : "Γειά ", + "bidi-level" : 0, + "gravity" : "south", + "language" : "el", + "script" : "greek", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "end" : 30, + "type" : "letter-spacing", + "value" : 8888 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 677, + "width" : 12636, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 808, + "width" : 16056, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 812, + "width" : 12984, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 4 + }, + { + "glyph" : 837, + "width" : 13660, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 6 + }, + { + "glyph" : 268435455, + "width" : 0, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 8 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "end" : 30, - "type" : "letter-spacing", - "value" : 8888 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 677, - "width" : 12636, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 808, - "width" : 16056, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 812, - "width" : 12984, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 4 - }, - { - "glyph" : 837, - "width" : 13660, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 6 - }, - { - "glyph" : 268435455, - "width" : 0, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 8 - } - ] - } - ] + } + ] + } }, { - "start-index" : 24, - "length" : 6, - "paragraph-start" : false, - "direction" : "ltr", - "runs" : [ - { - "offset" : 24, - "length" : 6, - "text" : "σας", - "bidi-level" : 0, - "gravity" : "south", - "language" : "el", - "script" : "greek", - "font" : { - "description" : "Cantarell 11", - "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", - "variations" : { - "wght" : 0 + "position" : [ + 0, + 73728 + ], + "line" : { + "start-index" : 24, + "length" : 6, + "start-offset" : 16, + "n-chars" : 3, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : false, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 24, + "length" : 6, + "text" : "σας", + "bidi-level" : 0, + "gravity" : "south", + "language" : "el", + "script" : "greek", + "font" : { + "description" : "Cantarell 11", + "checksum" : "5bcb6ee14ee9d210b2e91d643de1fe456e9d1aea770983fdb05951545efebbe2", + "variations" : { + "wght" : 0 + }, + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 0, + "extra-attributes" : [ + { + "end" : 30, + "type" : "letter-spacing", + "value" : 8888 + } + ], + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 822, + "width" : 13660, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 804, + "width" : 18104, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 2 + }, + { + "glyph" : 821, + "width" : 11612, + "x-offset" : 4444, + "is-cluster-start" : true, + "log-cluster" : 4 + } ] - }, - "flags" : 0, - "extra-attributes" : [ - { - "end" : 30, - "type" : "letter-spacing", - "value" : 8888 - } - ], - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 822, - "width" : 13660, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 804, - "width" : 18104, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 2 - }, - { - "glyph" : 821, - "width" : 11612, - "x-offset" : 4444, - "is-cluster-start" : true, - "log-cluster" : 4 - } - ] - } - ] + } + ] + } } ] } diff --git a/tests/layouts/vertical.layout b/tests/layouts/vertical.layout index e8619bfb..ff1eeffe 100644 --- a/tests/layouts/vertical.layout +++ b/tests/layouts/vertical.layout @@ -17,243 +17,257 @@ }, "text" : "ABC日本語ABC", "font" : "Noto Sans CJK JP 24", - "wrap" : "word-char", + "wrap" : "word | char", + "log-attrs" : [ + { + "char-break" : true, + "cursor-position" : true, + "word-start" : true, + "sentence-boundary" : true, + "sentence-start" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "line-break" : true, + "char-break" : true, + "cursor-position" : true, + "backspace-deletes-character" : true, + "word-boundary" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "char-break" : true, + "cursor-position" : true, + "break-inserts-hyphen" : true + }, + { + "line-break" : true, + "mandatory-break" : true, + "char-break" : true, + "white" : true, + "cursor-position" : true, + "word-end" : true, + "sentence-boundary" : true, + "sentence-end" : true, + "word-boundary" : true + } + ], "output" : { - "is-wrapped" : false, - "is-ellipsized" : false, + "wrapped" : false, + "ellipsized" : false, + "hypenated" : false, "unknown-glyphs" : 0, "width" : 294912, "height" : 49152, - "log-attrs" : [ - { - "char-break" : true, - "cursor-position" : true, - "word-start" : true, - "sentence-boundary" : true, - "sentence-start" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "line-break" : true, - "char-break" : true, - "cursor-position" : true, - "backspace-deletes-character" : true, - "word-boundary" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "char-break" : true, - "cursor-position" : true, - "break-inserts-hyphen" : true - }, - { - "line-break" : true, - "mandatory-break" : true, - "char-break" : true, - "white" : true, - "cursor-position" : true, - "word-end" : true, - "sentence-boundary" : true, - "sentence-end" : true, - "word-boundary" : true - } - ], "lines" : [ { - "start-index" : 0, - "length" : 15, - "paragraph-start" : true, - "direction" : "ltr", - "runs" : [ - { - "offset" : 0, - "length" : 3, - "text" : "ABC", - "bidi-level" : 0, - "gravity" : "east", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Noto Sans CJK JP Rotated-Left 24", - "checksum" : "3b50ae56f1fb5637c82d785945531f718f40b78a26bea3d137e58808bd774399", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 - ] - }, - "flags" : 1, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1, - "width" : 32768, - "x-offset" : 28835, - "y-offset" : 9945, - "is-cluster-start" : true, - "log-cluster" : 0 + "position" : [ + 0, + 24576 + ], + "line" : { + "start-index" : 0, + "length" : 15, + "start-offset" : 0, + "n-chars" : 9, + "wrapped" : false, + "ellipsized" : false, + "hyphenated" : false, + "justified" : false, + "paragraph-start" : true, + "paragraph-end" : true, + "direction" : "ltr", + "runs" : [ + { + "offset" : 0, + "length" : 3, + "text" : "ABC", + "bidi-level" : 0, + "gravity" : "east", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Noto Sans CJK JP Rotated-Left 24", + "checksum" : "3b50ae56f1fb5637c82d785945531f718f40b78a26bea3d137e58808bd774399", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 2, - "width" : 32768, - "x-offset" : 28835, - "y-offset" : 10764, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 3, - "width" : 32768, - "x-offset" : 28835, - "y-offset" : 10452, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - }, - { - "offset" : 3, - "length" : 9, - "text" : "日本語", - "bidi-level" : 0, - "gravity" : "east", - "language" : "xx", - "script" : "han", - "font" : { - "description" : "Noto Sans CJK JP Rotated-Left 24", - "checksum" : "3b50ae56f1fb5637c82d785945531f718f40b78a26bea3d137e58808bd774399", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 1, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1, + "width" : 32768, + "x-offset" : 28836, + "y-offset" : 9945, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 2, + "width" : 32768, + "x-offset" : 28836, + "y-offset" : 10764, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 3, + "width" : 32768, + "x-offset" : 28836, + "y-offset" : 10453, + "is-cluster-start" : true, + "log-cluster" : 2 + } ] }, - "flags" : 1, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 4, - "width" : 32768, - "x-offset" : 28835, - "y-offset" : 16383, - "is-cluster-start" : true, - "log-cluster" : 0 - }, - { - "glyph" : 5, - "width" : 32768, - "x-offset" : 28835, - "y-offset" : 16383, - "is-cluster-start" : true, - "log-cluster" : 3 + { + "offset" : 3, + "length" : 9, + "text" : "日本語", + "bidi-level" : 0, + "gravity" : "east", + "language" : "xx", + "script" : "han", + "font" : { + "description" : "Noto Sans CJK JP Rotated-Left 24", + "checksum" : "3b50ae56f1fb5637c82d785945531f718f40b78a26bea3d137e58808bd774399", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 7, - "width" : 32768, - "x-offset" : 28835, - "y-offset" : 16383, - "is-cluster-start" : true, - "log-cluster" : 6 - } - ] - }, - { - "offset" : 12, - "length" : 3, - "text" : "ABC", - "bidi-level" : 0, - "gravity" : "east", - "language" : "en-us", - "script" : "latin", - "font" : { - "description" : "Noto Sans CJK JP Rotated-Left 24", - "checksum" : "3b50ae56f1fb5637c82d785945531f718f40b78a26bea3d137e58808bd774399", - "matrix" : [ - 1, - -0, - -0, - 1, - 0, - 0 + "flags" : 1, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 4, + "width" : 32768, + "x-offset" : 28836, + "y-offset" : 16384, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 5, + "width" : 32768, + "x-offset" : 28836, + "y-offset" : 16384, + "is-cluster-start" : true, + "log-cluster" : 3 + }, + { + "glyph" : 7, + "width" : 32768, + "x-offset" : 28836, + "y-offset" : 16384, + "is-cluster-start" : true, + "log-cluster" : 6 + } ] }, - "flags" : 1, - "y-offset" : 0, - "start-x-offset" : 0, - "end-x-offset" : 0, - "glyphs" : [ - { - "glyph" : 1, - "width" : 32768, - "x-offset" : 28835, - "y-offset" : 9945, - "is-cluster-start" : true, - "log-cluster" : 0 + { + "offset" : 12, + "length" : 3, + "text" : "ABC", + "bidi-level" : 0, + "gravity" : "east", + "language" : "en-us", + "script" : "latin", + "font" : { + "description" : "Noto Sans CJK JP Rotated-Left 24", + "checksum" : "3b50ae56f1fb5637c82d785945531f718f40b78a26bea3d137e58808bd774399", + "matrix" : [ + 1, + -0, + -0, + 1, + 0, + 0 + ] }, - { - "glyph" : 2, - "width" : 32768, - "x-offset" : 28835, - "y-offset" : 10764, - "is-cluster-start" : true, - "log-cluster" : 1 - }, - { - "glyph" : 3, - "width" : 32768, - "x-offset" : 28835, - "y-offset" : 10452, - "is-cluster-start" : true, - "log-cluster" : 2 - } - ] - } - ] + "flags" : 1, + "y-offset" : 0, + "start-x-offset" : 0, + "end-x-offset" : 0, + "glyphs" : [ + { + "glyph" : 1, + "width" : 32768, + "x-offset" : 28836, + "y-offset" : 9945, + "is-cluster-start" : true, + "log-cluster" : 0 + }, + { + "glyph" : 2, + "width" : 32768, + "x-offset" : 28836, + "y-offset" : 10764, + "is-cluster-start" : true, + "log-cluster" : 1 + }, + { + "glyph" : 3, + "width" : 32768, + "x-offset" : 28836, + "y-offset" : 10453, + "is-cluster-start" : true, + "log-cluster" : 2 + } + ] + } + ] + } } ] } -- cgit v1.2.1