[sbix] Remove dump method from sbix accelerator

This commit is contained in:
Ebrahim Byagowi 2018-10-27 12:44:33 +03:30
parent 6a38fd68a8
commit 5e2a52f71a
2 changed files with 34 additions and 28 deletions

View File

@ -58,15 +58,30 @@ cbdt_callback (const uint8_t* data, unsigned int length,
}
static void
sbix_callback (hb_blob_t *blob, unsigned int group, unsigned int gid)
sbix_dump (hb_face_t *face)
{
char output_path[255];
sprintf (output_path, "out/sbix-%d-%d.png", group, gid);
FILE *f = fopen (output_path, "wb");
unsigned int length;
const char* data = hb_blob_get_data (blob, &length);
fwrite (data, 1, length, f);
fclose (f);
OT::sbix::accelerator_t sbix;
sbix.init (face);
unsigned int length = 0;
unsigned int *available_ppems = sbix.get_available_ppems (&length);
unsigned int num_glyphs = face->num_glyphs;
for (unsigned int group = 0; group < length; group++)
for (unsigned int glyph_id = 0; glyph_id < num_glyphs; glyph_id++)
{
hb_blob_t *blob;
blob = sbix.reference_blob_for_glyph (glyph_id, 0, available_ppems[group],
HB_TAG('p','n','g',' '), NULL, NULL);
if (hb_blob_get_length (blob) == 0) continue;
char output_path[255];
sprintf (output_path, "out/sbix-%d-%d.png", available_ppems[group], glyph_id);
FILE *f = fopen (output_path, "wb");
unsigned int length;
const char* data = hb_blob_get_data (blob, &length);
fwrite (data, 1, length, f);
fclose (f);
}
sbix.fini ();
}
static void
@ -273,10 +288,7 @@ main (int argc, char **argv)
cbdt.dump (cbdt_callback);
cbdt.fini ();
OT::sbix::accelerator_t sbix;
sbix.init (face);
sbix.dump (sbix_callback);
sbix.fini ();
sbix_dump (face);
if (hb_ot_color_has_svg (face))
svg_dump (face);

View File

@ -153,23 +153,17 @@ struct sbix
hb_blob_destroy (sbix_blob);
}
inline void dump (void (*callback) (hb_blob_t *data,
unsigned int group, unsigned int gid)) const
/* only to support dump-emoji, don't use it anywhere else */
inline unsigned int *get_available_ppems (unsigned int *length)
{
for (unsigned group = 0; group < sbix_table->strikes.len; group++)
{
const SBIXStrike &strike = sbix_table+sbix_table->strikes[group];
for (unsigned int glyph_id = 0; glyph_id < num_glyphs; glyph_id++)
{
hb_tag_t tag;
hb_blob_t *blob;
blob = strike.get_glyph_blob (glyph_id, sbix_blob, sbix_len,
sbix_table->strikes[group],
nullptr, nullptr,
HB_TAG('p','n','g',' '), num_glyphs);
if (hb_blob_get_length (blob)) callback (blob, group, glyph_id);
}
}
if (unlikely (sbix_len == 0 || sbix_table->strikes.len == 0))
return nullptr;
*length = sbix_table->strikes.len;
unsigned int *result;
result = (unsigned int *) malloc (sizeof (unsigned int) * sbix_table->strikes.len);
for (unsigned int i = 0; i < sbix_table->strikes.len; i++)
result[i] = (sbix_table+sbix_table->strikes[i]).get_ppem ();
return result;
}
inline hb_blob_t *reference_blob_for_glyph (hb_codepoint_t glyph_id,