Use hb_buffer_serialize to trace in utils

This commit is contained in:
Simon Cozens 2020-09-17 16:49:59 +01:00
parent 6daa69bdad
commit 97308ddf33
3 changed files with 15 additions and 28 deletions

View File

@ -137,7 +137,7 @@ struct output_buffer_t
g_string_set_size (gs, 0);
format.serialize_line_no (line_no, gs);
g_string_append_printf (gs, "trace: %s buffer: ", message);
format.serialize_glyphs (buffer, font, output_format, format_flags, gs);
format.serialize (buffer, font, output_format, format_flags, gs);
g_string_append_c (gs, '\n');
fprintf (options.fp, "%s", gs->str);
}

View File

@ -910,31 +910,16 @@ format_options_t::add_options (option_parser_t *parser)
}
void
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, nullptr);
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,
format_options_t::serialize (hb_buffer_t *buffer,
hb_font_t *font,
hb_buffer_serialize_format_t output_format,
hb_buffer_serialize_flags_t flags,
GString *gs)
{
g_string_append_c (gs, '[');
if (hb_buffer_get_content_type(buffer) == HB_BUFFER_CONTENT_TYPE_UNICODE)
g_string_append_c (gs, '<');
else
g_string_append_c (gs, '[');
unsigned int num_glyphs = hb_buffer_get_length (buffer);
unsigned int start = 0;
@ -942,15 +927,19 @@ format_options_t::serialize_glyphs (hb_buffer_t *buffer,
{
char buf[32768];
unsigned int consumed;
start += hb_buffer_serialize_glyphs (buffer, start, num_glyphs,
start += hb_buffer_serialize (buffer, start, num_glyphs,
buf, sizeof (buf), &consumed,
font, output_format, flags);
if (!consumed)
break;
g_string_append (gs, buf);
}
g_string_append_c (gs, ']');
if (hb_buffer_get_content_type(buffer) == HB_BUFFER_CONTENT_TYPE_UNICODE)
g_string_append_c (gs, '>');
else
g_string_append_c (gs, ']');
}
void
format_options_t::serialize_line_no (unsigned int line_no,
GString *gs)
@ -978,7 +967,7 @@ format_options_t::serialize_buffer_of_text (hb_buffer_t *buffer,
if (show_unicode)
{
serialize_line_no (line_no, gs);
serialize_unicode (buffer, gs);
serialize (buffer, font, HB_BUFFER_SERIALIZE_FORMAT_TEXT, HB_BUFFER_SERIALIZE_FLAG_DEFAULT, gs);
g_string_append_c (gs, '\n');
}
}
@ -1003,6 +992,6 @@ format_options_t::serialize_buffer_of_glyphs (hb_buffer_t *buffer,
GString *gs)
{
serialize_line_no (line_no, gs);
serialize_glyphs (buffer, font, output_format, format_flags, gs);
serialize (buffer, font, output_format, format_flags, gs);
g_string_append_c (gs, '\n');
}

View File

@ -635,9 +635,7 @@ struct format_options_t : option_group_t
void add_options (option_parser_t *parser) override;
void serialize_unicode (hb_buffer_t *buffer,
GString *gs);
void serialize_glyphs (hb_buffer_t *buffer,
void serialize (hb_buffer_t *buffer,
hb_font_t *font,
hb_buffer_serialize_format_t format,
hb_buffer_serialize_flags_t flags,