00001 /* 00002 * @(#)LookupTables.h 1.5 00/03/15 00003 * 00004 * (C) Copyright IBM Corp. 1998, 1999, 2000 - All Rights Reserved 00005 * 00006 */ 00007 00008 #ifndef __LOOKUPTABLES_H 00009 #define __LOOKUPTABLES_H 00010 00011 #include "LETypes.h" 00012 #include "LayoutTables.h" 00013 00014 enum LookupTableFormat 00015 { 00016 ltfSimpleArray = 0, 00017 ltfSegmentSingle = 2, 00018 ltfSegmentArray = 4, 00019 ltfSingleTable = 6, 00020 ltfTrimmedArray = 8 00021 }; 00022 00023 typedef le_int16 LookupValue; 00024 00025 struct LookupTable 00026 { 00027 le_int16 format; 00028 }; 00029 00030 struct LookupSegment 00031 { 00032 le_int16 lastGlyph; 00033 le_int16 firstGlyph; 00034 LookupValue value; 00035 }; 00036 00037 struct LookupSingle 00038 { 00039 le_int16 glyph; 00040 LookupValue value; 00041 }; 00042 00043 struct BinarySearchLookupTable : LookupTable 00044 { 00045 le_int16 unitSize; 00046 le_int16 nUnits; 00047 le_int16 searchRange; 00048 le_int16 entrySelector; 00049 le_int16 rangeShift; 00050 00051 LookupSegment *lookupSegment(LookupSegment *segments, le_uint32 glyph); 00052 00053 LookupSingle *lookupSingle(LookupSingle *entries, le_uint32 glyph); 00054 }; 00055 00056 struct SimpleArrayLookupTable : LookupTable 00057 { 00058 LookupValue valueArray[ANY_NUMBER]; 00059 }; 00060 00061 struct SegmentSingleLookupTable : BinarySearchLookupTable 00062 { 00063 LookupSegment segments[ANY_NUMBER]; 00064 }; 00065 00066 struct SegmentArrayLookupTable : BinarySearchLookupTable 00067 { 00068 LookupSegment segments[ANY_NUMBER]; 00069 }; 00070 00071 struct SingleTableLookupTable : BinarySearchLookupTable 00072 { 00073 LookupSingle entries[ANY_NUMBER]; 00074 }; 00075 00076 struct TrimmedArrayLookupTable : LookupTable 00077 { 00078 le_int16 firstGlyph; 00079 le_int16 glyphCount; 00080 LookupValue valueArray[ANY_NUMBER]; 00081 }; 00082 00083 #endif