[GSUB] Simplify would-apply

This commit is contained in:
Behdad Esfahbod 2012-07-28 18:34:58 -04:00
parent dadede012e
commit e6f7479fe3
2 changed files with 11 additions and 84 deletions

View File

@ -55,11 +55,6 @@ struct SingleSubstFormat1
return this+coverage; return this+coverage;
} }
inline bool would_apply (hb_would_apply_context_t *c) const
{
return c->len == 1 && (this+coverage) (c->first) != NOT_COVERED;
}
inline bool apply (hb_apply_context_t *c) const inline bool apply (hb_apply_context_t *c) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
@ -112,11 +107,6 @@ struct SingleSubstFormat2
return this+coverage; return this+coverage;
} }
inline bool would_apply (hb_would_apply_context_t *c) const
{
return c->len == 1 && (this+coverage) (c->first) != NOT_COVERED;
}
inline bool apply (hb_apply_context_t *c) const inline bool apply (hb_apply_context_t *c) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
@ -174,15 +164,6 @@ struct SingleSubst
} }
} }
inline bool would_apply (hb_would_apply_context_t *c) const
{
switch (u.format) {
case 1: return u.format1.would_apply (c);
case 2: return u.format2.would_apply (c);
default:return false;
}
}
inline bool apply (hb_apply_context_t *c) const inline bool apply (hb_apply_context_t *c) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
@ -276,11 +257,6 @@ struct MultipleSubstFormat1
return this+coverage; return this+coverage;
} }
inline bool would_apply (hb_would_apply_context_t *c) const
{
return c->len == 1 && (this+coverage) (c->first) != NOT_COVERED;
}
inline bool apply (hb_apply_context_t *c) const inline bool apply (hb_apply_context_t *c) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
@ -331,14 +307,6 @@ struct MultipleSubst
} }
} }
inline bool would_apply (hb_would_apply_context_t *c) const
{
switch (u.format) {
case 1: return u.format1.would_apply (c);
default:return false;
}
}
inline bool apply (hb_apply_context_t *c) const inline bool apply (hb_apply_context_t *c) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
@ -393,11 +361,6 @@ struct AlternateSubstFormat1
return this+coverage; return this+coverage;
} }
inline bool would_apply (hb_would_apply_context_t *c) const
{
return c->len == 1 && (this+coverage) (c->first) != NOT_COVERED;
}
inline bool apply (hb_apply_context_t *c) const inline bool apply (hb_apply_context_t *c) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
@ -466,14 +429,6 @@ struct AlternateSubst
} }
} }
inline bool would_apply (hb_would_apply_context_t *c) const
{
switch (u.format) {
case 1: return u.format1.would_apply (c);
default:return false;
}
}
inline bool apply (hb_apply_context_t *c) const inline bool apply (hb_apply_context_t *c) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
@ -675,9 +630,7 @@ struct LigatureSubstFormat1
inline bool would_apply (hb_would_apply_context_t *c) const inline bool would_apply (hb_would_apply_context_t *c) const
{ {
unsigned int index; return (this+ligatureSet[(this+coverage) (c->first)]).would_apply (c);
return (index = (this+coverage) (c->first)) != NOT_COVERED &&
(this+ligatureSet[index]).would_apply (c);
} }
inline bool apply (hb_apply_context_t *c) const inline bool apply (hb_apply_context_t *c) const
@ -871,11 +824,6 @@ struct ReverseChainSingleSubstFormat1
return this+coverage; return this+coverage;
} }
inline bool would_apply (hb_would_apply_context_t *c) const
{
return c->len == 1 && (this+coverage) (c->first) != NOT_COVERED;
}
inline bool apply (hb_apply_context_t *c) const inline bool apply (hb_apply_context_t *c) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
@ -958,14 +906,6 @@ struct ReverseChainSingleSubst
} }
} }
inline bool would_apply (hb_would_apply_context_t *c) const
{
switch (u.format) {
case 1: return u.format1.would_apply (c);
default:return false;
}
}
inline bool apply (hb_apply_context_t *c) const inline bool apply (hb_apply_context_t *c) const
{ {
TRACE_APPLY (); TRACE_APPLY ();
@ -1048,15 +988,16 @@ struct SubstLookupSubTable
unsigned int lookup_type) const unsigned int lookup_type) const
{ {
TRACE_WOULD_APPLY (); TRACE_WOULD_APPLY ();
if (get_coverage (lookup_type).get_coverage (c->first) == NOT_COVERED) return false;
if (c->len == 1) return true; /* Done! */
/* Only need to look further for lookups that support substitutions
* of input longer than 1. */
switch (lookup_type) { switch (lookup_type) {
case Single: return u.single.would_apply (c);
case Multiple: return u.multiple.would_apply (c);
case Alternate: return u.alternate.would_apply (c);
case Ligature: return u.ligature.would_apply (c); case Ligature: return u.ligature.would_apply (c);
case Context: return u.context.would_apply (c); case Context: return u.context.would_apply (c);
case ChainContext: return u.chainContext.would_apply (c); case ChainContext: return u.chainContext.would_apply (c);
case Extension: return u.extension.would_apply (c); case Extension: return u.extension.would_apply (c);
case ReverseChainSingle: return u.reverseChainContextSingle.would_apply (c);
default: return false; default: return false;
} }
} }

