]> git.ipfire.org Git - thirdparty/cups.git/blame - pdftops/XpdfPluginAPI.h
Merge changes from CUPS 1.4svn-r7199.
[thirdparty/cups.git] / pdftops / XpdfPluginAPI.h
CommitLineData
ef416fc2 1/*
2 * XpdfPluginAPI.h
3 *
4 * Copyright 2004 Glyph & Cog, LLC
5 */
6
7#ifndef XPDFPLUGINAPI_H
8#define XPDFPLUGINAPI_H
9
10#ifdef _WIN32
11#include <windows.h>
12#else
13//#define Object XtObject
14//#include <X11/Intrinsic.h>
15//#undef Object
16#endif
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
22/*------------------------------------------------------------------------
23 * Macros
24 *------------------------------------------------------------------------*/
25
26/*
27 * The current API version.
28 */
29#define xpdfPluginAPIVersion 1
30
31#ifdef _WIN32
32# ifdef __cplusplus
33# define PLUGINFUNC(retType) extern "C" __declspec(dllexport) retType
34# else
35# define PLUGINFUNC(retType) extern __declspec(dllexport) retType
36# endif
37#else
38# ifdef __cplusplus
39# define PLUGINFUNC(retType) extern "C" retType
40# else
41# define PLUGINFUNC(retType) extern retType
42# endif
43#endif
44
45/*------------------------------------------------------------------------
46 * Plugin setup/cleanup
47 *------------------------------------------------------------------------*/
48
49/*
50 * All plugins are required to implement two functions:
51 *
52 * -- Initialize the plugin. Returns non-zero if successful.
53 * PLUGINFUNC(XpdfBool) xpdfInitPlugin(void);
54 *
55 * -- Free the plugin.
56 * PLUGINFUNC(void) xpdfFreePlugin(void);
57 */
58
59/*------------------------------------------------------------------------
60 * Types
61 *------------------------------------------------------------------------*/
62
63/*
64 * Standard C boolean -- zero = false, non-zero = true.
65 */
66typedef int XpdfBool;
67#define xpdfTrue 1
68#define xpdfFalse 0
69
70/*
71 * PDF document handle.
72 */
73typedef struct _XpdfDoc *XpdfDoc;
74
75/*
76 * PDF object handle.
77 */
78typedef struct _XpdfObject *XpdfObject;
79
80/*
81 * Document access permissions. Any of these can be bitwise 'or'ed
82 * together. If xpdfPermissionOpen is not included, the document
83 * cannot be opened at all, and the other bits are ignored.
84 */
85typedef unsigned int XpdfPermission;
86#define xpdfPermissionOpen (1 << 0)
87#define xpdfPermissionPrint (1 << 2)
88#define xpdfPermissionChange (1 << 3)
89#define xpdfPermissionCopy (1 << 4)
90#define xpdfPermissionNotes (1 << 5)
91
92/*------------------------------------------------------------------------
93 * Security handler
94 *------------------------------------------------------------------------*/
95
96/*
97 * XpdfSecurityHandler - a security handler plugin should create one
98 * of these and pass it to xpdfRegisterSecurityHandler.
99 */
100#ifdef __cplusplus
101struct XpdfSecurityHandler {
102#else
103typedef struct {
104#endif
105
106 /*
107 * Version of the security handler spec (this document) -- use
108 * xpdfPluginAPIVersion.
109 */
110 int version;
111
112 /*
113 * Security handler name.
114 */
115 char *name;
116
117 /*
118 * Any global data the security handler needs. XpdfViewer will pass
119 * this pointer to all handler functions as the <handlerData>
120 * argument.
121 */
122 void *handlerData;
123
124 /*
125 * Allocate and initialize data for a new document. XpdfViewer will
126 * pass the returned pointer to all other handler functions as the
127 * <docData> argument. Returns non-zero if successful.
128 */
129 XpdfBool (*newDoc)(void *handlerData, XpdfDoc doc,
130 XpdfObject encryptDict, void **docData);
131
132 /*
133 * Free the data allocated by newDoc.
134 */
135 void (*freeDoc)(void *handlerData, void *docData);
136
137 /*
138 * Construct authorization data based on the supplied owner and user
139 * passwords (either or both of which may be NULL). This function
140 * is called in "batch" mode, i.e., if the password was supplied on
141 * the command line or via an Xpdf library API. It should not
142 * generate any user interaction (e.g., a password dialog). It is
143 * not required to support this function: the makeAuthData function
144 * pointer can be set to NULL. Returns non-zero if successful.
145 */
146 XpdfBool (*makeAuthData)(void *handlerData, void *docData,
147 char *ownerPassword, char *userPassword,
148 void **authData);
149
150 /*
151 * Request any needed information (e.g., a password) from the user,
152 * and construct an authorization data object. Returns non-zero if
153 * successful.
154 */
155 XpdfBool (*getAuthData)(void *handlerData, void *docData,
156 void **authData);
157
158 /*
159 * Free the data allocated by getAuthData.
160 */
161 void (*freeAuthData)(void *handlerData, void *docData,
162 void *authData);
163
164 /*
165 * Request permission to access the document. This returns all
166 * permissions granted by authData.
167 */
168 XpdfPermission (*authorize)(void *handlerData, void *docData,
169 void *authData);
170
171 /*
172 * Get the decryption key and algorithm version associated with the
173 * document. Returns non-zero if successful.
174 */
175 XpdfBool (*getKey)(void *handlerData, void *docData,
176 char **key, int *keyLen, int *cryptVersion);
177
178 /*
179 * Free the data allocated by getKey.
180 */
181 void (*freeKey)(void *handlerData, void *docData,
182 char *key, int keyLen);
183
184#ifdef __cplusplus
185};
186#else
187} XpdfSecurityHandler;
188#endif
189
190/*------------------------------------------------------------------------*/
191
192typedef struct {
193 int version;
194
195/*------------------------------------------------------------------------
196 * Document access functions
197 *------------------------------------------------------------------------*/
198
199/*
200 * Get a document's info dictionary. (The returned object must be
201 * freed with xpdfFreeObj.)
202 */
203XpdfObject (*_xpdfGetInfoDict)(XpdfDoc doc);
204
205/*
206 * Get a document's catalog ("root") dictionary. (The returned object
207 * must be freed with xpdfFreeObj.)
208 */
209XpdfObject (*_xpdfGetCatalog)(XpdfDoc doc);
210
211/*------------------------------------------------------------------------
212 * Object access functions
213 *------------------------------------------------------------------------*/
214
215/*
216 * Check an object's type.
217 */
218XpdfBool (*_xpdfObjIsBool)(XpdfObject obj);
219XpdfBool (*_xpdfObjIsInt)(XpdfObject obj);
220XpdfBool (*_xpdfObjIsReal)(XpdfObject obj);
221XpdfBool (*_xpdfObjIsString)(XpdfObject obj);
222XpdfBool (*_xpdfObjIsName)(XpdfObject obj);
223XpdfBool (*_xpdfObjIsNull)(XpdfObject obj);
224XpdfBool (*_xpdfObjIsArray)(XpdfObject obj);
225XpdfBool (*_xpdfObjIsDict)(XpdfObject obj);
226XpdfBool (*_xpdfObjIsStream)(XpdfObject obj);
227XpdfBool (*_xpdfObjIsRef)(XpdfObject obj);
228
229/*
230 * Value access.
231 * (Objects returned by xpdfArrayGet and xpdfDictGet must be freed
232 * with xpdfFreeObj.)
233 */
234XpdfBool (*_xpdfBoolValue)(XpdfObject obj);
235int (*_xpdfIntValue)(XpdfObject obj);
236double (*_xpdfRealValue)(XpdfObject obj);
237int (*_xpdfStringLength)(XpdfObject obj);
238char *(*_xpdfStringValue)(XpdfObject obj);
239char *(*_xpdfNameValue)(XpdfObject obj);
240int (*_xpdfArrayLength)(XpdfObject obj);
241XpdfObject (*_xpdfArrayGet)(XpdfObject obj, int idx);
242XpdfObject (*_xpdfDictGet)(XpdfObject obj, char *key);
243
244/*
245 * Object destruction. NB: *all* objects must be freed after use.
246 */
247void (*_xpdfFreeObj)(XpdfObject obj);
248
249/*------------------------------------------------------------------------
250 * Memory allocation functions
251 *------------------------------------------------------------------------*/
252
253void *(*_xpdfMalloc)(int size);
254void *(*_xpdfRealloc)(void *p, int size);
255void (*_xpdfFree)(void *p);
256
257/*------------------------------------------------------------------------
258 * Security handler functions
259 *------------------------------------------------------------------------*/
260
261/*
262 * Register a new security handler.
263 */
264void (*_xpdfRegisterSecurityHandler)(XpdfSecurityHandler *handler);
265
266/*------------------------------------------------------------------------*/
267
268} XpdfPluginVecTable;
269
270#ifdef _WIN32
271
272extern __declspec(dllexport) XpdfPluginVecTable xpdfPluginVecTable;
273
274#define xpdfPluginSetup \
275 extern __declspec(dllexport) \
276 XpdfPluginVecTable xpdfPluginVecTable = {xpdfPluginAPIVersion};
277
278#else
279
280extern XpdfPluginVecTable xpdfPluginVecTable;
281
282#define xpdfPluginSetup \
283 XpdfPluginVecTable xpdfPluginVecTable = {xpdfPluginAPIVersion};
284
285#endif
286
287#define xpdfGetInfoDict (*xpdfPluginVecTable._xpdfGetInfoDict)
288#define xpdfGetCatalog (*xpdfPluginVecTable._xpdfGetCatalog)
289#ifdef _WIN32
290#define xpdfWin32GetWindow (*xpdfPluginVecTable._xpdfWin32GetWindow)
291#else
292#define xpdfXGetWindow (*xpdfPluginVecTable._xpdfXGetWindow)
293#endif
294#define xpdfObjIsBool (*xpdfPluginVecTable._xpdfObjIsBool)
295#define xpdfObjIsInt (*xpdfPluginVecTable._xpdfObjIsInt)
296#define xpdfObjIsReal (*xpdfPluginVecTable._xpdfObjIsReal)
297#define xpdfObjIsString (*xpdfPluginVecTable._xpdfObjIsString)
298#define xpdfObjIsName (*xpdfPluginVecTable._xpdfObjIsName)
299#define xpdfObjIsNull (*xpdfPluginVecTable._xpdfObjIsNull)
300#define xpdfObjIsArray (*xpdfPluginVecTable._xpdfObjIsArray)
301#define xpdfObjIsDict (*xpdfPluginVecTable._xpdfObjIsDict)
302#define xpdfObjIsStream (*xpdfPluginVecTable._xpdfObjIsStream)
303#define xpdfObjIsRef (*xpdfPluginVecTable._xpdfObjIsRef)
304#define xpdfBoolValue (*xpdfPluginVecTable._xpdfBoolValue)
305#define xpdfIntValue (*xpdfPluginVecTable._xpdfIntValue)
306#define xpdfRealValue (*xpdfPluginVecTable._xpdfRealValue)
307#define xpdfStringLength (*xpdfPluginVecTable._xpdfStringLength)
308#define xpdfStringValue (*xpdfPluginVecTable._xpdfStringValue)
309#define xpdfNameValue (*xpdfPluginVecTable._xpdfNameValue)
310#define xpdfArrayLength (*xpdfPluginVecTable._xpdfArrayLength)
311#define xpdfArrayGet (*xpdfPluginVecTable._xpdfArrayGet)
312#define xpdfDictGet (*xpdfPluginVecTable._xpdfDictGet)
313#define xpdfFreeObj (*xpdfPluginVecTable._xpdfFreeObj)
314#define xpdfMalloc (*xpdfPluginVecTable._xpdfMalloc)
315#define xpdfRealloc (*xpdfPluginVecTable._xpdfRealloc)
316#define xpdfFree (*xpdfPluginVecTable._xpdfFree)
317#define xpdfRegisterSecurityHandler (*xpdfPluginVecTable._xpdfRegisterSecurityHandler)
318
319#ifdef __cplusplus
320}
321#endif
322
323#endif