In a Type 2 charstring, an rlineto operator can take up to 24 pairs of
co-ordinates, so most contours need only one rmoveto and one rlineto.
emit_contour(point *p0)
{
point *p = p0, *p1;
+ int stacksize = 0;
if (p->prev) p->prev->next = NULL; /* Break the loop. */
do {
+ stacksize += 2;
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");
+ p == p0 ? "rmoveto" : stacksize >= 48 ? "rlineto" : "");
+ stacksize %= 48;
cur = p->v;
p1 = p->next;
p->prev = p->next = NULL;
p = p1;
} while (p);
+ if (stacksize != 0) printf("rlineto\n");
}
static void