ref: dd33a15477c8608bad8f35a9fa908ad2086c6d1d
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[] = { /* 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 */ };