From: Ben Harris Date: Sat, 2 Nov 2024 14:41:34 +0000 (+0000) Subject: Macros for the common TTX pattern X-Git-Tag: bedstead-3.246~72 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~bjharris/git?a=commitdiff_plain;h=030d9c36f96f57addb1e24c81edebf97a9ca7de3;p=bedstead-debian.git Macros for the common TTX pattern That makes things a little less verbose. --- diff --git a/bedstead.c b/bedstead.c index 74064df..e3a69b8 100644 --- a/bedstead.c +++ b/bedstead.c @@ -2849,111 +2849,106 @@ main(int argc, char **argv) extraglyphs++; printf("\n"); printf("\n"); +/* Convenient macros for TTX values. */ +#define TTXF(key, format, ...) \ + printf(" <" #key " value='" format "'/>\n", __VA_ARGS__) +#define TTXI(key, i) TTXF(key, "%ld", (long)(i)) +#define TTXS(key, s) TTXF(key, "%s", (s)) printf(" \n"); - printf(" \n"); - printf(" \n", VERSION); - printf(" \n"); - printf(" \n"); + TTXS(tableVersion, "1.0"); + TTXS(fontRevision, VERSION); + TTXI(checkSumAdjustment, 0); + TTXI(magicNumber, 0x5f0f3cf5); /* * Flags: * Baseline and left sidebearing point at (0,0) * Force ppem to integer */ - printf(" \n"); - printf(" \n", (int)(YSIZE * YPIX)); + TTXS(flags, "00000000 00001011"); + TTXI(unitsPerEm, YSIZE * YPIX); if ((timestr = time_for_ttx()) == NULL) return 1; - printf(" \n", timestr); - printf(" \n", timestr); - printf(" \n", 0); - printf(" \n", (int)(-DESCENT * YPIX)); - printf(" \n", (int)(XSIZE * XPIX)); - printf(" \n", (int)(ASCENT * YPIX)); - printf(" \n", + TTXS(created, timestr); + TTXS(modified, timestr); + TTXI(xMin, 0); + TTXI(yMin, -DESCENT * YPIX); + TTXI(xMax, XSIZE * XPIX); + TTXI(yMax, ASCENT * YPIX); + TTXF(macStyle, "00000000 0%c%c000%c", width->ttfwidth > 5 ? '1' : '0', /* Expanded? */ width->ttfwidth < 5 ? '1' : '0', /* Condensed? */ weight->ttfweight > 500 ? '1' : '0'); /* Bold? */ - printf(" \n", (int)YSIZE); - printf(" \n"); /* Fully bi-di. */ - printf(" \n"); - printf(" \n"); + TTXI(lowestRecPPEM, YSIZE); + TTXI(fontDirectionHint, 0); /* Fully bi-di. */ + TTXI(indexToLocFormat, 0); + TTXI(glyphDataFormat, 0); printf(" \n"); printf(" \n"); - printf(" \n"); - printf(" \n", (int)(ASCENT * YPIX)); - printf(" \n", (int)(-DESCENT * YPIX)); - printf(" \n"); - printf(" \n", (int)(XSIZE * XPIX)); - printf(" \n"); - printf(" \n"); - printf(" \n", (int)(XSIZE * XPIX)); - printf(" \n"); - printf(" \n"); - printf(" \n"); - printf(" \n"); - printf(" \n"); - printf(" \n"); + TTXS(tableVersion, "0x00010000"); + TTXI(ascent, ASCENT * YPIX); + TTXI(descent, -DESCENT * YPIX); + TTXI(lineGap, 0); + TTXI(advanceWidthMax, XSIZE * XPIX); + TTXI(minLeftSideBearing, 0); + TTXI(minRightSideBearing, 0); + TTXI(xMaxExtent, XSIZE * XPIX); + TTXI(caretSlopeRise, 1); TTXI(caretSlopeRun, 0); + TTXI(caretOffset, 0); + TTXI(reserved0, 0); TTXI(reserved1, 0); + TTXI(reserved2, 0); TTXI(reserved3, 0); + TTXI(metricDataFormat, 0); + TTXI(numberOfHMetrics, 2); printf(" \n"); printf(" \n"); - printf(" \n"); - printf(" \n", (int)nglyphs); + TTXS(tableVersion, "0x5000"); + TTXI(numGlyphs, nglyphs); printf(" \n"); printf(" \n"); - printf(" \n"); - printf(" \n", (int)(XSIZE * XPIX)); - printf(" \n", weight->ttfweight); - printf(" \n", width->ttfwidth); - printf(" \n"); + TTXI(version, 4); + TTXI(xAvgCharWidth, XSIZE * XPIX); + TTXI(usWeightClass, weight->ttfweight); + TTXI(usWidthClass, width->ttfwidth); + TTXS(fsType, "00000000 00000000"); /* Sub/Superscript are three by five pixels */ - printf(" \n", - (int)(YSIZE * YPIX * 3 / (XSIZE - 1))); - printf(" \n", - (int)(YSIZE * YPIX * 5 / (YSIZE - 3))); - printf(" \n"); - printf(" \n", (int)(2 * YPIX)); - printf(" \n", - (int)(YSIZE * YPIX * 3 / (XSIZE - 1))); - printf(" \n", - (int)(YSIZE * YPIX * 5 / (YSIZE - 3))); - printf(" \n"); - printf(" \n", (int)(2 * YPIX)); - printf(" \n", (int)(YPIX)); - printf(" \n", (int)(3 * YPIX)); - printf(" \n", 0x080a); + TTXI(ySubscriptXSize, YSIZE * YPIX * 3 / (XSIZE - 1)); + TTXI(ySubscriptYSize, YSIZE * YPIX * 5 / (YSIZE - 3)); + TTXI(ySubscriptXOffset, 0); + TTXI(ySubscriptYOffset, 2 * YPIX); + TTXI(ySuperscriptXSize, YSIZE * YPIX * 3 / (XSIZE - 1)); + TTXI(ySuperscriptYSize, YSIZE * YPIX * 5 / (YSIZE - 3)); + TTXI(ySuperscriptXOffset, 0); + TTXI(ySuperscriptYOffset, 2 * YPIX); + TTXI(yStrikeoutSize, YPIX); + TTXI(yStrikeoutPosition, 3 * YPIX); + TTXI(sFamilyClass, 0x080a); dopanose(); /* XXX These were generated by FontForge and should be checked. */ - printf(" \n"); - printf(" \n"); - printf(" \n"); - printf(" \n"); - printf(" \n"); - printf(" \n", + TTXS(ulUnicodeRange1, "10100000 00000000 00001010 10111111"); + TTXS(ulUnicodeRange2, "01010010 00000000 11111001 11111011"); + TTXS(ulUnicodeRange3, "00000011 00000000 00000000 00110000"); + TTXS(ulUnicodeRange4, "00000000 00000000 00000010 00000000"); + TTXS(achVendID, "PfEd"); + TTXF(fsSelection, "00000001 1%c%c00000", /* Fixed: use typo metrics; WWS */ weight->ttfweight == 500 && width->ttfwidth == 5 ? '1' : '0', weight->ttfweight > 500 ? '1' : '0'); /* Bold? */ - printf(" \n"); - printf(" \n"); - printf(" \n", (int)(ASCENT * YPIX)); - printf(" \n", (int)(-DESCENT * YPIX)); - printf(" \n"); - printf(" \n", (int)(ASCENT * YPIX)); - printf(" \n", (int)(DESCENT * YPIX)); + TTXI(usFirstCharIndex, 32); + TTXI(usLastCharIndex, 65535); + TTXI(sTypoAscender, ASCENT * YPIX); + TTXI(sTypoDescender, -DESCENT * YPIX); + TTXI(sTypoLineGap, 0); + TTXI(usWinAscent, ASCENT * YPIX); + TTXI(usWinDescent, DESCENT * YPIX); /* XXX These were generated by FontForge and should be checked. */ - printf(" \n"); - printf(" \n"); - printf(" \n", (int)(XHEIGHT * YPIX)); - printf(" \n", (int)(CAPHEIGHT * YPIX)); - printf(" \n"); - printf(" \n"); - printf(" \n"); /* No pair subs. */ + TTXS(ulCodePageRange1, "01100000 00000000 00000000 00111111"); + TTXS(ulCodePageRange2, "11010111 11110111 00000000 00000000"); + TTXI(sxHeight, XHEIGHT * YPIX); + TTXI(sCapHeight, CAPHEIGHT * YPIX); + TTXI(usDefaultChar, 0); + TTXI(usBreakChar, 32); + TTXI(usMaxContext, 1); /* No pair subs. */ printf(" \n"); /* printf("FontName: %s\n", fullname_to_fontname(get_fullname())); */ /* printf("FullName: %s\n", get_fullname()); */