summaryrefslogtreecommitdiff
path: root/noncore/unsupported/qpdf/xpdf/Gfx.h
Unidiff
Diffstat (limited to 'noncore/unsupported/qpdf/xpdf/Gfx.h') (more/less context) (show whitespace changes)
-rw-r--r--noncore/unsupported/qpdf/xpdf/Gfx.h240
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
18class GString;
19class XRef;
20class Array;
21class Stream;
22class Parser;
23class Dict;
24class OutputDev;
25class GfxFontDict;
26class GfxFont;
27class GfxPattern;
28class GfxShading;
29class GfxAxialShading;
30class GfxState;
31class Gfx;
32struct PDFRectangle;
33
34//------------------------------------------------------------------------
35// Gfx
36//------------------------------------------------------------------------
37
38enum GfxClipType {
39 clipNone,
40 clipNormal,
41 clipEO
42};
43
44enum 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
58struct Operator {
59 char name[4];
60 int numArgs;
61 TchkType tchk[maxArgs];
62 void (Gfx::*func)(Object args[], int numArgs);
63};
64
65class GfxResources {
66public:
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
81private:
82
83 GfxFontDict *fonts;
84 Object xObjDict;
85 Object colorSpaceDict;
86 Object patternDict;
87 Object shadingDict;
88 Object gStateDict;
89 GfxResources *next;
90};
91
92class Gfx {
93public:
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
109private:
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