• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
4  *
5  */
6 
7 #ifndef __MORPHTABLES_H
8 #define __MORPHTABLES_H
9 
10 /**
11  * \file
12  * \internal
13  */
14 
15 #include "LETypes.h"
16 #include "LayoutTables.h"
17 
18 U_NAMESPACE_BEGIN
19 
20 class LEGlyphStorage;
21 
22 typedef le_uint32 FeatureFlags;
23 
24 typedef le_int16 FeatureType;
25 typedef le_int16 FeatureSetting;
26 
27 struct FeatureTableEntry
28 {
29     FeatureType     featureType;
30     FeatureSetting  featureSetting;
31     FeatureFlags    enableFlags;
32     FeatureFlags    disableFlags;
33 };
34 
35 struct ChainHeader
36 {
37     FeatureFlags        defaultFlags;
38     le_uint32           chainLength;
39     le_int16           nFeatureEntries;
40     le_int16           nSubtables;
41     FeatureTableEntry   featureTable[ANY_NUMBER];
42 };
43 
44 struct MorphTableHeader
45 {
46     le_int32    version;
47     le_uint32   nChains;
48     ChainHeader chains[ANY_NUMBER];
49 
50     void process(LEGlyphStorage &glyphStorage) const;
51 };
52 
53 typedef le_int16 SubtableCoverage;
54 
55 enum SubtableCoverageFlags
56 {
57     scfVertical = 0x8000,
58     scfReverse  = 0x4000,
59     scfIgnoreVt = 0x2000,
60     scfReserved = 0x1FF8,
61     scfTypeMask = 0x0007
62 };
63 
64 enum MorphSubtableType
65 {
66     mstIndicRearrangement               = 0,
67     mstContextualGlyphSubstitution      = 1,
68     mstLigatureSubstitution             = 2,
69     mstReservedUnused                   = 3,
70     mstNonContextualGlyphSubstitution   = 4,
71     mstContextualGlyphInsertion         = 5
72 };
73 
74 struct MorphSubtableHeader
75 {
76     le_int16           length;
77     SubtableCoverage    coverage;
78     FeatureFlags        subtableFeatures;
79 
80     void process(LEGlyphStorage &glyphStorage) const;
81 };
82 
83 U_NAMESPACE_END
84 #endif
85 
86