mirror of
https://bjh21.me.uk/bedstead/.git
synced 2026-08-06 12:24:27 -04:00
Emit 'CFF ' and 'hmtx' tables for TTX (mostly)
The left sidebearings in 'hmtx' are not set yet, and there are (of course) no hints, but the glyphs are the right shapes.
This commit is contained in:
parent
932722f07d
commit
abb8dbbf27
150
bedstead.c
150
bedstead.c
@ -3012,42 +3012,44 @@ main(int argc, char **argv)
|
||||
TTXI(minMemType1, 0); TTXI(maxMemType1, 0);
|
||||
printf(" </post>\n");
|
||||
|
||||
/* printf("FontName: %s\n", fullname_to_fontname(get_fullname())); */
|
||||
/* printf("FullName: %s\n", get_fullname()); */
|
||||
/* printf("FamilyName: Bedstead\n"); */
|
||||
/* printf("Weight:%s\n", weight->suffix[0] ? weight->suffix : " Medium"); */
|
||||
/* 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("Ascent: %g\n", (double)(8 * YPIX)); */
|
||||
/* printf("Descent: %g\n", (double)(2 * YPIX)); */
|
||||
/* printf("LayerCount: 2\n"); */
|
||||
/* printf("Layer: 0 0 \"Back\" 1\n"); */
|
||||
/* printf("Layer: 1 0 \"Fore\" 0\n"); */
|
||||
/* printf("Encoding: UnicodeFull\n"); */
|
||||
/* printf("NameList: Adobe Glyph List\n"); */
|
||||
/* printf("DisplaySize: -24\n"); */
|
||||
/* printf("AntiAlias: 1\n"); */
|
||||
/* printf("FitToEm: 1\n"); */
|
||||
printf(" <CFF>\n");
|
||||
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(ItalicAngle, 0);
|
||||
TTXI(UnderlinePosition, -3 * YPIX / 2);
|
||||
TTXI(UnderlineThickness, YPIX);
|
||||
TTXI(PaintType, 0);
|
||||
TTXI(CharstringType, 2);
|
||||
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),
|
||||
(int)(XSIZE * XPIX), (int)(ASCENT * YPIX));
|
||||
TTXI(StrokeWidth, 0);
|
||||
printf(" <Encoding name='StandardEncoding'/>\n");
|
||||
printf(" <Private>\n");
|
||||
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",
|
||||
(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);
|
||||
printf(" </Private>\n");
|
||||
/* if (plottermode) { */
|
||||
/* printf("StrokedFont: 1\n"); */
|
||||
/* printf("StrokeWidth: 50\n"); */
|
||||
/* } */
|
||||
/* printf("BeginPrivate: 5\n"); */
|
||||
/* printf(" StdHW 6 [%4g]\n", (double)YPIX); */
|
||||
/* printf(" StdVW 6 [%4g]\n", */
|
||||
/* (double)(XPIX * (100 + weight->weight) / 100)); */
|
||||
/* printf(" BlueValues 35 [0 0 %4g %4g %4g %4g %4g %4g]\n", */
|
||||
/* (double)(YPIX * 5), (double)(YPIX * 5), */
|
||||
/* (double)(YPIX * 6), (double)(YPIX * 6), */
|
||||
/* (double)(YPIX * 7), (double)(YPIX * 7)); */
|
||||
/* printf(" OtherBlues 21 [%4g %4g %4g %4g]\n", */
|
||||
/* (double)(YPIX * -2), (double)(YPIX * -2), */
|
||||
/* (double)(YPIX * 1), (double)(YPIX * 1)); */
|
||||
/* printf(" BlueFuzz 1 0\n"); */
|
||||
/* printf("EndPrivate\n"); */
|
||||
/* printf("Lookup: 3 0 0 \"aalt: all alternates\" {\"aalt\"} " */
|
||||
/* "['aalt' ('DFLT' <'dflt'> 'latn' <'dflt'>)]\n"); */
|
||||
/* printf("Lookup: 1 0 0 \"smcp: lower-case to small caps\" " */
|
||||
@ -3078,42 +3080,43 @@ main(int argc, char **argv)
|
||||
/* printf("OtfFeatName: 'ss16' 1033 \"6-cell separated graphics\"\n"); */
|
||||
/* printf("Lookup: 257 0 0 \"palt: proportional metrics\" {\"palt\"} " */
|
||||
/* "['palt' ('DFLT' <'dflt'> 'latn' <'dflt'>)]\n"); */
|
||||
/* printf("BeginChars: %ld %d\n", 0x110000L + extraglyphs, nglyphs); */
|
||||
printf(" <CharStrings>\n");
|
||||
extraglyphs = 0;
|
||||
for (i = 0; i < nglyphs; i++)
|
||||
glyphs_by_name[i] = glyphs + i;
|
||||
qsort(glyphs_by_name, nglyphs, sizeof(glyphs_by_name[0]),
|
||||
&compare_glyphs_by_name);
|
||||
for (i = 0; i < nglyphs; i++) {
|
||||
/* printf("\nStartChar: %s\n", glyphs[i].name); */
|
||||
/* printf("Encoding: %ld %ld %d\n", */
|
||||
/* (long)(glyphs[i].unicode != -1 ? glyphs[i].unicode : */
|
||||
/* 0x110000 + extraglyphs++), */
|
||||
/* (long)glyphs[i].unicode, i); */
|
||||
/* printf("Width: %g\n", (double)(XSIZE * XPIX)); */
|
||||
/* if (glyphs[i].flags & (MOS6|MOS4)) */
|
||||
/* printf("Flags: W\n"); */
|
||||
/* else */
|
||||
/* printf("Flags: HW\n"); */
|
||||
/* printf("LayerCount: 2\n"); */
|
||||
printf(" <CharString name='%s'>\n", glyphs[i].name);
|
||||
/* dolookups(&glyphs[i]); */
|
||||
/* if (glyphs[i].flags & IS_ALIAS) */
|
||||
/* doalias(glyphs[i].alias_of); */
|
||||
/* else if (glyphs[i].flags & MOS6) */
|
||||
/* domosaic(glyphs[i].data[0], */
|
||||
/* (glyphs[i].flags & SEP) != 0); */
|
||||
/* else if (glyphs[i].flags & MOS4) */
|
||||
/* domosaic4(glyphs[i].data[0], */
|
||||
/* (glyphs[i].flags & SEP) != 0); */
|
||||
/* else { */
|
||||
/* if (plottermode) */
|
||||
/* dochar_plotter(glyphs[i].data, glyphs[i].flags); */
|
||||
/* else */
|
||||
/* dochar(glyphs[i].data, glyphs[i].flags); */
|
||||
/* } */
|
||||
/* printf("EndChar\n"); */
|
||||
if (glyphs[i].flags & IS_ALIAS)
|
||||
doalias(glyphs[i].alias_of);
|
||||
else if (glyphs[i].flags & MOS6)
|
||||
domosaic(glyphs[i].data[0],
|
||||
(glyphs[i].flags & SEP) != 0);
|
||||
else if (glyphs[i].flags & MOS4)
|
||||
domosaic4(glyphs[i].data[0],
|
||||
(glyphs[i].flags & SEP) != 0);
|
||||
else {
|
||||
if (plottermode)
|
||||
dochar_plotter(glyphs[i].data, glyphs[i].flags);
|
||||
else
|
||||
dochar(glyphs[i].data, glyphs[i].flags);
|
||||
}
|
||||
printf(" </CharString>\n");
|
||||
}
|
||||
/* printf("EndChars\n"); */
|
||||
printf(" </CharStrings>\n");
|
||||
printf(" </CFFFont>\n");
|
||||
printf(" </CFF>\n");
|
||||
printf(" <GlyphOrder>\n");
|
||||
for (i = 0; i < nglyphs; i++)
|
||||
printf(" <GlyphID name='%s'/>\n", glyphs[i].name);
|
||||
printf(" </GlyphOrder>\n");
|
||||
printf(" <hmtx>\n");
|
||||
for (i = 0; i < nglyphs; i++)
|
||||
printf(" <mtx name='%s' width='%d' lsb='%d'/>\n",
|
||||
glyphs[i].name, (int)(XSIZE * XPIX), 0 /* XXX */);
|
||||
printf(" </hmtx>\n");
|
||||
printf("</ttFont>\n");
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
@ -3561,16 +3564,19 @@ clean_path(void)
|
||||
} while (done_anything);
|
||||
}
|
||||
|
||||
static vec cur;
|
||||
|
||||
static void
|
||||
emit_contour(point *p0)
|
||||
{
|
||||
point *p = p0, *p1;
|
||||
|
||||
do {
|
||||
printf(" %g %g %s 1\n",
|
||||
(double)p->v.x / XSCALE,
|
||||
(double)p->v.y / YSCALE - 2*YPIX,
|
||||
p == p0 && p->next ? "m" : "l");
|
||||
printf(" %g %g %s\n",
|
||||
(double)(p->v.x - cur.x) / XSCALE,
|
||||
(double)(p->v.y - cur.y) / YSCALE,
|
||||
p == p0 && p->next ? "rmoveto" : "rlineto");
|
||||
cur = p->v;
|
||||
p1 = p->next;
|
||||
p->prev = p->next = NULL;
|
||||
p = p1;
|
||||
@ -3582,8 +3588,9 @@ emit_path(void)
|
||||
{
|
||||
int i, pass;
|
||||
point *p;
|
||||
bool started = false;
|
||||
|
||||
cur.x = 0;
|
||||
cur.y = DESCENT * YPIX;
|
||||
/*
|
||||
* On the first pass, emit open contours (if there are any).
|
||||
* On the second pass, emit all remaining contours.
|
||||
@ -3591,14 +3598,11 @@ emit_path(void)
|
||||
for (pass = 0; pass <= 1; pass++) {
|
||||
for (i = 0; i < nextpoint; i++) {
|
||||
p = &points[i];
|
||||
if (p->next && (!p->prev || pass == 1)) {
|
||||
if (!started) printf("Fore\nSplineSet\n");
|
||||
started = true;
|
||||
if (p->next && (!p->prev || pass == 1))
|
||||
emit_contour(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (started) printf("EndSplineSet\n");
|
||||
printf("endchar\n");
|
||||
}
|
||||
|
||||
/*
|
||||
@ -3932,8 +3936,10 @@ doalias(char const *alias_of)
|
||||
{
|
||||
struct glyph const *g;
|
||||
|
||||
g = get_glyph_by_name(alias_of);
|
||||
printf("Refer: %td %d N 1 0 0 1 0 0 1\n", g - glyphs, g->unicode);
|
||||
/* g = get_glyph_by_name(alias_of); */
|
||||
/* printf("Refer: %td %d N 1 0 0 1 0 0 1\n", g - glyphs, g->unicode); */
|
||||
/* XXX */
|
||||
printf("endchar\n");
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user