1 /* Registered OpenType layout tags, see
2  * https://www.microsoft.com/typography/otspec/featuretags.htm
3  */
4 
5 typedef struct {
6   unsigned int tag;
7   const char *name;
8 } NamedTag;
9 
10 #define MAKE_TAG(a,b,c,d) (unsigned int)(((a) << 24) | ((b) << 16) | ((c) <<  8) | (d))
11 
12 static NamedTag open_type_layout_features[] = {
13   { MAKE_TAG('a','a','l','t'), NC_("OpenType layout", "Access All Alternates") },
14   { MAKE_TAG('a','b','v','f'), NC_("OpenType layout", "Above-base Forms") },
15   { MAKE_TAG('a','b','v','m'), NC_("OpenType layout", "Above-base Mark Positioning") },
16   { MAKE_TAG('a','b','v','s'), NC_("OpenType layout", "Above-base Substitutions") },
17   { MAKE_TAG('a','f','r','c'), NC_("OpenType layout", "Alternative Fractions") },
18   { MAKE_TAG('a','k','h','n'), NC_("OpenType layout", "Akhands") },
19   { MAKE_TAG('b','l','w','f'), NC_("OpenType layout", "Below-base Forms") },
20   { MAKE_TAG('b','l','w','m'), NC_("OpenType layout", "Below-base Mark Positioning") },
21   { MAKE_TAG('b','l','w','s'), NC_("OpenType layout", "Below-base Substitutions") },
22   { MAKE_TAG('c','a','l','t'), NC_("OpenType layout", "Contextual Alternates") },
23   { MAKE_TAG('c','a','s','e'), NC_("OpenType layout", "Case-Sensitive Forms") },
24   { MAKE_TAG('c','c','m','p'), NC_("OpenType layout", "Glyph Composition / Decomposition") },
25   { MAKE_TAG('c','f','a','r'), NC_("OpenType layout", "Conjunct Form After Ro") },
26   { MAKE_TAG('c','j','c','t'), NC_("OpenType layout", "Conjunct Forms") },
27   { MAKE_TAG('c','l','i','g'), NC_("OpenType layout", "Contextual Ligatures") },
28   { MAKE_TAG('c','p','c','t'), NC_("OpenType layout", "Centered CJK Punctuation") },
29   { MAKE_TAG('c','p','s','p'), NC_("OpenType layout", "Capital Spacing") },
30   { MAKE_TAG('c','s','w','h'), NC_("OpenType layout", "Contextual Swash") },
31   { MAKE_TAG('c','u','r','s'), NC_("OpenType layout", "Cursive Positioning") },
32   { MAKE_TAG('c','2','p','c'), NC_("OpenType layout", "Petite Capitals From Capitals") },
33   { MAKE_TAG('c','2','s','c'), NC_("OpenType layout", "Small Capitals From Capitals") },
34   { MAKE_TAG('d','i','s','t'), NC_("OpenType layout", "Distances") },
35   { MAKE_TAG('d','l','i','g'), NC_("OpenType layout", "Discretionary Ligatures") },
36   { MAKE_TAG('d','n','o','m'), NC_("OpenType layout", "Denominators") },
37   { MAKE_TAG('d','t','l','s'), NC_("OpenType layout", "Dotless Forms") },
38   { MAKE_TAG('e','x','p','t'), NC_("OpenType layout", "Expert Forms") },
39   { MAKE_TAG('f','a','l','t'), NC_("OpenType layout", "Final Glyph on Line Alternates") },
40   { MAKE_TAG('f','i','n','2'), NC_("OpenType layout", "Terminal Forms #2") },
41   { MAKE_TAG('f','i','n','3'), NC_("OpenType layout", "Terminal Forms #3") },
42   { MAKE_TAG('f','i','n','a'), NC_("OpenType layout", "Terminal Forms") },
43   { MAKE_TAG('f','l','a','c'), NC_("OpenType layout", "Flattened accent forms") },
44   { MAKE_TAG('f','r','a','c'), NC_("OpenType layout", "Fractions") },
45   { MAKE_TAG('f','w','i','d'), NC_("OpenType layout", "Full Widths") },
46   { MAKE_TAG('h','a','l','f'), NC_("OpenType layout", "Half Forms") },
47   { MAKE_TAG('h','a','l','n'), NC_("OpenType layout", "Halant Forms") },
48   { MAKE_TAG('h','a','l','t'), NC_("OpenType layout", "Alternate Half Widths") },
49   { MAKE_TAG('h','i','s','t'), NC_("OpenType layout", "Historical Forms") },
50   { MAKE_TAG('h','k','n','a'), NC_("OpenType layout", "Horizontal Kana Alternates") },
51   { MAKE_TAG('h','l','i','g'), NC_("OpenType layout", "Historical Ligatures") },
52   { MAKE_TAG('h','n','g','l'), NC_("OpenType layout", "Hangul") },
53   { MAKE_TAG('h','o','j','o'), NC_("OpenType layout", "Hojo Kanji Forms") },
54   { MAKE_TAG('h','w','i','d'), NC_("OpenType layout", "Half Widths") },
55   { MAKE_TAG('i','n','i','t'), NC_("OpenType layout", "Initial Forms") },
56   { MAKE_TAG('i','s','o','l'), NC_("OpenType layout", "Isolated Forms") },
57   { MAKE_TAG('i','t','a','l'), NC_("OpenType layout", "Italics") },
58   { MAKE_TAG('j','a','l','t'), NC_("OpenType layout", "Justification Alternates") },
59   { MAKE_TAG('j','p','7','8'), NC_("OpenType layout", "JIS78 Forms") },
60   { MAKE_TAG('j','p','8','3'), NC_("OpenType layout", "JIS83 Forms") },
61   { MAKE_TAG('j','p','9','0'), NC_("OpenType layout", "JIS90 Forms") },
62   { MAKE_TAG('j','p','0','4'), NC_("OpenType layout", "JIS2004 Forms") },
63   { MAKE_TAG('k','e','r','n'), NC_("OpenType layout", "Kerning") },
64   { MAKE_TAG('l','f','b','d'), NC_("OpenType layout", "Left Bounds") },
65   { MAKE_TAG('l','i','g','a'), NC_("OpenType layout", "Standard Ligatures") },
66   { MAKE_TAG('l','j','m','o'), NC_("OpenType layout", "Leading Jamo Forms") },
67   { MAKE_TAG('l','n','u','m'), NC_("OpenType layout", "Lining Figures") },
68   { MAKE_TAG('l','o','c','l'), NC_("OpenType layout", "Localized Forms") },
69   { MAKE_TAG('l','t','r','a'), NC_("OpenType layout", "Left-to-right alternates") },
70   { MAKE_TAG('l','t','r','m'), NC_("OpenType layout", "Left-to-right mirrored forms") },
71   { MAKE_TAG('m','a','r','k'), NC_("OpenType layout", "Mark Positioning") },
72   { MAKE_TAG('m','e','d','2'), NC_("OpenType layout", "Medial Forms #2") },
73   { MAKE_TAG('m','e','d','i'), NC_("OpenType layout", "Medial Forms") },
74   { MAKE_TAG('m','g','r','k'), NC_("OpenType layout", "Mathematical Greek") },
75   { MAKE_TAG('m','k','m','k'), NC_("OpenType layout", "Mark to Mark Positioning") },
76   { MAKE_TAG('m','s','e','t'), NC_("OpenType layout", "Mark Positioning via Substitution") },
77   { MAKE_TAG('n','a','l','t'), NC_("OpenType layout", "Alternate Annotation Forms") },
78   { MAKE_TAG('n','l','c','k'), NC_("OpenType layout", "NLC Kanji Forms") },
79   { MAKE_TAG('n','u','k','t'), NC_("OpenType layout", "Nukta Forms") },
80   { MAKE_TAG('n','u','m','r'), NC_("OpenType layout", "Numerators") },
81   { MAKE_TAG('o','n','u','m'), NC_("OpenType layout", "Oldstyle Figures") },
82   { MAKE_TAG('o','p','b','d'), NC_("OpenType layout", "Optical Bounds") },
83   { MAKE_TAG('o','r','d','n'), NC_("OpenType layout", "Ordinals") },
84   { MAKE_TAG('o','r','n','m'), NC_("OpenType layout", "Ornaments") },
85   { MAKE_TAG('p','a','l','t'), NC_("OpenType layout", "Proportional Alternate Widths") },
86   { MAKE_TAG('p','c','a','p'), NC_("OpenType layout", "Petite Capitals") },
87   { MAKE_TAG('p','k','n','a'), NC_("OpenType layout", "Proportional Kana") },
88   { MAKE_TAG('p','n','u','m'), NC_("OpenType layout", "Proportional Figures") },
89   { MAKE_TAG('p','r','e','f'), NC_("OpenType layout", "Pre-Base Forms") },
90   { MAKE_TAG('p','r','e','s'), NC_("OpenType layout", "Pre-base Substitutions") },
91   { MAKE_TAG('p','s','t','f'), NC_("OpenType layout", "Post-base Forms") },
92   { MAKE_TAG('p','s','t','s'), NC_("OpenType layout", "Post-base Substitutions") },
93   { MAKE_TAG('p','w','i','d'), NC_("OpenType layout", "Proportional Widths") },
94   { MAKE_TAG('q','w','i','d'), NC_("OpenType layout", "Quarter Widths") },
95   { MAKE_TAG('r','a','n','d'), NC_("OpenType layout", "Randomize") },
96   { MAKE_TAG('r','c','l','t'), NC_("OpenType layout", "Required Contextual Alternates") },
97   { MAKE_TAG('r','k','r','f'), NC_("OpenType layout", "Rakar Forms") },
98   { MAKE_TAG('r','l','i','g'), NC_("OpenType layout", "Required Ligatures") },
99   { MAKE_TAG('r','p','h','f'), NC_("OpenType layout", "Reph Forms") },
100   { MAKE_TAG('r','t','b','d'), NC_("OpenType layout", "Right Bounds") },
101   { MAKE_TAG('r','t','l','a'), NC_("OpenType layout", "Right-to-left alternates") },
102   { MAKE_TAG('r','t','l','m'), NC_("OpenType layout", "Right-to-left mirrored forms") },
103   { MAKE_TAG('r','u','b','y'), NC_("OpenType layout", "Ruby Notation Forms") },
104   { MAKE_TAG('r','v','r','n'), NC_("OpenType layout", "Required Variation Alternates") },
105   { MAKE_TAG('s','a','l','t'), NC_("OpenType layout", "Stylistic Alternates") },
106   { MAKE_TAG('s','i','n','f'), NC_("OpenType layout", "Scientific Inferiors") },
107   { MAKE_TAG('s','i','z','e'), NC_("OpenType layout", "Optical size") },
108   { MAKE_TAG('s','m','c','p'), NC_("OpenType layout", "Small Capitals") },
109   { MAKE_TAG('s','m','p','l'), NC_("OpenType layout", "Simplified Forms") },
110   { MAKE_TAG('s','s','0','1'), NC_("OpenType layout", "Stylistic Set 1") },
111   { MAKE_TAG('s','s','0','2'), NC_("OpenType layout", "Stylistic Set 2") },
112   { MAKE_TAG('s','s','0','3'), NC_("OpenType layout", "Stylistic Set 3") },
113   { MAKE_TAG('s','s','0','4'), NC_("OpenType layout", "Stylistic Set 4") },
114   { MAKE_TAG('s','s','0','5'), NC_("OpenType layout", "Stylistic Set 5") },
115   { MAKE_TAG('s','s','0','6'), NC_("OpenType layout", "Stylistic Set 6") },
116   { MAKE_TAG('s','s','0','7'), NC_("OpenType layout", "Stylistic Set 7") },
117   { MAKE_TAG('s','s','0','8'), NC_("OpenType layout", "Stylistic Set 8") },
118   { MAKE_TAG('s','s','0','9'), NC_("OpenType layout", "Stylistic Set 9") },
119   { MAKE_TAG('s','s','1','0'), NC_("OpenType layout", "Stylistic Set 10") },
120   { MAKE_TAG('s','s','1','1'), NC_("OpenType layout", "Stylistic Set 11") },
121   { MAKE_TAG('s','s','1','2'), NC_("OpenType layout", "Stylistic Set 12") },
122   { MAKE_TAG('s','s','1','3'), NC_("OpenType layout", "Stylistic Set 13") },
123   { MAKE_TAG('s','s','1','4'), NC_("OpenType layout", "Stylistic Set 14") },
124   { MAKE_TAG('s','s','1','5'), NC_("OpenType layout", "Stylistic Set 15") },
125   { MAKE_TAG('s','s','1','6'), NC_("OpenType layout", "Stylistic Set 16") },
126   { MAKE_TAG('s','s','1','7'), NC_("OpenType layout", "Stylistic Set 17") },
127   { MAKE_TAG('s','s','1','8'), NC_("OpenType layout", "Stylistic Set 18") },
128   { MAKE_TAG('s','s','1','9'), NC_("OpenType layout", "Stylistic Set 19") },
129   { MAKE_TAG('s','s','2','0'), NC_("OpenType layout", "Stylistic Set 20") },
130   { MAKE_TAG('s','s','t','y'), NC_("OpenType layout", "Math script style alternates") },
131   { MAKE_TAG('s','t','c','h'), NC_("OpenType layout", "Stretching Glyph Decomposition") },
132   { MAKE_TAG('s','u','b','s'), NC_("OpenType layout", "Subscript") },
133   { MAKE_TAG('s','u','p','s'), NC_("OpenType layout", "Superscript") },
134   { MAKE_TAG('s','w','s','h'), NC_("OpenType layout", "Swash") },
135   { MAKE_TAG('t','i','t','l'), NC_("OpenType layout", "Titling") },
136   { MAKE_TAG('t','j','m','o'), NC_("OpenType layout", "Trailing Jamo Forms") },
137   { MAKE_TAG('t','n','a','m'), NC_("OpenType layout", "Traditional Name Forms") },
138   { MAKE_TAG('t','n','u','m'), NC_("OpenType layout", "Tabular Figures") },
139   { MAKE_TAG('t','r','a','d'), NC_("OpenType layout", "Traditional Forms") },
140   { MAKE_TAG('t','w','i','d'), NC_("OpenType layout", "Third Widths") },
141   { MAKE_TAG('u','n','i','c'), NC_("OpenType layout", "Unicase") },
142   { MAKE_TAG('v','a','l','t'), NC_("OpenType layout", "Alternate Vertical Metrics") },
143   { MAKE_TAG('v','a','t','u'), NC_("OpenType layout", "Vattu Variants") },
144   { MAKE_TAG('v','e','r','t'), NC_("OpenType layout", "Vertical Writing") },
145   { MAKE_TAG('v','h','a','l'), NC_("OpenType layout", "Alternate Vertical Half Metrics") },
146   { MAKE_TAG('v','j','m','o'), NC_("OpenType layout", "Vowel Jamo Forms") },
147   { MAKE_TAG('v','k','n','a'), NC_("OpenType layout", "Vertical Kana Alternates") },
148   { MAKE_TAG('v','k','r','n'), NC_("OpenType layout", "Vertical Kerning") },
149   { MAKE_TAG('v','p','a','l'), NC_("OpenType layout", "Proportional Alternate Vertical Metrics") },
150   { MAKE_TAG('v','r','t','2'), NC_("OpenType layout", "Vertical Alternates and Rotation") },
151   { MAKE_TAG('v','r','t','r'), NC_("OpenType layout", "Vertical Alternates for Rotation") },
152   { MAKE_TAG('z','e','r','o'), NC_("OpenType layout", "Slashed Zero") },
153 };
154 
155 #undef MAKE_TAG
156