summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-11-22 20:33:11 -0500
committerMatthias Clasen <mclasen@redhat.com>2021-11-24 19:57:58 -0500
commit3f6f2887f02ee6cf98d115085b0dcff681696e0e (patch)
tree4dbd4dd4cfc292af72678ca962c38b2aedc7f7fa
parentc4fe95cc313bab3eac480425f822a0eeebf9b686 (diff)
downloadpango-3f6f2887f02ee6cf98d115085b0dcff681696e0e.tar.gz
Optionally serialize output
If requested, serialize lines, runs, and log attrs. This will let us use the serialization format to record not just the test inputs, but outputs as well.
-rw-r--r--pango/pango-layout.h2
-rw-r--r--pango/serializer.c383
-rw-r--r--tests/layouts/valid-1.expected43
-rw-r--r--tests/layouts/valid-10.expected37
-rw-r--r--tests/layouts/valid-11.expected53
-rw-r--r--tests/layouts/valid-12.expected35
-rw-r--r--tests/layouts/valid-13.expected35
-rw-r--r--tests/layouts/valid-14.expected38
-rw-r--r--tests/layouts/valid-15.expected36
-rw-r--r--tests/layouts/valid-16.expected37
-rw-r--r--tests/layouts/valid-17.expected35
-rw-r--r--tests/layouts/valid-18.expected40
-rw-r--r--tests/layouts/valid-19.expected42
-rw-r--r--tests/layouts/valid-2.expected42
-rw-r--r--tests/layouts/valid-20.expected40
-rw-r--r--tests/layouts/valid-22.expected111
-rw-r--r--tests/layouts/valid-3.expected33
-rw-r--r--tests/layouts/valid-4.expected44
-rw-r--r--tests/layouts/valid-5.expected56
-rw-r--r--tests/layouts/valid-6.expected33
-rw-r--r--tests/layouts/valid-7.expected43
-rw-r--r--tests/layouts/valid-8.expected34
-rw-r--r--tests/layouts/valid-9.expected49
23 files changed, 384 insertions, 917 deletions
diff --git a/pango/pango-layout.h b/pango/pango-layout.h
index 3c43c202..32dc16f0 100644
--- a/pango/pango-layout.h
+++ b/pango/pango-layout.h
@@ -355,6 +355,7 @@ GSList * pango_layout_get_lines_readonly (PangoLayout *layout);
* PangoLayoutSerializeFlags:
* @PANGO_LAYOUT_SERIALIZE_DEFAULT: Default behavior
* @PANGO_LAYOUT_SERIALIZE_CONTEXT: Include context information
+ * @PANGO_LAYOUT_SERIALIZE_OUTPUT: Include information about the formatted output
*
* Flags that influence the behavior of [method@Pango.Layout.serialize].
*
@@ -363,6 +364,7 @@ GSList * pango_layout_get_lines_readonly (PangoLayout *layout);
typedef enum {
PANGO_LAYOUT_SERIALIZE_DEFAULT = 0,
PANGO_LAYOUT_SERIALIZE_CONTEXT = 1 << 0,
+ PANGO_LAYOUT_SERIALIZE_OUTPUT = 1 << 1,
} PangoLayoutSerializeFlags;
PANGO_AVAILABLE_IN_1_50
diff --git a/pango/serializer.c b/pango/serializer.c
index fdaba728..855fafea 100644
--- a/pango/serializer.c
+++ b/pango/serializer.c
@@ -25,7 +25,9 @@
#include <pango/pango-layout-private.h>
#include <pango/pango-context-private.h>
#include <pango/pango-enum-types.h>
+#include <pango/pango-font-private.h>
+#include <hb-ot.h>
#include <json-glib/json-glib.h>
/* {{{ Error handling */
@@ -257,7 +259,7 @@ add_context (JsonBuilder *builder,
json_builder_set_member_name (builder, "gravity-hint");
add_enum_value (builder, PANGO_TYPE_GRAVITY_HINT, context->gravity_hint, FALSE);
- json_builder_set_member_name (builder, "direction");
+ json_builder_set_member_name (builder, "base-dir");
add_enum_value (builder, PANGO_TYPE_DIRECTION, context->base_dir, FALSE);
json_builder_set_member_name (builder, "round-glyph-positions");
@@ -280,6 +282,379 @@ add_context (JsonBuilder *builder,
json_builder_end_object (builder);
}
+static void
+add_log_attrs (JsonBuilder *builder,
+ PangoLayout *layout)
+{
+ const PangoLogAttr *log_attrs;
+ int n_attrs;
+
+ json_builder_set_member_name (builder, "log-attrs");
+ json_builder_begin_array (builder);
+
+ log_attrs = pango_layout_get_log_attrs_readonly (layout, &n_attrs);
+ for (int i = 0; i < n_attrs; i++)
+ {
+ json_builder_begin_object (builder);
+ if (log_attrs[i].is_line_break)
+ {
+ json_builder_set_member_name (builder, "line-break");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].is_mandatory_break)
+ {
+ json_builder_set_member_name (builder, "mandatory-break");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].is_char_break)
+ {
+ json_builder_set_member_name (builder, "char-break");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].is_white)
+ {
+ json_builder_set_member_name (builder, "white");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].is_cursor_position)
+ {
+ json_builder_set_member_name (builder, "cursor-position");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].is_word_start)
+ {
+ json_builder_set_member_name (builder, "word-start");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].is_word_end)
+ {
+ json_builder_set_member_name (builder, "word-end");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].is_sentence_boundary)
+ {
+ json_builder_set_member_name (builder, "sentence-boundary");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].is_sentence_start)
+ {
+ json_builder_set_member_name (builder, "sentence-start");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].is_sentence_end)
+ {
+ json_builder_set_member_name (builder, "sentence-end");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].backspace_deletes_character)
+ {
+ json_builder_set_member_name (builder, "backspace-deletes-character");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].is_expandable_space)
+ {
+ json_builder_set_member_name (builder, "expandable-space");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].is_word_boundary)
+ {
+ json_builder_set_member_name (builder, "word-boundary");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].break_inserts_hyphen)
+ {
+ json_builder_set_member_name (builder, "break-inserts-hyphen");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ if (log_attrs[i].break_removes_preceding)
+ {
+ json_builder_set_member_name (builder, "break-removes_preceding");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+ json_builder_end_object (builder);
+ }
+
+ json_builder_end_array (builder);
+}
+
+static void
+add_font (JsonBuilder *builder,
+ PangoFont *font)
+{
+ PangoFontDescription *desc;
+ char *str;
+ hb_font_t *hb_font;
+ hb_face_t *face;
+ hb_blob_t *blob;
+ const char *data;
+ guint length;
+ const int *coords;
+ hb_feature_t features[32];
+ PangoMatrix matrix;
+
+ json_builder_begin_object (builder);
+
+ json_builder_set_member_name (builder, "description");
+
+ desc = pango_font_describe (font);
+ str = pango_font_description_to_string (desc);
+ json_builder_add_string_value (builder, str);
+ g_free (str);
+ pango_font_description_free (desc);
+
+ hb_font = pango_font_get_hb_font (font);
+ face = hb_font_get_face (hb_font);
+ blob = hb_face_reference_blob (face);
+
+ data = hb_blob_get_data (blob, &length);
+ str = g_compute_checksum_for_data (G_CHECKSUM_SHA256, (const guchar *)data, length);
+
+ json_builder_set_member_name (builder, "checksum");
+ json_builder_add_string_value (builder, str);
+
+ g_free (str);
+ hb_blob_destroy (blob);
+
+ coords = hb_font_get_var_coords_normalized (hb_font, &length);
+ if (length > 0)
+ {
+ guint count;
+ hb_ot_var_axis_info_t *axes;
+
+ count = hb_ot_var_get_axis_count (face);
+ g_assert (count == length);
+
+ axes = g_alloca (count * sizeof (hb_ot_var_axis_info_t));
+ hb_ot_var_get_axis_infos (face, 0, &count, axes);
+
+ json_builder_set_member_name (builder, "variations");
+ json_builder_begin_object (builder);
+
+ for (int i = 0; i < length; i++)
+ {
+ char buf[5] = { 0, };
+
+ hb_tag_to_string (axes[i].tag, buf);
+ json_builder_set_member_name (builder, buf);
+ json_builder_add_int_value (builder, coords[i]);
+ }
+
+ json_builder_end_object (builder);
+ }
+
+ length = 0;
+ pango_font_get_features (font, features, G_N_ELEMENTS (features), &length);
+ if (length > 0)
+ {
+ json_builder_set_member_name (builder, "features");
+ json_builder_begin_object (builder);
+
+ for (int i = 0; i < length; i++)
+ {
+ char buf[5] = { 0, };
+
+ hb_tag_to_string (features[i].tag, buf);
+ json_builder_set_member_name (builder, buf);
+ json_builder_add_int_value (builder, features[i].value);
+ }
+
+ json_builder_end_object (builder);
+ }
+
+ pango_font_get_matrix (font, &matrix);
+ if (memcmp (&matrix, &(PangoMatrix)PANGO_MATRIX_INIT, sizeof (PangoMatrix)) != 0)
+ {
+ json_builder_set_member_name (builder, "matrix");
+ json_builder_begin_array (builder);
+ json_builder_add_double_value (builder, matrix.xx);
+ json_builder_add_double_value (builder, matrix.xy);
+ json_builder_add_double_value (builder, matrix.yx);
+ json_builder_add_double_value (builder, matrix.yy);
+ json_builder_add_double_value (builder, matrix.x0);
+ json_builder_add_double_value (builder, matrix.y0);
+ json_builder_end_array (builder);
+ }
+
+ json_builder_end_object (builder);
+}
+
+#define ANALYSIS_FLAGS (PANGO_ANALYSIS_FLAG_CENTERED_BASELINE | \
+ PANGO_ANALYSIS_FLAG_IS_ELLIPSIS | \
+ PANGO_ANALYSIS_FLAG_NEED_HYPHEN)
+
+static void
+add_run (JsonBuilder *builder,
+ PangoLayout *layout,
+ PangoLayoutRun *run)
+{
+ json_builder_begin_object (builder);
+ char *str;
+
+ json_builder_set_member_name (builder, "offset");
+ json_builder_add_int_value (builder, run->item->offset);
+
+ json_builder_set_member_name (builder, "length");
+ json_builder_add_int_value (builder, run->item->length);
+
+ str = g_strndup (layout->text + run->item->offset, run->item->length);
+ json_builder_set_member_name (builder, "text");
+ json_builder_add_string_value (builder, str);
+ g_free (str);
+
+ json_builder_set_member_name (builder, "bidi-level");
+ json_builder_add_int_value (builder, run->item->analysis.level);
+
+ json_builder_set_member_name (builder, "gravity");
+ add_enum_value (builder, PANGO_TYPE_GRAVITY, run->item->analysis.gravity, FALSE);
+
+ json_builder_set_member_name (builder, "language");
+ json_builder_add_string_value (builder, pango_language_to_string (run->item->analysis.language));
+
+ json_builder_set_member_name (builder, "script");
+ add_enum_value (builder, PANGO_TYPE_SCRIPT, run->item->analysis.script, FALSE);
+
+ json_builder_set_member_name (builder, "font");
+ add_font (builder, run->item->analysis.font);
+
+ json_builder_set_member_name (builder, "flags");
+ json_builder_add_int_value (builder, run->item->analysis.flags & ANALYSIS_FLAGS);
+
+ if (run->item->analysis.extra_attrs)
+ {
+ GSList *l;
+
+ json_builder_set_member_name (builder, "extra-attributes");
+
+ json_builder_begin_array (builder);
+ for (l = run->item->analysis.extra_attrs; l; l = l->next)
+ {
+ PangoAttribute *attr = l->data;
+ add_attribute (builder, attr);
+ }
+ json_builder_end_array (builder);
+ }
+
+ json_builder_set_member_name (builder, "y-offset");
+ json_builder_add_int_value (builder, run->y_offset);
+
+ json_builder_set_member_name (builder, "start-x-offset");
+ json_builder_add_int_value (builder, run->start_x_offset);
+
+ json_builder_set_member_name (builder, "end-x-offset");
+ json_builder_add_int_value (builder, run->end_x_offset);
+
+ json_builder_set_member_name (builder, "glyphs");
+ json_builder_begin_array (builder);
+ for (int i = 0; i < run->glyphs->num_glyphs; i++)
+ {
+ json_builder_begin_object (builder);
+
+ json_builder_set_member_name (builder, "glyph");
+ json_builder_add_int_value (builder, run->glyphs->glyphs[i].glyph);
+
+ json_builder_set_member_name (builder, "width");
+ json_builder_add_int_value (builder, run->glyphs->glyphs[i].geometry.width);
+
+ if (run->glyphs->glyphs[i].geometry.x_offset != 0)
+ {
+ json_builder_set_member_name (builder, "x-offset");
+ json_builder_add_int_value (builder, run->glyphs->glyphs[i].geometry.x_offset);
+ }
+
+ if (run->glyphs->glyphs[i].geometry.y_offset != 0)
+ {
+ json_builder_set_member_name (builder, "y-offset");
+ json_builder_add_int_value (builder, run->glyphs->glyphs[i].geometry.y_offset);
+ }
+
+ if (run->glyphs->glyphs[i].attr.is_cluster_start)
+ {
+ json_builder_set_member_name (builder, "is-cluster-start");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+
+ if (run->glyphs->glyphs[i].attr.is_color)
+ {
+ json_builder_set_member_name (builder, "is-color");
+ json_builder_add_boolean_value (builder, TRUE);
+ }
+
+ json_builder_set_member_name (builder, "log-cluster");
+ json_builder_add_int_value (builder, run->glyphs->log_clusters[i]);
+
+ json_builder_end_object (builder);
+ }
+
+ json_builder_end_array (builder);
+
+ json_builder_end_object (builder);
+}
+
+#undef ANALYSIS_FLAGS
+
+static void
+add_line (JsonBuilder *builder,
+ PangoLayoutLine *line)
+{
+ json_builder_begin_object (builder);
+
+ json_builder_set_member_name (builder, "start-index");
+ json_builder_add_int_value (builder, line->start_index);
+
+ json_builder_set_member_name (builder, "length");
+ json_builder_add_int_value (builder, line->length);
+
+ json_builder_set_member_name (builder, "paragraph-start");
+ json_builder_add_boolean_value (builder, line->is_paragraph_start);
+
+ json_builder_set_member_name (builder, "direction");
+ add_enum_value (builder, PANGO_TYPE_DIRECTION, line->resolved_dir, FALSE);
+
+ json_builder_set_member_name (builder, "runs");
+ json_builder_begin_array (builder);
+ for (GSList *l = line->runs; l; l = l->next)
+ {
+ PangoLayoutRun *run = l->data;
+ add_run (builder, line->layout, run);
+ }
+ json_builder_end_array (builder);
+
+ json_builder_end_object (builder);
+}
+
+static void
+add_output (JsonBuilder *builder,
+ PangoLayout *layout)
+{
+ int width, height;
+
+ json_builder_begin_object (builder);
+
+ json_builder_set_member_name (builder, "is-wrapped");
+ json_builder_add_boolean_value (builder, pango_layout_is_wrapped (layout));
+
+ json_builder_set_member_name (builder, "is-ellipsized");
+ json_builder_add_boolean_value (builder, pango_layout_is_ellipsized (layout));
+
+ pango_layout_get_size (layout, &width, &height);
+ json_builder_set_member_name (builder, "width");
+ json_builder_add_int_value (builder, width);
+ json_builder_set_member_name (builder, "height");
+ json_builder_add_int_value (builder, height);
+
+ add_log_attrs (builder, layout);
+ json_builder_set_member_name (builder, "lines");
+ json_builder_begin_array (builder);
+ for (GSList *l = layout->lines; l; l = l->next)
+ {
+ PangoLayoutLine *line = l->data;
+ add_line (builder, line);
+ }
+ json_builder_end_array (builder);
+
+ json_builder_end_object (builder);
+}
+
static JsonNode *
layout_to_json (PangoLayout *layout,
PangoLayoutSerializeFlags flags)
@@ -384,6 +759,12 @@ layout_to_json (PangoLayout *layout,
json_builder_add_double_value (builder, layout->line_spacing);
}
+ if (flags & PANGO_LAYOUT_SERIALIZE_OUTPUT)
+ {
+ json_builder_set_member_name (builder, "output");
+ add_output (builder, layout);
+ }
+
json_builder_end_object (builder);
root = json_builder_get_root (builder);
diff --git a/tests/layouts/valid-1.expected b/tests/layouts/valid-1.expected
deleted file mode 100644
index 96bbed57..00000000
--- a/tests/layouts/valid-1.expected
+++ /dev/null
@@ -1,43 +0,0 @@
-This is a test of the automatic emergency brake!
-
---- parameters
-
-wrapped: 0
-ellipsized: 1
-lines: 2
-width: 225280
-
---- attributes
-
-range 0 22
-range 22 41
-22 41 foreground #00000000ffff
-22 41 underline single
-range 41 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 7(0) 8(0) 9(0) 10(0) 11(0) 12(0) 13(0) 14(0) 15(0) 16(0) 17(0) 18(0) 19(0) 20(0) 21(0) 22(0) 23(0) 24(0) 25(0) 26(0) 27(0) 28(0) 29(0) 30(0) 31(0) 32(0) 33(0) 34(0) 35(0) 36(0) 37(0) 38(0) 39(0) 40(0) 41(0) 42(0) 43(0) 44(0) 45(0) 46(0) 47(0) 47(1) 49(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'This is a test of the automatic emergency brake!
-'
-i=2, index=49, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=22, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'This is a test of the '
-i=2, index=22, chars=11, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'automatic e'
-22 41 foreground #00000000ffff
-22 41 underline single
-i=3, index=33, chars=15, level=0, gravity=south, flags=2, font=OMITTED, script=common, language=en-us, 'mergency brake!'
-0 2147483647 fallback false
-22 41 foreground #00000000ffff
-22 41 underline single
-i=4, index=48, no run, line end
-i=5, index=49, no run, line end
diff --git a/tests/layouts/valid-10.expected b/tests/layouts/valid-10.expected
deleted file mode 100644
index 6eb02946..00000000
--- a/tests/layouts/valid-10.expected
+++ /dev/null
@@ -1,37 +0,0 @@
-Hello שלום Γειά σας
-
---- parameters
-
-wrapped: 0
-ellipsized: 1
-lines: 2
-width: 102400
-
---- attributes
-
-range 0 2147483647
-
---- directions
-
-0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 12(0) 10(0) 8(0) 14(0) 15(0) 17(0) 19(0) 21(0) 23(0) 24(0) 26(0) 28(0) 28(1) 31(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'Hello שלום Γειά σας
-'
-i=2, index=31, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=6, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'Hello '
-i=2, index=12, chars=4, level=1, gravity=south, flags=0, font=OMITTED, script=hebrew, language=he, 'שלום'
-i=3, index=14, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=hebrew, language=he, ' '
-i=4, index=15, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=greek, language=el, 'Γ'
-i=5, index=17, chars=7, level=0, gravity=south, flags=2, font=OMITTED, script=common, language=en-us, 'ειά σας'
-0 2147483647 fallback false
-i=6, index=30, no run, line end
-i=7, index=31, no run, line end
diff --git a/tests/layouts/valid-11.expected b/tests/layouts/valid-11.expected
deleted file mode 100644
index c22daf87..00000000
--- a/tests/layouts/valid-11.expected
+++ /dev/null
@@ -1,53 +0,0 @@
-double low error
-
---- parameters
-
-wrapped: 0
-ellipsized: 0
-lines: 2
-width: 225280
-
---- attributes
-
-range 0 6
-0 6 underline double
-0 6 overline single
-range 6 7
-range 7 10
-7 10 underline low
-7 10 strikethrough true
-range 10 11
-range 11 16
-11 16 underline error
-11 16 rise 1024
-range 16 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 7(0) 8(0) 9(0) 10(0) 11(0) 12(0) 13(0) 14(0) 15(0) 15(1) 17(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'double low error
-'
-i=2, index=17, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=6, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'double'
-0 6 underline double
-0 6 overline single
-i=2, index=6, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' '
-i=3, index=7, chars=3, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'low'
-7 10 underline low
-7 10 strikethrough true
-i=4, index=10, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' '
-i=5, index=11, chars=5, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'error'
-11 16 rise 1024
-11 16 underline error
-i=6, index=16, no run, line end
-i=7, index=17, no run, line end
diff --git a/tests/layouts/valid-12.expected b/tests/layouts/valid-12.expected
deleted file mode 100644
index d66ae134..00000000
--- a/tests/layouts/valid-12.expected
+++ /dev/null
@@ -1,35 +0,0 @@
-a b c d
e f g h
-
---- parameters
-
-wrapped: 1
-ellipsized: 0
-lines: 3
-
---- attributes
-
-range 0 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 7(0) 8(0) 9(0) 10(0) 11(0) 12(0) 13(0) 14(0) 15(0) 16(0) 17(0) 18(0) 19(0) 20(0) 21(0) 22(0) 23(0) 24(0) 25(0) 25(1) 29(0) 30(0) 31(0) 32(0) 33(0) 34(0) 35(0) 36(0) 37(0) 38(0) 39(0) 40(0) 41(0) 42(0) 43(0) 44(0) 45(0) 46(0) 47(0) 48(0) 49(0) 50(0) 50(1) 52(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'a b c d
'
-i=2, index=28, paragraph-start=0, dir=ltr 'e f g h
-'
-i=3, index=52, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=25, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'a b c d'
-i=2, index=25, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '
'
-i=3, index=28, no run, line end
-i=4, index=28, chars=23, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'e f g h'
-i=5, index=51, no run, line end
-i=6, index=52, no run, line end
diff --git a/tests/layouts/valid-13.expected b/tests/layouts/valid-13.expected
deleted file mode 100644
index cc435a88..00000000
--- a/tests/layouts/valid-13.expected
+++ /dev/null
@@ -1,35 +0,0 @@
-a b c d
e f g h
-
---- parameters
-
-wrapped: 0
-ellipsized: 0
-lines: 1
-
---- attributes
-
-range 0 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 7(0) 8(0) 9(0) 10(0) 11(0) 12(0) 13(0) 14(0) 15(0) 16(0) 17(0) 18(0) 19(0) 20(0) 21(0) 22(0) 23(0) 24(0) 25(0) 28(0) 29(0) 30(0) 31(0) 32(0) 33(0) 34(0) 35(0) 36(0) 37(0) 38(0) 39(0) 40(0) 41(0) 42(0) 43(0) 44(0) 45(0) 46(0) 47(0) 48(0) 49(0) 50(0) 51(0) 51(1)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'a b c d
e f g h
-'
-
---- runs
-
-i=1, index=0, chars=25, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'a b c d'
-0 4294967295 show 2
-i=2, index=25, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '
'
-0 4294967295 show 2
-i=3, index=28, chars=24, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'e f g h
-'
-0 4294967295 show 2
-i=4, index=52, no run, line end
diff --git a/tests/layouts/valid-14.expected b/tests/layouts/valid-14.expected
deleted file mode 100644
index 89172781..00000000
--- a/tests/layouts/valid-14.expected
+++ /dev/null
@@ -1,38 +0,0 @@
-你好 Hello שלום Γειά σας
-
---- parameters
-
-wrapped: 0
-ellipsized: 1
-lines: 2
-width: 161792
-
---- attributes
-
-range 0 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 3(0) 6(0) 8(0) 9(0) 10(0) 11(0) 12(0) 13(0) 19(0) 17(0) 15(0) 21(0) 22(0) 24(0) 26(0) 28(0) 30(0) 31(0) 33(0) 35(0) 35(1) 38(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr '你好 Hello שלום Γειά σας
-'
-i=2, index=38, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=1, level=0, gravity=south, flags=2, font=OMITTED, script=common, language=en-us, '你'
-0 2147483647 fallback true
-i=2, index=3, chars=2, level=0, gravity=south, flags=0, font=OMITTED, script=han, language=xx, '好 '
-i=3, index=7, chars=6, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'Hello '
-i=4, index=19, chars=4, level=1, gravity=south, flags=0, font=OMITTED, script=hebrew, language=he, 'שלום'
-i=5, index=21, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=hebrew, language=he, ' '
-i=6, index=22, chars=8, level=0, gravity=south, flags=0, font=OMITTED, script=greek, language=el, 'Γειά σας'
-i=7, index=37, no run, line end
-i=8, index=38, no run, line end
diff --git a/tests/layouts/valid-15.expected b/tests/layouts/valid-15.expected
deleted file mode 100644
index f029482a..00000000
--- a/tests/layouts/valid-15.expected
+++ /dev/null
@@ -1,36 +0,0 @@
-Lets see if this text is long enough to wrap due to height limitations. It might, or it might not.
-
---- parameters
-
-wrapped: 1
-ellipsized: 1
-lines: 2
-width: 153600
-height: 40960
-
---- attributes
-
-range 0 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 7(0) 8(0) 9(0) 10(0) 11(0) 12(0) 13(0) 14(0) 15(0) 16(0) 17(0) 18(0) 19(0) 20(0) 21(0) 22(0) 23(0) 24(0) 24(1) 26(0) 27(0) 28(0) 29(0) 30(0) 31(0) 32(0) 33(0) 34(0) 35(0) 36(0) 37(0) 38(0) 39(0) 40(0) 41(0) 42(0) 43(0) 44(0) 45(0) 46(0) 47(0) 48(0) 49(0) 50(0) 51(0) 52(0) 53(0) 54(0) 55(0) 56(0) 57(0) 58(0) 59(0) 60(0) 61(0) 62(0) 63(0) 64(0) 65(0) 66(0) 67(0) 68(0) 69(0) 70(0) 71(0) 72(0) 73(0) 74(0) 75(0) 76(0) 77(0) 78(0) 79(0) 80(0) 81(0) 82(0) 83(0) 84(0) 85(0) 86(0) 87(0) 88(0) 89(0) 90(0) 91(0) 92(0) 93(0) 94(0) 95(0) 96(0) 97(0) 97(1)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'Lets see if this text is '
-i=2, index=25, paragraph-start=0, dir=ltr 'long enough to wrap due to height limitations. It might, or it might not.
-'
-
---- runs
-
-i=1, index=0, chars=25, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'Lets see if this text is '
-i=2, index=25, no run, line end
-i=3, index=25, chars=20, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'long enough to wrap '
-i=4, index=45, chars=53, level=0, gravity=south, flags=2, font=OMITTED, script=common, language=en-us, 'due to height limitations. It might, or it might not.'
-0 2147483647 fallback false
-i=5, index=98, no run, line end
diff --git a/tests/layouts/valid-16.expected b/tests/layouts/valid-16.expected
deleted file mode 100644
index 01af96cf..00000000
--- a/tests/layouts/valid-16.expected
+++ /dev/null
@@ -1,37 +0,0 @@
-Lets see if this text is long enough to wrap due to height limitations. It might, or it might not.
-
---- parameters
-
-wrapped: 1
-ellipsized: 1
-lines: 3
-width: 153600
-
---- attributes
-
-range 0 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 7(0) 8(0) 9(0) 10(0) 11(0) 12(0) 13(0) 14(0) 15(0) 16(0) 17(0) 18(0) 19(0) 20(0) 21(0) 22(0) 23(0) 24(0) 24(1) 26(0) 27(0) 28(0) 29(0) 30(0) 31(0) 32(0) 33(0) 34(0) 35(0) 36(0) 37(0) 38(0) 39(0) 40(0) 41(0) 42(0) 43(0) 44(0) 45(0) 46(0) 47(0) 48(0) 49(0) 50(0) 51(0) 52(0) 53(0) 54(0) 55(0) 56(0) 57(0) 58(0) 59(0) 60(0) 61(0) 62(0) 63(0) 64(0) 65(0) 66(0) 67(0) 68(0) 69(0) 70(0) 71(0) 72(0) 73(0) 74(0) 75(0) 76(0) 77(0) 78(0) 79(0) 80(0) 81(0) 82(0) 83(0) 84(0) 85(0) 86(0) 87(0) 88(0) 89(0) 90(0) 91(0) 92(0) 93(0) 94(0) 95(0) 96(0) 97(0) 97(1) 99(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'Lets see if this text is '
-i=2, index=25, paragraph-start=0, dir=ltr 'long enough to wrap due to height limitations. It might, or it might not.
-'
-i=3, index=99, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=25, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'Lets see if this text is '
-i=2, index=25, no run, line end
-i=3, index=25, chars=20, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'long enough to wrap '
-i=4, index=45, chars=53, level=0, gravity=south, flags=2, font=OMITTED, script=common, language=en-us, 'due to height limitations. It might, or it might not.'
-0 2147483647 fallback false
-i=5, index=98, no run, line end
-i=6, index=99, no run, line end
diff --git a/tests/layouts/valid-17.expected b/tests/layouts/valid-17.expected
deleted file mode 100644
index 4b3192fb..00000000
--- a/tests/layouts/valid-17.expected
+++ /dev/null
@@ -1,35 +0,0 @@
-some|bla|bla|bla
-
---- parameters
-
-wrapped: 1
-ellipsized: 0
-lines: 3
-width: 102400
-
---- attributes
-
-range 0 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 7(0) 8(0) 9(0) 10(0) 11(0) 12(0) 12(1) 14(0) 15(0) 15(1) 17(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'some|bla|bla|'
-i=2, index=13, paragraph-start=0, dir=ltr 'bla
-'
-i=3, index=17, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=13, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'some|bla|bla|'
-i=2, index=13, no run, line end
-i=3, index=13, chars=3, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'bla'
-i=4, index=16, no run, line end
-i=5, index=17, no run, line end
diff --git a/tests/layouts/valid-18.expected b/tests/layouts/valid-18.expected
deleted file mode 100644
index ea6aabeb..00000000
--- a/tests/layouts/valid-18.expected
+++ /dev/null
@@ -1,40 +0,0 @@
-some line breaks
and mis­ce­llaneous ignora‌bles
-
---- parameters
-
-wrapped: 1
-ellipsized: 0
-lines: 3
-
---- attributes
-
-range 0 57
-0 57 show 7
-range 57 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 7(0) 8(0) 9(0) 10(0) 11(0) 12(0) 13(0) 14(0) 15(0) 16(0) 16(1) 20(0) 21(0) 22(0) 23(0) 24(0) 25(0) 26(0) 28(0) 29(0) 30(0) 32(0) 33(0) 34(0) 35(0) 36(0) 37(0) 38(0) 39(0) 40(0) 41(0) 42(0) 43(0) 46(0) 47(0) 48(0) 49(0) 53(0) 54(0) 55(0) 56(0) 56(1) 58(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'some line breaks
'
-i=2, index=19, paragraph-start=0, dir=ltr 'and mis­ce­llaneous ignora‌bles
-'
-i=3, index=58, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=16, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'some line breaks'
-0 57 show 7
-i=2, index=16, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '
'
-0 57 show 7
-i=3, index=19, no run, line end
-i=4, index=19, chars=32, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'and mis­ce­llaneous ignora‌bles'
-0 57 show 7
-i=5, index=57, no run, line end
-i=6, index=58, no run, line end
diff --git a/tests/layouts/valid-19.expected b/tests/layouts/valid-19.expected
deleted file mode 100644
index 5e115e47..00000000
--- a/tests/layouts/valid-19.expected
+++ /dev/null
@@ -1,42 +0,0 @@
- a⃠ 😊︎ 😊️ 🇩🇪 ✊ ✋🏾 0 # 🏴󠁵󠁳󠁣󠁡󠁿 ©
-
---- parameters
-
-wrapped: 0
-ellipsized: 0
-lines: 2
-
---- attributes
-
-range 0 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 5(0) 6(0) 13(0) 14(0) 21(0) 22(0) 30(0) 31(0) 34(0) 35(0) 42(0) 43(0) 44(0) 45(0) 46(0) 47(0) 71(0) 72(0) 72(1) 75(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr ' a⃠ 😊︎ 😊️ 🇩🇪 ✊ ✋🏾 0 # 🏴󠁵󠁳󠁣󠁡󠁿 ©
-'
-i=2, index=75, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=4, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' a⃠ '
-i=2, index=6, chars=3, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '😊︎ '
-i=3, index=14, chars=2, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '😊️'
-i=4, index=21, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' '
-i=5, index=22, chars=2, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '🇩🇪'
-i=6, index=30, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' '
-i=7, index=31, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '✊'
-i=8, index=34, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' '
-i=9, index=35, chars=2, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '✋🏾'
-i=10, index=42, chars=5, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' 0 # '
-i=11, index=47, chars=6, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '🏴󠁵󠁳󠁣󠁡󠁿'
-i=12, index=71, chars=2, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' ©'
-i=13, index=74, no run, line end
-i=14, index=75, no run, line end
diff --git a/tests/layouts/valid-2.expected b/tests/layouts/valid-2.expected
deleted file mode 100644
index 76c4f453..00000000
--- a/tests/layouts/valid-2.expected
+++ /dev/null
@@ -1,42 +0,0 @@
-test the blue drink after dinner
-
---- parameters
-
-wrapped: 0
-ellipsized: 0
-lines: 2
-
---- attributes
-
-range 0 9
-range 9 13
-9 13 style italic
-range 13 20
-range 20 25
-20 25 underline single
-range 25 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 7(0) 8(0) 9(0) 10(0) 11(0) 12(0) 13(0) 14(0) 15(0) 16(0) 17(0) 18(0) 19(0) 20(0) 21(0) 22(0) 23(0) 24(0) 25(0) 26(0) 27(0) 28(0) 29(0) 30(0) 31(0) 31(1) 33(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'test the blue drink after dinner
-'
-i=2, index=33, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=9, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'test the '
-i=2, index=9, chars=4, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'blue'
-i=3, index=13, chars=7, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' drink '
-i=4, index=20, chars=5, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'after'
-20 25 underline single
-i=5, index=25, chars=7, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' dinner'
-i=6, index=32, no run, line end
-i=7, index=33, no run, line end
diff --git a/tests/layouts/valid-20.expected b/tests/layouts/valid-20.expected
deleted file mode 100644
index e3a68815..00000000
--- a/tests/layouts/valid-20.expected
+++ /dev/null
@@ -1,40 +0,0 @@
-abcdef
-
---- parameters
-
-wrapped: 0
-ellipsized: 0
-lines: 2
-
---- attributes
-
-range 0 3
-0 3 gravity east
-0 3 gravity-hint strong
-range 3 6
-3 6 gravity south
-range 6 2147483647
-
---- directions
-
-0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 5(1) 7(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'abcdef
-'
-i=2, index=7, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=3, level=0, gravity=east, flags=0, font=OMITTED, script=latin, language=en-us, 'abc'
-0 3 gravity east
-0 3 gravity-hint strong
-i=2, index=3, chars=3, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'def'
-3 6 gravity south
-i=3, index=6, no run, line end
-i=4, index=7, no run, line end
diff --git a/tests/layouts/valid-22.expected b/tests/layouts/valid-22.expected
deleted file mode 100644
index 8bbd3620..00000000
--- a/tests/layouts/valid-22.expected
+++ /dev/null
@@ -1,111 +0,0 @@
-e0 = ooo...
-
---- parameters
-
-wrapped: 0
-ellipsized: 0
-lines: 2
-
---- attributes
-
-range 0 1
-range 1 2
-1 2 font-desc "Italic"
-1 2 font-scale subscript
-1 2 baseline-shift subscript
-range 2 6
-range 6 7
-6 11 font-scale superscript
-6 11 baseline-shift superscript
-range 7 8
-6 11 font-scale superscript
-6 11 baseline-shift superscript
-7 11 font-scale superscript
-7 11 baseline-shift superscript
-range 8 9
-6 11 font-scale superscript
-6 11 baseline-shift superscript
-7 11 font-scale superscript
-7 11 baseline-shift superscript
-8 11 font-scale superscript
-8 11 baseline-shift superscript
-range 9 10
-6 11 font-scale superscript
-6 11 baseline-shift superscript
-7 11 font-scale superscript
-7 11 baseline-shift superscript
-8 11 font-scale superscript
-8 11 baseline-shift superscript
-9 11 font-scale superscript
-9 11 baseline-shift superscript
-range 10 11
-6 11 font-scale superscript
-6 11 baseline-shift superscript
-7 11 font-scale superscript
-7 11 baseline-shift superscript
-8 11 font-scale superscript
-8 11 baseline-shift superscript
-9 11 font-scale superscript
-9 11 baseline-shift superscript
-10 11 font-scale superscript
-10 11 baseline-shift superscript
-range 11 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 7(0) 8(0) 9(0) 10(1) 12(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'e0 = ooo...
-'
-i=2, index=12, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'e'
-i=2, index=1, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '0'
-1 2 font-scale subscript
-1 2 baseline-shift subscript
-i=3, index=2, chars=4, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' = o'
-i=4, index=6, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'o'
-6 11 font-scale superscript
-6 11 baseline-shift superscript
-i=5, index=7, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'o'
-6 11 font-scale superscript
-6 11 baseline-shift superscript
-7 11 font-scale superscript
-7 11 baseline-shift superscript
-i=6, index=8, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '.'
-6 11 font-scale superscript
-6 11 baseline-shift superscript
-7 11 font-scale superscript
-7 11 baseline-shift superscript
-8 11 font-scale superscript
-8 11 baseline-shift superscript
-i=7, index=9, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '.'
-6 11 font-scale superscript
-6 11 baseline-shift superscript
-7 11 font-scale superscript
-7 11 baseline-shift superscript
-8 11 font-scale superscript
-8 11 baseline-shift superscript
-9 11 font-scale superscript
-9 11 baseline-shift superscript
-i=8, index=10, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '.'
-6 11 font-scale superscript
-6 11 baseline-shift superscript
-7 11 font-scale superscript
-7 11 baseline-shift superscript
-8 11 font-scale superscript
-8 11 baseline-shift superscript
-9 11 font-scale superscript
-9 11 baseline-shift superscript
-10 11 font-scale superscript
-10 11 baseline-shift superscript
-i=9, index=11, no run, line end
-i=10, index=12, no run, line end
diff --git a/tests/layouts/valid-3.expected b/tests/layouts/valid-3.expected
deleted file mode 100644
index d090bac0..00000000
--- a/tests/layouts/valid-3.expected
+++ /dev/null
@@ -1,33 +0,0 @@
-ABC😀️D
-
---- parameters
-
-wrapped: 0
-ellipsized: 0
-lines: 2
-
---- attributes
-
-range 0 2147483647
-
---- directions
-
-0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 10(0) 10(1) 12(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'ABC😀️D
-'
-i=2, index=12, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=3, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'ABC'
-i=2, index=3, chars=2, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '😀️'
-i=3, index=10, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'D'
-i=4, index=11, no run, line end
-i=5, index=12, no run, line end
diff --git a/tests/layouts/valid-4.expected b/tests/layouts/valid-4.expected
deleted file mode 100644
index 4e69d61d..00000000
--- a/tests/layouts/valid-4.expected
+++ /dev/null
@@ -1,44 +0,0 @@
-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!
-
---- parameters
-
-wrapped: 1
-ellipsized: 0
-lines: 6
-width: 198656
-
---- attributes
-
-range 0 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 7(0) 8(0) 9(0) 10(0) 11(0) 12(0) 13(0) 14(0) 15(0) 16(0) 17(0) 18(0) 19(0) 20(0) 21(0) 22(0) 23(0) 24(0) 27(0) 28(0) 29(0) 30(0) 30(1) 33(0) 34(0) 35(0) 36(0) 37(0) 38(0) 39(0) 40(0) 41(0) 42(0) 43(0) 44(0) 45(0) 46(0) 47(0) 48(0) 49(0) 50(0) 51(0) 52(0) 53(0) 54(0) 55(0) 56(0) 57(0) 58(0) 59(0) 60(0) 61(0) 62(0) 62(1) 64(0) 65(0) 66(0) 67(0) 68(0) 69(0) 70(0) 71(0) 72(0) 73(0) 74(0) 75(0) 76(0) 77(0) 78(0) 79(0) 80(0) 81(0) 82(0) 83(0) 84(0) 85(0) 87(0) 89(0) 91(0) 92(0) 93(0) 94(0) 94(1) 97(0) 98(0) 101(0) 102(0) 103(0) 104(0) 105(0) 106(0) 107(0) 108(0) 109(0) 110(0) 111(0) 112(0) 113(0) 114(0) 115(0) 116(0) 117(0) 118(0) 119(0) 120(0) 121(0) 122(0) 123(0) 124(0) 125(0) 126(0) 127(0) 128(0) 128(1) 130(0) 131(0) 132(0) 133(0) 134(0) 135(0) 136(0) 137(0) 138(0) 139(0) 140(0) 141(0) 142(0) 143(0) 144(0) 145(0) 146(0) 147(0) 148(0) 149(0) 150(0) 150(1) 152(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'This paragraph should ac­tual­'
-i=2, index=32, paragraph-start=0, dir=ltr 'ly have multiple lines, unlike '
-i=3, index=63, paragraph-start=0, dir=ltr 'all the other wannabe äöü pa­'
-i=4, index=96, paragraph-start=0, dir=ltr 'ra­graph tests in this ugh test-'
-i=5, index=129, paragraph-start=0, dir=ltr 'case. Grow some lines!
-'
-i=6, index=152, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=30, level=0, gravity=south, flags=4, font=OMITTED, script=latin, language=en-us, 'This paragraph should ac­tual­'
-i=2, index=32, no run, line end
-i=3, index=32, chars=31, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'ly have multiple lines, unlike '
-i=4, index=63, no run, line end
-i=5, index=63, chars=29, level=0, gravity=south, flags=4, font=OMITTED, script=latin, language=en-us, 'all the other wannabe äöü pa­'
-i=6, index=96, no run, line end
-i=7, index=96, chars=32, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'ra­graph tests in this ugh test-'
-i=8, index=129, no run, line end
-i=9, index=129, chars=22, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'case. Grow some lines!'
-i=10, index=151, no run, line end
-i=11, index=152, no run, line end
diff --git a/tests/layouts/valid-5.expected b/tests/layouts/valid-5.expected
deleted file mode 100644
index 20627955..00000000
--- a/tests/layouts/valid-5.expected
+++ /dev/null
@@ -1,56 +0,0 @@
-A test with multiple paragraphs and with no-break attributes, which might trigger a crash.
-If it doesn't the fix has worked.
-
---- parameters
-
-wrapped: 1
-ellipsized: 0
-lines: 7
-width: 194560
-
---- attributes
-
-range 0 21
-range 21 31
-21 31 font-features "tnum=1"
-range 31 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 7(0) 8(0) 9(0) 10(0) 11(0) 12(0) 13(0) 14(0) 15(0) 16(0) 17(0) 18(0) 19(0) 20(0) 20(1) 22(0) 23(0) 24(0) 25(0) 26(0) 27(0) 28(0) 29(0) 30(0) 31(0) 32(0) 33(0) 34(0) 35(0) 36(0) 37(0) 38(0) 39(0) 40(0) 41(0) 42(0) 43(0) 43(1) 45(0) 46(0) 47(0) 48(0) 49(0) 50(0) 51(0) 52(0) 53(0) 54(0) 55(0) 56(0) 57(0) 58(0) 59(0) 60(0) 61(0) 62(0) 63(0) 64(0) 65(0) 66(0) 67(0) 68(0) 69(0) 70(0) 71(0) 72(0) 73(0) 73(1) 75(0) 76(0) 77(0) 78(0) 79(0) 80(0) 81(0) 82(0) 83(0) 84(0) 85(0) 86(0) 87(0) 88(0) 89(0) 89(1) 91(0) 92(0) 93(0) 94(0) 95(0) 96(0) 97(0) 98(0) 99(0) 100(0) 101(0) 102(0) 103(0) 104(0) 105(0) 106(0) 107(0) 108(0) 109(0) 110(0) 111(0) 112(0) 113(0) 114(0) 115(0) 116(0) 116(1) 118(0) 119(0) 120(0) 121(0) 122(0) 123(0) 123(1) 125(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'A test with multiple '
-i=2, index=21, paragraph-start=0, dir=ltr 'paragraphs and with no-'
-i=3, index=44, paragraph-start=0, dir=ltr 'break attributes, which might '
-i=4, index=74, paragraph-start=0, dir=ltr 'trigger a crash.
-'
-i=5, index=91, paragraph-start=1, dir=ltr 'If it doesn't the fix has '
-i=6, index=117, paragraph-start=0, dir=ltr 'worked.
-'
-i=7, index=125, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=21, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'A test with multiple '
-21 31 font-features "tnum=1"
-i=2, index=21, no run, line end
-i=3, index=21, chars=23, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'paragraphs and with no-'
-21 31 font-features "tnum=1"
-i=4, index=44, no run, line end
-i=5, index=44, chars=30, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'break attributes, which might '
-21 31 font-features "tnum=1"
-i=6, index=74, no run, line end
-i=7, index=74, chars=16, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'trigger a crash.'
-21 31 font-features "tnum=1"
-i=8, index=90, no run, line end
-i=9, index=91, chars=26, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'If it doesn't the fix has '
-i=10, index=117, no run, line end
-i=11, index=117, chars=7, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'worked.'
-i=12, index=124, no run, line end
-i=13, index=125, no run, line end
diff --git a/tests/layouts/valid-6.expected b/tests/layouts/valid-6.expected
deleted file mode 100644
index 040e0fa4..00000000
--- a/tests/layouts/valid-6.expected
+++ /dev/null
@@ -1,33 +0,0 @@
- 0️⃣ Keycap Digit Zero
-
---- parameters
-
-wrapped: 0
-ellipsized: 0
-lines: 2
-
---- attributes
-
-range 0 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 8(0) 9(0) 10(0) 11(0) 12(0) 13(0) 14(0) 15(0) 16(0) 17(0) 18(0) 19(0) 20(0) 21(0) 22(0) 23(0) 24(0) 25(0) 25(1) 27(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr ' 0️⃣ Keycap Digit Zero
-'
-i=2, index=27, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' '
-i=2, index=1, chars=3, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, '0️⃣'
-i=3, index=8, chars=18, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' Keycap Digit Zero'
-i=4, index=26, no run, line end
-i=5, index=27, no run, line end
diff --git a/tests/layouts/valid-7.expected b/tests/layouts/valid-7.expected
deleted file mode 100644
index 13595a75..00000000
--- a/tests/layouts/valid-7.expected
+++ /dev/null
@@ -1,43 +0,0 @@
-This is a test of the automatic emergency brake!
-
---- parameters
-
-wrapped: 0
-ellipsized: 1
-lines: 2
-width: 204800
-indent: 51200
-
---- attributes
-
-range 0 22
-range 22 41
-22 41 foreground #00000000ffff
-22 41 underline single
-range 41 2147483647
-
---- directions
-
-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 7(0) 8(0) 9(0) 10(0) 11(0) 12(0) 13(0) 14(0) 15(0) 16(0) 17(0) 18(0) 19(0) 20(0) 21(0) 22(0) 23(0) 24(0) 25(0) 26(0) 27(0) 28(0) 29(0) 30(0) 31(0) 32(0) 33(0) 34(0) 35(0) 36(0) 37(0) 38(0) 39(0) 40(0) 41(0) 42(0) 43(0) 44(0) 45(0) 46(0) 47(0) 47(1) 49(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'This is a test of the automatic emergency brake!
-'
-i=2, index=49, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=12, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'This is a te'
-i=2, index=12, chars=26, level=0, gravity=south, flags=2, font=OMITTED, script=common, language=en-us, 'st of the automatic emerge'
-0 2147483647 fallback false
-i=3, index=38, chars=3, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'ncy'
-22 41 foreground #00000000ffff
-22 41 underline single
-i=4, index=41, chars=7, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, ' brake!'
-i=5, index=48, no run, line end
-i=6, index=49, no run, line end
diff --git a/tests/layouts/valid-8.expected b/tests/layouts/valid-8.expected
deleted file mode 100644
index 185ba373..00000000
--- a/tests/layouts/valid-8.expected
+++ /dev/null
@@ -1,34 +0,0 @@
-Hello שלום Γειά σας
-
---- parameters
-
-wrapped: 0
-ellipsized: 0
-lines: 2
-
---- attributes
-
-range 0 2147483647
-
---- directions
-
-0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 6(0) 12(0) 10(0) 8(0) 14(0) 15(0) 17(0) 19(0) 21(0) 23(0) 24(0) 26(0) 28(0) 28(1) 31(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'Hello שלום Γειά σας
-'
-i=2, index=31, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=6, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'Hello '
-i=2, index=12, chars=4, level=1, gravity=south, flags=0, font=OMITTED, script=hebrew, language=he, 'שלום'
-i=3, index=14, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=hebrew, language=he, ' '
-i=4, index=15, chars=8, level=0, gravity=south, flags=0, font=OMITTED, script=greek, language=el, 'Γειά σας'
-i=5, index=30, no run, line end
-i=6, index=31, no run, line end
diff --git a/tests/layouts/valid-9.expected b/tests/layouts/valid-9.expected
deleted file mode 100644
index 5cbbf8fc..00000000
--- a/tests/layouts/valid-9.expected
+++ /dev/null
@@ -1,49 +0,0 @@
-Hello שלום Γειά σας
-
---- parameters
-
-wrapped: 1
-ellipsized: 0
-lines: 5
-width: 102400
-
---- attributes
-
-range 0 30
-0 30 letter-spacing 8888
-range 30 2147483647
-
---- directions
-
-0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0
-
---- cursor positions
-
-0(0) 1(0) 2(0) 3(0) 4(0) 5(0) 5(1) 12(0) 10(0) 8(0) 14(0) 14(1) 17(0) 19(0) 21(0) 23(0) 23(1) 26(0) 28(0) 28(1) 31(0)
-
---- lines
-
-i=1, index=0, paragraph-start=1, dir=ltr 'Hello שלו'
-i=2, index=12, paragraph-start=0, dir=ltr 'ם '
-i=3, index=15, paragraph-start=0, dir=ltr 'Γειά '
-i=4, index=24, paragraph-start=0, dir=ltr 'σας
-'
-i=5, index=31, paragraph-start=1, dir=ltr ''
-
---- runs
-
-i=1, index=0, chars=6, level=0, gravity=south, flags=0, font=OMITTED, script=latin, language=en-us, 'Hello '
-0 30 letter-spacing 8888
-i=2, index=6, no run, line end
-i=3, index=12, chars=4, level=1, gravity=south, flags=0, font=OMITTED, script=hebrew, language=he, 'שלום'
-0 30 letter-spacing 8888
-i=4, index=14, chars=1, level=0, gravity=south, flags=0, font=OMITTED, script=hebrew, language=he, ' '
-0 30 letter-spacing 8888
-i=5, index=15, no run, line end
-i=6, index=15, chars=5, level=0, gravity=south, flags=0, font=OMITTED, script=greek, language=el, 'Γειά '
-0 30 letter-spacing 8888
-i=7, index=24, no run, line end
-i=8, index=24, chars=3, level=0, gravity=south, flags=0, font=OMITTED, script=greek, language=el, 'σας'
-0 30 letter-spacing 8888
-i=9, index=30, no run, line end
-i=10, index=31, no run, line end