chiark / gitweb /
Generate 'OS/2' table for TTX
authorBen Harris <bjh21@bjh21.me.uk>
Sat, 2 Nov 2024 13:53:55 +0000 (13:53 +0000)
committerBen Harris <bjh21@bjh21.me.uk>
Thu, 14 Nov 2024 22:27:18 +0000 (22:27 +0000)
bedstead.c

index ba7c22ad2fdf94fa0acb1b83a5f150428976ab84..74064df97d844a1c9f5b2d60fba48386f479f6aa 100644 (file)
@@ -2899,6 +2899,62 @@ main(int argc, char **argv)
        printf("  <tableVersion value='0x5000'/>\n");
        printf("  <numGlyphs value='%d'/>\n", (int)nglyphs);
        printf(" </maxp>\n");
+
+       printf(" <OS_2>\n");
+       printf("  <version value='4'/>\n");
+       printf("  <xAvgCharWidth value='%d'/>\n", (int)(XSIZE * XPIX));
+       printf("  <usWeightClass value='%d'/>\n", weight->ttfweight);
+       printf("  <usWidthClass value='%d'/>\n", width->ttfwidth);
+       printf("  <fsType value='00000000 00000000'/>\n");
+       /* Sub/Superscript are three by five pixels */
+       printf("  <ySubscriptXSize value='%d'/>\n",
+              (int)(YSIZE * YPIX * 3 / (XSIZE - 1)));
+       printf("  <ySubscriptYSize value='%d'/>\n",
+              (int)(YSIZE * YPIX * 5 / (YSIZE - 3)));
+       printf("  <ySubscriptXOffset value='0'/>\n");
+       printf("  <ySubscriptYOffset value='%d'/>\n", (int)(2 * YPIX));
+       printf("  <ySuperscriptXSize value='%d'/>\n",
+              (int)(YSIZE * YPIX * 3 / (XSIZE - 1)));
+       printf("  <ySuperscriptYSize value='%d'/>\n",
+              (int)(YSIZE * YPIX * 5 / (YSIZE - 3)));
+       printf("  <ySuperscriptXOffset value='0'/>\n");
+       printf("  <ySuperscriptYOffset value='%d'/>\n", (int)(2 * YPIX));
+       printf("  <yStrikeoutSize value='%d'/>\n", (int)(YPIX));
+       printf("  <yStrikeoutPosition value='%d'/>\n", (int)(3 * YPIX));
+       printf("  <sFamilyClass value='%d'/>\n", 0x080a);
+       dopanose();
+       /* XXX These were generated by FontForge and should be checked. */
+       printf("  <ulUnicodeRange1 "
+              "value='10100000 00000000 00001010 10111111'/>\n");
+       printf("  <ulUnicodeRange2 "
+              "value='01010010 00000000 11111001 11111011'/>\n");
+       printf("  <ulUnicodeRange3 "
+              "value='00000011 00000000 00000000 00110000'/>\n");
+       printf("  <ulUnicodeRange4 "
+              "value='00000000 00000000 00000010 00000000'/>\n");
+       printf("  <achVendID value='PfEd'/>\n");
+       printf("  <fsSelection value='00000001 1%c%c00000'/>\n",
+              /* Fixed: use typo metrics; WWS */
+              weight->ttfweight == 500 && width->ttfwidth == 5 ? '1' : '0',
+              weight->ttfweight > 500 ? '1' : '0'); /* Bold? */
+       printf("  <usFirstCharIndex value='32'/>\n");
+       printf("  <usLastCharIndex value='65535'/>\n");
+       printf("  <sTypoAscender value='%d'/>\n", (int)(ASCENT * YPIX));
+       printf("  <sTypoDescender value='%d'/>\n", (int)(-DESCENT * YPIX));
+       printf("  <sTypoLineGap value='0'/>\n");
+       printf("  <usWinAscent value='%d'/>\n", (int)(ASCENT * YPIX));
+       printf("  <usWinDescent value='%d'/>\n", (int)(DESCENT * YPIX));
+       /* XXX These were generated by FontForge and should be checked. */
+       printf("  <ulCodePageRange1 "
+              "value='01100000 00000000 00000000 00111111'/>\n");
+       printf("  <ulCodePageRange2 "
+              "value='11010111 11110111 00000000 00000000'/>\n");
+       printf("  <sxHeight value='%d'/>\n", (int)(XHEIGHT * YPIX));
+       printf("  <sCapHeight value='%d'/>\n", (int)(CAPHEIGHT * YPIX));
+       printf("  <usDefaultChar value='0'/>\n");
+       printf("  <usBreakChar value='32'/>\n");
+       printf("  <usMaxContext value='1'/>\n"); /* No pair subs. */
+       printf(" </OS_2>\n");
        /* printf("FontName: %s\n", fullname_to_fontname(get_fullname())); */
        /* printf("FullName: %s\n", get_fullname()); */
        /* printf("FamilyName: Bedstead\n"); */
