提交 1827dc20 编写于 作者: B Behdad Esfahbod

Add hb_ot_shape_glyphs_closure()

Experimental API for now.
上级 bb09f0ec
......@@ -69,6 +69,10 @@ struct hb_ot_map_t
inline void position (hb_font_t *font, hb_buffer_t *buffer) const
{ apply (1, (hb_ot_map_t::apply_lookup_func_t) hb_ot_layout_position_lookup, font, buffer); }
HB_INTERNAL void substitute_closure (hb_face_t *face,
hb_set_t *glyphs) const;
inline void finish (void) {
features.finish ();
lookups[0].finish ();
......@@ -125,9 +129,6 @@ struct hb_ot_map_t
void *face_or_font,
hb_buffer_t *buffer) const;
HB_INTERNAL void substitute_closure (hb_face_t *face,
hb_set_t *glyphs) const;
hb_mask_t global_mask;
hb_tag_t chosen_script[2];
......
......@@ -30,6 +30,7 @@
#include "hb-ot-shape-normalize-private.hh"
#include "hb-font-private.hh"
#include "hb-set-private.hh"
......@@ -478,3 +479,37 @@ _hb_ot_shape (hb_font_t *font,
return TRUE;
}
void
hb_ot_shape_glyphs_closure (hb_font_t *font,
hb_buffer_t *buffer,
const hb_feature_t *features,
unsigned int num_features,
hb_set_t *glyphs)
{
hb_ot_shape_plan_t plan;
buffer->guess_properties ();
hb_ot_shape_plan_internal (&plan, font->face, &buffer->props, features, num_features);
/* TODO: normalization? have shapers do closure()? */
/* TODO: Deal with mirrored chars? */
hb_map_glyphs (font, buffer);
/* Seed it. It's user's responsibility to have cleard glyphs
* if that's what they desire. */
unsigned int count = buffer->len;
for (unsigned int i = 0; i < count; i++)
hb_set_add (glyphs, buffer->info[i].codepoint);
/* And find transitive closure. */
hb_set_t copy;
copy.init ();
do {
copy.set (glyphs);
plan.map.substitute_closure (font->face, glyphs);
} while (!copy.equal (glyphs));
}
......@@ -34,6 +34,14 @@
#include "hb-ot-tag.h"
HB_BEGIN_DECLS
void
hb_ot_shape_glyphs_closure (hb_font_t *font,
hb_buffer_t *buffer,
const hb_feature_t *features,
unsigned int num_features,
hb_set_t *glyphs);
HB_END_DECLS
#undef HB_OT_H_IN
......
......@@ -35,6 +35,9 @@
struct _hb_set_t
{
inline void init (void) {
clear ();
}
inline void clear (void) {
memset (elts, 0, sizeof elts);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册