diff -r 000000000000 -r bde4ae8d615e os/textandloc/fontservices/textbase/sgdi/FontIndic.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/textandloc/fontservices/textbase/sgdi/FontIndic.h Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,487 @@ +// Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#ifndef __FONTINDIC_H__ +#define __FONTINDIC_H__ + +#include "GlyphSel.h" + +/** Defines the maximum ammount of text thats can be shaped at one time. +Change this number to suit optimisation, as increasing it or decreasing it may +make Devanagari text faster/slower.*/ +const TInt KMaxTextToShape = 16; + +enum TIndicCodeType + { + // These values must not change without also changing + // KStateResponse table accordingly + EIndicCodeOther = 0, + EIndicCodeCombiningSign = 1, + EIndicCodeIndependentVowel = 2, + EIndicCodeConsonant = 3, + EIndicCodeDependentVowel = 4, + EIndicCodeVirama = 5, + EIndicCodeNukta = 6, + EIndicCodeZWJ = 7, + EIndicCodeNuktaConsonant = 8, + EIndicCodeIndependentVowelA = 9, + EIndicCodeDependentVowelCandraE = 10, + EIndicCodeConsonantKannadaBengaliRa = 11, + EIndicCodeSplitVowel1 = 12, + EIndicCodeSplitVowel2 = 13, + EIndicCodeTamilLengthMarkAU = 14, + //Gurmukhi specific types: EIndicCodeGurBeraer* for specific bearer + //EIndicCodeGurDependentVowel* for dependent vowles which can be combined + //with corresponding bearer to form an independent vowlel + EIndicCodeGurBearerA = 15, + EIndicCodeGurBearerU = 16, + EIndicCodeGurBearerI = 17, + EIndicCodeGurDependentVowelA = 18, + EIndicCodeGurDependentVowelU = 19, + EIndicCodeGurDependentVowelI = 20, + EIndicCodeConsonantMalaChillu = 21, + EIndicCodeConsonantMalaChilluNA = 22, + EIndicCodeConsonantMalaRRA = 23 + }; + +struct TIndicCodeMapping + { + TInt16 iFirstCodeInRange; + TInt16 iCodeType; // From TIndicCodeType + }; + +/** Holds the types of all the symbols in the devanagari range, so that we can +work out where the syllable boundaries begin and end. */ +static const TIndicCodeMapping KDevCodeMap[] = + { + {0, EIndicCodeOther}, + {0x901, EIndicCodeCombiningSign}, + {0x904, EIndicCodeIndependentVowel}, + {0x905, EIndicCodeIndependentVowelA}, + {0x906, EIndicCodeIndependentVowel}, + {0x915, EIndicCodeConsonant}, + {0x929, EIndicCodeNuktaConsonant}, + {0x92A, EIndicCodeConsonant}, + {0x931, EIndicCodeNuktaConsonant}, + {0x932, EIndicCodeConsonant}, + {0x934, EIndicCodeNuktaConsonant}, + {0x935, EIndicCodeConsonant}, + {0x93A, EIndicCodeOther}, + {0x93C, EIndicCodeNukta}, + {0x93D, EIndicCodeOther}, + {0x93E, EIndicCodeDependentVowel}, + {0x945, EIndicCodeDependentVowelCandraE}, + {0x946, EIndicCodeDependentVowel}, + {0x94D, EIndicCodeVirama}, + {0x94E, EIndicCodeOther}, + {0x951, EIndicCodeCombiningSign}, + {0x955, EIndicCodeConsonant}, + {0x958, EIndicCodeNuktaConsonant}, + {0x960, EIndicCodeIndependentVowel}, + {0x962, EIndicCodeDependentVowel}, + {0x964, EIndicCodeOther}, + {0x200D, EIndicCodeZWJ}, + {0x200E, EIndicCodeOther} + }; + +/** Holds the types of all the symbols in the Kannada range, so that we can +work out where the syllable boundaries begin and end. */ +static const TIndicCodeMapping KKanCodeMap[] = + { + {0, EIndicCodeOther}, + {0xC82, EIndicCodeCombiningSign}, + {0xC85, EIndicCodeIndependentVowel}, + {0xC95, EIndicCodeConsonant}, + {0xCB0, EIndicCodeConsonantKannadaBengaliRa}, + {0xCB1, EIndicCodeConsonant}, + {0xCB4, EIndicCodeOther}, + {0xCB5, EIndicCodeConsonant}, + {0xCBA, EIndicCodeOther}, + {0xCBC, EIndicCodeNukta}, + {0xCBD, EIndicCodeOther}, + {0xCBE, EIndicCodeDependentVowel}, + {0xCC5, EIndicCodeOther}, + {0xCC6, EIndicCodeDependentVowel}, + {0xCCD, EIndicCodeVirama}, + {0xCD5, EIndicCodeCombiningSign}, + {0xCDE, EIndicCodeConsonant}, + {0xCE0, EIndicCodeIndependentVowel}, + {0xCE2, EIndicCodeDependentVowel}, + {0xCE4, EIndicCodeOther}, + {0x200D, EIndicCodeZWJ}, + {0x200E, EIndicCodeOther} + }; + +/** Holds the types of all the symbols in the Gujarati range, so that we can +work out where the syllable boundaries begin and end. */ +static const TIndicCodeMapping KGujCodeMap[] = + { + {0, EIndicCodeOther}, + {0xA81, EIndicCodeCombiningSign}, + {0xA85, EIndicCodeIndependentVowel}, + {0xA8E, EIndicCodeOther}, + {0xA8F, EIndicCodeIndependentVowel}, + {0xA92, EIndicCodeOther}, + {0xA93, EIndicCodeIndependentVowel}, + {0xA95, EIndicCodeConsonant}, + {0xAA9, EIndicCodeOther}, + {0xAAA, EIndicCodeConsonant}, + {0xAB1, EIndicCodeOther}, + {0xAB2, EIndicCodeConsonant}, + {0xAB4, EIndicCodeOther}, + {0xAB5, EIndicCodeConsonant}, + {0xABC, EIndicCodeNukta}, + {0xABD, EIndicCodeOther}, + {0xABE, EIndicCodeDependentVowel}, + {0xAC6, EIndicCodeOther}, + {0xAC7, EIndicCodeDependentVowel}, + {0xACA, EIndicCodeOther}, + {0xACB, EIndicCodeDependentVowel}, + {0xACD, EIndicCodeVirama}, + {0xACE, EIndicCodeOther}, + {0xAE0, EIndicCodeIndependentVowel}, + {0xAE2, EIndicCodeDependentVowel}, + {0xAE4, EIndicCodeOther}, + {0x200D, EIndicCodeZWJ}, + {0x200E, EIndicCodeOther} + }; + +/** Holds the types of all the symbols in the Gurmukhi range, so that we can +work out where the syllable boundaries begin and end. */ +static const TIndicCodeMapping KGurCodeMap[] = + { + {0, EIndicCodeOther}, + {0xA01, EIndicCodeCombiningSign}, + {0xA04, EIndicCodeOther}, + {0xA05, EIndicCodeGurBearerA}, + {0xA06, EIndicCodeIndependentVowel}, + {0xA0B, EIndicCodeOther}, + {0xA0F, EIndicCodeIndependentVowel}, + {0xA11, EIndicCodeOther}, + {0xA13, EIndicCodeIndependentVowel}, + {0xA15, EIndicCodeConsonant}, + {0xA29, EIndicCodeOther}, + {0xA2A, EIndicCodeConsonant}, + {0xA31, EIndicCodeOther}, + {0xA32, EIndicCodeConsonant}, + {0xA33, EIndicCodeNuktaConsonant}, + {0xA34, EIndicCodeOther}, + {0xA35, EIndicCodeConsonant}, + {0xA36, EIndicCodeNuktaConsonant}, + {0xA37, EIndicCodeOther}, + {0xA38, EIndicCodeConsonant}, + {0xA3A, EIndicCodeOther}, + {0xA3C, EIndicCodeNukta}, + {0xA3D, EIndicCodeOther}, + {0xA3E, EIndicCodeGurDependentVowelA}, + {0xA3F, EIndicCodeGurDependentVowelI}, + {0xA41, EIndicCodeGurDependentVowelU}, + {0xA43, EIndicCodeOther}, + {0xA47, EIndicCodeGurDependentVowelI}, + {0xA48, EIndicCodeGurDependentVowelA}, + {0xA49, EIndicCodeOther}, + {0xA4B, EIndicCodeGurDependentVowelU}, + {0xA4C, EIndicCodeGurDependentVowelA}, + {0xA4D, EIndicCodeVirama}, + {0xA4E, EIndicCodeOther}, + {0xA59, EIndicCodeNuktaConsonant}, + {0xA5C, EIndicCodeConsonant}, + {0xA5D, EIndicCodeOther}, + {0xA5E, EIndicCodeNuktaConsonant}, + {0xA5F, EIndicCodeOther}, + {0xA70, EIndicCodeCombiningSign}, + {0xA71, EIndicCodeCombiningSign}, + {0xA72, EIndicCodeGurBearerI}, + {0xA73, EIndicCodeGurBearerU}, + {0xA74, EIndicCodeOther}, + {0x200D, EIndicCodeZWJ}, + {0x200E, EIndicCodeOther} + }; + +/** Holds the types of all the symbols in the Bengali range, so that we can +work out where the syllable boundaries begin and end. */ +static const TIndicCodeMapping KBenCodeMap[] = + { + {0, EIndicCodeOther}, + {0x981 , EIndicCodeCombiningSign}, + {0x985 , EIndicCodeIndependentVowel}, + {0x995 , EIndicCodeConsonant}, + {0x9B0 , EIndicCodeConsonantKannadaBengaliRa}, + {0x9B1 , EIndicCodeConsonant}, + {0x9BA , EIndicCodeOther}, + {0x9BC , EIndicCodeNukta}, + {0x9BD , EIndicCodeOther}, + {0x9BE , EIndicCodeDependentVowel}, + {0x9C9 , EIndicCodeOther}, + {0x9CB , EIndicCodeDependentVowel}, + {0x9CD , EIndicCodeVirama}, + {0x9CE , EIndicCodeOther}, + {0x9D7 , EIndicCodeDependentVowel}, + {0x9DC , EIndicCodeConsonant}, + {0x9E0 , EIndicCodeIndependentVowel}, + {0x9E2 , EIndicCodeDependentVowel}, + {0x9E4 , EIndicCodeOther}, + {0x200D, EIndicCodeZWJ}, + {0x200E, EIndicCodeOther} + }; + +/** Holds the types of all the symbols in the Tamil range, so that we can +work out where the syllable boundaries begin and end. */ +static const TIndicCodeMapping KTamCodeMap[] = + { + {0, EIndicCodeOther}, + {0xB82 , EIndicCodeCombiningSign}, + {0xB83 , EIndicCodeIndependentVowel}, + {0xB84 , EIndicCodeOther}, + {0xB85 , EIndicCodeIndependentVowel}, + {0xB92 , EIndicCodeIndependentVowelA}, + {0xB93 , EIndicCodeIndependentVowel}, + {0xB95 , EIndicCodeConsonant}, + {0xBBE , EIndicCodeSplitVowel2}, + {0xBBF , EIndicCodeDependentVowel}, + {0xBC6 , EIndicCodeSplitVowel1}, + {0xBC8 , EIndicCodeDependentVowel}, + {0xBCD , EIndicCodeVirama}, + {0xBCE , EIndicCodeOther}, + {0xBD7 , EIndicCodeTamilLengthMarkAU}, + {0xBE4 , EIndicCodeOther}, + {0x200D, EIndicCodeZWJ}, + {0x200E, EIndicCodeOther} + }; + +/** Holds the types of all the symbols in the Telugu range, so that we can +work out where the syllable boundaries begin and end. */ +static const TIndicCodeMapping KTelCodeMap[] = + { + {0, EIndicCodeOther}, + {0xC01, EIndicCodeCombiningSign}, + {0xC04, EIndicCodeOther}, + {0xC05, EIndicCodeIndependentVowel}, + {0xC15, EIndicCodeConsonant}, + {0xC3A, EIndicCodeOther}, + {0xC3E, EIndicCodeDependentVowel}, + {0xC4D, EIndicCodeVirama}, + {0xC4E, EIndicCodeOther}, + {0xC55, EIndicCodeDependentVowel}, + {0xC57, EIndicCodeOther}, + {0xC60, EIndicCodeIndependentVowel}, + {0xC62, EIndicCodeOther} + }; + +/** Holds the types of all the symbols in the Malayalam range, so that we can +work out where the syllable boundaries begin and end. */ +static const TIndicCodeMapping KMalaCodeMap[] = + { + {0, EIndicCodeOther}, // NOT USED D00 - D01 + {0xD02, EIndicCodeCombiningSign}, // Modifiers + {0xD04, EIndicCodeOther}, // NOT USED + {0xD05, EIndicCodeIndependentVowel}, +// {0xD0D, EIndicCodeOther}, // Reserved +// {0xD0E, EIndicCodeIndependentVowel}, +// {0xD11, EIndicCodeOther}, // Reserved +// {0xD12, EIndicCodeIndependentVowel}, + {0xD15, EIndicCodeConsonant}, + {0xD23, EIndicCodeConsonantMalaChillu}, // NNA + {0xD24, EIndicCodeConsonant}, + {0xD28, EIndicCodeConsonantMalaChilluNA}, // NA + {0xD29, EIndicCodeOther}, // Reserved + {0xD2A, EIndicCodeConsonant}, + {0xD30, EIndicCodeConsonantMalaChillu}, // RA + {0xD31, EIndicCodeConsonantMalaRRA}, // RRA + {0xD32, EIndicCodeConsonantMalaChillu}, // LA, LLA + {0xD34, EIndicCodeConsonant}, + {0xD3A, EIndicCodeOther}, // NOT USED D3A - D3D + {0xD3E, EIndicCodeSplitVowel2}, + {0xD3F, EIndicCodeDependentVowel}, +// {0xD44, EIndicCodeOther}, // Reserved D44 - D45 + {0xD46, EIndicCodeSplitVowel1}, + {0xD48, EIndicCodeDependentVowel}, +// {0xD49, EIndicCodeOther}, // Reserved D49 +// {0xD4A, EIndicCodeDependentVowel}, + {0xD4D, EIndicCodeVirama}, + {0xD4E, EIndicCodeOther}, //Reserved D4E - D56 + {0xD57, EIndicCodeTamilLengthMarkAU}, // EIndicCodeDependentVowel for Telugu ??? + {0xD58, EIndicCodeOther}, // NOT USED D58 - D5F + {0xD60, EIndicCodeIndependentVowel}, // RR, LL + {0xD62, EIndicCodeOther}, // NOT USED D62 - D65, digits D66 - D6F + {0x200D, EIndicCodeZWJ}, + {0x200E, EIndicCodeOther} + }; + +/* Holds all parameters specific to scripts */ +struct TIndicScriptProcessorParameters{ + TUint32 iLanguageCode; + TUint32 iScriptCode; + TUint iUCLow; + TUint iUCHigh; + TUint iMapLen; + const TIndicCodeMapping *iCodeMap; +}; + +static const TIndicScriptProcessorParameters KIndicDevParameters = { + 0x48494E20, //KHindiLanguageCode, + 0x64657661, //KDevanagariScriptCode, + 0x0900, //KDevLow, + 0x0970, //KDevHigh, + sizeof(KDevCodeMap)/sizeof(KDevCodeMap[0]), + KDevCodeMap +}; + +static const TIndicScriptProcessorParameters KIndicKanParameters = { + 0x4B414E20, //KKannadaLanguageCode, + 0x6B6E6461, //KKannadaScriptCode, + 0x0C80, //KKanLow, + 0x0CFF, //KKanHigh, + sizeof(KKanCodeMap)/sizeof(KKanCodeMap[0]), + KKanCodeMap +}; + +static const TIndicScriptProcessorParameters KIndicGujParameters = { + 0x47554A20, //KGujaratiLanguageCode, + 0x67756A72, //KGujaratiScriptCode, + 0x0A80, //KGujLow, + 0x0AFF, //KGujHigh, + sizeof(KGujCodeMap)/sizeof(KGujCodeMap[0]), + KGujCodeMap +}; + +static const TIndicScriptProcessorParameters KIndicBenParameters = { + 0x42454E20, //KBengaliLanguageCode, + 0x62656E67, //KBengaliScriptCode, + 0x0980, //KBenLow, + 0x09FF, //KBenHigh, + sizeof(KBenCodeMap)/sizeof(KBenCodeMap[0]), + KBenCodeMap +}; + +static const TIndicScriptProcessorParameters KIndicTamParameters = { + 0x54414D20, //KTamilLanguageCode, + 0x74616D6C, //KTamilScriptCode, + 0x0B80, //KTamLow, + 0x0BFF, //KTamHigh, + sizeof(KTamCodeMap)/sizeof(KTamCodeMap[0]), + KTamCodeMap +}; + +static const TIndicScriptProcessorParameters KIndicTelParameters = { + 0x54454C20, //KTeluguLanguageCode, + 0x74656C75, //KTeluguScriptCode, + 0x0C00, //KTelLow, + 0x0C7F, //KTelHigh, + sizeof(KTelCodeMap)/sizeof(KTelCodeMap[0]), + KTelCodeMap +}; + +static const TIndicScriptProcessorParameters KIndicGurParameters = { + 0x00000000, //KGurmukhiLanguageCode, + 0x67757275, //KGurmukhiScriptCode, + 0x0A00, //KGurLow, + 0x0A7F, //KGurHigh, + sizeof(KGurCodeMap)/sizeof(KGurCodeMap[0]), + KGurCodeMap +}; + +static const TIndicScriptProcessorParameters KIndicMalParameters = { + 0x4D4C5220, //KMalayalamLanguageCode, + 0x6D6C796D, //KMalayalamScriptCode, + 0x0D00, //KMalaLow, + 0x0D7F, //KMalaHigh, + sizeof(KMalaCodeMap)/sizeof(KMalaCodeMap[0]), + KMalaCodeMap +}; + +/** This is the default glyph selector class for Devanagari characters in the +range 0x0900..0x097F. +@internalComponent +*/ +class GlyphSelector_Devanagari + { +public: + static TBool Process(TGlyphSelectionState& aGss, RShapeInfo&); + }; + + +/** This is the default glyph selector class for Kannada characters in the +range 0x0C80..0x0CFF. +@internalComponent +*/ +class GlyphSelector_Kannada + { +public: + static TBool Process(TGlyphSelectionState& aGss, RShapeInfo&); + }; + + +/** This is the default glyph selector class for Gujarati characters in the +range 0x0A80..0x0AFF. +@internalComponent +*/ +class GlyphSelector_Gujarati + { +public: + static TBool Process(TGlyphSelectionState& aGss, RShapeInfo&); + }; + +/** This is the default glyph selector class for Bengali characters in the +range 0x0980..0x09FF. +@internalComponent +*/ +class GlyphSelector_Bengali + { +public: + static TBool Process(TGlyphSelectionState& aGss, RShapeInfo&); + }; + +/** This is the default glyph selector class for Tamil characters in the +range 0x0B80..0x0BFF. +@internalComponent +*/ +class GlyphSelector_Tamil + { +public: + static TBool Process(TGlyphSelectionState& aGss, RShapeInfo&); + }; + +/** This is the default glyph selector class for Telugu characters in the +range 0x0C00..0x0C7F. +@internalComponent +*/ +class GlyphSelector_Telugu + { +public: + static TBool Process(TGlyphSelectionState& aGss, RShapeInfo&); + }; + +/** This is the default glyph selector class for Gurmukhi characters in the +range 0x0A00..0x0A7F. +@internalComponent +*/ +class GlyphSelector_Gurmukhi + { +public: + static TBool Process(TGlyphSelectionState& aGss, RShapeInfo&); + }; + +/** This is the default glyph selector class for Malayalam characters in the +range 0x0D00..0x0D7F. +@internalComponent +*/ +class GlyphSelector_Malayalam + { +public: + static TBool Process(TGlyphSelectionState& aGss, RShapeInfo&); + }; + +#endif