From fe2d8bf5928e4c86be43894277b2f64dfdfce036 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 28 Aug 2021 09:33:24 -0400 Subject: test-shape: Print out glyph classes These are not very reliable for things other than marks, but even that is useful for debugging cluster handling. --- tests/test-shape.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/tests/test-shape.c b/tests/test-shape.c index 674c6cc9..a16eb9d7 100644 --- a/tests/test-shape.c +++ b/tests/test-shape.c @@ -23,6 +23,8 @@ #include #include +#include + #ifndef G_OS_WIN32 #include #endif @@ -140,7 +142,7 @@ test_file (const gchar *filename, GString *string) PangoAttrList *itemize_attrs; PangoAttrList *shape_attrs; GList *items, *l; - GString *s1, *s2, *s3, *s4, *s5, *s6, *s7; + GString *s1, *s2, *s3, *s4, *s5, *s6, *s7, *s8; char *p1; const char *sep = ""; @@ -171,6 +173,7 @@ test_file (const gchar *filename, GString *string) s5 = g_string_new ("Direction: "); s6 = g_string_new ("Item: "); s7 = g_string_new ("Offset: "); + s8 = g_string_new ("Class: "); length = strlen (text); if (text[length - 1] == '\n') @@ -208,6 +211,7 @@ test_file (const gchar *filename, GString *string) g_string_append (s5, sep); g_string_append (s6, sep); g_string_append (s7, sep); + g_string_append (s8, sep); sep = "|"; g_string_append_printf (s6, "%d(%d)", item->num_chars, item->length); @@ -228,6 +232,7 @@ test_file (const gchar *filename, GString *string) g_string_append (s5, " "); g_string_append (s6, " "); g_string_append (s7, "|"); + g_string_append (s8, "|"); } char *p; @@ -237,7 +242,7 @@ test_file (const gchar *filename, GString *string) if (i > 0) p1 = text + item->offset + glyphs->log_clusters[i - 1]; else - p1 = g_utf8_next_char (p); + p1 = text + item->offset + item->length; } else { @@ -255,6 +260,26 @@ test_file (const gchar *filename, GString *string) g_string_append_printf (s7, "%d,%d ", gi->geometry.x_offset, gi->geometry.y_offset); if (gi->attr.is_cluster_start) g_string_append_printf (s3, "%d ", item->offset + glyphs->log_clusters[i]); + switch (hb_ot_layout_get_glyph_class (hb_font_get_face (pango_font_get_hb_font (item->analysis.font)), gi->glyph)) + { + case HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED: + g_string_append (s8, "u"); + break; + case HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH: + g_string_append (s8, "b"); + break; + case HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE: + g_string_append (s8, "l"); + break; + case HB_OT_LAYOUT_GLYPH_CLASS_MARK: + g_string_append (s8, "m"); + break; + case HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT: + g_string_append (s8, "c"); + break; + default: + g_assert_not_reached (); + } len = 0; len = MAX (len, g_utf8_strlen (s1->str, s1->len)); len = MAX (len, g_utf8_strlen (s2->str, s2->len)); @@ -263,6 +288,7 @@ test_file (const gchar *filename, GString *string) len = MAX (len, g_utf8_strlen (s5->str, s5->len)); len = MAX (len, g_utf8_strlen (s6->str, s6->len)); len = MAX (len, g_utf8_strlen (s7->str, s7->len)); + len = MAX (len, g_utf8_strlen (s8->str, s8->len)); g_string_append_printf (s1, "%*s", len - (int)g_utf8_strlen (s1->str, s1->len), ""); g_string_append_printf (s4, "%*s", len - (int)g_utf8_strlen (s4->str, s4->len), ""); g_string_append_printf (s2, "%*s", len - (int)g_utf8_strlen (s2->str, s2->len), ""); @@ -270,6 +296,7 @@ test_file (const gchar *filename, GString *string) g_string_append_printf (s5, "%*s", len - (int)g_utf8_strlen (s5->str, s5->len), ""); g_string_append_printf (s6, "%*s", len - (int)g_utf8_strlen (s6->str, s6->len), ""); g_string_append_printf (s7, "%*s", len - (int)g_utf8_strlen (s7->str, s7->len), ""); + g_string_append_printf (s8, "%*s", len - (int)g_utf8_strlen (s8->str, s8->len), ""); } pango_glyph_string_free (glyphs); @@ -281,6 +308,7 @@ test_file (const gchar *filename, GString *string) g_string_append_printf (string, "%s\n", s5->str); g_string_append_printf (string, "%s\n", s3->str); g_string_append_printf (string, "%s\n", s2->str); + g_string_append_printf (string, "%s\n", s8->str); g_string_append_printf (string, "%s\n", s4->str); g_string_append_printf (string, "%s\n", s7->str); @@ -291,6 +319,7 @@ test_file (const gchar *filename, GString *string) g_string_free (s5, TRUE); g_string_free (s6, TRUE); g_string_free (s7, TRUE); + g_string_free (s8, TRUE); g_list_free_full (items, (GDestroyNotify)pango_item_free); g_free (contents); -- cgit v1.2.1 From 8505435661d9b0ef83b2138f0b3ceed507a406a5 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 30 Aug 2021 00:00:17 -0400 Subject: test-break: Add a --hex-chars option --- tests/test-break.c | 71 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/tests/test-break.c b/tests/test-break.c index fecca168..ef9f4a0a 100644 --- a/tests/test-break.c +++ b/tests/test-break.c @@ -35,6 +35,8 @@ static PangoContext *context; +static gboolean opt_hex_chars; + static gboolean test_file (const gchar *filename, GString *string) { @@ -99,7 +101,7 @@ test_file (const gchar *filename, GString *string) if (!pango_validate_log_attrs (text, length, attrs, len, &error)) { g_warning ("%s: Log attrs invalid: %s", filename, error->message); - g_assert_not_reached (); +// g_assert_not_reached (); } layout2 = pango_layout_copy (layout); @@ -238,7 +240,8 @@ test_file (const gchar *filename, GString *string) g_string_append (s5, " "); g_string_append (s6, " "); } - else if (g_unichar_isgraph (ch) && + else if (!opt_hex_chars && + g_unichar_isgraph (ch) && !(g_unichar_type (ch) == G_UNICODE_LINE_SEPARATOR || g_unichar_type (ch) == G_UNICODE_PARAGRAPH_SEPARATOR)) { @@ -377,40 +380,54 @@ main (int argc, char *argv[]) GError *error = NULL; const gchar *name; gchar *path; + gboolean opt_legend = 0; + GOptionContext *option_context; + GOptionEntry entries[] = { + { "hex-chars", 0, 0, G_OPTION_ARG_NONE, &opt_hex_chars, "Print all chars in hex", NULL }, + { "legend", 0, 0, G_OPTION_ARG_NONE, &opt_legend, "Explain the output", NULL }, + { NULL, 0 }, + }; + + option_context = g_option_context_new (""); + g_option_context_add_main_entries (option_context, entries, NULL); + g_option_context_set_ignore_unknown_options (option_context, TRUE); + if (!g_option_context_parse (option_context, &argc, &argv, &error)) + { + g_error ("failed to parse options: %s", error->message); + return 1; + } + g_option_context_free (option_context); setlocale (LC_ALL, ""); context = pango_font_map_create_context (pango_cairo_font_map_get_default ()); - /* allow to easily generate expected output for new test cases */ - if (argc > 1) + if (opt_legend) { - if (strcmp (argv[1], "--legend") == 0) - { - g_print ("test-break uses the following symbols for log attrs\n\n"); - g_print ("Breaks: Words: Graphemes:\n" - " L - mandatory break b - word boundary b - grapheme boundary\n" - " l - line break s - word start\n" - " c - char break e - word end\n" - "\n" - "Whitespace: Sentences:\n Hyphens" - " x - expandable space b - sentence boundary i - insert hyphen\n" - " w - whitespace s - sentence start r - remove preceding\n" - " e - sentence end\n"); - return 0; - } - else if (argv[1][0] != '-') - { - GString *string; + g_print ("test-break uses the following symbols for log attrs\n\n"); + g_print ("Breaks: Words: Graphemes:\n" + " L - mandatory break b - word boundary b - grapheme boundary\n" + " l - line break s - word start\n" + " c - char break e - word end\n" + "\n" + "Whitespace: Sentences:\n Hyphens" + " x - expandable space b - sentence boundary i - insert hyphen\n" + " w - whitespace s - sentence start r - remove preceding\n" + " e - sentence end\n"); + return 0; + } - string = g_string_sized_new (0); - test_file (argv[1], string); - g_print ("%s", string->str); + if (argc > 1 && argv[1][0] != '-') + { + GString *string; - g_string_free (string, TRUE); + string = g_string_sized_new (0); + test_file (argv[1], string); + g_print ("%s", string->str); - return 0; - } + g_string_free (string, TRUE); + + return 0; } g_test_init (&argc, &argv, NULL); -- cgit v1.2.1 From f448945713859dfc84935969f196f6137f34869a Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 30 Aug 2021 00:53:11 -0400 Subject: test-break: Fix legend formatting --- tests/test-break.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test-break.c b/tests/test-break.c index ef9f4a0a..127a3e71 100644 --- a/tests/test-break.c +++ b/tests/test-break.c @@ -410,7 +410,7 @@ main (int argc, char *argv[]) " l - line break s - word start\n" " c - char break e - word end\n" "\n" - "Whitespace: Sentences:\n Hyphens" + "Whitespace: Sentences: Hyphens:\n" " x - expandable space b - sentence boundary i - insert hyphen\n" " w - whitespace s - sentence start r - remove preceding\n" " e - sentence end\n"); -- cgit v1.2.1 From d9284bad559a53f72b1381c579badfc537ddecc7 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 30 Aug 2021 00:01:06 -0400 Subject: Cosmetics --- utils/viewer-pangocairo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/viewer-pangocairo.c b/utils/viewer-pangocairo.c index c94de9e1..48717c32 100644 --- a/utils/viewer-pangocairo.c +++ b/utils/viewer-pangocairo.c @@ -580,7 +580,7 @@ render_callback (PangoLayout *layout, const char *p; int i; - /* draw the caret slop in gray */ + /* draw the caret slope in gray */ cairo_save (cr); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.5); -- cgit v1.2.1