ALTSET(c, ALT3(a, b, c)))
#define CV2(base, a) CROSSALT2(base, base a)
#define CV3(base, a, b) CROSSALT3(base, base a, base b)
- { "cv12", SCRIPT_ALL, .xml = CV2("comma", ".left") },
- { "cv14", SCRIPT_ALL, .xml = CV2("period", ".large") },
- { "cv26", SCRIPT_ALL, .xml = CV2("colon", ".leftsmall") },
- { "cv27", SCRIPT_ALL, .xml = CV2("semicolon", ".left") },
- { "cv31", SCRIPT_ALL, .xml = CV2("question", ".open") },
- { "cv38", SCRIPT_ALL, .xml = CV3("D", ".serif", ".narrow") },
- { "cv42", SCRIPT_ALL, .xml = CV2("J", ".narrow") },
- { "cv44", SCRIPT_ALL, .xml = CV2("L", ".narrow") },
- { "cv61", SCRIPT_ALL, .xml = CV2("ugrave",".roundjoined") },
- { "cv74", SCRIPT_ALL, .xml = CV2("j", ".serif") },
- { "cv84", SCRIPT_ALL, .xml = CV2("t", ".small") },
- { "cv92", SCRIPT_ALL, .xml = CV2("ocircumflex", ".large") },
- { "cv94", SCRIPT_ALL, .xml = CV2("ccedilla", ".angular") },
+ { "cv12", SCRIPT_ALL, .name = "comma variants",
+ .xml = CV2("comma", ".left") },
+ { "cv14", SCRIPT_ALL, .name = "full-stop variants",
+ .xml = CV2("period", ".large") },
+ { "cv26", SCRIPT_ALL, .name = "colon variants",
+ .xml = CV2("colon", ".leftsmall") },
+ { "cv27", SCRIPT_ALL, .name = "semicolon variants",
+ .xml = CV2("semicolon", ".left") },
+ { "cv31", SCRIPT_ALL, .name = "question-mark variants",
+ .xml = CV2("question", ".open") },
+ { "cv38", SCRIPT_ALL, .name = "capital-D variants",
+ .xml = CV3("D", ".serif", ".narrow") },
+ { "cv42", SCRIPT_ALL, .name = "capital-J variants",
+ .xml = CV2("J", ".narrow") },
+ { "cv44", SCRIPT_ALL, .name = "capital-L variants",
+ .xml = CV2("L", ".narrow") },
+ { "cv61", SCRIPT_ALL, .name = "small-u-grave variants",
+ .xml = CV2("ugrave",".roundjoined") },
+ { "cv74", SCRIPT_ALL, .name = "small-j variants",
+ .xml = CV2("j", ".serif") },
+ { "cv84", SCRIPT_ALL, .name = "small-t variants",
+ .xml = CV2("t", ".small") },
+ { "cv92", SCRIPT_ALL, .name = "small-o-circumflex variants",
+ .xml = CV2("ocircumflex", ".large") },
+ { "cv94", SCRIPT_ALL, .name = "small-c-cedilla variants",
+ .xml = CV2("ccedilla", ".angular") },
{ "ss14", SCRIPT_ALL, ".sep4", .name = "4-cell separated graphics" },
{ "ss16", SCRIPT_ALL, ".sep6", .name = "6-cell separated graphics" },
};
TTXS("FeatureTag", gsub_features[i].tag);
printf(" <Feature>\n");
if (gsub_features[i].name != NULL) {
- printf(" <FeatureParamsStylisticSet>\n");
- TTXI("Version", 0);
- TTXI("UINameID", NAMEBASE_GSUB + i);
- printf(" </FeatureParamsStylisticSet>\n");
+ if (gsub_features[i].tag[0] == 's') {
+ printf(" <FeatureParamsStylisticSet>\n");
+ TTXI("Version", 0);
+ TTXI("UINameID", NAMEBASE_GSUB + i);
+ printf(" </FeatureParamsStylisticSet>\n");
+ } else {
+ printf(" "
+ "<FeatureParamsCharacterVariants>\n");
+ TTXI("Format", 0);
+ TTXI("FeatUILabelNameID", NAMEBASE_GSUB + i);
+ TTXI("FeatUITooltipTextNameID", 0);
+ TTXI("SampleTextNameID", 0);
+ TTXI("NumNamedParameters", 0);
+ TTXI("FirstParamUILabelNameID", 0);
+ printf(" "
+ "</FeatureParamsCharacterVariants>\n");
+ }
}
/* We only have one GSUB lookup per feature, thankfully. */
TTXI("LookupListIndex", i);