mirror of
https://bjh21.me.uk/bedstead/.git
synced 2026-07-10 14:03:06 -04:00
Macros for the common TTX pattern <foo value='bar'/>
That makes things a little less verbose.
This commit is contained in:
parent
d4d2223429
commit
030d9c36f9
153
bedstead.c
153
bedstead.c
@ -2849,111 +2849,106 @@ main(int argc, char **argv)
|
||||
extraglyphs++;
|
||||
printf("<?xml version='1.0'?>\n");
|
||||
printf("<ttFont sfntVersion='OTTO'>\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(" <head>\n");
|
||||
printf(" <tableVersion value='1.0'/>\n");
|
||||
printf(" <fontRevision value='%s'/>\n", VERSION);
|
||||
printf(" <checkSumAdjustment value='0'/>\n");
|
||||
printf(" <magicNumber value='0x5f0f3cf5'/>\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(" <flags value='00000000 00001011'/>\n");
|
||||
printf(" <unitsPerEm value='%d'/>\n", (int)(YSIZE * YPIX));
|
||||
TTXS(flags, "00000000 00001011");
|
||||
TTXI(unitsPerEm, YSIZE * YPIX);
|
||||
if ((timestr = time_for_ttx()) == NULL) return 1;
|
||||
printf(" <created value='%s'/>\n", timestr);
|
||||
printf(" <modified value='%s'/>\n", timestr);
|
||||
printf(" <xMin value='%d'/>\n", 0);
|
||||
printf(" <yMin value='%d'/>\n", (int)(-DESCENT * YPIX));
|
||||
printf(" <xMax value='%d'/>\n", (int)(XSIZE * XPIX));
|
||||
printf(" <yMax value='%d'/>\n", (int)(ASCENT * YPIX));
|
||||
printf(" <macStyle value='00000000 0%c%c000%c'/>\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(" <lowestRecPPEM value='%d'/>\n", (int)YSIZE);
|
||||
printf(" <fontDirectionHint value='0'/>\n"); /* Fully bi-di. */
|
||||
printf(" <indexToLocFormat value='0'/>\n");
|
||||
printf(" <glyphDataFormat value='0'/>\n");
|
||||
TTXI(lowestRecPPEM, YSIZE);
|
||||
TTXI(fontDirectionHint, 0); /* Fully bi-di. */
|
||||
TTXI(indexToLocFormat, 0);
|
||||
TTXI(glyphDataFormat, 0);
|
||||
printf(" </head>\n");
|
||||
|
||||
printf(" <hhea>\n");
|
||||
printf(" <tableVersion value='0x00010000'/>\n");
|
||||
printf(" <ascent value='%d'/>\n", (int)(ASCENT * YPIX));
|
||||
printf(" <descent value='%d'/>\n", (int)(-DESCENT * YPIX));
|
||||
printf(" <lineGap value='0'/>\n");
|
||||
printf(" <advanceWidthMax value='%d'/>\n", (int)(XSIZE * XPIX));
|
||||
printf(" <minLeftSideBearing value='0'/>\n");
|
||||
printf(" <minRightSideBearing value='0'/>\n");
|
||||
printf(" <xMaxExtent value='%d'/>\n", (int)(XSIZE * XPIX));
|
||||
printf(" <caretSlopeRise value='1'/><caretSlopeRun value='0'/>\n");
|
||||
printf(" <caretOffset value='0'/>\n");
|
||||
printf(" <reserved0 value='0'/><reserved1 value='0'/>\n");
|
||||
printf(" <reserved2 value='0'/><reserved3 value='0'/>\n");
|
||||
printf(" <metricDataFormat value='0'/>\n");
|
||||
printf(" <numberOfHMetrics value='2'/>\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(" </hhea>\n");
|
||||
|
||||
printf(" <maxp>\n");
|
||||
printf(" <tableVersion value='0x5000'/>\n");
|
||||
printf(" <numGlyphs value='%d'/>\n", (int)nglyphs);
|
||||
TTXS(tableVersion, "0x5000");
|
||||
TTXI(numGlyphs, 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");
|
||||
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(" <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);
|
||||
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(" <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",
|
||||
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(" <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));
|
||||
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(" <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. */
|
||||
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(" </OS_2>\n");
|
||||
/* printf("FontName: %s\n", fullname_to_fontname(get_fullname())); */
|
||||
/* printf("FullName: %s\n", get_fullname()); */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user