void doprologue(void);
void dochar(char data[YSIZE]);
-char data[][YSIZE] = {
- 000, 000, 000, 000, 000, 000, 000, 000, 000, 000,
- 004, 004, 004, 004, 004, 000, 004, 000, 000, 000,
- 012, 012, 012, 000, 000, 000, 000, 000, 000, 000,
- 012, 012, 037, 012, 037, 012, 012, 000, 000, 000,
- 016, 025, 024, 016, 005, 025, 016, 000, 000, 000,
- 030, 031, 002, 004, 010, 023, 003, 000, 000, 000,
- 010, 024, 024, 010, 025, 022, 015, 000, 000, 000,
- 004, 004, 004, 000, 000, 000, 000, 000, 000, 000,
- 002, 004, 010, 010, 010, 004, 002, 000, 000, 000,
- 010, 004, 002, 002, 002, 004, 010, 000, 000, 000,
- 004, 025, 016, 004, 016, 025, 004, 000, 000, 000,
- 000, 004, 004, 037, 004, 004, 000, 000, 000, 000,
- 000, 000, 000, 000, 000, 004, 004, 010, 000, 000,
- 000, 000, 000, 016, 000, 000, 000, 000, 000, 000,
- 000, 000, 000, 000, 000, 000, 004, 000, 000, 000,
- 000, 001, 002, 004, 010, 020, 000, 000, 000, 000,
- 004, 012, 021, 021, 021, 012, 004, 000, 000, 000, /* 0 */
- 004, 014, 004, 004, 004, 004, 016, 000, 000, 000, /* 1 */
- 016, 021, 001, 006, 010, 020, 037, 000, 000, 000, /* 2 */
- 037, 001, 002, 006, 001, 021, 016, 000, 000, 000,
- 002, 006, 012, 022, 037, 002, 002, 000, 000, 000,
- 037, 020, 036, 001, 001, 021, 016, 000, 000, 000,
- 006, 010, 020, 036, 021, 021, 016, 000, 000, 000,
- 037, 001, 002, 004, 010, 010, 010, 000, 000, 000,
- 016, 021, 021, 016, 021, 021, 016, 000, 000, 000,
- 016, 021, 021, 017, 001, 002, 014, 000, 000, 000,
- 000, 000, 004, 000, 000, 000, 004, 000, 000, 000,
- 000, 000, 004, 000, 000, 004, 004, 010, 000, 000,
- 002, 004, 010, 020, 010, 004, 002, 000, 000, 000,
- 000, 000, 037, 000, 037, 000, 000, 000, 000, 000,
- 010, 004, 002, 001, 002, 004, 010, 000, 000, 000,
- 016, 021, 002, 004, 004, 000, 004, 000, 000, 000,
- 016, 021, 027, 025, 027, 020, 016, 000, 000, 000,
- 004, 012, 021, 021, 037, 021, 021, 000, 000, 000,
- 036, 021, 021, 036, 021, 021, 036, 000, 000, 000,
- 016, 021, 020, 020, 020, 021, 016, 000, 000, 000,
- 036, 021, 021, 021, 021, 021, 036, 000, 000, 000,
- 037, 020, 020, 036, 020, 020, 037, 000, 000, 000,
- 037, 020, 020, 036, 020, 020, 020, 000, 000, 000,
- 016, 021, 020, 020, 023, 021, 016, 000, 000, 000,
- 021, 021, 021, 037, 021, 021, 021, 000, 000, 000,
- 016, 004, 004, 004, 004, 004, 016, 000, 000, 000,
- 001, 001, 001, 001, 001, 021, 016, 000, 000, 000,
- 021, 022, 024, 030, 024, 022, 021, 000, 000, 000,
- 020, 020, 020, 020, 020, 020, 037, 000, 000, 000,
- 021, 033, 025, 021, 021, 021, 021, 000, 000, 000,
- 021, 021, 031, 025, 023, 021, 021, 000, 000, 000,
- 016, 021, 021, 021, 021, 021, 016, 000, 000, 000,
- 036, 021, 021, 036, 020, 020, 020, 000, 000, 000,
- 016, 021, 021, 021, 025, 022, 015, 000, 000, 000,
- 036, 021, 021, 036, 024, 022, 021, 000, 000, 000,
- 016, 021, 020, 016, 001, 021, 016, 000, 000, 000,
- 037, 004, 004, 004, 004, 004, 004, 000, 000, 000, /* T */
- 021, 021, 021, 021, 021, 021, 016, 000, 000, 000,
- 021, 021, 021, 012, 012, 004, 004, 000, 000, 000,
- 021, 021, 021, 025, 025, 025, 012, 000, 000, 000,
- 021, 021, 012, 004, 012, 021, 021, 000, 000, 000,
- 021, 021, 012, 004, 004, 004, 004, 000, 000, 000,
- 037, 001, 002, 004, 010, 020, 037, 000, 000, 000, /* Z */
- 016, 010, 010, 010, 010, 010, 016, 000, 000, 000, /* bracketleft */
- 000, 020, 010, 004, 002, 001, 000, 000, 000, 000, /* backslash */
- 016, 002, 002, 002, 002, 002, 016, 000, 000, 000, /* bracketright */
- 004, 012, 021, 000, 000, 000, 000, 000, 000, 000, /* asciicircum */
- 000, 000, 000, 000, 000, 000, 000, 037, 000, 000, /* underscore */
- 010, 004, 002, 000, 000, 000, 000, 000, 000, 000, /* asciigrave */
- 000, 000, 016, 001, 017, 021, 017, 000, 000, 000,
- 020, 020, 036, 021, 021, 021, 036, 000, 000, 000,
- 000, 000, 017, 020, 020, 020, 017, 000, 000, 000,
- 001, 001, 017, 021, 021, 021, 017, 000, 000, 000,
- 000, 000, 016, 021, 037, 020, 016, 000, 000, 000, /* e */
- 002, 004, 004, 016, 004, 004, 004, 000, 000, 000,
- 000, 000, 017, 021, 021, 021, 017, 001, 016, 000,
- 020, 020, 036, 021, 021, 021, 021, 000, 000, 000,
- 004, 000, 014, 004, 004, 004, 016, 000, 000, 000,
- 004, 000, 004, 004, 004, 004, 004, 004, 010, 000,
- 010, 010, 011, 012, 014, 012, 011, 000, 000, 000,
- 014, 004, 004, 004, 004, 004, 016, 000, 000, 000,
- 000, 000, 032, 025, 025, 025, 025, 000, 000, 000,
- 000, 000, 036, 021, 021, 021, 021, 000, 000, 000,
- 000, 000, 016, 021, 021, 021, 016, 000, 000, 000,
- 000, 000, 036, 021, 021, 021, 036, 020, 020, 000,
- 000, 000, 017, 021, 021, 021, 017, 001, 001, 000,
- 000, 000, 013, 014, 010, 010, 010, 000, 000, 000,
- 000, 000, 017, 020, 016, 001, 036, 000, 000, 000,
- 004, 004, 016, 004, 004, 004, 002, 000, 000, 000,
- 000, 000, 021, 021, 021, 021, 017, 000, 000, 000,
- 000, 000, 021, 021, 012, 012, 004, 000, 000, 000,
- 000, 000, 021, 021, 025, 025, 012, 000, 000, 000,
- 000, 000, 021, 012, 004, 012, 021, 000, 000, 000,
- 000, 000, 021, 021, 021, 021, 017, 001, 016, 000,
- 000, 000, 037, 002, 004, 010, 037, 000, 000, 000,
- 003, 004, 004, 030, 004, 004, 003, 000, 000, 000, /* braceleft */
- 004, 004, 004, 004, 004, 004, 004, 000, 000, 000, /* bar */
- 030, 004, 004, 003, 004, 004, 030, 000, 000, 000, /* braceright */
- 010, 025, 002, 000, 000, 000, 000, 000, 000, 000, /* asciitilde */
- 037, 037, 037, 037, 037, 037, 037, 000, 000, 000,
-
- 000, 004, 010, 037, 010, 004, 000, 000, 000, 000, /* leftarrow */
- 020, 020, 020, 020, 026, 001, 002, 004, 007, 000, /* onehalf */
- 000, 004, 002, 037, 002, 004, 000, 000, 000, 000, /* rightarrow */
- 000, 004, 016, 025, 004, 004, 000, 000, 000, 000, /* uparrow */
- 000, 000, 000, 037, 000, 000, 000, 000, 000, 000, /* endash */
- 006, 011, 010, 010, 034, 010, 010, 037, 000, 000, /* sterling */
- 010, 010, 010, 010, 011, 003, 005, 007, 001, 000, /* onequarter */
- 012, 012, 012, 012, 012, 012, 012, 000, 000, 000, /* doublebar */
- 030, 004, 030, 004, 031, 003, 005, 007, 001, 000, /* threequarters */
- 000, 004, 000, 037, 000, 004, 000, 000, 000, 000, /* divide */
+struct glyph {
+ char data[YSIZE];
+ unsigned unicode;
+ char const *name;
+} glyphs[] = {
+ {{000,000,000,000,000,000,000,000,000,000}, 0x0020, "space" },
+ {{004,004,004,004,004,000,004,000,000,000}, 0x0021, "exclam" },
+ {{012,012,012,000,000,000,000,000,000,000}, 0x0022, "quotedbl" },
+ {{012,012,037,012,037,012,012,000,000,000}, 0x0023, "numbersign" },
+ {{016,025,024,016,005,025,016,000,000,000}, 0x0024, "dollar" },
+ {{030,031,002,004,010,023,003,000,000,000}, 0x0025, "percent" },
+ {{010,024,024,010,025,022,015,000,000,000}, 0x0026, "ampersand" },
+ {{004,004,004,000,000,000,000,000,000,000}, 0x0027, "quotesingle" },
+ {{002,004,010,010,010,004,002,000,000,000}, 0x0028, "parenleft" },
+ {{010,004,002,002,002,004,010,000,000,000}, 0x0029, "parenright" },
+ {{004,025,016,004,016,025,004,000,000,000}, 0x002a, "asterisk" },
+ {{000,004,004,037,004,004,000,000,000,000}, 0x002b, "plus" },
+ {{000,000,000,000,000,004,004,010,000,000}, 0x002c, "comma" },
+ {{000,000,000,016,000,000,000,000,000,000}, 0x002d, "hyphen" },
+ {{000,000,000,000,000,000,004,000,000,000}, 0x002e, "period" },
+ {{000,001,002,004,010,020,000,000,000,000}, 0x002f, "slash" },
+ {{004,012,021,021,021,012,004,000,000,000}, 0x0030, "zero" },
+ {{004,014,004,004,004,004,016,000,000,000}, 0x0031, "one" },
+ {{016,021,001,006,010,020,037,000,000,000}, 0x0032, "two" },
+ {{037,001,002,006,001,021,016,000,000,000}, 0x0033, "three" },
+ {{002,006,012,022,037,002,002,000,000,000}, 0x0034, "four" },
+ {{037,020,036,001,001,021,016,000,000,000}, 0x0035, "five" },
+ {{006,010,020,036,021,021,016,000,000,000}, 0x0036, "six" },
+ {{037,001,002,004,010,010,010,000,000,000}, 0x0037, "seven" },
+ {{016,021,021,016,021,021,016,000,000,000}, 0x0038, "eight" },
+ {{016,021,021,017,001,002,014,000,000,000}, 0x0039, "nine" },
+ {{000,000,004,000,000,000,004,000,000,000}, 0x003a, "colon" },
+ {{000,000,004,000,000,004,004,010,000,000}, 0x003b, "semicolon" },
+ {{002,004,010,020,010,004,002,000,000,000}, 0x003c, "less" },
+ {{000,000,037,000,037,000,000,000,000,000}, 0x003d, "equal" },
+ {{010,004,002,001,002,004,010,000,000,000}, 0x003e, "greater" },
+ {{016,021,002,004,004,000,004,000,000,000}, 0x003f, "question" },
+ {{016,021,027,025,027,020,016,000,000,000}, 0x0040, "at" },
+ {{004,012,021,021,037,021,021,000,000,000}, 0x0041, "A" },
+ {{036,021,021,036,021,021,036,000,000,000}, 0x0042, "B" },
+ {{016,021,020,020,020,021,016,000,000,000}, 0x0043, "C" },
+ {{036,021,021,021,021,021,036,000,000,000}, 0x0044, "D" },
+ {{037,020,020,036,020,020,037,000,000,000}, 0x0045, "E" },
+ {{037,020,020,036,020,020,020,000,000,000}, 0x0046, "F" },
+ {{016,021,020,020,023,021,016,000,000,000}, 0x0047, "G" },
+ {{021,021,021,037,021,021,021,000,000,000}, 0x0048, "H" },
+ {{016,004,004,004,004,004,016,000,000,000}, 0x0049, "I" },
+ {{001,001,001,001,001,021,016,000,000,000}, 0x004a, "J" },
+ {{021,022,024,030,024,022,021,000,000,000}, 0x004b, "K" },
+ {{020,020,020,020,020,020,037,000,000,000}, 0x004c, "L" },
+ {{021,033,025,021,021,021,021,000,000,000}, 0x004d, "M" },
+ {{021,021,031,025,023,021,021,000,000,000}, 0x004e, "N" },
+ {{016,021,021,021,021,021,016,000,000,000}, 0x004f, "O" },
+ {{036,021,021,036,020,020,020,000,000,000}, 0x0050, "P" },
+ {{016,021,021,021,025,022,015,000,000,000}, 0x0051, "Q" },
+ {{036,021,021,036,024,022,021,000,000,000}, 0x0052, "R" },
+ {{016,021,020,016,001,021,016,000,000,000}, 0x0053, "S" },
+ {{037,004,004,004,004,004,004,000,000,000}, 0x0054, "T" }, /* T */
+ {{021,021,021,021,021,021,016,000,000,000}, 0x0055, "U" },
+ {{021,021,021,012,012,004,004,000,000,000}, 0x0056, "V" },
+ {{021,021,021,025,025,025,012,000,000,000}, 0x0057, "W" },
+ {{021,021,012,004,012,021,021,000,000,000}, 0x0058, "X" },
+ {{021,021,012,004,004,004,004,000,000,000}, 0x0059, "Y" },
+ {{037,001,002,004,010,020,037,000,000,000}, 0x005a, "Z" }, /* Z */
+ {{016,010,010,010,010,010,016,000,000,000}, 0x005b, "bracketleft" },
+ {{000,020,010,004,002,001,000,000,000,000}, 0x005c, "backslash" },
+ {{016,002,002,002,002,002,016,000,000,000}, 0x005d, "bracketright" },
+ {{004,012,021,000,000,000,000,000,000,000}, 0x005e, "asciicircum" },
+ {{000,000,000,000,000,000,000,037,000,000}, 0x005f, "underscore" },
+ {{010,004,002,000,000,000,000,000,000,000}, 0x0060, "asciigrave" },
+ {{000,000,016,001,017,021,017,000,000,000}, 0x0061, "a" },
+ {{020,020,036,021,021,021,036,000,000,000}, 0x0062, "b" },
+ {{000,000,017,020,020,020,017,000,000,000}, 0x0063, "c" },
+ {{001,001,017,021,021,021,017,000,000,000}, 0x0064, "d" },
+ {{000,000,016,021,037,020,016,000,000,000}, 0x0065, "e" }, /* e */
+ {{002,004,004,016,004,004,004,000,000,000}, 0x0066, "f" },
+ {{000,000,017,021,021,021,017,001,016,000}, 0x0067, "g" },
+ {{020,020,036,021,021,021,021,000,000,000}, 0x0068, "h" },
+ {{004,000,014,004,004,004,016,000,000,000}, 0x0069, "i" },
+ {{004,000,004,004,004,004,004,004,010,000}, 0x006a, "j" },
+ {{010,010,011,012,014,012,011,000,000,000}, 0x006b, "k" },
+ {{014,004,004,004,004,004,016,000,000,000}, 0x006c, "l" },
+ {{000,000,032,025,025,025,025,000,000,000}, 0x006d, "m" },
+ {{000,000,036,021,021,021,021,000,000,000}, 0x006e, "n" },
+ {{000,000,016,021,021,021,016,000,000,000}, 0x006f, "o" },
+ {{000,000,036,021,021,021,036,020,020,000}, 0x0070, "p" },
+ {{000,000,017,021,021,021,017,001,001,000}, 0x0071, "q" },
+ {{000,000,013,014,010,010,010,000,000,000}, 0x0072, "r" },
+ {{000,000,017,020,016,001,036,000,000,000}, 0x0073, "s" },
+ {{004,004,016,004,004,004,002,000,000,000}, 0x0074, "t" },
+ {{000,000,021,021,021,021,017,000,000,000}, 0x0075, "u" },
+ {{000,000,021,021,012,012,004,000,000,000}, 0x0076, "v" },
+ {{000,000,021,021,025,025,012,000,000,000}, 0x0077, "w" },
+ {{000,000,021,012,004,012,021,000,000,000}, 0x0078, "x" },
+ {{000,000,021,021,021,021,017,001,016,000}, 0x0079, "y" },
+ {{000,000,037,002,004,010,037,000,000,000}, 0x007a, "z" },
+ {{003,004,004,030,004,004,003,000,000,000}, 0x007b, "braceleft" },
+ {{004,004,004,004,004,004,004,000,000,000}, 0x007c, "bar" },
+ {{030,004,004,003,004,004,030,000,000,000}, 0x007d, "braceright" },
+ {{010,025,002,000,000,000,000,000,000,000}, 0x007e, "asciitilde" },
+ {{037,037,037,037,037,037,037,000,000,000}, 0x2588, "block" },
+ {{000,004,010,037,010,004,000,000,000,000}, 0x2190, "arrowleft" },
+ {{020,020,020,020,026,001,002,004,007,000}, 0x00bd, "onehalf" },
+ {{000,004,002,037,002,004,000,000,000,000}, 0x2192, "arrowright" },
+ {{000,004,016,025,004,004,000,000,000,000}, 0x2191, "arrowup" },
+ {{000,000,000,037,000,000,000,000,000,000}, 0x2013, "endash" },
+ {{006,011,010,010,034,010,010,037,000,000}, 0x00a3, "sterling" },
+ {{010,010,010,010,011,003,005,007,001,000}, 0x00bc, "onequarter" },
+ {{012,012,012,012,012,012,012,000,000,000}, 0x0000, "doublebar" }, /*XXX*/
+ {{030,004,030,004,031,003,005,007,001,000}, 0x00be, "threequarters" },
+ {{000,004,000,037,000,004,000,000,000,000}, 0x00f7, "divide" },
};
int
{
int i;
+ printf("SplineFontDB: 3.0\n");
+ printf("FontName: TTXT\n");
+ printf("FullName: TTXT\n");
+ printf("FamilyName: TTXT\n");
+ printf("Weight: Medium\n");
+ printf("Copyright: Who knows?\n");
+ printf("Version: 000.001\n");
+ printf("ItalicAngle: 0\n");
+ printf("UnderlinePosition: -50\n");
+ printf("UnderlineWidth: 50\n");
+ printf("Ascent: 700\n");
+ printf("Descent: 300\n");
+ printf("LayerCount: 2\n");
+ printf("Layer: 0 0 \"Back\" 1\n");
+ printf("Layer: 1 0 \"Fore\" 0\n");
+ printf("Encoding: UnicodeBmp\n");
+ printf("NameList: Adobe Glyph List\n");
+ printf("DisplaySize: -24\n");
+ printf("AntiAlias: 1\n");
+ printf("FitToEm: 1\n");
+ printf("BeginChars: 65537 105\n");
for (i = 0; i < 105; i++) {
- printf("gsave %d %d translate\n",
- i % 16 * XSIZE, (6 - i / 16) * YSIZE);
- printf("0.25 0.25 scale\n");
- dochar(&data[i][0]);
- printf("grestore\n");
+ printf("StartChar: %s\n", glyphs[i].name);
+ printf("Encoding: %d %d %d\n",
+ glyphs[i].unicode, glyphs[i].unicode, i);
+ printf("Width: 600\n");
+ printf("Flags:\n");
+ printf("LayerCount: 2\n");
+ printf("Fore\n");
+ dochar(glyphs[i].data);
+ printf("EndChar\n");
}
- printf("showpage\n");
+ printf("EndChars\n");
+ printf("EndSplineFont\n");
return 0;
}
static void
fix_identical(point *p)
{
+ if (!p->next) return;
if (vec_eqp(p->next->v, p->v))
killpoint(p);
}
static void
fix_collinear(point *p)
{
+ if (!p->next) return;
if (vec_inline3(p->prev->v, p->v, p->next->v))
killpoint(p);
}
+static void
+fix_isolated(point *p)
+{
+ if (p->next == p)
+ killpoint(p);
+}
+
static int done_anything;
static void
vec_inline4(b1->v, a0->v, b0->v, a1->v) ||
vec_inline4(b1->v, a0->v, a1->v, b0->v) ||
vec_eqp(a0->v, b1->v) || vec_eqp(a1->v, b0->v))) {
- if (a0 == b1)
- killpoint(a0);
- else {
- a0->next = b1; b1->prev = a0;
- fix_identical(a0);
- fix_collinear(b1);
- }
- if (b0 == a1)
- killpoint(b0);
- else {
- b0->next = a1; a1->prev = b0;
- fix_identical(b0);
- fix_collinear(a1);
- }
+ a0->next = b1; b1->prev = a0;
+ b0->next = a1; a1->prev = b0;
+ fix_isolated(a0);
+ fix_identical(a0);
+ fix_collinear(b1);
+ fix_isolated(b0);
+ fix_identical(b0);
+ fix_collinear(a1);
done_anything = 1;
}
}
int i;
point *p, *p1;
- printf("newpath\n");
+ printf("SplineSet\n");
for (i = 0; i < nextpoint; i++) {
p = &points[i];
if (p->next) {
- while (p->next) {
- printf(" %d %d %s\n", p->v.x, p->v.y,
- p == &points[i] ? "moveto" : "lineto");
+ do {
+ printf(" %d %d %s 1\n",
+ p->v.x*25, p->v.y*25 - 300,
+ p == &points[i] && p->next ? "m" : "l");
p1 = p->next;
p->prev = p->next = NULL;
p = p1;
- }
- printf(" closepath\n");
+ } while (p);
}
}
- printf("stroke\n");
+ printf("EndSplineSet\n");
}
static void