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