57 } |
57 } |
58 |
58 |
59 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ArabicOpenTypeLayoutEngine) |
59 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ArabicOpenTypeLayoutEngine) |
60 |
60 |
61 ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, |
61 ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, |
62 le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable) |
62 le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable, LEErrorCode &success) |
63 : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable) |
63 : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success) |
64 { |
64 { |
65 fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount); |
65 fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount); |
66 fFeatureOrder = TRUE; |
66 fFeatureOrder = TRUE; |
67 } |
67 } |
68 |
68 |
69 ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, |
69 ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, |
70 le_int32 typoFlags) |
70 le_int32 typoFlags, LEErrorCode &success) |
71 : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags) |
71 : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success) |
72 { |
72 { |
73 fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount); |
73 fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount); |
74 |
74 |
75 // NOTE: We don't need to set fFeatureOrder to TRUE here |
75 // NOTE: We don't need to set fFeatureOrder to TRUE here |
76 // because this constructor is only called by the constructor |
76 // because this constructor is only called by the constructor |
149 |
149 |
150 adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success); |
150 adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success); |
151 } |
151 } |
152 } |
152 } |
153 |
153 |
154 UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags) |
154 UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success) |
155 : ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags) |
155 : ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success) |
156 { |
156 { |
157 fGSUBTable = (const GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable; |
157 fGSUBTable = (const GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable; |
158 fGDEFTable = (const GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable; |
158 fGDEFTable = (const GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable; |
159 |
159 |
160 fSubstitutionFilter = new CharSubstitutionFilter(fontInstance); |
160 fSubstitutionFilter = new CharSubstitutionFilter(fontInstance); |