chiark / gitweb /
Don't emit multiple subtables for 'cv31'
authorBen Harris <bjh21@bjh21.me.uk>
Tue, 14 Jan 2025 23:29:48 +0000 (23:29 +0000)
committerBen Harris <bjh21@bjh21.me.uk>
Tue, 14 Jan 2025 23:29:48 +0000 (23:29 +0000)
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.

bedstead.c

index fdf0252627d0c335dedbf28f7932d15095159dee..b84b42c4d92287fcc012ce7448de6c6d678a8e3e 100644 (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" },
 };