View File

@ -677,11 +677,8 @@ struct ContextFormat1
inline bool would_apply (hb_would_apply_context_t *c) const inline bool would_apply (hb_would_apply_context_t *c) const
{ {
TRACE_WOULD_APPLY (); TRACE_WOULD_APPLY ();
unsigned int index = (this+coverage) (c->first);
if (likely (index == NOT_COVERED))
return TRACE_RETURN (false);
const RuleSet &rule_set = this+ruleSet[index]; const RuleSet &rule_set = this+ruleSet[(this+coverage) (c->first)];
struct ContextApplyLookupContext lookup_context = { struct ContextApplyLookupContext lookup_context = {
{match_glyph, NULL}, {match_glyph, NULL},
NULL NULL
@ -752,11 +749,9 @@ struct ContextFormat2
inline bool would_apply (hb_would_apply_context_t *c) const inline bool would_apply (hb_would_apply_context_t *c) const
{ {
TRACE_WOULD_APPLY (); TRACE_WOULD_APPLY ();
unsigned int index = (this+coverage) (c->first);
if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
const ClassDef &class_def = this+classDef; const ClassDef &class_def = this+classDef;
index = class_def (c->first); unsigned int index = class_def (c->first);
const RuleSet &rule_set = this+ruleSet[index]; const RuleSet &rule_set = this+ruleSet[index];
struct ContextApplyLookupContext lookup_context = { struct ContextApplyLookupContext lookup_context = {
{match_class, NULL}, {match_class, NULL},
@ -828,8 +823,6 @@ struct ContextFormat3
inline bool would_apply (hb_would_apply_context_t *c) const inline bool would_apply (hb_would_apply_context_t *c) const
{ {
TRACE_WOULD_APPLY (); TRACE_WOULD_APPLY ();
unsigned int index = (this+coverage[0]) (c->first);
if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverage, coverage[0].static_size * glyphCount); const LookupRecord *lookupRecord = &StructAtOffset<LookupRecord> (coverage, coverage[0].static_size * glyphCount);
struct ContextApplyLookupContext lookup_context = { struct ContextApplyLookupContext lookup_context = {
@ -1180,10 +1173,8 @@ struct ChainContextFormat1
inline bool would_apply (hb_would_apply_context_t *c) const inline bool would_apply (hb_would_apply_context_t *c) const
{ {
TRACE_WOULD_APPLY (); TRACE_WOULD_APPLY ();
unsigned int index = (this+coverage) (c->first);
if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
const ChainRuleSet &rule_set = this+ruleSet[index]; const ChainRuleSet &rule_set = this+ruleSet[(this+coverage) (c->first)];
struct ChainContextApplyLookupContext lookup_context = { struct ChainContextApplyLookupContext lookup_context = {
{match_glyph, NULL}, {match_glyph, NULL},
{NULL, NULL, NULL} {NULL, NULL, NULL}
@ -1256,12 +1247,10 @@ struct ChainContextFormat2
inline bool would_apply (hb_would_apply_context_t *c) const inline bool would_apply (hb_would_apply_context_t *c) const
{ {
TRACE_WOULD_APPLY (); TRACE_WOULD_APPLY ();
unsigned int index = (this+coverage) (c->first);
if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
const ClassDef &input_class_def = this+inputClassDef; const ClassDef &input_class_def = this+inputClassDef;
index = input_class_def (c->first); unsigned int index = input_class_def (c->first);
const ChainRuleSet &rule_set = this+ruleSet[index]; const ChainRuleSet &rule_set = this+ruleSet[index];
struct ChainContextApplyLookupContext lookup_context = { struct ChainContextApplyLookupContext lookup_context = {
{match_class, NULL}, {match_class, NULL},
@ -1359,11 +1348,8 @@ struct ChainContextFormat3
inline bool would_apply (hb_would_apply_context_t *c) const inline bool would_apply (hb_would_apply_context_t *c) const
{ {
TRACE_WOULD_APPLY (); TRACE_WOULD_APPLY ();
const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack); const OffsetArrayOf<Coverage> &input = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
unsigned int index = (this+input[0]) (c->first);
if (likely (index == NOT_COVERED)) return TRACE_RETURN (false);
const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input); const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (input);
const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead); const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
struct ChainContextApplyLookupContext lookup_context = { struct ChainContextApplyLookupContext lookup_context = {