@@ -2922,31 +2978,13 @@ main(int argc, char **argv)
        /*             weight->suffix[0] ? width->suffix : */
        /*             width->suffix[0] ? width->suffix+1 : ""); */
        /* printf("Weight:%s\n", weight->suffix[0] ? weight->suffix : " Medium"); */
-       /* printf("OS2_WeightWidthSlopeOnly: 1\n"); */
        /* printf("Copyright: Dedicated to the public domain\n"); */
        /* printf("Version: 002.009\n"); */
        /* printf("ItalicAngle: 0\n"); */
        /* printf("UnderlinePosition: %g\n", (double)(-3 * YPIX / 2)); */
        /* printf("UnderlineWidth: %g\n", (double)(YPIX)); */
-       /* printf("OS2StrikeYPos: %d\n", (int)(3 * YPIX)); */
-       /* printf("OS2StrikeYSize: %d\n", (int)(YPIX)); */
        /* printf("Ascent: %g\n", (double)(8 * YPIX)); */
        /* printf("Descent: %g\n", (double)(2 * YPIX)); */
-       /* /\* Sub/Superscript are three by five pixels *\/ */
-       /* printf("OS2SubXSize: %d\n", (int)(YSIZE * YPIX * 3 / (XSIZE - 1))); */
-       /* printf("OS2SupXSize: %d\n", (int)(YSIZE * YPIX * 3 / (XSIZE - 1))); */
-       /* printf("OS2SubYSize: %d\n", (int)(YSIZE * YPIX * 5 / (YSIZE - 3))); */
-       /* printf("OS2SupYSize: %d\n", (int)(YSIZE * YPIX * 5 / (YSIZE - 3))); */
-       /* printf("OS2SubXOff: 0\n"); */
-       /* printf("OS2SupXOff: 0\n"); */
-       /* printf("OS2SubYOff: %d\n", (int)(2 * YPIX)); */
-       /* printf("OS2SupYOff: %d\n", (int)(2 * YPIX)); */
-       /* printf("FSType: 0\n"); */
-       /* printf("TTFWeight: %d\n", weight->ttfweight); */
-       /* printf("TTFWidth: %d\n", width->ttfwidth); */
-       /* dopanose(); */
-       /* printf("OS2Vendor: 'PfEd'\n"); */
-       /* printf("OS2FamilyClass: %d\n", 0x080a); */
        /* printf("LayerCount: 2\n"); */
        /* printf("Layer: 0 0 \"Back\" 1\n"); */
        /* printf("Layer: 1 0 \"Fore\" 0\n"); */
@@ -3181,7 +3219,13 @@ dopanose(void)
         * DuckRat = XRat = 5/7
         */
        panose[9] = 7; /* Ducking/Large */
-       printf("Panose: %d %d %d %d %d %d %d %d %d %d\n",
+       printf("  <panose>\n"
+              "   <bFamilyType value='%d'/><bSerifStyle value='%d'/>\n"
+              "   <bWeight value='%d'/><bProportion value='%d'/>\n"
+              "   <bContrast value='%d'/><bStrokeVariation value='%d'/>\n"
+              "   <bArmStyle value='%d'/><bLetterForm value='%d'/>\n"
+              "   <bMidline value='%d'/><bXHeight value='%d'/>\n"
+              "  </panose>\n",
               panose[0], panose[1], panose[2], panose[3], panose[4], 
               panose[5], panose[6], panose[7], panose[8], panose[9]);
 }