]> www.fi.muni.cz Git - evince.git/blob - pdf/xpdf/Gfx.h
Fix ( workaround ) for xpdf's global xref feature :-)
[evince.git] / pdf / xpdf / Gfx.h
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 Array;
20 class Stream;
21 class Parser;
22 class Dict;
23 class OutputDev;
24 class GfxFontDict;
25 class GfxFont;
26 struct GfxFontEncoding16;
27 class GfxState;
28 class Gfx;
29
30 //------------------------------------------------------------------------
31 // Gfx
32 //------------------------------------------------------------------------
33
34 enum GfxClipType {
35   clipNone,
36   clipNormal,
37   clipEO
38 };
39
40 enum TchkType {
41   tchkBool,                     // boolean
42   tchkInt,                      // integer
43   tchkNum,                      // number (integer or real)
44   tchkString,                   // string
45   tchkName,                     // name
46   tchkArray,                    // array
47   tchkProps,                    // properties (dictionary or name)
48   tchkSCN,                      // scn/SCN args (number of name)
49   tchkNone                      // used to avoid empty initializer lists
50 };
51
52 #define maxArgs 8
53
54 struct Operator {
55   char name[4];
56   int numArgs;
57   TchkType tchk[maxArgs];
58   void (Gfx::*func)(Object args[], int numArgs);
59 };
60
61 class GfxResources {
62 public:
63
64   GfxResources(GfxResources *next1) { fonts = NULL; next = next1; }
65   ~GfxResources();
66
67   GfxFontDict *fonts;
68   Object xObjDict;
69   Object colorSpaceDict;
70   GfxResources *next;
71 };
72
73 class Gfx {
74 public:
75
76   // Constructor for regular output.
77   Gfx(OutputDev *out1, int pageNum, Dict *resDict,
78       int dpi, double x1, double y1, double x2, double y2, GBool crop,
79       double cropX1, double cropY1, double cropX2, double cropY2,
80       int rotate);
81
82   // Destructor.
83   ~Gfx();
84
85   // Interpret a stream or array of streams.
86   void display(Object *obj);
87
88 private:
89
90   OutputDev *out;               // output device
91   GfxResources *res;            // resource stack
92
93   GfxState *state;              // current graphics state
94   GBool fontChanged;            // set if font or text matrix has changed
95   GfxClipType clip;             // do a clip?
96   int ignoreUndef;              // current BX/EX nesting level
97
98   Parser *parser;               // parser for page content stream(s)
99
100   static Operator opTab[];      // table of operators
101
102   void go();
103   void execOp(Object *cmd, Object args[], int numArgs);
104   Operator *findOp(char *name);
105   GBool checkArg(Object *arg, TchkType type);
106   int getPos();
107   GfxFont *lookupFont(char *name);
108   GBool lookupXObject(char *name, Object *obj);
109   void lookupColorSpace(char *name, Object *obj);
110
111   // graphics state operators
112   void opSave(Object args[], int numArgs);
113   void opRestore(Object args[], int numArgs);
114   void opConcat(Object args[], int numArgs);
115   void opSetDash(Object args[], int numArgs);
116   void opSetFlat(Object args[], int numArgs);
117   void opSetLineJoin(Object args[], int numArgs);
118   void opSetLineCap(Object args[], int numArgs);
119   void opSetMiterLimit(Object args[], int numArgs);
120   void opSetLineWidth(Object args[], int numArgs);
121   void opSetExtGState(Object args[], int numArgs);
122   void opSetRenderingIntent(Object args[], int numArgs);
123
124   // color operators
125   void opSetFillGray(Object args[], int numArgs);
126   void opSetStrokeGray(Object args[], int numArgs);
127   void opSetFillCMYKColor(Object args[], int numArgs);
128   void opSetStrokeCMYKColor(Object args[], int numArgs);
129   void opSetFillRGBColor(Object args[], int numArgs);
130   void opSetStrokeRGBColor(Object args[], int numArgs);
131   void opSetFillColorSpace(Object args[], int numArgs);
132   void opSetStrokeColorSpace(Object args[], int numArgs);
133   void opSetFillColor(Object args[], int numArgs);
134   void opSetStrokeColor(Object args[], int numArgs);
135   void opSetFillColorN(Object args[], int numArgs);
136   void opSetStrokeColorN(Object args[], int numArgs);
137
138   // path segment operators
139   void opMoveTo(Object args[], int numArgs);
140   void opLineTo(Object args[], int numArgs);
141   void opCurveTo(Object args[], int numArgs);
142   void opCurveTo1(Object args[], int numArgs);
143   void opCurveTo2(Object args[], int numArgs);
144   void opRectangle(Object args[], int numArgs);
145   void opClosePath(Object args[], int numArgs);
146
147   // path painting operators
148   void opEndPath(Object args[], int numArgs);
149   void opStroke(Object args[], int numArgs);
150   void opCloseStroke(Object args[], int numArgs);
151   void opFill(Object args[], int numArgs);
152   void opEOFill(Object args[], int numArgs);
153   void opFillStroke(Object args[], int numArgs);
154   void opCloseFillStroke(Object args[], int numArgs);
155   void opEOFillStroke(Object args[], int numArgs);
156   void opCloseEOFillStroke(Object args[], int numArgs);
157   void opShFill(Object args[], int numArgs);
158   void doEndPath();
159
160   // path clipping operators
161   void opClip(Object args[], int numArgs);
162   void opEOClip(Object args[], int numArgs);
163
164   // text object operators
165   void opBeginText(Object args[], int numArgs);
166   void opEndText(Object args[], int numArgs);
167
168   // text state operators
169   void opSetCharSpacing(Object args[], int numArgs);
170   void opSetFont(Object args[], int numArgs);
171   void opSetTextLeading(Object args[], int numArgs);
172   void opSetTextRender(Object args[], int numArgs);
173   void opSetTextRise(Object args[], int numArgs);
174   void opSetWordSpacing(Object args[], int numArgs);
175   void opSetHorizScaling(Object args[], int numArgs);
176
177   // text positioning operators
178   void opTextMove(Object args[], int numArgs);
179   void opTextMoveSet(Object args[], int numArgs);
180   void opSetTextMatrix(Object args[], int numArgs);
181   void opTextNextLine(Object args[], int numArgs);
182
183   // text string operators
184   void opShowText(Object args[], int numArgs);
185   void opMoveShowText(Object args[], int numArgs);
186   void opMoveSetShowText(Object args[], int numArgs);
187   void opShowSpaceText(Object args[], int numArgs);
188   void doShowText(GString *s);
189   int getNextChar16(GfxFontEncoding16 *enc, Guchar *p, int *c16);
190
191   // XObject operators
192   void opXObject(Object args[], int numArgs);
193   void doImage(Stream *str, GBool inlineImg);
194   void doForm(Object *str);
195
196   // in-line image operators
197   void opBeginImage(Object args[], int numArgs);
198   Stream *buildImageStream();
199   void opImageData(Object args[], int numArgs);
200   void opEndImage(Object args[], int numArgs);
201
202   // type 3 font operators
203   void opSetCharWidth(Object args[], int numArgs);
204   void opSetCacheDevice(Object args[], int numArgs);
205
206   // compatibility operators
207   void opBeginIgnoreUndef(Object args[], int numArgs);
208   void opEndIgnoreUndef(Object args[], int numArgs);
209
210   // marked content operators
211   void opBeginMarkedContent(Object args[], int numArgs);
212   void opEndMarkedContent(Object args[], int numArgs);
213   void opMarkPoint(Object args[], int numArgs);
214 };
215
216 #endif