[mort] Refactor offset-to-index mapping
This commit is contained in:
parent
b9db610add
commit
3087046d31
@ -457,6 +457,14 @@ struct LigatureSubtable
|
|||||||
ligature (table+table->ligature),
|
ligature (table+table->ligature),
|
||||||
match_length (0) {}
|
match_length (0) {}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
static inline unsigned int offsetToIndex (unsigned int offset,
|
||||||
|
const void *base,
|
||||||
|
const T *array)
|
||||||
|
{
|
||||||
|
return (offset - ((const char *) array - (const char *) base)) / sizeof (T);
|
||||||
|
}
|
||||||
|
|
||||||
inline bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
|
inline bool is_actionable (StateTableDriver<Types, EntryData> *driver HB_UNUSED,
|
||||||
const Entry<EntryData> *entry)
|
const Entry<EntryData> *entry)
|
||||||
{
|
{
|
||||||
@ -497,9 +505,9 @@ struct LigatureSubtable
|
|||||||
return false; // TODO Work on previous instead?
|
return false; // TODO Work on previous instead?
|
||||||
|
|
||||||
unsigned int cursor = match_length;
|
unsigned int cursor = match_length;
|
||||||
const HBUINT32 *actionData = Types::extended ?
|
if (!Types::extended)
|
||||||
&ligAction[action_idx] :
|
action_idx = offsetToIndex (action_idx, table, ligAction.arrayZ);
|
||||||
&StructAtOffset<HBUINT32> (table, action_idx);
|
const HBUINT32 *actionData = &ligAction[action_idx];
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (unlikely (!cursor))
|
if (unlikely (!cursor))
|
||||||
@ -522,11 +530,8 @@ struct LigatureSubtable
|
|||||||
int32_t offset = (int32_t) uoffset;
|
int32_t offset = (int32_t) uoffset;
|
||||||
unsigned int component_idx = buffer->cur().codepoint + offset;
|
unsigned int component_idx = buffer->cur().codepoint + offset;
|
||||||
if (!Types::extended)
|
if (!Types::extended)
|
||||||
component_idx *= 2;
|
component_idx = offsetToIndex (component_idx * 2, table, component.arrayZ);
|
||||||
|
const HBUINT16 &componentData = component[component_idx];
|
||||||
const HBUINT16 &componentData = Types::extended ?
|
|
||||||
component[component_idx] :
|
|
||||||
StructAtOffset<HBUINT16> (table, component_idx);
|
|
||||||
if (unlikely (!componentData.sanitize (&c->sanitizer))) return false;
|
if (unlikely (!componentData.sanitize (&c->sanitizer))) return false;
|
||||||
ligature_idx += componentData;
|
ligature_idx += componentData;
|
||||||
|
|
||||||
@ -535,9 +540,9 @@ struct LigatureSubtable
|
|||||||
bool (action & LigActionLast));
|
bool (action & LigActionLast));
|
||||||
if (action & (LigActionStore | LigActionLast))
|
if (action & (LigActionStore | LigActionLast))
|
||||||
{
|
{
|
||||||
const GlyphID &ligatureData = Types::extended ?
|
if (!Types::extended)
|
||||||
ligature[ligature_idx] :
|
ligature_idx = offsetToIndex (ligature_idx, table, ligature.arrayZ);
|
||||||
StructAtOffset<GlyphID> (table, ligature_idx);
|
const GlyphID &ligatureData = ligature[ligature_idx];
|
||||||
if (unlikely (!ligatureData.sanitize (&c->sanitizer))) return false;
|
if (unlikely (!ligatureData.sanitize (&c->sanitizer))) return false;
|
||||||
hb_codepoint_t lig = ligatureData;
|
hb_codepoint_t lig = ligatureData;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user