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 | |