printf("<ttFont sfntVersion='OTTO'>\n");
/* Convenient macros for TTX values. */
#define TTXF(key, format, ...) \
- printf(" <" #key " value='" format "'/>\n", __VA_ARGS__)
+ 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");
- TTXS(tableVersion, "1.0");
- TTXS(fontRevision, VERSION);
- TTXI(checkSumAdjustment, 0);
- TTXI(magicNumber, 0x5f0f3cf5);
+ 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
*/
- TTXS(flags, "00000000 00001011");
- TTXI(unitsPerEm, YSIZE * YPIX);
+ TTXS("flags", "00000000 00001011");
+ TTXI("unitsPerEm", YSIZE * YPIX);
if ((timestr = time_for_ttx()) == NULL) return 1;
- 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",
+ 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? */
- TTXI(lowestRecPPEM, YSIZE);
- TTXI(fontDirectionHint, 0); /* Fully bi-di. */
- TTXI(indexToLocFormat, 0);
- TTXI(glyphDataFormat, 0);
+ TTXI("lowestRecPPEM", YSIZE);
+ TTXI("fontDirectionHint", 0); /* Fully bi-di. */
+ TTXI("indexToLocFormat", 0);
+ TTXI("glyphDataFormat", 0);
printf(" </head>\n");
printf(" <hhea>\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, 0); /* Will be calculated by TTX. */
+ 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", 0); /* Will be calculated by TTX. */
printf(" </hhea>\n");
printf(" <maxp>\n");
- TTXS(tableVersion, "0x5000");
- TTXI(numGlyphs, nglyphs);
+ TTXS("tableVersion", "0x5000");
+ TTXI("numGlyphs", nglyphs);
printf(" </maxp>\n");
printf(" <OS_2>\n");
- TTXI(version, 4);
- TTXI(xAvgCharWidth, XSIZE * XPIX);
- TTXI(usWeightClass, weight->ttfweight);
- TTXI(usWidthClass, width->ttfwidth);
- TTXS(fsType, "00000000 00000000");
+ 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 */
- 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);
+ 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. */
- 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",
+ 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? */
- 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);
+ 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. */
- 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. */
+ 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(" <name>\n");
printf(" </cmap>\n");
printf(" <post>\n");
- TTXS(formatType, "3.0");
- TTXS(italicAngle, "0.0");
- TTXI(underlinePosition, -YPIX);
- TTXI(underlineThickness, YPIX);
- TTXI(isFixedPitch, 1);
- TTXI(minMemType42, 0); TTXI(maxMemType42, 0);
- TTXI(minMemType1, 0); TTXI(maxMemType1, 0);
+ TTXS("formatType", "3.0");
+ TTXS("italicAngle", "0.0");
+ TTXI("underlinePosition", -YPIX);
+ TTXI("underlineThickness", YPIX);
+ TTXI("isFixedPitch", 1);
+ TTXI("minMemType42", 0); TTXI("maxMemType42", 0);
+ TTXI("minMemType1", 0); TTXI("maxMemType1", 0);
printf(" </post>\n");
printf(" <CFF>\n");
- TTXI(major, 1); TTXI(minor, 0);
+ TTXI("major", 1); TTXI("minor", 0);
printf(" <CFFFont name='%s'>\n",
fullname_to_fontname(get_fullname()));
- TTXS(version, VERSION);
- TTXS(Notice, "Dedicated to the public domain");
- TTXS(FullName, get_fullname());
- TTXS(FamilyName, "Bedstead");
- TTXS(Weight, *weight->suffix ? weight->suffix + 1 : "Medium");
- TTXI(isFixedPitch, 1);
- TTXI(UnderlinePosition, -3 * YPIX / 2);
- TTXI(UnderlineThickness, YPIX);
- TTXF(FontMatrix, "%g 0 0 %g 0 0",
+ TTXS("version", VERSION);
+ TTXS("Notice", "Dedicated to the public domain");
+ TTXS("FullName", get_fullname());
+ TTXS("FamilyName", "Bedstead");
+ TTXS("Weight", *weight->suffix ? weight->suffix + 1 : "Medium");
+ TTXI("isFixedPitch", 1);
+ TTXI("UnderlinePosition", -3 * YPIX / 2);
+ TTXI("UnderlineThickness", YPIX);
+ TTXF("FontMatrix", "%g 0 0 %g 0 0",
1.0/(YSIZE * YPIX), 1.0/(YSIZE * YPIX));
- TTXF(FontBBox, "0 %d %d %d", (int)(-DESCENT * YPIX),
+ TTXF("FontBBox", "0 %d %d %d", (int)(-DESCENT * YPIX),
(int)(XSIZE * XPIX), (int)(ASCENT * YPIX));
printf(" <Private>\n");
- TTXF(BlueValues, "0 0 %4g %4g %4g %4g %4g %4g",
+ TTXF("BlueValues", "0 0 %4g %4g %4g %4g %4g %4g",
(double)(YPIX * 5), (double)(YPIX * 5),
(double)(YPIX * 6), (double)(YPIX * 6),
(double)(YPIX * 7), (double)(YPIX * 7));
- TTXF(OtherBlues, "%4g %4g %4g %4g",
+ TTXF("OtherBlues", "%4g %4g %4g %4g",
(double)(YPIX * -2), (double)(YPIX * -2),
(double)(YPIX * 1), (double)(YPIX * 1));
- TTXI(BlueFuzz, 0);
- TTXF(StdHW, "%4g", (double)YPIX);
- TTXF(StdVW, "%4g", (double)(XPIX * (100 + weight->weight) / 100));
- TTXI(defaultWidthX, XSIZE * XPIX);
+ TTXI("BlueFuzz", 0);
+ TTXF("StdHW", "%4g", (double)YPIX);
+ TTXF("StdVW", "%4g", (double)(XPIX * (100 + weight->weight) / 100));
+ TTXI("defaultWidthX", XSIZE * XPIX);
/* if (plottermode) { */
/* printf("StrokedFont: 1\n"); */
/* printf("StrokeWidth: 50\n"); */
int i, j;
printf(" <GSUB>\n");
- TTXS(Version, "0x00010000");
+ TTXS("Version", "0x00010000");
printf(" <ScriptList>\n");
for (i = 0; i < ngsub_scripts; i++) {
printf(" <ScriptRecord>\n");
- TTXS(ScriptTag, gsub_scripts[i].tag);
+ TTXS("ScriptTag", gsub_scripts[i].tag);
printf(" <Script><DefaultLangSys>\n");
- TTXI(ReqFeatureIndex, 0xffff); /* No required feature. */
+ TTXI("ReqFeatureIndex", 0xffff); /* No required feature. */
for (j = 0; j < ngsub_features; j++)
if (gsub_features[j].scripts & gsub_scripts[i].flag)
- TTXI(FeatureIndex, j);
+ TTXI("FeatureIndex", j);
printf(" </DefaultLangSys></Script>\n");
printf(" </ScriptRecord>\n");
}
printf(" <FeatureList>\n");
for (i = 0; i < ngsub_features; i++) {
printf(" <FeatureRecord>\n");
- TTXS(FeatureTag, gsub_features[i].tag);
+ TTXS("FeatureTag", gsub_features[i].tag);
printf(" <Feature>\n");
if (gsub_features[i].name != NULL) {
printf(" <FeatureParamsStylisticSet>\n");
- TTXI(Version, 0);
- TTXI(UINameID, NAMEBASE_GSUB + i);
+ TTXI("Version", 0);
+ TTXI("UINameID", NAMEBASE_GSUB + i);
printf(" </FeatureParamsStylisticSet>\n");
}
/* We only have one GSUB lookup per feature, thankfully. */
- TTXI(LookupListIndex, i);
+ TTXI("LookupListIndex", i);
printf(" </Feature>\n");
printf(" </FeatureRecord>\n");
}
printf(" <Lookup>\n");
if (gsub_features[i].suffix == NULL) {
/* This is 'aalt' */
- TTXI(LookupType, 3);
- TTXI(LookupFlag, 0);
+ TTXI("LookupType", 3);
+ TTXI("LookupFlag", 0);
printf(" <AlternateSubst>\n");
doaltsubs();
printf(" </AlternateSubst>\n");
} else {
- TTXI(LookupType, 1);
- TTXI(LookupFlag, 0);
+ TTXI("LookupType", 1);
+ TTXI("LookupFlag", 0);
printf(" <SingleSubst>\n");
dosinglesubs(gsub_features[i].suffix);
printf(" </SingleSubst>\n");
/* We only support one 'GPOS' lookup, 'palt'. */
printf(" <GPOS>\n");
- TTXS(Version, "0x00010000");
+ TTXS("Version", "0x00010000");
printf(" <ScriptList>\n");
printf(" <ScriptRecord>\n");
- TTXS(ScriptTag, "DFLT");
+ TTXS("ScriptTag", "DFLT");
printf(" <Script><DefaultLangSys>\n");
- TTXI(ReqFeatureIndex, 0xffff); /* No required feature. */
- TTXI(FeatureIndex, 0);
+ TTXI("ReqFeatureIndex", 0xffff); /* No required feature. */
+ TTXI("FeatureIndex", 0);
printf(" </DefaultLangSys></Script>\n");
printf(" </ScriptRecord>\n");
printf(" </ScriptList>\n");
printf(" <FeatureList>\n");
printf(" <FeatureRecord>\n");
- TTXS(FeatureTag, "palt");
+ TTXS("FeatureTag", "palt");
printf(" <Feature>\n");
- TTXI(LookupListIndex, 0);
+ TTXI("LookupListIndex", 0);
printf(" </Feature>\n");
printf(" </FeatureRecord>\n");
printf(" </FeatureList>\n");
printf(" <LookupList>\n");
printf(" <Lookup>\n");
- TTXI(LookupType, 1);
- TTXI(LookupFlag, 0);
+ TTXI("LookupType", 1);
+ TTXI("LookupFlag", 0);
printf(" </Lookup>\n");
printf(" </LookupList>\n");
printf(" </GPOS>\n");