src/java.desktop/share/native/libfontmanager/layout/MorphTables.h
changeset 47386 a26c8a7739f0
parent 47385 8d56044a9850
child 47387 4d711a58bb3b
equal deleted inserted replaced
47385:8d56044a9850 47386:a26c8a7739f0
     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  * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
       
    29  *
       
    30  */
       
    31 
       
    32 #ifndef __MORPHTABLES_H
       
    33 #define __MORPHTABLES_H
       
    34 
       
    35 /**
       
    36  * \file
       
    37  * \internal
       
    38  */
       
    39 
       
    40 #include "LETypes.h"
       
    41 #include "LayoutTables.h"
       
    42 #include "LETableReference.h"
       
    43 
       
    44 U_NAMESPACE_BEGIN
       
    45 
       
    46 class LEGlyphStorage;
       
    47 
       
    48 typedef le_uint32 FeatureFlags;
       
    49 
       
    50 typedef le_int16 FeatureType;
       
    51 typedef le_int16 FeatureSetting;
       
    52 
       
    53 struct FeatureTableEntry
       
    54 {
       
    55     FeatureType     featureType;
       
    56     FeatureSetting  featureSetting;
       
    57     FeatureFlags    enableFlags;
       
    58     FeatureFlags    disableFlags;
       
    59 };
       
    60 
       
    61 struct ChainHeader
       
    62 {
       
    63     FeatureFlags        defaultFlags;
       
    64     le_uint32           chainLength;
       
    65     le_int16           nFeatureEntries;
       
    66     le_int16           nSubtables;
       
    67     FeatureTableEntry   featureTable[ANY_NUMBER];
       
    68 };
       
    69 LE_VAR_ARRAY(ChainHeader, featureTable)
       
    70 
       
    71 struct MorphTableHeader
       
    72 {
       
    73     le_int32    version;
       
    74     le_uint32   nChains;
       
    75     ChainHeader chains[ANY_NUMBER];
       
    76 
       
    77   void process(const LETableReference& base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const;
       
    78 };
       
    79 LE_VAR_ARRAY(MorphTableHeader, chains)
       
    80 
       
    81 typedef le_int16 SubtableCoverage;
       
    82 typedef le_uint32 SubtableCoverage2;
       
    83 
       
    84 enum SubtableCoverageFlags
       
    85 {
       
    86     scfVertical = 0x8000,
       
    87     scfReverse  = 0x4000,
       
    88     scfIgnoreVt = 0x2000,
       
    89     scfReserved = 0x1FF8,
       
    90     scfTypeMask = 0x0007
       
    91 };
       
    92 
       
    93 enum MorphSubtableType
       
    94 {
       
    95     mstIndicRearrangement               = 0,
       
    96     mstContextualGlyphSubstitution      = 1,
       
    97     mstLigatureSubstitution             = 2,
       
    98     mstReservedUnused                   = 3,
       
    99     mstNonContextualGlyphSubstitution   = 4,
       
   100     mstContextualGlyphInsertion         = 5
       
   101 };
       
   102 
       
   103 struct MorphSubtableHeader
       
   104 {
       
   105     le_int16           length;
       
   106     SubtableCoverage    coverage;
       
   107     FeatureFlags        subtableFeatures;
       
   108 
       
   109   void process(const LEReferenceTo<MorphSubtableHeader> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const;
       
   110 };
       
   111 
       
   112 enum SubtableCoverageFlags2
       
   113 {
       
   114     scfVertical2 = 0x80000000,
       
   115     scfReverse2  = 0x40000000,
       
   116     scfIgnoreVt2 = 0x20000000,
       
   117     scfReserved2 = 0x1FFFFF00,
       
   118     scfTypeMask2 = 0x000000FF
       
   119 };
       
   120 
       
   121 struct MorphSubtableHeader2
       
   122 {
       
   123     le_uint32           length;
       
   124     SubtableCoverage2    coverage;
       
   125     FeatureFlags        subtableFeatures;
       
   126 
       
   127     void process(const LEReferenceTo<MorphSubtableHeader2> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const;
       
   128 };
       
   129 
       
   130 struct ChainHeader2
       
   131 {
       
   132     FeatureFlags        defaultFlags;
       
   133     le_uint32           chainLength;
       
   134     le_uint32           nFeatureEntries;
       
   135     le_uint32           nSubtables;
       
   136     FeatureTableEntry   featureTable[ANY_NUMBER];
       
   137 };
       
   138 LE_VAR_ARRAY(ChainHeader2, featureTable)
       
   139 
       
   140 struct MorphTableHeader2
       
   141 {
       
   142     le_int32    version;
       
   143     le_uint32   nChains;
       
   144     ChainHeader2 chains[ANY_NUMBER];
       
   145 
       
   146     void process(const LEReferenceTo<MorphTableHeader2> &base, LEGlyphStorage &glyphStorage, le_int32 typoFlags, LEErrorCode &success) const;
       
   147 };
       
   148 LE_VAR_ARRAY(MorphTableHeader2, chains)
       
   149 
       
   150 /*
       
   151  * AAT Font Features
       
   152  * source: https://developer.apple.com/fonts/registry/
       
   153  * (plus addition from ATS/SFNTLayoutTypes.h)
       
   154  */
       
   155 
       
   156 enum {
       
   157 
       
   158    allTypographicFeaturesType = 0,
       
   159 
       
   160       allTypeFeaturesOnSelector            = 0,
       
   161       allTypeFeaturesOffSelector           = 1,
       
   162 
       
   163    ligaturesType = 1,
       
   164 
       
   165       requiredLigaturesOnSelector          = 0,
       
   166       requiredLigaturesOffSelector         = 1,
       
   167       commonLigaturesOnSelector            = 2,
       
   168       commonLigaturesOffSelector           = 3,
       
   169       rareLigaturesOnSelector              = 4,
       
   170       rareLigaturesOffSelector             = 5,
       
   171       logosOnSelector                      = 6,
       
   172       logosOffSelector                     = 7,
       
   173       rebusPicturesOnSelector              = 8,
       
   174       rebusPicturesOffSelector             = 9,
       
   175       diphthongLigaturesOnSelector         = 10,
       
   176       diphthongLigaturesOffSelector        = 11,
       
   177       squaredLigaturesOnSelector           = 12,
       
   178       squaredLigaturesOffSelector          = 13,
       
   179       abbrevSquaredLigaturesOnSelector     = 14,
       
   180       abbrevSquaredLigaturesOffSelector    = 15,
       
   181       symbolLigaturesOnSelector            = 16,
       
   182       symbolLigaturesOffSelector           = 17,
       
   183       contextualLigaturesOnSelector        = 18,
       
   184       contextualLigaturesOffSelector       = 19,
       
   185       historicalLigaturesOnSelector        = 20,
       
   186       historicalLigaturesOffSelector       = 21,
       
   187 
       
   188    cursiveConnectionType = 2,
       
   189 
       
   190       unconnectedSelector                  = 0,
       
   191       partiallyConnectedSelector           = 1,
       
   192       cursiveSelector                      = 2,
       
   193 
       
   194    letterCaseType = 3,
       
   195 
       
   196       upperAndLowerCaseSelector            = 0,
       
   197       allCapsSelector                      = 1,
       
   198       allLowerCaseSelector                 = 2,
       
   199       smallCapsSelector                    = 3,
       
   200       initialCapsSelector                  = 4,
       
   201       initialCapsAndSmallCapsSelector      = 5,
       
   202 
       
   203    verticalSubstitutionType = 4,
       
   204 
       
   205       substituteVerticalFormsOnSelector    = 0,
       
   206       substituteVerticalFormsOffSelector   = 1,
       
   207 
       
   208    linguisticRearrangementType = 5,
       
   209 
       
   210       linguisticRearrangementOnSelector    = 0,
       
   211       linguisticRearrangementOffSelector   = 1,
       
   212 
       
   213    numberSpacingType = 6,
       
   214 
       
   215       monospacedNumbersSelector            = 0,
       
   216       proportionalNumbersSelector          = 1,
       
   217 
       
   218    /*
       
   219    appleReserved1Type = 7,
       
   220    */
       
   221 
       
   222    smartSwashType = 8,
       
   223 
       
   224       wordInitialSwashesOnSelector         = 0,
       
   225       wordInitialSwashesOffSelector        = 1,
       
   226       wordFinalSwashesOnSelector           = 2,
       
   227       wordFinalSwashesOffSelector          = 3,
       
   228       lineInitialSwashesOnSelector         = 4,
       
   229       lineInitialSwashesOffSelector        = 5,
       
   230       lineFinalSwashesOnSelector           = 6,
       
   231       lineFinalSwashesOffSelector          = 7,
       
   232       nonFinalSwashesOnSelector            = 8,
       
   233       nonFinalSwashesOffSelector           = 9,
       
   234 
       
   235    diacriticsType = 9,
       
   236 
       
   237       showDiacriticsSelector               = 0,
       
   238       hideDiacriticsSelector               = 1,
       
   239       decomposeDiacriticsSelector          = 2,
       
   240 
       
   241    verticalPositionType = 10,
       
   242 
       
   243       normalPositionSelector               = 0,
       
   244       superiorsSelector                    = 1,
       
   245       inferiorsSelector                    = 2,
       
   246       ordinalsSelector                     = 3,
       
   247 
       
   248    fractionsType = 11,
       
   249 
       
   250       noFractionsSelector                  = 0,
       
   251       verticalFractionsSelector            = 1,
       
   252       diagonalFractionsSelector            = 2,
       
   253 
       
   254    /*
       
   255    appleReserved2Type = 12,
       
   256    */
       
   257 
       
   258    overlappingCharactersType = 13,
       
   259 
       
   260       preventOverlapOnSelector             = 0,
       
   261       preventOverlapOffSelector            = 1,
       
   262 
       
   263    typographicExtrasType = 14,
       
   264 
       
   265       hyphensToEmDashOnSelector            = 0,
       
   266       hyphensToEmDashOffSelector           = 1,
       
   267       hyphenToEnDashOnSelector             = 2,
       
   268       hyphenToEnDashOffSelector            = 3,
       
   269       unslashedZeroOnSelector              = 4,
       
   270       slashedZeroOffSelector               = 4,
       
   271       unslashedZeroOffSelector             = 5,
       
   272       slashedZeroOnSelector                = 5,
       
   273       formInterrobangOnSelector            = 6,
       
   274       formInterrobangOffSelector           = 7,
       
   275       smartQuotesOnSelector                = 8,
       
   276       smartQuotesOffSelector               = 9,
       
   277       periodsToEllipsisOnSelector          = 10,
       
   278       periodsToEllipsisOffSelector         = 11,
       
   279 
       
   280    mathematicalExtrasType = 15,
       
   281 
       
   282       hyphenToMinusOnSelector              = 0,
       
   283       hyphenToMinusOffSelector             = 1,
       
   284       asteriskToMultiplyOnSelector         = 2,
       
   285       asteriskToMultiplyOffSelector        = 3,
       
   286       slashToDivideOnSelector              = 4,
       
   287       slashToDivideOffSelector             = 5,
       
   288       inequalityLigaturesOnSelector        = 6,
       
   289       inequalityLigaturesOffSelector       = 7,
       
   290       exponentsOnSelector                  = 8,
       
   291       exponentsOffSelector                 = 9,
       
   292 
       
   293    ornamentSetsType = 16,
       
   294 
       
   295       noOrnamentsSelector                  = 0,
       
   296       dingbatsSelector                     = 1,
       
   297       piCharactersSelector                 = 2,
       
   298       fleuronsSelector                     = 3,
       
   299       decorativeBordersSelector            = 4,
       
   300       internationalSymbolsSelector         = 5,
       
   301       mathSymbolsSelector                  = 6,
       
   302 
       
   303    characterAlternativesType = 17,
       
   304 
       
   305       noAlternatesSelector                 = 0,
       
   306 
       
   307    designComplexityType = 18,
       
   308 
       
   309       designLevel1Selector                 = 0,
       
   310       designLevel2Selector                 = 1,
       
   311       designLevel3Selector                 = 2,
       
   312       designLevel4Selector                 = 3,
       
   313       designLevel5Selector                 = 4,
       
   314       designLevel6Selector                 = 5,
       
   315       designLevel7Selector                 = 6,
       
   316 
       
   317    styleOptionsType = 19,
       
   318 
       
   319       noStyleOptionsSelector               = 0,
       
   320       displayTextSelector                  = 1,
       
   321       engravedTextSelector                 = 2,
       
   322       illuminatedCapsSelector              = 3,
       
   323       titlingCapsSelector                  = 4,
       
   324       tallCapsSelector                     = 5,
       
   325 
       
   326    characterShapeType = 20,
       
   327 
       
   328       traditionalCharactersSelector        = 0,
       
   329       simplifiedCharactersSelector         = 1,
       
   330       jis1978CharactersSelector            = 2,
       
   331       jis1983CharactersSelector            = 3,
       
   332       jis1990CharactersSelector            = 4,
       
   333       traditionalAltOneSelector            = 5,
       
   334       traditionalAltTwoSelector            = 6,
       
   335       traditionalAltThreeSelector          = 7,
       
   336       traditionalAltFourSelector           = 8,
       
   337       traditionalAltFiveSelector           = 9,
       
   338       expertCharactersSelector             = 10,
       
   339 
       
   340    numberCaseType = 21,
       
   341 
       
   342       lowerCaseNumbersSelector             = 0,
       
   343       upperCaseNumbersSelector             = 1,
       
   344 
       
   345    textSpacingType = 22,
       
   346 
       
   347       proportionalTextSelector             = 0,
       
   348       monospacedTextSelector               = 1,
       
   349       halfWidthTextSelector                = 2,
       
   350       normallySpacedTextSelector           = 3,
       
   351 
       
   352    transliterationType = 23,
       
   353 
       
   354       noTransliterationSelector            = 0,
       
   355       hanjaToHangulSelector                = 1,
       
   356       hiraganaToKatakanaSelector           = 2,
       
   357       katakanaToHiraganaSelector           = 3,
       
   358       kanaToRomanizationSelector           = 4,
       
   359       romanizationToHiraganaSelector       = 5,
       
   360       romanizationToKatakanaSelector       = 6,
       
   361       hanjaToHangulAltOneSelector          = 7,
       
   362       hanjaToHangulAltTwoSelector          = 8,
       
   363       hanjaToHangulAltThreeSelector        = 9,
       
   364 
       
   365    annotationType = 24,
       
   366 
       
   367       noAnnotationSelector                 = 0,
       
   368       boxAnnotationSelector                = 1,
       
   369       roundedBoxAnnotationSelector         = 2,
       
   370       circleAnnotationSelector             = 3,
       
   371       invertedCircleAnnotationSelector     = 4,
       
   372       parenthesisAnnotationSelector        = 5,
       
   373       periodAnnotationSelector             = 6,
       
   374       romanNumeralAnnotationSelector       = 7,
       
   375       diamondAnnotationSelector            = 8,
       
   376 
       
   377    kanaSpacingType = 25,
       
   378 
       
   379       fullWidthKanaSelector                = 0,
       
   380       proportionalKanaSelector             = 1,
       
   381 
       
   382    ideographicSpacingType = 26,
       
   383 
       
   384       fullWidthIdeographsSelector          = 0,
       
   385       proportionalIdeographsSelector       = 1,
       
   386 
       
   387    cjkRomanSpacingType = 103,
       
   388 
       
   389       halfWidthCJKRomanSelector            = 0,
       
   390       proportionalCJKRomanSelector         = 1,
       
   391       defaultCJKRomanSelector              = 2,
       
   392       fullWidthCJKRomanSelector            = 3,
       
   393 
       
   394    rubyKanaType = 28,
       
   395 
       
   396       rubyKanaOnSelector                = 2,
       
   397       rubyKanaOffSelector               = 3,
       
   398 
       
   399 /* The following types are provided for compatibility; note that
       
   400    their use is deprecated. */
       
   401 
       
   402    adobeCharacterSpacingType = 100,        /* prefer 22 */
       
   403    adobeKanaSpacingType = 101,             /* prefer 25 */
       
   404    adobeKanjiSpacingType = 102,            /* prefer 26 */
       
   405    adobeSquareLigatures = 104,             /* prefer 1 */
       
   406 
       
   407    lastFeatureType = -1
       
   408 };
       
   409 
       
   410 U_NAMESPACE_END
       
   411 #endif
       
   412