ByteOffset IndicRearrangementProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index) { LEErrorCode success = LE_NO_ERROR; // todo- make a param? const IndicRearrangementStateEntry *entry = entryTable.getAlias(index,success); ByteOffset newState = SWAPW(entry->newStateOffset); IndicRearrangementFlags flags = (IndicRearrangementFlags) SWAPW(entry->flags); if (currGlyph < 0 || currGlyph >= glyphStorage.getGlyphCount()) { success = LE_INDEX_OUT_OF_BOUNDS_ERROR; return 0; } if (flags & irfMarkFirst) { firstGlyph = (le_uint32)currGlyph; } if (flags & irfMarkLast) { lastGlyph = (le_uint32)currGlyph; } doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask), success); if (!(flags & irfDontAdvance)) { // XXX: Should handle reverse too... currGlyph += 1; } return newState; }
le_uint16 IndicRearrangementProcessor2::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex2 index, LEErrorCode &success) { const IndicRearrangementStateEntry2 *entry = entryTable.getAlias(index, success); if (LE_FAILURE(success)) return 0; // TODO - what to return in bad state? le_uint16 newState = SWAPW(entry->newStateIndex); // index to the new state IndicRearrangementFlags flags = (IndicRearrangementFlags) SWAPW(entry->flags); if (currGlyph < 0 || currGlyph >= glyphStorage.getGlyphCount()) { success = LE_INDEX_OUT_OF_BOUNDS_ERROR; return 0; } if (flags & irfMarkFirst) { firstGlyph = (le_uint32)currGlyph; } if (flags & irfMarkLast) { lastGlyph = (le_uint32)currGlyph; } doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask), success); if (!(flags & irfDontAdvance)) { currGlyph += dir; } return newState; // index to new state }
le_uint16 IndicRearrangementProcessor2::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex2 index) { const IndicRearrangementStateEntry2 *entry = &entryTable[index]; le_uint16 newState = SWAPW(entry->newStateIndex); // index to the new state IndicRearrangementFlags flags = (IndicRearrangementFlags) SWAPW(entry->flags); if (flags & irfMarkFirst) { firstGlyph = currGlyph; } if (flags & irfMarkLast) { lastGlyph = currGlyph; } doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask)); if (!(flags & irfDontAdvance)) { currGlyph += dir; } return newState; // index to new state }
ByteOffset IndicRearrangementProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index) { const IndicRearrangementStateEntry *entry = &entryTable[index]; ByteOffset newState = SWAPW(entry->newStateOffset); IndicRearrangementFlags flags = (IndicRearrangementFlags) SWAPW(entry->flags); if (flags & irfMarkFirst) { firstGlyph = currGlyph; } if (flags & irfMarkLast) { lastGlyph = currGlyph; } doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask)); if (!(flags & irfDontAdvance)) { // XXX: Should handle reverse too... currGlyph += 1; } return newState; }