Refactor
This commit is contained in:
parent
a5ddd9e31c
commit
2bd9fe3598
|
@ -1531,7 +1531,7 @@ struct PosLookup : Lookup
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool apply_string (hb_apply_context_t *c) const
|
inline bool apply_string (hb_apply_context_t *c, const hb_set_digest_t *digest) const
|
||||||
{
|
{
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
|
||||||
|
@ -1545,7 +1545,7 @@ struct PosLookup : Lookup
|
||||||
while (c->buffer->idx < c->buffer->len)
|
while (c->buffer->idx < c->buffer->len)
|
||||||
{
|
{
|
||||||
if ((c->buffer->cur().mask & c->lookup_mask) &&
|
if ((c->buffer->cur().mask & c->lookup_mask) &&
|
||||||
c->digest.may_have (c->buffer->cur().codepoint) &&
|
digest->may_have (c->buffer->cur().codepoint) &&
|
||||||
apply_once (c))
|
apply_once (c))
|
||||||
ret = true;
|
ret = true;
|
||||||
else
|
else
|
||||||
|
@ -1580,9 +1580,6 @@ struct GPOS : GSUBGPOS
|
||||||
inline void add_coverage (set_t *glyphs, unsigned int lookup_index) const
|
inline void add_coverage (set_t *glyphs, unsigned int lookup_index) const
|
||||||
{ get_lookup (lookup_index).add_coverage (glyphs); }
|
{ get_lookup (lookup_index).add_coverage (glyphs); }
|
||||||
|
|
||||||
inline bool position_lookup (hb_apply_context_t *c, unsigned int lookup_index) const
|
|
||||||
{ return get_lookup (lookup_index).apply_string (c); }
|
|
||||||
|
|
||||||
static inline void position_start (hb_font_t *font, hb_buffer_t *buffer);
|
static inline void position_start (hb_font_t *font, hb_buffer_t *buffer);
|
||||||
static inline void position_finish (hb_font_t *font, hb_buffer_t *buffer, hb_bool_t zero_width_attahced_marks);
|
static inline void position_finish (hb_font_t *font, hb_buffer_t *buffer, hb_bool_t zero_width_attahced_marks);
|
||||||
|
|
||||||
|
|
|
@ -1208,10 +1208,10 @@ struct SubstLookup : Lookup
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool would_apply (hb_would_apply_context_t *c) const
|
inline bool would_apply (hb_would_apply_context_t *c, const hb_set_digest_t *digest) const
|
||||||
{
|
{
|
||||||
if (unlikely (!c->len)) return false;
|
if (unlikely (!c->len)) return false;
|
||||||
if (!c->digest.may_have (c->glyphs[0])) return false;
|
if (!digest->may_have (c->glyphs[0])) return false;
|
||||||
unsigned int lookup_type = get_type ();
|
unsigned int lookup_type = get_type ();
|
||||||
unsigned int count = get_subtable_count ();
|
unsigned int count = get_subtable_count ();
|
||||||
for (unsigned int i = 0; i < count; i++)
|
for (unsigned int i = 0; i < count; i++)
|
||||||
|
@ -1235,7 +1235,7 @@ struct SubstLookup : Lookup
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool apply_string (hb_apply_context_t *c) const
|
inline bool apply_string (hb_apply_context_t *c, const hb_set_digest_t *digest) const
|
||||||
{
|
{
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
|
||||||
|
@ -1253,7 +1253,7 @@ struct SubstLookup : Lookup
|
||||||
while (c->buffer->idx < c->buffer->len)
|
while (c->buffer->idx < c->buffer->len)
|
||||||
{
|
{
|
||||||
if ((c->buffer->cur().mask & c->lookup_mask) &&
|
if ((c->buffer->cur().mask & c->lookup_mask) &&
|
||||||
c->digest.may_have (c->buffer->cur().codepoint) &&
|
digest->may_have (c->buffer->cur().codepoint) &&
|
||||||
apply_once (c))
|
apply_once (c))
|
||||||
ret = true;
|
ret = true;
|
||||||
else
|
else
|
||||||
|
@ -1269,7 +1269,7 @@ struct SubstLookup : Lookup
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if ((c->buffer->cur().mask & c->lookup_mask) &&
|
if ((c->buffer->cur().mask & c->lookup_mask) &&
|
||||||
c->digest.may_have (c->buffer->cur().codepoint) &&
|
digest->may_have (c->buffer->cur().codepoint) &&
|
||||||
apply_once (c))
|
apply_once (c))
|
||||||
ret = true;
|
ret = true;
|
||||||
else
|
else
|
||||||
|
@ -1322,12 +1322,6 @@ struct GSUB : GSUBGPOS
|
||||||
inline void add_coverage (set_t *glyphs, unsigned int lookup_index) const
|
inline void add_coverage (set_t *glyphs, unsigned int lookup_index) const
|
||||||
{ get_lookup (lookup_index).add_coverage (glyphs); }
|
{ get_lookup (lookup_index).add_coverage (glyphs); }
|
||||||
|
|
||||||
inline bool would_substitute_lookup (hb_would_apply_context_t *c, unsigned int lookup_index) const
|
|
||||||
{ return get_lookup (lookup_index).would_apply (c); }
|
|
||||||
|
|
||||||
inline bool substitute_lookup (hb_apply_context_t *c, unsigned int lookup_index) const
|
|
||||||
{ return get_lookup (lookup_index).apply_string (c); }
|
|
||||||
|
|
||||||
static inline void substitute_start (hb_font_t *font, hb_buffer_t *buffer);
|
static inline void substitute_start (hb_font_t *font, hb_buffer_t *buffer);
|
||||||
static inline void substitute_finish (hb_font_t *font, hb_buffer_t *buffer);
|
static inline void substitute_finish (hb_font_t *font, hb_buffer_t *buffer);
|
||||||
|
|
||||||
|
|
|
@ -79,20 +79,16 @@ struct hb_would_apply_context_t
|
||||||
const hb_codepoint_t *glyphs;
|
const hb_codepoint_t *glyphs;
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
bool zero_context;
|
bool zero_context;
|
||||||
const hb_set_digest_t digest;
|
|
||||||
unsigned int debug_depth;
|
unsigned int debug_depth;
|
||||||
|
|
||||||
hb_would_apply_context_t (hb_face_t *face_,
|
hb_would_apply_context_t (hb_face_t *face_,
|
||||||
const hb_codepoint_t *glyphs_,
|
const hb_codepoint_t *glyphs_,
|
||||||
unsigned int len_,
|
unsigned int len_,
|
||||||
bool zero_context_,
|
bool zero_context_) :
|
||||||
const hb_set_digest_t &digest_
|
|
||||||
) :
|
|
||||||
face (face_),
|
face (face_),
|
||||||
glyphs (glyphs_),
|
glyphs (glyphs_),
|
||||||
len (len_),
|
len (len_),
|
||||||
zero_context (zero_context_),
|
zero_context (zero_context_),
|
||||||
digest (digest_),
|
|
||||||
debug_depth (0) {};
|
debug_depth (0) {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -118,21 +114,18 @@ struct hb_apply_context_t
|
||||||
unsigned int debug_depth;
|
unsigned int debug_depth;
|
||||||
const GDEF &gdef;
|
const GDEF &gdef;
|
||||||
bool has_glyph_classes;
|
bool has_glyph_classes;
|
||||||
const hb_set_digest_t digest;
|
|
||||||
|
|
||||||
|
|
||||||
hb_apply_context_t (hb_font_t *font_,
|
hb_apply_context_t (hb_font_t *font_,
|
||||||
hb_buffer_t *buffer_,
|
hb_buffer_t *buffer_,
|
||||||
hb_mask_t lookup_mask_,
|
hb_mask_t lookup_mask_) :
|
||||||
const hb_set_digest_t &digest_) :
|
|
||||||
font (font_), face (font->face), buffer (buffer_),
|
font (font_), face (font->face), buffer (buffer_),
|
||||||
direction (buffer_->props.direction),
|
direction (buffer_->props.direction),
|
||||||
lookup_mask (lookup_mask_),
|
lookup_mask (lookup_mask_),
|
||||||
nesting_level_left (MAX_NESTING_LEVEL),
|
nesting_level_left (MAX_NESTING_LEVEL),
|
||||||
lookup_props (0), property (0), debug_depth (0),
|
lookup_props (0), property (0), debug_depth (0),
|
||||||
gdef (*hb_ot_layout_from_face (face)->gdef),
|
gdef (*hb_ot_layout_from_face (face)->gdef),
|
||||||
has_glyph_classes (gdef.has_glyph_classes ()),
|
has_glyph_classes (gdef.has_glyph_classes ()) {}
|
||||||
digest (digest_) {}
|
|
||||||
|
|
||||||
void set_lookup_props (unsigned int lookup_props_) {
|
void set_lookup_props (unsigned int lookup_props_) {
|
||||||
lookup_props = lookup_props_;
|
lookup_props = lookup_props_;
|
||||||
|
|
|
@ -417,8 +417,11 @@ hb_ot_layout_would_substitute_lookup_fast (hb_face_t *face,
|
||||||
hb_bool_t zero_context)
|
hb_bool_t zero_context)
|
||||||
{
|
{
|
||||||
if (unlikely (lookup_index >= hb_ot_layout_from_face (face)->gsub_lookup_count)) return false;
|
if (unlikely (lookup_index >= hb_ot_layout_from_face (face)->gsub_lookup_count)) return false;
|
||||||
OT::hb_would_apply_context_t c (face, glyphs, glyphs_length, zero_context, hb_ot_layout_from_face (face)->gsub_digests[lookup_index]);
|
OT::hb_would_apply_context_t c (face, glyphs, glyphs_length, zero_context);
|
||||||
return hb_ot_layout_from_face (face)->gsub->would_substitute_lookup (&c, lookup_index);
|
|
||||||
|
const OT::SubstLookup& l = hb_ot_layout_from_face (face)->gsub->get_lookup (lookup_index);
|
||||||
|
|
||||||
|
return l.would_apply (&c, &hb_ot_layout_from_face (face)->gsub_digests[lookup_index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -434,8 +437,12 @@ hb_ot_layout_substitute_lookup (hb_font_t *font,
|
||||||
hb_mask_t mask)
|
hb_mask_t mask)
|
||||||
{
|
{
|
||||||
if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gsub_lookup_count)) return false;
|
if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gsub_lookup_count)) return false;
|
||||||
OT::hb_apply_context_t c (font, buffer, mask, hb_ot_layout_from_face (font->face)->gsub_digests[lookup_index]);
|
|
||||||
return hb_ot_layout_from_face (font->face)->gsub->substitute_lookup (&c, lookup_index);
|
OT::hb_apply_context_t c (font, buffer, mask);
|
||||||
|
|
||||||
|
const OT::SubstLookup& l = hb_ot_layout_from_face (font->face)->gsub->get_lookup (lookup_index);
|
||||||
|
|
||||||
|
return l.apply_string (&c, &hb_ot_layout_from_face (font->face)->gsub_digests[lookup_index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -476,8 +483,12 @@ hb_ot_layout_position_lookup (hb_font_t *font,
|
||||||
hb_mask_t mask)
|
hb_mask_t mask)
|
||||||
{
|
{
|
||||||
if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gpos_lookup_count)) return false;
|
if (unlikely (lookup_index >= hb_ot_layout_from_face (font->face)->gpos_lookup_count)) return false;
|
||||||
OT::hb_apply_context_t c (font, buffer, mask, hb_ot_layout_from_face (font->face)->gpos_digests[lookup_index]);
|
|
||||||
return hb_ot_layout_from_face (font->face)->gpos->position_lookup (&c, lookup_index);
|
OT::hb_apply_context_t c (font, buffer, mask);
|
||||||
|
|
||||||
|
const OT::PosLookup& l = hb_ot_layout_from_face (font->face)->gpos->get_lookup (lookup_index);
|
||||||
|
|
||||||
|
return l.apply_string (&c, &hb_ot_layout_from_face (font->face)->gpos_digests[lookup_index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -246,9 +246,7 @@ arabic_fallback_shape (hb_font_t *font, hb_buffer_t *buffer)
|
||||||
buffer->info[i].codepoint = shaped;
|
buffer->info[i].codepoint = shaped;
|
||||||
}
|
}
|
||||||
|
|
||||||
hb_set_digest_t digest;
|
OT::hb_apply_context_t c (font, buffer, 1/*global mask*/);
|
||||||
digest.init ();
|
|
||||||
OT::hb_apply_context_t c (font, buffer, 1/*global mask*/, digest);
|
|
||||||
c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
|
c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
|
||||||
|
|
||||||
/* Mandatory ligatures */
|
/* Mandatory ligatures */
|
||||||
|
|
Loading…
Reference in New Issue