Generate 'OS/2' table for TTX

This commit is contained in:
Ben Harris 2024-11-02 13:53:55 +00:00
parent 29b33c20af
commit d4d2223429

View 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]);
}