[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 static void
sbix_callback (hb_blob_t *blob, unsigned int group, unsigned int gid) sbix_dump (hb_face_t *face)
{ {
char output_path[255]; OT::sbix::accelerator_t sbix;
sprintf (output_path, "out/sbix-%d-%d.png", group, gid); sbix.init (face);
FILE *f = fopen (output_path, "wb"); unsigned int length = 0;
unsigned int length; unsigned int *available_ppems = sbix.get_available_ppems (&length);
const char* data = hb_blob_get_data (blob, &length); unsigned int num_glyphs = face->num_glyphs;
fwrite (data, 1, length, f); for (unsigned int group = 0; group < length; group++)
fclose (f); 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 static void
@ -273,10 +288,7 @@ main (int argc, char **argv)
cbdt.dump (cbdt_callback); cbdt.dump (cbdt_callback);
cbdt.fini (); cbdt.fini ();
OT::sbix::accelerator_t sbix; sbix_dump (face);
sbix.init (face);
sbix.dump (sbix_callback);
sbix.fini ();
if (hb_ot_color_has_svg (face)) if (hb_ot_color_has_svg (face))
svg_dump (face); svg_dump (face);

View File

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