1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "LETypes.h" 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "MorphTables.h" 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "SubtableProcessor.h" 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "NonContextualGlyphSubst.h" 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "NonContextualGlyphSubstProc.h" 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "TrimmedArrayProcessor.h" 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "LEGlyphStorage.h" 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "LESwaps.h" 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruUOBJECT_DEFINE_RTTI_IMPLEMENTATION(TrimmedArrayProcessor) 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruTrimmedArrayProcessor::TrimmedArrayProcessor() 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruTrimmedArrayProcessor::TrimmedArrayProcessor(const MorphSubtableHeader *morphSubtableHeader) 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader) 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const NonContextualGlyphSubstitutionHeader *header = (const NonContextualGlyphSubstitutionHeader *) morphSubtableHeader; 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru trimmedArrayLookupTable = (const TrimmedArrayLookupTable *) &header->table; 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru firstGlyph = SWAPW(trimmedArrayLookupTable->firstGlyph); 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru lastGlyph = firstGlyph + SWAPW(trimmedArrayLookupTable->glyphCount); 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruTrimmedArrayProcessor::~TrimmedArrayProcessor() 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid TrimmedArrayProcessor::process(LEGlyphStorage &glyphStorage) 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru le_int32 glyphCount = glyphStorage.getGlyphCount(); 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru le_int32 glyph; 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for (glyph = 0; glyph < glyphCount; glyph += 1) { 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LEGlyphID thisGlyph = glyphStorage[glyph]; 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(thisGlyph); 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if ((ttGlyph > firstGlyph) && (ttGlyph < lastGlyph)) { 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru TTGlyphID newGlyph = SWAPW(trimmedArrayLookupTable->valueArray[ttGlyph - firstGlyph]); 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph); 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END 56