parent
933babdc07
commit
c2527a1bc2
|
@ -433,8 +433,7 @@ struct StateTable
|
||||||
inline unsigned int get_class (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
|
inline unsigned int get_class (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
|
||||||
{
|
{
|
||||||
if (unlikely (glyph_id == DELETED_GLYPH)) return CLASS_DELETED_GLYPH;
|
if (unlikely (glyph_id == DELETED_GLYPH)) return CLASS_DELETED_GLYPH;
|
||||||
const HBUINT16 *v = (this+classTable).get_value (glyph_id, num_glyphs);
|
return (this+classTable).get_class (glyph_id, num_glyphs);
|
||||||
return v ? (unsigned) *v : (unsigned) CLASS_OUT_OF_BOUNDS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const Entry<Extra> *get_entries () const
|
inline const Entry<Extra> *get_entries () const
|
||||||
|
@ -446,7 +445,7 @@ struct StateTable
|
||||||
{
|
{
|
||||||
if (unlikely (klass >= nClasses)) return nullptr;
|
if (unlikely (klass >= nClasses)) return nullptr;
|
||||||
|
|
||||||
const HBUINT16 *states = (this+stateArrayTable).arrayZ;
|
const HBUSHORT *states = (this+stateArrayTable).arrayZ;
|
||||||
const Entry<Extra> *entries = (this+entryTable).arrayZ;
|
const Entry<Extra> *entries = (this+entryTable).arrayZ;
|
||||||
|
|
||||||
unsigned int entry = states[state * nClasses + klass];
|
unsigned int entry = states[state * nClasses + klass];
|
||||||
|
@ -461,7 +460,7 @@ struct StateTable
|
||||||
if (unlikely (!(c->check_struct (this) &&
|
if (unlikely (!(c->check_struct (this) &&
|
||||||
classTable.sanitize (c, this)))) return_trace (false);
|
classTable.sanitize (c, this)))) return_trace (false);
|
||||||
|
|
||||||
const HBUINT16 *states = (this+stateArrayTable).arrayZ;
|
const HBUSHORT *states = (this+stateArrayTable).arrayZ;
|
||||||
const Entry<Extra> *entries = (this+entryTable).arrayZ;
|
const Entry<Extra> *entries = (this+entryTable).arrayZ;
|
||||||
|
|
||||||
unsigned int num_classes = nClasses;
|
unsigned int num_classes = nClasses;
|
||||||
|
@ -483,8 +482,8 @@ struct StateTable
|
||||||
if ((c->max_ops -= num_states - state) < 0)
|
if ((c->max_ops -= num_states - state) < 0)
|
||||||
return_trace (false);
|
return_trace (false);
|
||||||
{ /* Sweep new states. */
|
{ /* Sweep new states. */
|
||||||
const HBUINT16 *stop = &states[num_states * num_classes];
|
const HBUSHORT *stop = &states[num_states * num_classes];
|
||||||
for (const HBUINT16 *p = &states[state * num_classes]; p < stop; p++)
|
for (const HBUSHORT *p = &states[state * num_classes]; p < stop; p++)
|
||||||
num_entries = MAX<unsigned int> (num_entries, *p + 1);
|
num_entries = MAX<unsigned int> (num_entries, *p + 1);
|
||||||
state = num_states;
|
state = num_states;
|
||||||
}
|
}
|
||||||
|
|
|
@ -278,7 +278,7 @@ struct ContextualSubtable
|
||||||
private:
|
private:
|
||||||
bool mark_set;
|
bool mark_set;
|
||||||
unsigned int mark;
|
unsigned int mark;
|
||||||
const UnsizedOffsetListOf<Lookup<GlyphID>, HBUINT32, false> &subs;
|
const UnsizedOffsetListOf<Lookup<GlyphID>, HBUINT, false> &subs;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline bool apply (hb_aat_apply_context_t *c) const
|
inline bool apply (hb_aat_apply_context_t *c) const
|
||||||
|
|
|
@ -133,20 +133,20 @@ hb_aat_layout_find_feature_mapping (hb_tag_t tag)
|
||||||
* mort/morx/kerx/trak
|
* mort/morx/kerx/trak
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// static inline const AAT::mort&
|
static inline const AAT::mort&
|
||||||
// _get_mort (hb_face_t *face, hb_blob_t **blob = nullptr)
|
_get_mort (hb_face_t *face, hb_blob_t **blob = nullptr)
|
||||||
// {
|
{
|
||||||
// if (unlikely (!hb_ot_shaper_face_data_ensure (face)))
|
if (unlikely (!hb_ot_shaper_face_data_ensure (face)))
|
||||||
// {
|
{
|
||||||
// if (blob)
|
if (blob)
|
||||||
// *blob = hb_blob_get_empty ();
|
*blob = hb_blob_get_empty ();
|
||||||
// return Null(AAT::mort);
|
return Null(AAT::mort);
|
||||||
// }
|
}
|
||||||
// const AAT::morx& mort = *(hb_ot_face_data (face)->mort.get ());
|
const AAT::mort& mort = *(hb_ot_face_data (face)->mort.get ());
|
||||||
// if (blob)
|
if (blob)
|
||||||
// *blob = hb_ot_face_data (face)->mort.get_blob ();
|
*blob = hb_ot_face_data (face)->mort.get_blob ();
|
||||||
// return mort;
|
return mort;
|
||||||
// }
|
}
|
||||||
static inline const AAT::morx&
|
static inline const AAT::morx&
|
||||||
_get_morx (hb_face_t *face, hb_blob_t **blob = nullptr)
|
_get_morx (hb_face_t *face, hb_blob_t **blob = nullptr)
|
||||||
{
|
{
|
||||||
|
@ -214,7 +214,8 @@ hb_aat_layout_compile_map (const hb_aat_map_builder_t *mapper,
|
||||||
hb_bool_t
|
hb_bool_t
|
||||||
hb_aat_layout_has_substitution (hb_face_t *face)
|
hb_aat_layout_has_substitution (hb_face_t *face)
|
||||||
{
|
{
|
||||||
return _get_morx (face).has_data ();
|
return _get_morx (face).has_data () ||
|
||||||
|
_get_mort (face).has_data ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -223,10 +224,22 @@ hb_aat_layout_substitute (hb_ot_shape_plan_t *plan,
|
||||||
hb_buffer_t *buffer)
|
hb_buffer_t *buffer)
|
||||||
{
|
{
|
||||||
hb_blob_t *blob;
|
hb_blob_t *blob;
|
||||||
const AAT::morx& morx = _get_morx (font->face, &blob);
|
|
||||||
|
|
||||||
|
const AAT::morx& morx = _get_morx (font->face, &blob);
|
||||||
|
if (morx.has_data ())
|
||||||
|
{
|
||||||
AAT::hb_aat_apply_context_t c (plan, font, buffer, blob);
|
AAT::hb_aat_apply_context_t c (plan, font, buffer, blob);
|
||||||
morx.apply (&c);
|
morx.apply (&c);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const AAT::mort& mort = _get_mort (font->face, &blob);
|
||||||
|
if (mort.has_data ())
|
||||||
|
{
|
||||||
|
AAT::hb_aat_apply_context_t c (plan, font, buffer, blob);
|
||||||
|
mort.apply (&c);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue