1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * (C) Copyright IBM Corp. 1998-2010 - All Rights Reserved 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "LETypes.h" 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "OpenTypeTables.h" 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "OpenTypeUtilities.h" 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ClassDefinitionTables.h" 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "LESwaps.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querule_int32 ClassDefinitionTable::getGlyphClass(LEGlyphID glyphID) const 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(SWAPW(classFormat)) { 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ClassDefFormat1Table *f1Table = (const ClassDefFormat1Table *) this; 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return f1Table->getGlyphClass(glyphID); 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ClassDefFormat2Table *f2Table = (const ClassDefFormat2Table *) this; 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return f2Table->getGlyphClass(glyphID); 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querule_bool ClassDefinitionTable::hasGlyphClass(le_int32 glyphClass) const 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(SWAPW(classFormat)) { 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ClassDefFormat1Table *f1Table = (const ClassDefFormat1Table *) this; 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return f1Table->hasGlyphClass(glyphClass); 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const ClassDefFormat2Table *f2Table = (const ClassDefFormat2Table *) this; 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return f2Table->hasGlyphClass(glyphClass); 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querule_int32 ClassDefFormat1Table::getGlyphClass(LEGlyphID glyphID) const 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TTGlyphID ttGlyphID = (TTGlyphID) LE_GET_GLYPH(glyphID); 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TTGlyphID firstGlyph = SWAPW(startGlyph); 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TTGlyphID lastGlyph = firstGlyph + SWAPW(glyphCount); 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (ttGlyphID >= firstGlyph && ttGlyphID < lastGlyph) { 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return SWAPW(classValueArray[ttGlyphID - firstGlyph]); 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querule_bool ClassDefFormat1Table::hasGlyphClass(le_int32 glyphClass) const 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_uint16 count = SWAPW(glyphCount); 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < count; i += 1) { 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (SWAPW(classValueArray[i]) == glyphClass) { 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querule_int32 ClassDefFormat2Table::getGlyphClass(LEGlyphID glyphID) const 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyphID); 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_uint16 rangeCount = SWAPW(classRangeCount); 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_int32 rangeIndex = 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru OpenTypeUtilities::getGlyphRangeIndex(ttGlyph, classRangeRecordArray, rangeCount); 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (rangeIndex < 0) { 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return SWAPW(classRangeRecordArray[rangeIndex].rangeValue); 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querule_bool ClassDefFormat2Table::hasGlyphClass(le_int32 glyphClass) const 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_uint16 rangeCount = SWAPW(classRangeCount); 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < rangeCount; i += 1) { 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (SWAPW(classRangeRecordArray[i].rangeValue) == glyphClass) { 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 121