[hb-shape] Add --show-text and --show-unicode options

This commit is contained in:
Behdad Esfahbod 2012-01-19 12:32:20 -05:00
parent 27c36af411
commit cc4d9810d6
3 changed files with 50 additions and 7 deletions

View File

@ -42,6 +42,7 @@ struct output_buffer_t : output_options_t, format_options_t
protected:
GString *gs;
hb_font_t *font;
hb_buffer_t *scratch;
};
void
@ -50,6 +51,7 @@ output_buffer_t::init (const font_options_t *font_opts)
get_file_handle ();
font = hb_font_reference (font_opts->get_font ());
gs = g_string_new (NULL);
scratch = hb_buffer_create ();
}
void
@ -58,13 +60,28 @@ output_buffer_t::consume_line (hb_buffer_t *buffer,
unsigned int text_len)
{
g_string_set_size (gs, 0);
serialize (buffer, font, gs);
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);
}
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);

View File

@ -676,6 +676,8 @@ format_options_t::add_options (option_parser_t *parser)
{"no-glyph-names", 0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &this->show_glyph_names, "Use glyph indices instead of names", NULL},
{"no-positions", 0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &this->show_positions, "Do not show glyph positions", NULL},
{"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},
{NULL}
};
parser->add_group (entries,
@ -686,9 +688,27 @@ format_options_t::add_options (option_parser_t *parser)
}
void
format_options_t::serialize (hb_buffer_t *buffer,
hb_font_t *font,
GString *gs)
format_options_t::serialize_unicode (hb_buffer_t *buffer,
GString *gs)
{
unsigned int num_glyphs = hb_buffer_get_length (buffer);
hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
g_string_append_c (gs, '<');
for (unsigned int i = 0; i < num_glyphs; i++)
{
if (i)
g_string_append_c (gs, ',');
g_string_append_printf (gs, "U+%04X", info->codepoint);
info++;
}
g_string_append_c (gs, '>');
}
void
format_options_t::serialize_glyphs (hb_buffer_t *buffer,
hb_font_t *font,
GString *gs)
{
FT_Face ft_face = show_glyph_names ? hb_ft_font_get_face (font) : NULL;

View File

@ -283,6 +283,8 @@ struct format_options_t : option_group_t
show_glyph_names = true;
show_positions = true;
show_clusters = true;
show_text = false;
show_unicode = false;
add_options (parser);
}
@ -291,14 +293,18 @@ struct format_options_t : option_group_t
void add_options (option_parser_t *parser);
void serialize (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);
protected:
hb_bool_t show_glyph_names;
hb_bool_t show_positions;
hb_bool_t show_clusters;
hb_bool_t show_text;
hb_bool_t show_unicode;
};