diff --git a/src/hb-aat-layout-common.hh b/src/hb-aat-layout-common.hh index 7a5be84ccfd4740a7957e8cdc4bb63761f6c7dc2..c22ba5b28ae307a938d915efad6887e9a59ee1e7 100644 --- a/src/hb-aat-layout-common.hh +++ b/src/hb-aat-layout-common.hh @@ -439,10 +439,23 @@ struct Entry template struct StateTable { + enum State + { + STATE_START_OF_TEXT = 0, + STATE_START_OF_LINE = 1, + }; + enum Class + { + CLASS_END_OF_TEXT = 0, + CLASS_OUT_OF_BOUNDS = 1, + CLASS_DELETED_GLYPH = 2, + CLASS_END_OF_LINE = 3, + }; + inline unsigned int get_class (hb_codepoint_t glyph_id, unsigned int num_glyphs) const { const HBUINT16 *v = (this+classTable).get_value (glyph_id, num_glyphs); - return v ? *v : 1; + return v ? *v : CLASS_OUT_OF_BOUNDS; } inline const Entry *get_entries () const @@ -538,13 +551,13 @@ struct StateTableDriver if (!c->in_place) buffer->clear_output (); - unsigned int state = 0; + unsigned int state = StateTable::STATE_START_OF_TEXT; bool last_was_dont_advance = false; for (buffer->idx = 0;;) { unsigned int klass = buffer->idx < buffer->len ? machine.get_class (info[buffer->idx].codepoint, num_glyphs) : - 0 /* End of text */; + (unsigned) StateTable::CLASS_END_OF_TEXT; const Entry *entry = machine.get_entryZ (state, klass); if (unlikely (!entry)) break;