X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/374ca955a76ecab1204ca8bfa63ff9238d998416..ef6cf650f4a75c3f97de06b51fa104f2069b9ea2:/icuSources/layout/OpenTypeLayoutEngine.h diff --git a/icuSources/layout/OpenTypeLayoutEngine.h b/icuSources/layout/OpenTypeLayoutEngine.h index 61cf1317..0f93ccb9 100644 --- a/icuSources/layout/OpenTypeLayoutEngine.h +++ b/icuSources/layout/OpenTypeLayoutEngine.h @@ -1,8 +1,5 @@ - /* - * %W% %E% - * - * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved * */ @@ -13,6 +10,7 @@ #include "LEGlyphFilter.h" #include "LEFontInstance.h" #include "LayoutEngine.h" +#include "LETableReference.h" #include "GlyphSubstitutionTables.h" #include "GlyphDefinitionTables.h" @@ -45,7 +43,7 @@ U_NAMESPACE_BEGIN * * @internal */ -class OpenTypeLayoutEngine : public LayoutEngine +class U_LAYOUT_API OpenTypeLayoutEngine : public LayoutEngine { public: /** @@ -58,6 +56,7 @@ public: * @param scriptCode - the script * @param langaugeCode - the language * @param gsubTable - the GSUB table + * @param success - set to an error code if the operation fails * * @see LayoutEngine::layoutEngineFactory * @see ScriptAndLangaugeTags.h for script and language codes @@ -65,7 +64,7 @@ public: * @internal */ OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, - const GlyphSubstitutionTableHeader *gsubTable); + le_int32 typoFlags, const LEReferenceTo &gsubTable, LEErrorCode &success); /** * This constructor is used when the font requires a "canned" GSUB table which can't be known @@ -74,10 +73,12 @@ public: * @param fontInstance - the font * @param scriptCode - the script * @param langaugeCode - the language + * @param success - set to an error code if the operation fails * * @internal */ - OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode); + OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, + le_int32 typoFlags, LEErrorCode &success); /** * The destructor, virtual for correct polymorphic invocation. @@ -89,6 +90,8 @@ public: /** * A convenience method used to convert the script code into * the four byte script tag required by OpenType. + * For Indic languages where multiple script tags exist, + * the version 1 (old style) tag is returned. * * @param scriptCode - the script code * @@ -97,6 +100,19 @@ public: * @internal */ static LETag getScriptTag(le_int32 scriptCode); + /** + * A convenience method used to convert the script code into + * the four byte script tag required by OpenType. + * For Indic languages where multiple script tags exist, + * the version 2 tag is returned. + * + * @param scriptCode - the script code + * + * @return the four byte script tag + * + * @internal + */ + static LETag getV2ScriptTag(le_int32 scriptCode); /** * A convenience method used to convert the langauge code into @@ -113,17 +129,24 @@ public: /** * ICU "poor man's RTTI", returns a UClassID for the actual class. * - * @stable ICU 2.8 + * @deprecated ICU 54. See {@link icu::LayoutEngine} */ virtual UClassID getDynamicClassID() const; /** * ICU "poor man's RTTI", returns a UClassID for this class. * - * @stable ICU 2.8 + * @deprecated ICU 54. See {@link icu::LayoutEngine} */ static UClassID getStaticClassID(); + /** + * The array of language tags, indexed by language code. + * + * @internal + */ + static const LETag languageTags[]; + private: /** @@ -138,49 +161,65 @@ private: static const LETag scriptTags[]; /** - * The array of language tags, indexed by language code. + * apply the typoflags. Only called by the c'tors. */ - static const LETag languageTags[]; + void applyTypoFlags(); protected: /** - * A list of "default" features. The default characterProcessing method - * will apply all of these tags to every glyph. + * A set of "default" features. The default characterProcessing method + * will apply all of these features to every glyph. + * + * @internal + */ + FeatureMask fFeatureMask; + + /** + * A set of mappings from feature tags to feature masks. These may + * be in the order in which the featues should be applied, but they + * don't need to be. * * @internal */ - const LETag *fFeatureList; + const FeatureMap *fFeatureMap; /** - * A list of tags in the order in which the features in - * the font should be applied, as opposed to using the - * order of the lookups in the font. + * The length of the feature map. * * @internal */ - const LETag *fFeatureOrder; + le_int32 fFeatureMapCount; + + /** + * TRUE if the features in the + * feature map are in the order in which they + * must be applied. + * + * @internal + */ + le_bool fFeatureOrder; /** * The address of the GSUB table. * * @internal */ - const GlyphSubstitutionTableHeader *fGSUBTable; + LEReferenceTo fGSUBTable; /** * The address of the GDEF table. * * @internal */ - const GlyphDefinitionTableHeader *fGDEFTable; + LEReferenceTo fGDEFTable; /** * The address of the GPOS table. * * @internal */ - const GlyphPositioningTableHeader *fGPOSTable; - + LEReferenceTo fGPOSTable; + /** * An optional filter used to inhibit substitutions * preformed by the GSUB table. This is used for some @@ -197,6 +236,13 @@ protected: * @internal */ LETag fScriptTag; + + /** + * The four byte script tag for V2 fonts. + * + * @internal + */ + LETag fScriptTagV2; /** * The four byte language tag @@ -264,6 +310,8 @@ protected: */ virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success); + + virtual le_int32 glyphSubstitution(le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success); /** * This method does any processing necessary to convert "fake"