1/* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * 4 * This code is free software; you can redistribute it and/or modify it 5 * under the terms of the GNU General Public License version 2 only, as 6 * published by the Free Software Foundation. Oracle designates this 7 * particular file as subject to the "Classpath" exception as provided 8 * by Oracle in the LICENSE file that accompanied this code. 9 * 10 * This code is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 * version 2 for more details (a copy is included in the LICENSE file that 14 * accompanied this code). 15 * 16 * You should have received a copy of the GNU General Public License version 17 * 2 along with this work; if not, write to the Free Software Foundation, 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19 * 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21 * or visit www.oracle.com if you need additional information or have any 22 * questions. 23 * 24 */ 25 26/* 27 * 28 * 29 * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved 30 * 31 */ 32 33#ifndef __LOOKUPPROCESSOR_H 34#define __LOOKUPPROCESSOR_H 35 36/** 37 * \file 38 * \internal 39 */ 40 41#include "LETypes.h" 42#include "LEFontInstance.h" 43#include "OpenTypeTables.h" 44#include "LETableReference.h" 45//#include "Lookups.h" 46//#include "Features.h" 47 48U_NAMESPACE_BEGIN 49 50class LEFontInstance; 51class LEGlyphStorage; 52class GlyphIterator; 53class GlyphPositionAdjustments; 54struct FeatureTable; 55struct FeatureListTable; 56struct GlyphDefinitionTableHeader; 57struct LookupSubtable; 58struct LookupTable; 59 60class LookupProcessor : public UMemory { 61public: 62 le_int32 process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments, 63 le_bool rightToLeft, const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader, const LEFontInstance *fontInstance, LEErrorCode& success) const; 64 65 le_uint32 applyLookupTable(const LEReferenceTo<LookupTable> &lookupTable, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const; 66 67 le_uint32 applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const; 68 69 virtual le_uint32 applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 subtableType, 70 GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const = 0; 71 72 virtual ~LookupProcessor(); 73 74 const LETableReference &getReference() const { return fReference; } 75 76protected: 77 LookupProcessor(const LETableReference &baseAddress, 78 Offset scriptListOffset, 79 Offset featureListOffset, 80 Offset lookupListOffset, 81 LETag scriptTag, 82 LETag languageTag, 83 const FeatureMap *featureMap, 84 le_int32 featureMapCount, 85 le_bool orderFeatures, 86 LEErrorCode& success); 87 88 LookupProcessor(); 89 90 le_int32 selectLookups(const LEReferenceTo<FeatureTable> &featureTable, FeatureMask featureMask, le_int32 order, LEErrorCode &success); 91 92 LEReferenceTo<LookupListTable> lookupListTable; 93 LEReferenceTo<FeatureListTable> featureListTable; 94 95 FeatureMask *lookupSelectArray; 96 le_uint32 lookupSelectCount; 97 98 le_uint16 *lookupOrderArray; 99 le_uint32 lookupOrderCount; 100 101 LETableReference fReference; 102 103private: 104 105 LookupProcessor(const LookupProcessor &other); // forbid copying of this class 106 LookupProcessor &operator=(const LookupProcessor &other); // forbid copying of this class 107}; 108 109U_NAMESPACE_END 110#endif 111