提交 fdd1770e 编写于 作者: B Behdad Esfahbod

Add API/cmdline to show glyph extents when serializing buffer

New API: HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS

hb-shape now accepts --show-extents.

Patch from Simon Cozens.
上级 2cee5b68
...@@ -145,6 +145,16 @@ _hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer, ...@@ -145,6 +145,16 @@ _hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
pos[i].x_advance, pos[i].y_advance); pos[i].x_advance, pos[i].y_advance);
} }
if (flags & HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS)
{
hb_glyph_extents_t extents;
hb_font_get_glyph_extents(font, info[i].codepoint, &extents);
p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"xb\":%d,\"yb\":%d",
extents.x_bearing, extents.y_bearing));
p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"w\":%d,\"h\":%d",
extents.width, extents.height));
}
*p++ = '}'; *p++ = '}';
unsigned int l = p - b; unsigned int l = p - b;
...@@ -210,6 +220,13 @@ _hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer, ...@@ -210,6 +220,13 @@ _hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",%d", pos[i].y_advance)); p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",%d", pos[i].y_advance));
} }
if (flags & HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS)
{
hb_glyph_extents_t extents;
hb_font_get_glyph_extents(font, info[i].codepoint, &extents);
p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "<%d,%d,%d,%d>", extents.x_bearing, extents.y_bearing, extents.width, extents.height));
}
unsigned int l = p - b; unsigned int l = p - b;
if (buf_size > l) if (buf_size > l)
{ {
......
...@@ -323,7 +323,8 @@ typedef enum { /*< flags >*/ ...@@ -323,7 +323,8 @@ typedef enum { /*< flags >*/
HB_BUFFER_SERIALIZE_FLAG_DEFAULT = 0x00000000u, HB_BUFFER_SERIALIZE_FLAG_DEFAULT = 0x00000000u,
HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS = 0x00000001u, HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS = 0x00000001u,
HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS = 0x00000002u, HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS = 0x00000002u,
HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES = 0x00000004u HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES = 0x00000004u,
HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS = 0x00000008u
} hb_buffer_serialize_flags_t; } hb_buffer_serialize_flags_t;
typedef enum { typedef enum {
......
...@@ -70,6 +70,8 @@ struct output_buffer_t ...@@ -70,6 +70,8 @@ struct output_buffer_t
flags |= HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS; flags |= HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS;
if (!format.show_positions) if (!format.show_positions)
flags |= HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS; flags |= HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS;
if (format.show_extents)
flags |= HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS;
format_flags = (hb_buffer_serialize_flags_t) flags; format_flags = (hb_buffer_serialize_flags_t) flags;
} }
void new_line (void) void new_line (void)
......
...@@ -706,6 +706,7 @@ format_options_t::add_options (option_parser_t *parser) ...@@ -706,6 +706,7 @@ format_options_t::add_options (option_parser_t *parser)
G_OPTION_ARG_NONE, &this->show_positions, "Do not output glyph positions", NULL}, G_OPTION_ARG_NONE, &this->show_positions, "Do not output glyph positions", NULL},
{"no-clusters", 0, G_OPTION_FLAG_REVERSE, {"no-clusters", 0, G_OPTION_FLAG_REVERSE,
G_OPTION_ARG_NONE, &this->show_clusters, "Do not output cluster indices", NULL}, G_OPTION_ARG_NONE, &this->show_clusters, "Do not output cluster indices", NULL},
{"show-extents", 0, 0, G_OPTION_ARG_NONE, &this->show_extents, "Output glyph extents", NULL},
{NULL} {NULL}
}; };
parser->add_group (entries, parser->add_group (entries,
......
...@@ -410,6 +410,7 @@ struct format_options_t : option_group_t ...@@ -410,6 +410,7 @@ struct format_options_t : option_group_t
show_text = false; show_text = false;
show_unicode = false; show_unicode = false;
show_line_num = false; show_line_num = false;
show_extents = false;
add_options (parser); add_options (parser);
} }
...@@ -450,6 +451,7 @@ struct format_options_t : option_group_t ...@@ -450,6 +451,7 @@ struct format_options_t : option_group_t
hb_bool_t show_text; hb_bool_t show_text;
hb_bool_t show_unicode; hb_bool_t show_unicode;
hb_bool_t show_line_num; hb_bool_t show_line_num;
hb_bool_t show_extents;
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册