Remove APPLY_ARG_DEF and APPLY_ARG

This commit is contained in:
Behdad Esfahbod 2010-05-05 01:32:04 -04:00
parent 6c42cddfe5
commit 1911b9d21b
3 changed files with 132 additions and 137 deletions

View File

@ -379,7 +379,7 @@ ASSERT_SIZE (MarkRecord, 4);
struct MarkArray struct MarkArray
{ {
inline bool apply (APPLY_ARG_DEF, inline bool apply (hb_apply_context_t *context,
unsigned int mark_index, unsigned int glyph_index, unsigned int mark_index, unsigned int glyph_index,
const AnchorMatrix &anchors, unsigned int class_count, const AnchorMatrix &anchors, unsigned int class_count,
unsigned int glyph_pos) const unsigned int glyph_pos) const
@ -426,7 +426,7 @@ struct SinglePosFormat1
friend struct SinglePos; friend struct SinglePos;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int index = (this+coverage) (IN_CURGLYPH ()); unsigned int index = (this+coverage) (IN_CURGLYPH ());
@ -464,7 +464,7 @@ struct SinglePosFormat2
friend struct SinglePos; friend struct SinglePos;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int index = (this+coverage) (IN_CURGLYPH ()); unsigned int index = (this+coverage) (IN_CURGLYPH ());
@ -507,12 +507,12 @@ struct SinglePos
friend struct PosLookupSubTable; friend struct PosLookupSubTable;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (u.format) { switch (u.format) {
case 1: return u.format1->apply (APPLY_ARG); case 1: return u.format1->apply (context);
case 2: return u.format2->apply (APPLY_ARG); case 2: return u.format2->apply (context);
default:return false; default:return false;
} }
} }
@ -574,7 +574,7 @@ struct PairPosFormat1
friend struct PairPos; friend struct PairPos;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int end = MIN (context->buffer->in_length, context->buffer->in_pos + context->context_length); unsigned int end = MIN (context->buffer->in_length, context->buffer->in_pos + context->context_length);
@ -667,7 +667,7 @@ struct PairPosFormat2
friend struct PairPos; friend struct PairPos;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int end = MIN (context->buffer->in_length, context->buffer->in_pos + context->context_length); unsigned int end = MIN (context->buffer->in_length, context->buffer->in_pos + context->context_length);
@ -757,12 +757,12 @@ struct PairPos
friend struct PosLookupSubTable; friend struct PosLookupSubTable;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (u.format) { switch (u.format) {
case 1: return u.format1->apply (APPLY_ARG); case 1: return u.format1->apply (context);
case 2: return u.format2->apply (APPLY_ARG); case 2: return u.format2->apply (context);
default:return false; default:return false;
} }
} }
@ -812,7 +812,7 @@ struct CursivePosFormat1
friend struct CursivePos; friend struct CursivePos;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
/* Now comes the messiest part of the whole OpenType /* Now comes the messiest part of the whole OpenType
@ -1009,11 +1009,11 @@ struct CursivePos
friend struct PosLookupSubTable; friend struct PosLookupSubTable;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (u.format) { switch (u.format) {
case 1: return u.format1->apply (APPLY_ARG); case 1: return u.format1->apply (context);
default:return false; default:return false;
} }
} }
@ -1045,7 +1045,7 @@ struct MarkBasePosFormat1
friend struct MarkBasePos; friend struct MarkBasePos;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int mark_index = (this+markCoverage) (IN_CURGLYPH ()); unsigned int mark_index = (this+markCoverage) (IN_CURGLYPH ());
@ -1072,7 +1072,7 @@ struct MarkBasePosFormat1
if (base_index == NOT_COVERED) if (base_index == NOT_COVERED)
return false; return false;
return (this+markArray).apply (APPLY_ARG, mark_index, base_index, this+baseArray, classCount, j); return (this+markArray).apply (context, mark_index, base_index, this+baseArray, classCount, j);
} }
inline bool sanitize (hb_sanitize_context_t *context) { inline bool sanitize (hb_sanitize_context_t *context) {
@ -1107,11 +1107,11 @@ struct MarkBasePos
friend struct PosLookupSubTable; friend struct PosLookupSubTable;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (u.format) { switch (u.format) {
case 1: return u.format1->apply (APPLY_ARG); case 1: return u.format1->apply (context);
default:return false; default:return false;
} }
} }
@ -1148,7 +1148,7 @@ struct MarkLigPosFormat1
friend struct MarkLigPos; friend struct MarkLigPos;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int mark_index = (this+markCoverage) (IN_CURGLYPH ()); unsigned int mark_index = (this+markCoverage) (IN_CURGLYPH ());
@ -1196,7 +1196,7 @@ struct MarkLigPosFormat1
else else
comp_index = comp_count - 1; comp_index = comp_count - 1;
return (this+markArray).apply (APPLY_ARG, mark_index, comp_index, lig_attach, classCount, j); return (this+markArray).apply (context, mark_index, comp_index, lig_attach, classCount, j);
} }
inline bool sanitize (hb_sanitize_context_t *context) { inline bool sanitize (hb_sanitize_context_t *context) {
@ -1232,11 +1232,11 @@ struct MarkLigPos
friend struct PosLookupSubTable; friend struct PosLookupSubTable;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (u.format) { switch (u.format) {
case 1: return u.format1->apply (APPLY_ARG); case 1: return u.format1->apply (context);
default:return false; default:return false;
} }
} }
@ -1268,7 +1268,7 @@ struct MarkMarkPosFormat1
friend struct MarkMarkPos; friend struct MarkMarkPos;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int mark1_index = (this+mark1Coverage) (IN_CURGLYPH ()); unsigned int mark1_index = (this+mark1Coverage) (IN_CURGLYPH ());
@ -1299,7 +1299,7 @@ struct MarkMarkPosFormat1
if (mark2_index == NOT_COVERED) if (mark2_index == NOT_COVERED)
return false; return false;
return (this+mark1Array).apply (APPLY_ARG, mark1_index, mark2_index, this+mark2Array, classCount, j); return (this+mark1Array).apply (context, mark1_index, mark2_index, this+mark2Array, classCount, j);
} }
inline bool sanitize (hb_sanitize_context_t *context) { inline bool sanitize (hb_sanitize_context_t *context) {
@ -1336,11 +1336,11 @@ struct MarkMarkPos
friend struct PosLookupSubTable; friend struct PosLookupSubTable;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (u.format) { switch (u.format) {
case 1: return u.format1->apply (APPLY_ARG); case 1: return u.format1->apply (context);
default:return false; default:return false;
} }
} }
@ -1362,17 +1362,17 @@ struct MarkMarkPos
}; };
static inline bool position_lookup (APPLY_ARG_DEF, unsigned int lookup_index); static inline bool position_lookup (hb_apply_context_t *context, unsigned int lookup_index);
struct ContextPos : Context struct ContextPos : Context
{ {
friend struct PosLookupSubTable; friend struct PosLookupSubTable;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
return Context::apply (APPLY_ARG, position_lookup); return Context::apply (context, position_lookup);
} }
}; };
@ -1381,10 +1381,10 @@ struct ChainContextPos : ChainContext
friend struct PosLookupSubTable; friend struct PosLookupSubTable;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
return ChainContext::apply (APPLY_ARG, position_lookup); return ChainContext::apply (context, position_lookup);
} }
}; };
@ -1401,7 +1401,7 @@ struct ExtensionPos : Extension
return StructAtOffset<PosLookupSubTable> (*this, offset); return StructAtOffset<PosLookupSubTable> (*this, offset);
} }
inline bool apply (APPLY_ARG_DEF) const; inline bool apply (hb_apply_context_t *context) const;
inline bool sanitize (hb_sanitize_context_t *context); inline bool sanitize (hb_sanitize_context_t *context);
}; };
@ -1429,19 +1429,19 @@ struct PosLookupSubTable
Extension = 9 Extension = 9
}; };
inline bool apply (APPLY_ARG_DEF, unsigned int lookup_type) const inline bool apply (hb_apply_context_t *context, unsigned int lookup_type) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (lookup_type) { switch (lookup_type) {
case Single: return u.single->apply (APPLY_ARG); case Single: return u.single->apply (context);
case Pair: return u.pair->apply (APPLY_ARG); case Pair: return u.pair->apply (context);
case Cursive: return u.cursive->apply (APPLY_ARG); case Cursive: return u.cursive->apply (context);
case MarkBase: return u.markBase->apply (APPLY_ARG); case MarkBase: return u.markBase->apply (context);
case MarkLig: return u.markLig->apply (APPLY_ARG); case MarkLig: return u.markLig->apply (context);
case MarkMark: return u.markMark->apply (APPLY_ARG); case MarkMark: return u.markMark->apply (context);
case Context: return u.context->apply (APPLY_ARG); case Context: return u.context->apply (context);
case ChainContext: return u.chainContext->apply (APPLY_ARG); case ChainContext: return u.chainContext->apply (context);
case Extension: return u.extension->apply (APPLY_ARG); case Extension: return u.extension->apply (context);
default:return false; default:return false;
} }
} }
@ -1502,7 +1502,7 @@ struct PosLookup : Lookup
return false; return false;
for (unsigned int i = 0; i < get_subtable_count (); i++) for (unsigned int i = 0; i < get_subtable_count (); i++)
if (get_subtable (i).apply (APPLY_ARG, lookup_type)) if (get_subtable (i).apply (context, lookup_type))
return true; return true;
return false; return false;
@ -1585,10 +1585,10 @@ ASSERT_SIZE (GPOS, 10);
/* Out-of-class implementation for methods recursing */ /* Out-of-class implementation for methods recursing */
inline bool ExtensionPos::apply (APPLY_ARG_DEF) const inline bool ExtensionPos::apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
return get_subtable ().apply (APPLY_ARG, get_type ()); return get_subtable ().apply (context, get_type ());
} }
inline bool ExtensionPos::sanitize (hb_sanitize_context_t *context) inline bool ExtensionPos::sanitize (hb_sanitize_context_t *context)
@ -1600,7 +1600,7 @@ inline bool ExtensionPos::sanitize (hb_sanitize_context_t *context)
return SANITIZE (StructAtOffset<PosLookupSubTable> (*this, offset)); return SANITIZE (StructAtOffset<PosLookupSubTable> (*this, offset));
} }
static inline bool position_lookup (APPLY_ARG_DEF, unsigned int lookup_index) static inline bool position_lookup (hb_apply_context_t *context, unsigned int lookup_index)
{ {
const GPOS &gpos = *(context->layout->face->ot_layout.gpos); const GPOS &gpos = *(context->layout->face->ot_layout.gpos);
const PosLookup &l = gpos.get_lookup (lookup_index); const PosLookup &l = gpos.get_lookup (lookup_index);

View File

@ -40,7 +40,7 @@ struct SingleSubstFormat1
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
hb_codepoint_t glyph_id = IN_CURGLYPH (); hb_codepoint_t glyph_id = IN_CURGLYPH ();
@ -80,7 +80,7 @@ struct SingleSubstFormat2
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
hb_codepoint_t glyph_id = IN_CURGLYPH (); hb_codepoint_t glyph_id = IN_CURGLYPH ();
@ -124,12 +124,12 @@ struct SingleSubst
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (u.format) { switch (u.format) {
case 1: return u.format1->apply (APPLY_ARG); case 1: return u.format1->apply (context);
case 2: return u.format2->apply (APPLY_ARG); case 2: return u.format2->apply (context);
default:return false; default:return false;
} }
} }
@ -158,7 +158,7 @@ struct Sequence
friend struct MultipleSubstFormat1; friend struct MultipleSubstFormat1;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
if (unlikely (!substitute.len)) if (unlikely (!substitute.len))
@ -201,7 +201,7 @@ struct MultipleSubstFormat1
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
@ -209,7 +209,7 @@ struct MultipleSubstFormat1
if (likely (index == NOT_COVERED)) if (likely (index == NOT_COVERED))
return false; return false;
return (this+sequence[index]).apply (APPLY_ARG); return (this+sequence[index]).apply (context);
} }
inline bool sanitize (hb_sanitize_context_t *context) { inline bool sanitize (hb_sanitize_context_t *context) {
@ -235,11 +235,11 @@ struct MultipleSubst
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (u.format) { switch (u.format) {
case 1: return u.format1->apply (APPLY_ARG); case 1: return u.format1->apply (context);
default:return false; default:return false;
} }
} }
@ -271,7 +271,7 @@ struct AlternateSubstFormat1
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
hb_codepoint_t glyph_id = IN_CURGLYPH (); hb_codepoint_t glyph_id = IN_CURGLYPH ();
@ -331,11 +331,11 @@ struct AlternateSubst
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (u.format) { switch (u.format) {
case 1: return u.format1->apply (APPLY_ARG); case 1: return u.format1->apply (context);
default:return false; default:return false;
} }
} }
@ -362,7 +362,7 @@ struct Ligature
friend struct LigatureSet; friend struct LigatureSet;
private: private:
inline bool apply (APPLY_ARG_DEF, bool is_mark) const inline bool apply (hb_apply_context_t *context, bool is_mark) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int i, j; unsigned int i, j;
@ -445,14 +445,14 @@ struct LigatureSet
friend struct LigatureSubstFormat1; friend struct LigatureSubstFormat1;
private: private:
inline bool apply (APPLY_ARG_DEF, bool is_mark) const inline bool apply (hb_apply_context_t *context, bool is_mark) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int num_ligs = ligature.len; unsigned int num_ligs = ligature.len;
for (unsigned int i = 0; i < num_ligs; i++) for (unsigned int i = 0; i < num_ligs; i++)
{ {
const Ligature &lig = this+ligature[i]; const Ligature &lig = this+ligature[i];
if (lig.apply (APPLY_ARG, is_mark)) if (lig.apply (context, is_mark))
return true; return true;
} }
@ -477,7 +477,7 @@ struct LigatureSubstFormat1
friend struct LigatureSubst; friend struct LigatureSubst;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
hb_codepoint_t glyph_id = IN_CURGLYPH (); hb_codepoint_t glyph_id = IN_CURGLYPH ();
@ -489,7 +489,7 @@ struct LigatureSubstFormat1
return false; return false;
const LigatureSet &lig_set = this+ligatureSet[index]; const LigatureSet &lig_set = this+ligatureSet[index];
return lig_set.apply (APPLY_ARG, first_is_mark); return lig_set.apply (context, first_is_mark);
} }
inline bool sanitize (hb_sanitize_context_t *context) { inline bool sanitize (hb_sanitize_context_t *context) {
@ -514,11 +514,11 @@ struct LigatureSubst
friend struct SubstLookupSubTable; friend struct SubstLookupSubTable;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (u.format) { switch (u.format) {
case 1: return u.format1->apply (APPLY_ARG); case 1: return u.format1->apply (context);
default:return false; default:return false;
} }
} }
@ -541,17 +541,17 @@ struct LigatureSubst
static inline bool substitute_lookup (APPLY_ARG_DEF, unsigned int lookup_index); static inline bool substitute_lookup (hb_apply_context_t *context, unsigned int lookup_index);
struct ContextSubst : Context struct ContextSubst : Context
{ {
friend struct SubstLookupSubTable; friend struct SubstLookupSubTable;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
return Context::apply (APPLY_ARG, substitute_lookup); return Context::apply (context, substitute_lookup);
} }
}; };
@ -560,10 +560,10 @@ struct ChainContextSubst : ChainContext
friend struct SubstLookupSubTable; friend struct SubstLookupSubTable;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
return ChainContext::apply (APPLY_ARG, substitute_lookup); return ChainContext::apply (context, substitute_lookup);
} }
}; };
@ -581,7 +581,7 @@ struct ExtensionSubst : Extension
return StructAtOffset<SubstLookupSubTable> (*this, offset); return StructAtOffset<SubstLookupSubTable> (*this, offset);
} }
inline bool apply (APPLY_ARG_DEF) const; inline bool apply (hb_apply_context_t *context) const;
inline bool sanitize (hb_sanitize_context_t *context); inline bool sanitize (hb_sanitize_context_t *context);
@ -594,7 +594,7 @@ struct ReverseChainSingleSubstFormat1
friend struct ReverseChainSingleSubst; friend struct ReverseChainSingleSubst;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
if (unlikely (context->context_length != NO_CONTEXT)) if (unlikely (context->context_length != NO_CONTEXT))
@ -607,10 +607,10 @@ struct ReverseChainSingleSubstFormat1
const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack); const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
const ArrayOf<GlyphID> &substitute = StructAfter<ArrayOf<GlyphID> > (lookahead); const ArrayOf<GlyphID> &substitute = StructAfter<ArrayOf<GlyphID> > (lookahead);
if (match_backtrack (APPLY_ARG, if (match_backtrack (context,
backtrack.len, (USHORT *) backtrack.array(), backtrack.len, (USHORT *) backtrack.array(),
match_coverage, CharP(this)) && match_coverage, CharP(this)) &&
match_lookahead (APPLY_ARG, match_lookahead (context,
lookahead.len, (USHORT *) lookahead.array(), lookahead.len, (USHORT *) lookahead.array(),
match_coverage, CharP(this), match_coverage, CharP(this),
1)) 1))
@ -659,11 +659,11 @@ struct ReverseChainSingleSubst
friend struct SubstLookupSubTable; friend struct SubstLookupSubTable;
private: private:
inline bool apply (APPLY_ARG_DEF) const inline bool apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (u.format) { switch (u.format) {
case 1: return u.format1->apply (APPLY_ARG); case 1: return u.format1->apply (context);
default:return false; default:return false;
} }
} }
@ -705,18 +705,18 @@ struct SubstLookupSubTable
ReverseChainSingle = 8 ReverseChainSingle = 8
}; };
inline bool apply (APPLY_ARG_DEF, unsigned int lookup_type) const inline bool apply (hb_apply_context_t *context, unsigned int lookup_type) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (lookup_type) { switch (lookup_type) {
case Single: return u.single->apply (APPLY_ARG); case Single: return u.single->apply (context);
case Multiple: return u.multiple->apply (APPLY_ARG); case Multiple: return u.multiple->apply (context);
case Alternate: return u.alternate->apply (APPLY_ARG); case Alternate: return u.alternate->apply (context);
case Ligature: return u.ligature->apply (APPLY_ARG); case Ligature: return u.ligature->apply (context);
case Context: return u.context->apply (APPLY_ARG); case Context: return u.context->apply (context);
case ChainContext: return u.chainContext->apply (APPLY_ARG); case ChainContext: return u.chainContext->apply (context);
case Extension: return u.extension->apply (APPLY_ARG); case Extension: return u.extension->apply (context);
case ReverseChainSingle: return u.reverseChainContextSingle->apply (APPLY_ARG); case ReverseChainSingle: return u.reverseChainContextSingle->apply (context);
default:return false; default:return false;
} }
} }
@ -802,7 +802,7 @@ struct SubstLookup : Lookup
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++)
if (get_subtable (i).apply (APPLY_ARG, lookup_type)) if (get_subtable (i).apply (context, lookup_type))
return true; return true;
return false; return false;
@ -896,10 +896,10 @@ ASSERT_SIZE (GSUB, 10);
/* Out-of-class implementation for methods recursing */ /* Out-of-class implementation for methods recursing */
inline bool ExtensionSubst::apply (APPLY_ARG_DEF) const inline bool ExtensionSubst::apply (hb_apply_context_t *context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
return get_subtable ().apply (APPLY_ARG, get_type ()); return get_subtable ().apply (context, get_type ());
} }
inline bool ExtensionSubst::sanitize (hb_sanitize_context_t *context) inline bool ExtensionSubst::sanitize (hb_sanitize_context_t *context)
@ -919,7 +919,7 @@ inline bool ExtensionSubst::is_reverse (void) const
return SubstLookup::lookup_type_is_reverse (type); return SubstLookup::lookup_type_is_reverse (type);
} }
static inline bool substitute_lookup (APPLY_ARG_DEF, unsigned int lookup_index) static inline bool substitute_lookup (hb_apply_context_t *context, unsigned int lookup_index)
{ {
const GSUB &gsub = *(context->layout->face->ot_layout.gsub); const GSUB &gsub = *(context->layout->face->ot_layout.gsub);
const SubstLookup &l = gsub.get_lookup (lookup_index); const SubstLookup &l = gsub.get_lookup (lookup_index);

View File

@ -40,11 +40,6 @@
trace.log ("APPLY", HB_FUNC, this); trace.log ("APPLY", HB_FUNC, this);
#define APPLY_ARG_DEF \
hb_apply_context_t *context
#define APPLY_ARG \
context
struct hb_apply_context_t struct hb_apply_context_t
{ {
hb_ot_layout_context_t *layout; hb_ot_layout_context_t *layout;
@ -64,7 +59,7 @@ struct hb_apply_context_t
typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const USHORT &value, const char *data); typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const USHORT &value, const char *data);
typedef bool (*apply_lookup_func_t) (APPLY_ARG_DEF, unsigned int lookup_index); typedef bool (*apply_lookup_func_t) (hb_apply_context_t *context, unsigned int lookup_index);
struct ContextFuncs struct ContextFuncs
{ {
@ -91,7 +86,7 @@ static inline bool match_coverage (hb_codepoint_t glyph_id, const USHORT &value,
} }
static inline bool match_input (APPLY_ARG_DEF, static inline bool match_input (hb_apply_context_t *context,
unsigned int count, /* Including the first glyph (not matched) */ unsigned int count, /* Including the first glyph (not matched) */
const USHORT input[], /* Array of input values--start with second glyph */ const USHORT input[], /* Array of input values--start with second glyph */
match_func_t match_func, match_func_t match_func,
@ -121,7 +116,7 @@ static inline bool match_input (APPLY_ARG_DEF,
return true; return true;
} }
static inline bool match_backtrack (APPLY_ARG_DEF, static inline bool match_backtrack (hb_apply_context_t *context,
unsigned int count, unsigned int count,
const USHORT backtrack[], const USHORT backtrack[],
match_func_t match_func, match_func_t match_func,
@ -146,7 +141,7 @@ static inline bool match_backtrack (APPLY_ARG_DEF,
return true; return true;
} }
static inline bool match_lookahead (APPLY_ARG_DEF, static inline bool match_lookahead (hb_apply_context_t *context,
unsigned int count, unsigned int count,
const USHORT lookahead[], const USHORT lookahead[],
match_func_t match_func, match_func_t match_func,
@ -191,7 +186,7 @@ struct LookupRecord
}; };
ASSERT_SIZE (LookupRecord, 4); ASSERT_SIZE (LookupRecord, 4);
static inline bool apply_lookup (APPLY_ARG_DEF, static inline bool apply_lookup (hb_apply_context_t *context,
unsigned int count, /* Including the first glyph */ unsigned int count, /* Including the first glyph */
unsigned int lookupCount, unsigned int lookupCount,
const LookupRecord lookupRecord[], /* Array of LookupRecords--in design order */ const LookupRecord lookupRecord[], /* Array of LookupRecords--in design order */
@ -223,7 +218,7 @@ static inline bool apply_lookup (APPLY_ARG_DEF,
unsigned int old_pos = context->buffer->in_pos; unsigned int old_pos = context->buffer->in_pos;
/* Apply a lookup */ /* Apply a lookup */
bool done = apply_func (APPLY_ARG, lookupRecord->lookupListIndex); bool done = apply_func (context, lookupRecord->lookupListIndex);
lookupRecord++; lookupRecord++;
lookupCount--; lookupCount--;
@ -256,7 +251,7 @@ struct ContextLookupContext
const char *match_data; const char *match_data;
}; };
static inline bool context_lookup (APPLY_ARG_DEF, static inline bool context_lookup (hb_apply_context_t *context,
unsigned int inputCount, /* Including the first glyph (not matched) */ unsigned int inputCount, /* Including the first glyph (not matched) */
const USHORT input[], /* Array of input values--start with second glyph */ const USHORT input[], /* Array of input values--start with second glyph */
unsigned int lookupCount, unsigned int lookupCount,
@ -264,14 +259,14 @@ static inline bool context_lookup (APPLY_ARG_DEF,
ContextLookupContext &lookup_context) ContextLookupContext &lookup_context)
{ {
unsigned int new_context_length; unsigned int new_context_length;
if (!match_input (APPLY_ARG, if (!match_input (context,
inputCount, input, inputCount, input,
lookup_context.funcs.match, lookup_context.match_data, lookup_context.funcs.match, lookup_context.match_data,
&new_context_length)) return false; &new_context_length)) return false;
unsigned int old_context_length; unsigned int old_context_length;
old_context_length = context->context_length; old_context_length = context->context_length;
context->context_length = new_context_length; context->context_length = new_context_length;
bool ret = apply_lookup (APPLY_ARG, bool ret = apply_lookup (context,
inputCount, inputCount,
lookupCount, lookupRecord, lookupCount, lookupRecord,
lookup_context.funcs.apply); lookup_context.funcs.apply);
@ -284,11 +279,11 @@ struct Rule
friend struct RuleSet; friend struct RuleSet;
private: private:
inline bool apply (APPLY_ARG_DEF, ContextLookupContext &lookup_context) const inline bool apply (hb_apply_context_t *context, ContextLookupContext &lookup_context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (input, input[0].get_size () * (inputCount ? inputCount - 1 : 0)); const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (input, input[0].get_size () * (inputCount ? inputCount - 1 : 0));
return context_lookup (APPLY_ARG, return context_lookup (context,
inputCount, input, inputCount, input,
lookupCount, lookupRecord, lookupCount, lookupRecord,
lookup_context); lookup_context);
@ -317,13 +312,13 @@ ASSERT_SIZE_VAR2 (Rule, 4, USHORT, LookupRecord);
struct RuleSet struct RuleSet
{ {
inline bool apply (APPLY_ARG_DEF, ContextLookupContext &lookup_context) const inline bool apply (hb_apply_context_t *context, ContextLookupContext &lookup_context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int num_rules = rule.len; unsigned int num_rules = rule.len;
for (unsigned int i = 0; i < num_rules; i++) for (unsigned int i = 0; i < num_rules; i++)
{ {
if ((this+rule[i]).apply (APPLY_ARG, lookup_context)) if ((this+rule[i]).apply (context, lookup_context))
return true; return true;
} }
@ -347,7 +342,7 @@ struct ContextFormat1
friend struct Context; friend struct Context;
private: private:
inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const inline bool apply (hb_apply_context_t *context, apply_lookup_func_t apply_func) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int index = (this+coverage) (IN_CURGLYPH ()); unsigned int index = (this+coverage) (IN_CURGLYPH ());
@ -359,7 +354,7 @@ struct ContextFormat1
{match_glyph, apply_func}, {match_glyph, apply_func},
NULL NULL
}; };
return rule_set.apply (APPLY_ARG, lookup_context); return rule_set.apply (context, lookup_context);
} }
inline bool sanitize (hb_sanitize_context_t *context) { inline bool sanitize (hb_sanitize_context_t *context) {
@ -385,7 +380,7 @@ struct ContextFormat2
friend struct Context; friend struct Context;
private: private:
inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const inline bool apply (hb_apply_context_t *context, apply_lookup_func_t apply_func) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int index = (this+coverage) (IN_CURGLYPH ()); unsigned int index = (this+coverage) (IN_CURGLYPH ());
@ -402,7 +397,7 @@ struct ContextFormat2
{match_class, apply_func}, {match_class, apply_func},
CharP(&class_def) CharP(&class_def)
}; };
return rule_set.apply (APPLY_ARG, lookup_context); return rule_set.apply (context, lookup_context);
} }
inline bool sanitize (hb_sanitize_context_t *context) { inline bool sanitize (hb_sanitize_context_t *context) {
@ -432,7 +427,7 @@ struct ContextFormat3
friend struct Context; friend struct Context;
private: private:
inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const inline bool apply (hb_apply_context_t *context, apply_lookup_func_t apply_func) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int index = (this+coverage[0]) (IN_CURGLYPH ()); unsigned int index = (this+coverage[0]) (IN_CURGLYPH ());
@ -444,7 +439,7 @@ struct ContextFormat3
{match_coverage, apply_func}, {match_coverage, apply_func},
CharP(this) CharP(this)
}; };
return context_lookup (APPLY_ARG, return context_lookup (context,
glyphCount, (const USHORT *) (coverage + 1), glyphCount, (const USHORT *) (coverage + 1),
lookupCount, lookupRecord, lookupCount, lookupRecord,
lookup_context); lookup_context);
@ -477,13 +472,13 @@ ASSERT_SIZE_VAR2 (ContextFormat3, 6, OffsetTo<Coverage>, LookupRecord);
struct Context struct Context
{ {
protected: protected:
inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const inline bool apply (hb_apply_context_t *context, apply_lookup_func_t apply_func) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (u.format) { switch (u.format) {
case 1: return u.format1->apply (APPLY_ARG, apply_func); case 1: return u.format1->apply (context, apply_func);
case 2: return u.format2->apply (APPLY_ARG, apply_func); case 2: return u.format2->apply (context, apply_func);
case 3: return u.format3->apply (APPLY_ARG, apply_func); case 3: return u.format3->apply (context, apply_func);
default:return false; default:return false;
} }
} }
@ -517,7 +512,7 @@ struct ChainContextLookupContext
const char *match_data[3]; const char *match_data[3];
}; };
static inline bool chain_context_lookup (APPLY_ARG_DEF, static inline bool chain_context_lookup (hb_apply_context_t *context,
unsigned int backtrackCount, unsigned int backtrackCount,
const USHORT backtrack[], const USHORT backtrack[],
unsigned int inputCount, /* Including the first glyph (not matched) */ unsigned int inputCount, /* Including the first glyph (not matched) */
@ -535,14 +530,14 @@ static inline bool chain_context_lookup (APPLY_ARG_DEF,
return false; return false;
unsigned int offset; unsigned int offset;
if (!(match_backtrack (APPLY_ARG, if (!(match_backtrack (context,
backtrackCount, backtrack, backtrackCount, backtrack,
lookup_context.funcs.match, lookup_context.match_data[0]) && lookup_context.funcs.match, lookup_context.match_data[0]) &&
match_input (APPLY_ARG, match_input (context,
inputCount, input, inputCount, input,
lookup_context.funcs.match, lookup_context.match_data[1], lookup_context.funcs.match, lookup_context.match_data[1],
&offset) && &offset) &&
match_lookahead (APPLY_ARG, match_lookahead (context,
lookaheadCount, lookahead, lookaheadCount, lookahead,
lookup_context.funcs.match, lookup_context.match_data[2], lookup_context.funcs.match, lookup_context.match_data[2],
offset))) return false; offset))) return false;
@ -550,7 +545,7 @@ static inline bool chain_context_lookup (APPLY_ARG_DEF,
unsigned int old_context_length; unsigned int old_context_length;
old_context_length = context->context_length; old_context_length = context->context_length;
context->context_length = offset; context->context_length = offset;
bool ret = apply_lookup (APPLY_ARG, bool ret = apply_lookup (context,
inputCount, inputCount,
lookupCount, lookupRecord, lookupCount, lookupRecord,
lookup_context.funcs.apply); lookup_context.funcs.apply);
@ -563,13 +558,13 @@ struct ChainRule
friend struct ChainRuleSet; friend struct ChainRuleSet;
private: private:
inline bool apply (APPLY_ARG_DEF, ChainContextLookupContext &lookup_context) const inline bool apply (hb_apply_context_t *context, ChainContextLookupContext &lookup_context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack); const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input); const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead); const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
return chain_context_lookup (APPLY_ARG, return chain_context_lookup (context,
backtrack.len, backtrack.array(), backtrack.len, backtrack.array(),
input.len, input.array(), input.len, input.array(),
lookahead.len, lookahead.array(), lookahead.len, lookahead.array(),
@ -609,13 +604,13 @@ ASSERT_SIZE (ChainRule, 8);
struct ChainRuleSet struct ChainRuleSet
{ {
inline bool apply (APPLY_ARG_DEF, ChainContextLookupContext &lookup_context) const inline bool apply (hb_apply_context_t *context, ChainContextLookupContext &lookup_context) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int num_rules = rule.len; unsigned int num_rules = rule.len;
for (unsigned int i = 0; i < num_rules; i++) for (unsigned int i = 0; i < num_rules; i++)
{ {
if ((this+rule[i]).apply (APPLY_ARG, lookup_context)) if ((this+rule[i]).apply (context, lookup_context))
return true; return true;
} }
@ -639,7 +634,7 @@ struct ChainContextFormat1
friend struct ChainContext; friend struct ChainContext;
private: private:
inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const inline bool apply (hb_apply_context_t *context, apply_lookup_func_t apply_func) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int index = (this+coverage) (IN_CURGLYPH ()); unsigned int index = (this+coverage) (IN_CURGLYPH ());
@ -651,7 +646,7 @@ struct ChainContextFormat1
{match_glyph, apply_func}, {match_glyph, apply_func},
{NULL, NULL, NULL} {NULL, NULL, NULL}
}; };
return rule_set.apply (APPLY_ARG, lookup_context); return rule_set.apply (context, lookup_context);
} }
inline bool sanitize (hb_sanitize_context_t *context) { inline bool sanitize (hb_sanitize_context_t *context) {
@ -676,7 +671,7 @@ struct ChainContextFormat2
friend struct ChainContext; friend struct ChainContext;
private: private:
inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const inline bool apply (hb_apply_context_t *context, apply_lookup_func_t apply_func) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
unsigned int index = (this+coverage) (IN_CURGLYPH ()); unsigned int index = (this+coverage) (IN_CURGLYPH ());
@ -698,7 +693,7 @@ struct ChainContextFormat2
CharP(&input_class_def), CharP(&input_class_def),
CharP(&lookahead_class_def)} CharP(&lookahead_class_def)}
}; };
return rule_set.apply (APPLY_ARG, lookup_context); return rule_set.apply (context, lookup_context);
} }
inline bool sanitize (hb_sanitize_context_t *context) { inline bool sanitize (hb_sanitize_context_t *context) {
@ -739,7 +734,7 @@ struct ChainContextFormat3
private: private:
inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const inline bool apply (hb_apply_context_t *context, apply_lookup_func_t apply_func) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack); const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
@ -754,7 +749,7 @@ struct ChainContextFormat3
{match_coverage, apply_func}, {match_coverage, apply_func},
{CharP(this), CharP(this), CharP(this)} {CharP(this), CharP(this), CharP(this)}
}; };
return chain_context_lookup (APPLY_ARG, return chain_context_lookup (context,
backtrack.len, (const USHORT *) backtrack.array(), backtrack.len, (const USHORT *) backtrack.array(),
input.len, (const USHORT *) input.array() + 1, input.len, (const USHORT *) input.array() + 1,
lookahead.len, (const USHORT *) lookahead.array(), lookahead.len, (const USHORT *) lookahead.array(),
@ -797,13 +792,13 @@ ASSERT_SIZE (ChainContextFormat3, 10);
struct ChainContext struct ChainContext
{ {
protected: protected:
inline bool apply (APPLY_ARG_DEF, apply_lookup_func_t apply_func) const inline bool apply (hb_apply_context_t *context, apply_lookup_func_t apply_func) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
switch (u.format) { switch (u.format) {
case 1: return u.format1->apply (APPLY_ARG, apply_func); case 1: return u.format1->apply (context, apply_func);
case 2: return u.format2->apply (APPLY_ARG, apply_func); case 2: return u.format2->apply (context, apply_func);
case 3: return u.format3->apply (APPLY_ARG, apply_func); case 3: return u.format3->apply (context, apply_func);
default:return false; default:return false;
} }
} }