Don't emit multiple subtables for 'cv31'

I was accidentally emitting a separate <AlternateSubst> element for
each base character, which worked but was unnecessary.  A single
<AlternateSubst> for the whole lookup will make for a smaller font
file and probably faster lookups as well.
This commit is contained in:
Ben Harris 2025-01-14 23:29:48 +00:00
parent c36cea4b1e
commit b0f67aa3ef

View File

@ -2777,11 +2777,9 @@ static struct gsub_feature {
#define ALT3(a, b, c) ALT1(a) ALT2(b, c)
#define ALTSET(g, a) "<AlternateSet glyph='" g "'>" a "</AlternateSet>\n"
#define ALTSUB(x) "<AlternateSubst>\n" x "</AlternateSubst>\n"
#define CROSSALT2(a, b) ALTSUB(ALTSET(a, ALT2(a, b)) ALTSET(b, ALT2(a, b)))
#define CROSSALT3(a, b, c) \
ALTSUB(ALTSET(a, ALT3(a, b, c)) \
ALTSET(b, ALT3(a, b, c)) \
ALTSET(c, ALT3(a, b, c)))
#define CROSSALT2(a, b) ALTSET(a, ALT2(a, b)) ALTSET(b, ALT2(a, b))
#define CROSSALT3(a, b, c) ALTSET(a, ALT3(a, b, c)) ALTSET(b, ALT3(a, b, c)) \
ALTSET(c, ALT3(a, b, c))
#define CV2(base, a) CROSSALT2(base, base a)
#undef VAR2
#define VAR2 CV2
@ -2790,20 +2788,32 @@ static struct gsub_feature {
* Where possible, Character Variant features have numbers
* that are 32 less than the ASCII code of the base character.
*/
{ "cv12", SCRIPT_ALL, .name = "comma variants", .xml = CV12 },
{ "cv14", SCRIPT_ALL, .name = "full-stop variants", .xml = CV14 },
{ "cv26", SCRIPT_ALL, .name = "colon variants", .xml = CV26 },
{ "cv27", SCRIPT_ALL, .name = "semicolon variants", .xml = CV27 },
{ "cv31", SCRIPT_ALL, .name = "question-mark variants", .xml = CV31 },
{ "cv12", SCRIPT_ALL, .name = "comma variants",
.xml = ALTSUB(CV12) },
{ "cv14", SCRIPT_ALL, .name = "full-stop variants",
.xml = ALTSUB(CV14) },
{ "cv26", SCRIPT_ALL, .name = "colon variants",
.xml = ALTSUB(CV26) },
{ "cv27", SCRIPT_ALL, .name = "semicolon variants",
.xml = ALTSUB(CV27) },
{ "cv31", SCRIPT_ALL, .name = "question-mark variants",
.xml = ALTSUB(CV31) },
{ "cv38", SCRIPT_ALL, .name = "capital-D variants",
.xml = CV3("D", ".serif", ".narrow") },
{ "cv42", SCRIPT_ALL, .name = "capital-J variants", .xml = CV42 },
{ "cv44", SCRIPT_ALL, .name = "capital-L variants", .xml = CV44 },
{ "cv61", SCRIPT_ALL, .name = "small-u-grave variants", .xml = CV61 },
{ "cv74", SCRIPT_ALL, .name = "small-j variants", .xml = CV74 },
{ "cv79", SCRIPT_ALL, .name = "small-o variants", .xml = CV79 },
{ "cv84", SCRIPT_ALL, .name = "small-t variants", .xml = CV84 },
{ "cv96", SCRIPT_ALL, .name = "cedilla variants", .xml = CV96 },
.xml = ALTSUB(CV3("D", ".serif", ".narrow")) },
{ "cv42", SCRIPT_ALL, .name = "capital-J variants",
.xml = ALTSUB(CV42) },
{ "cv44", SCRIPT_ALL, .name = "capital-L variants",
.xml = ALTSUB(CV44) },
{ "cv61", SCRIPT_ALL, .name = "small-u-grave variants",
.xml = ALTSUB(CV61) },
{ "cv74", SCRIPT_ALL, .name = "small-j variants",
.xml = ALTSUB(CV74) },
{ "cv79", SCRIPT_ALL, .name = "small-o variants",
.xml = ALTSUB(CV79) },
{ "cv84", SCRIPT_ALL, .name = "small-t variants",
.xml = ALTSUB(CV84) },
{ "cv96", SCRIPT_ALL, .name = "cedilla variants",
.xml = ALTSUB(CV96) },
{ "ss14", SCRIPT_ALL, ".sep4", .name = "4-cell separated graphics" },
{ "ss16", SCRIPT_ALL, ".sep6", .name = "6-cell separated graphics" },
};