ref: 51e620a808436a17a637c3be7c97b5f0762a6d95
dir: /op.c/
#include <u.h>
#include <libc.h>
#include "pdf.h"
enum {
Evenodd = 1<<0,
Nonstroking = 1<<1,
Leading = 1<<2,
Nextline = 1<<3,
N = -1,
};
typedef struct Op Op;
struct Op {
char *s;
int (*f)(Op *op, Object *argv);
int argc;
int flags;
};
static int
gspush(Op *op, Object *argv)
{
}
static int
gspop(Op *op, Object *argv)
{
}
static Op ops[] = {
/* 7.8.2 Compatibility operators */
{"BX", cobegin, 0,}, /* begin a compatilibity section */
{"EX", coend, 0,}, /* end a compatilibity section */
/* 8.4.4 Graphics state operators */
{"q", gspush, 0,}, /* push the current graphics state (gs) on gs stack */
{"Q", gspop, 0,}, /* pop ^ */
{"cm", gsctm, 6,}, /* current transformation matrix (ctm) */
{"w", gswidth, 1,}, /* line width */
{"J", gscap, 1,}, /* line cap style */
{"j", gsjoin, 1,}, /* line join style */
{"M", gsmiterlim, 1,}, /* miter limit */
{"d", gsdash, 2,}, /* line dash pattern */
{"ri", gsintent, 1,}, /* colour rendering intent */
{"i", gsflatness, 1,}, /* flatness tolerance */
{"gs", gsstate, 1,}, /* graphics state parameters */
/* 8.5.2 Path construction operators */
{"m", pcmove, 2,}, /* move to coords */
{"l", pcline, 2,}, /* straight line to coords */
{"c", pccurve, 6,}, /* Bézier curve */
{"v", pccurve, 4,}, /* Bézier curve */
{"y", pccurve, 4,}, /* Bézier curve */
{"h", pcsubpath, 0}, /* close subpath */
{"re", pcrect, 4,}, /* rectangle */
/* 8.5.3 Path painting operators */
{"S", ppstroke, 0,}, /* stroke the path */
{"s", ppstrokec, 0,}, /* close and stroke */
{"f", ppfill, 0,}, /* fill */
{"F", ppfill, 0,}, /* same damn thing, but DEPRECATED */
{"f*", ppfill, 0, Evenodd,}, /* fill, even/odd rule */
{"B", ppfills, 0,}, /* fill and stroke */
{"B*", ppfills, 0, Evenodd,}, /* fill and stroke, even/odd rule */
{"b", ppfillcfs, 0,}, /* close, fill and stroke */
{"b*", ppfillcfs, 0, Evenodd,}, /* close, fill and stroke, even/odd rule */
{"n", ppc, 0, 0}, /* end the path */
/* 8.5.4 Clipping path operators */
{"W", cpclip, 0,}, /* clip */
{"W*", cpclip, 0, Evenodd,}, /* clip, even/odd rule */
/* 8.6.8 Colour operators */
{"CS", cspace, 1,}, /* colour space */
{"cs", cspace, 1, Nonstroking,}, /* colour space, nonstroking */
{"SC", ccolour, N,}, /* colour */
{"sc", ccolour, N, Nonstroking,}, /* colour, nonstroking */
{"SCN", ccolour2, N,}, /* color (more spaces) */
{"scn", ccolour2, N,}, /* color (more spaces), nonstroking */
{"G", cgray, 1,}, /* gray */
{"g", cgray, 1, Nonstroking,}, /* gray, nonstroking */
{"RG", crgb, 3,}, /* RGB */
{"rg", crgb, 3, Nonstroking,}, /* RGB, nonstroking */
{"K", ccmyk, 4,}, /* CMYK */
{"k", ccmyk, 4, Nonstroking,}, /* CMYK, nonstroking */
/* 8.7.4.2 Shading operator */
{"sh", sshade, 1,}, /* shading */
/* 8.8 External objects */
{"Do", eoobject, 1,}, /* paint XObject */
/* 8.9.7 Inline images */
{"BI", iibegin, 0,}, /* begin */
{"ID", iidata, 0,}, /* data */
{"EI", iiend, 0,}, /* end */
/* 9.3.1 Text state parameters */
{"Tc", tsspace, 1,}, /* spacing */
{"Tw", tswspace, 1,}, /* word spacing */
{"Tz", tshscale, 1,}, /* horizontal spacing */
{"TL", tslead, 1,}, /* leading */
{"Tf", tsfontsz, 1,}, /* font size */
{"Tr", tsrendmode, 1,}, /* rendeing mode */
{"Ts", tsrise, 1,}, /* rise */
/* 9.4.1 Text objects */
{"BT", tobegin, 0,}, /* begin */
{"ET", toend, 0,}, /* end */
/* 9.4.2 Text position operators */
{"Td", tpmove, 2,}, /* move, next line */
{"TD", tpmove, 2, Leading,}, /* move, next line, leading */
{"Tm", tpmatrix, 6,}, /* (line) matrix */
{"T*", tpmove0, 0, Leading,}, /* move, next line, leading */
/* 9.4.3 Text showing operators */
{"Tj", thshow, 1,}, /* show string */
{"'", thshow, 1, Nextline,}, /* next line & show */
{"\"", thshow, 3, Nextline|TwTc,}, /* next line, Tw, Tc & show */
{"TJ", thshowarr, 1,}, /* show array */
/* 9.6.4 Type 3 font operators */
{"d0", t3width, 2,}, /* width info */
{"d1", t3widthbb, 6,}, /* width & bounding box */
};