[hb-shape] Add --show-line-num
Ok, much more useful as a test suite driver now.
diff --git a/util/hb-shape.cc b/util/hb-shape.cc
index 1910848..a76a778 100644
--- a/util/hb-shape.cc
+++ b/util/hb-shape.cc
@@ -42,7 +42,7 @@
protected:
GString *gs;
hb_font_t *font;
- hb_buffer_t *scratch;
+ unsigned int line_no;
};
void
@@ -51,7 +51,7 @@
get_file_handle ();
font = hb_font_reference (font_opts->get_font ());
gs = g_string_new (NULL);
- scratch = hb_buffer_create ();
+ line_no = 0;
}
void
@@ -59,29 +59,15 @@
const char *text,
unsigned int text_len)
{
+ line_no++;
g_string_set_size (gs, 0);
-
- if (show_text) {
- g_string_append_len (gs, text, text_len);
- g_string_append_c (gs, '\n');
- }
-
- if (show_unicode) {
- hb_buffer_reset (scratch);
- hb_buffer_add_utf8 (scratch, text, text_len, 0, -1);
- serialize_unicode (buffer, gs);
- g_string_append_c (gs, '\n');
- }
-
- serialize_glyphs (buffer, font, gs);
- fprintf (fp, "%s\n", gs->str);
+ serialize_line (buffer, line_no, text, text_len, font, gs);
+ fprintf (fp, "%s", gs->str);
}
void
output_buffer_t::finish (const font_options_t *font_opts)
{
- hb_buffer_destroy (scratch);
- scratch = NULL;
g_string_free (gs, TRUE);
gs = NULL;
hb_font_destroy (font);
diff --git a/util/options.cc b/util/options.cc
index e497d72..2bf2c58 100644
--- a/util/options.cc
+++ b/util/options.cc
@@ -678,6 +678,7 @@
{"no-clusters", 0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &this->show_clusters, "Do not show cluster mapping", NULL},
{"show-text", 0, 0, G_OPTION_ARG_NONE, &this->show_text, "Show input text", NULL},
{"show-unicode", 0, 0, G_OPTION_ARG_NONE, &this->show_unicode, "Show input Unicode codepoints", NULL},
+ {"show-line-num", 0, 0, G_OPTION_ARG_NONE, &this->show_line_num, "Show line numbers", NULL},
{NULL}
};
parser->add_group (entries,
@@ -750,3 +751,36 @@
}
g_string_append_c (gs, '>');
}
+void
+format_options_t::serialize_line_no (unsigned int line_no,
+ GString *gs)
+{
+ if (show_line_num)
+ g_string_append_printf (gs, "%d: ", line_no);
+}
+void
+format_options_t::serialize_line (hb_buffer_t *buffer,
+ unsigned int line_no,
+ const char *text,
+ unsigned int text_len,
+ hb_font_t *font,
+ GString *gs)
+{
+ if (show_text) {
+ serialize_line_no (line_no, gs);
+ g_string_append_len (gs, text, text_len);
+ g_string_append_c (gs, '\n');
+ }
+
+ if (show_unicode) {
+ serialize_line_no (line_no, gs);
+ hb_buffer_reset (scratch);
+ hb_buffer_add_utf8 (scratch, text, text_len, 0, -1);
+ serialize_unicode (buffer, gs);
+ g_string_append_c (gs, '\n');
+ }
+
+ serialize_line_no (line_no, gs);
+ serialize_glyphs (buffer, font, gs);
+ g_string_append_c (gs, '\n');
+}
diff --git a/util/options.hh b/util/options.hh
index 470a313..444569e 100644
--- a/util/options.hh
+++ b/util/options.hh
@@ -285,19 +285,31 @@
show_clusters = true;
show_text = false;
show_unicode = false;
+ show_line_num = false;
+ scratch = hb_buffer_create ();
add_options (parser);
}
~format_options_t (void) {
+ hb_buffer_destroy (scratch);
}
void add_options (option_parser_t *parser);
- void serialize_unicode (hb_buffer_t *buffer,
- GString *gs);
- void serialize_glyphs (hb_buffer_t *buffer,
- hb_font_t *font,
- GString *gs);
+ void serialize_unicode (hb_buffer_t *buffer,
+ GString *gs);
+ void serialize_glyphs (hb_buffer_t *buffer,
+ hb_font_t *font,
+ GString *gs);
+ void serialize_line_no (unsigned int line_no,
+ GString *gs);
+ void serialize_line (hb_buffer_t *buffer,
+ unsigned int line_no,
+ const char *text,
+ unsigned int text_len,
+ hb_font_t *font,
+ GString *gs);
+
protected:
hb_bool_t show_glyph_names;
@@ -305,6 +317,9 @@
hb_bool_t show_clusters;
hb_bool_t show_text;
hb_bool_t show_unicode;
+ hb_bool_t show_line_num;
+ private:
+ hb_buffer_t *scratch;
};