Diffstat (limited to 'noncore/unsupported/qpdf/xpdf/Gfx.h') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/unsupported/qpdf/xpdf/Gfx.h | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/noncore/unsupported/qpdf/xpdf/Gfx.h b/noncore/unsupported/qpdf/xpdf/Gfx.h new file mode 100644 index 0000000..be5f2c2 --- a/dev/null +++ b/noncore/unsupported/qpdf/xpdf/Gfx.h | |||
@@ -0,0 +1,240 @@ | |||
1 | //======================================================================== | ||
2 | // | ||
3 | // Gfx.h | ||
4 | // | ||
5 | // Copyright 1996 Derek B. Noonburg | ||
6 | // | ||
7 | //======================================================================== | ||
8 | |||
9 | #ifndef GFX_H | ||
10 | #define GFX_H | ||
11 | |||
12 | #ifdef __GNUC__ | ||
13 | #pragma interface | ||
14 | #endif | ||
15 | |||
16 | #include "gtypes.h" | ||
17 | |||
18 | class GString; | ||
19 | class XRef; | ||
20 | class Array; | ||
21 | class Stream; | ||
22 | class Parser; | ||
23 | class Dict; | ||
24 | class OutputDev; | ||
25 | class GfxFontDict; | ||
26 | class GfxFont; | ||
27 | class GfxPattern; | ||
28 | class GfxShading; | ||
29 | class GfxAxialShading; | ||
30 | class GfxState; | ||
31 | class Gfx; | ||
32 | struct PDFRectangle; | ||
33 | |||
34 | //------------------------------------------------------------------------ | ||
35 | // Gfx | ||
36 | //------------------------------------------------------------------------ | ||
37 | |||
38 | enum GfxClipType { | ||
39 | clipNone, | ||
40 | clipNormal, | ||
41 | clipEO | ||
42 | }; | ||
43 | |||
44 | enum TchkType { | ||
45 | tchkBool, // boolean | ||
46 | tchkInt, // integer | ||
47 | tchkNum, // number (integer or real) | ||
48 | tchkString, // string | ||
49 | tchkName, // name | ||
50 | tchkArray, // array | ||
51 | tchkProps, // properties (dictionary or name) | ||
52 | tchkSCN, // scn/SCN args (number of name) | ||
53 | tchkNone // used to avoid empty initializer lists | ||
54 | }; | ||
55 | |||
56 | #define maxArgs 8 | ||
57 | |||
58 | struct Operator { | ||
59 | char name[4]; | ||
60 | int numArgs; | ||
61 | TchkType tchk[maxArgs]; | ||
62 | void (Gfx::*func)(Object args[], int numArgs); | ||
63 | }; | ||
64 | |||
65 | class GfxResources { | ||
66 | public: | ||
67 | |||
68 | GfxResources(XRef *xref, Dict *resDict, GfxResources *nextA); | ||
69 | ~GfxResources(); | ||
70 | |||
71 | GfxFont *lookupFont(char *name); | ||
72 | GBool lookupXObject(char *name, Object *obj); | ||
73 | GBool lookupXObjectNF(char *name, Object *obj); | ||
74 | void lookupColorSpace(char *name, Object *obj); | ||
75 | GfxPattern *lookupPattern(char *name); | ||
76 | GfxShading *lookupShading(char *name); | ||
77 | GBool lookupGState(char *name, Object *obj); | ||
78 | |||
79 | GfxResources *getNext() { return next; } | ||
80 | |||
81 | private: | ||
82 | |||
83 | GfxFontDict *fonts; | ||
84 | Object xObjDict; | ||
85 | Object colorSpaceDict; | ||
86 | Object patternDict; | ||
87 | Object shadingDict; | ||
88 | Object gStateDict; | ||
89 | GfxResources *next; | ||
90 | }; | ||
91 | |||
92 | class Gfx { | ||
93 | public: | ||
94 | |||
95 | // Constructor for regular output. | ||
96 | Gfx(XRef *xrefA, OutputDev *outA, int pageNum, Dict *resDict, fouble dpi, | ||
97 | PDFRectangle *box, GBool crop, PDFRectangle *cropBox, int rotate, | ||
98 | GBool printCommandsA); | ||
99 | |||
100 | // Destructor. | ||
101 | ~Gfx(); | ||
102 | |||
103 | // Interpret a stream or array of streams. | ||
104 | void display(Object *obj, GBool topLevel = gTrue); | ||
105 | |||
106 | void doWidgetForm(Object *str, fouble xMin, fouble yMin, | ||
107 | fouble xMax, fouble yMax); | ||
108 | |||
109 | private: | ||
110 | |||
111 | XRef *xref; // the xref table for this PDF file | ||
112 | OutputDev *out; // output device | ||
113 | GBool printCommands; // print the drawing commands (for debugging) | ||
114 | GfxResources *res; // resource stack | ||
115 | |||
116 | GfxState *state; // current graphics state | ||
117 | GBool fontChanged; // set if font or text matrix has changed | ||
118 | GfxClipType clip; // do a clip? | ||
119 | int ignoreUndef; // current BX/EX nesting level | ||
120 | fouble baseMatrix[6]; // default matrix for most recent | ||
121 | // page/form/pattern | ||
122 | |||
123 | Parser *parser; // parser for page content stream(s) | ||
124 | |||
125 | static Operator opTab[];// table of operators | ||
126 | |||
127 | void go(GBool topLevel); | ||
128 | void execOp(Object *cmd, Object args[], int numArgs); | ||
129 | Operator *findOp(char *name); | ||
130 | GBool checkArg(Object *arg, TchkType type); | ||
131 | int getPos(); | ||
132 | |||
133 | // graphics state operators | ||
134 | void opSave(Object args[], int numArgs); | ||
135 | void opRestore(Object args[], int numArgs); | ||
136 | void opConcat(Object args[], int numArgs); | ||
137 | void opSetDash(Object args[], int numArgs); | ||
138 | void opSetFlat(Object args[], int numArgs); | ||
139 | void opSetLineJoin(Object args[], int numArgs); | ||
140 | void opSetLineCap(Object args[], int numArgs); | ||
141 | void opSetMiterLimit(Object args[], int numArgs); | ||
142 | void opSetLineWidth(Object args[], int numArgs); | ||
143 | void opSetExtGState(Object args[], int numArgs); | ||
144 | void opSetRenderingIntent(Object args[], int numArgs); | ||
145 | |||
146 | // color operators | ||
147 | void opSetFillGray(Object args[], int numArgs); | ||
148 | void opSetStrokeGray(Object args[], int numArgs); | ||
149 | void opSetFillCMYKColor(Object args[], int numArgs); | ||
150 | void opSetStrokeCMYKColor(Object args[], int numArgs); | ||
151 | void opSetFillRGBColor(Object args[], int numArgs); | ||
152 | void opSetStrokeRGBColor(Object args[], int numArgs); | ||
153 | void opSetFillColorSpace(Object args[], int numArgs); | ||
154 | void opSetStrokeColorSpace(Object args[], int numArgs); | ||
155 | void opSetFillColor(Object args[], int numArgs); | ||
156 | void opSetStrokeColor(Object args[], int numArgs); | ||
157 | void opSetFillColorN(Object args[], int numArgs); | ||
158 | void opSetStrokeColorN(Object args[], int numArgs); | ||
159 | |||
160 | // path segment operators | ||
161 | void opMoveTo(Object args[], int numArgs); | ||
162 | void opLineTo(Object args[], int numArgs); | ||
163 | void opCurveTo(Object args[], int numArgs); | ||
164 | void opCurveTo1(Object args[], int numArgs); | ||
165 | void opCurveTo2(Object args[], int numArgs); | ||
166 | void opRectangle(Object args[], int numArgs); | ||
167 | void opClosePath(Object args[], int numArgs); | ||
168 | |||
169 | // path painting operators | ||
170 | void opEndPath(Object args[], int numArgs); | ||
171 | void opStroke(Object args[], int numArgs); | ||
172 | void opCloseStroke(Object args[], int numArgs); | ||
173 | void opFill(Object args[], int numArgs); | ||
174 | void opEOFill(Object args[], int numArgs); | ||
175 | void opFillStroke(Object args[], int numArgs); | ||
176 | void opCloseFillStroke(Object args[], int numArgs); | ||
177 | void opEOFillStroke(Object args[], int numArgs); | ||
178 | void opCloseEOFillStroke(Object args[], int numArgs); | ||
179 | void doPatternFill(GBool eoFill); | ||
180 | void opShFill(Object args[], int numArgs); | ||
181 | void doAxialShFill(GfxAxialShading *shading); | ||
182 | void doEndPath(); | ||
183 | |||
184 | // path clipping operators | ||
185 | void opClip(Object args[], int numArgs); | ||
186 | void opEOClip(Object args[], int numArgs); | ||
187 | |||
188 | // text object operators | ||
189 | void opBeginText(Object args[], int numArgs); | ||
190 | void opEndText(Object args[], int numArgs); | ||
191 | |||
192 | // text state operators | ||
193 | void opSetCharSpacing(Object args[], int numArgs); | ||
194 | void opSetFont(Object args[], int numArgs); | ||
195 | void opSetTextLeading(Object args[], int numArgs); | ||
196 | void opSetTextRender(Object args[], int numArgs); | ||
197 | void opSetTextRise(Object args[], int numArgs); | ||
198 | void opSetWordSpacing(Object args[], int numArgs); | ||
199 | void opSetHorizScaling(Object args[], int numArgs); | ||
200 | |||
201 | // text positioning operators | ||
202 | void opTextMove(Object args[], int numArgs); | ||
203 | void opTextMoveSet(Object args[], int numArgs); | ||
204 | void opSetTextMatrix(Object args[], int numArgs); | ||
205 | void opTextNextLine(Object args[], int numArgs); | ||
206 | |||
207 | // text string operators | ||
208 | void opShowText(Object args[], int numArgs); | ||
209 | void opMoveShowText(Object args[], int numArgs); | ||
210 | void opMoveSetShowText(Object args[], int numArgs); | ||
211 | void opShowSpaceText(Object args[], int numArgs); | ||
212 | void doShowText(GString *s); | ||
213 | |||
214 | // XObject operators | ||
215 | void opXObject(Object args[], int numArgs); | ||
216 | void doImage(Object *ref, Stream *str, GBool inlineImg); | ||
217 | void doForm(Object *str); | ||
218 | void doForm1(Object *str, Dict *resDict, fouble *matrix, fouble *bbox); | ||
219 | |||
220 | // in-line image operators | ||
221 | void opBeginImage(Object args[], int numArgs); | ||
222 | Stream *buildImageStream(); | ||
223 | void opImageData(Object args[], int numArgs); | ||
224 | void opEndImage(Object args[], int numArgs); | ||
225 | |||
226 | // type 3 font operators | ||
227 | void opSetCharWidth(Object args[], int numArgs); | ||
228 | void opSetCacheDevice(Object args[], int numArgs); | ||
229 | |||
230 | // compatibility operators | ||
231 | void opBeginIgnoreUndef(Object args[], int numArgs); | ||
232 | void opEndIgnoreUndef(Object args[], int numArgs); | ||
233 | |||
234 | // marked content operators | ||
235 | void opBeginMarkedContent(Object args[], int numArgs); | ||
236 | void opEndMarkedContent(Object args[], int numArgs); | ||
237 | void opMarkPoint(Object args[], int numArgs); | ||
238 | }; | ||
239 | |||
240 | #endif | ||