beta-0.89.2
[luatex.git] / source / libs / poppler / poppler-src / poppler / XpdfPluginAPI.cc
blob834c681d991367dcdb94f2a7cb18cf2f97322795
1 //========================================================================
2 //
3 // XpdfPluginAPI.cc
4 //
5 // Copyright 2004 Glyph & Cog, LLC
6 //
7 //========================================================================
9 //========================================================================
11 // Modified under the Poppler project - http://poppler.freedesktop.org
13 // All changes made under the Poppler project to this file are licensed
14 // under GPL version 2 or later
16 // Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net>
17 // Copyright (C) 2012 Albert Astals Cid <aacid@kde.org>
19 // To see a description of the changes please see the Changelog file that
20 // came with your tarball or type make ChangeLog if you are building from git
22 //========================================================================
24 #include "config.h"
26 #ifdef ENABLE_PLUGINS
28 #include "gmem.h"
29 #include "GlobalParams.h"
30 #include "Object.h"
31 #include "PDFDoc.h"
32 #include "XpdfPluginAPI.h"
34 //------------------------------------------------------------------------
36 //~ This should use a pool of Objects; change xpdfFreeObj to match.
37 static Object *allocObj() {
38 return (Object *)gmalloc(sizeof(Object));
41 //------------------------------------------------------------------------
42 // Document access functions
43 //------------------------------------------------------------------------
45 XpdfObject _xpdfGetInfoDict(XpdfDoc doc) {
46 Object *obj;
48 obj = allocObj();
49 return (XpdfObject)((PDFDoc *)doc)->getDocInfo(obj);
52 XpdfObject _xpdfGetCatalog(XpdfDoc doc) {
53 Object *obj;
55 obj = allocObj();
56 return (XpdfObject)((PDFDoc *)doc)->getXRef()->getCatalog(obj);
59 //------------------------------------------------------------------------
60 // Object access functions.
61 //------------------------------------------------------------------------
63 XpdfBool _xpdfObjIsBool(XpdfObject obj) {
64 return (XpdfBool)((Object *)obj)->isBool();
67 XpdfBool _xpdfObjIsInt(XpdfObject obj) {
68 return (XpdfBool)((Object *)obj)->isInt();
71 XpdfBool _xpdfObjIsReal(XpdfObject obj) {
72 return (XpdfBool)((Object *)obj)->isReal();
75 XpdfBool _xpdfObjIsNumber(XpdfObject obj) {
76 return (XpdfBool)((Object *)obj)->isNum();
79 XpdfBool _xpdfObjIsString(XpdfObject obj) {
80 return (XpdfBool)((Object *)obj)->isString();
83 XpdfBool _xpdfObjIsName(XpdfObject obj) {
84 return (XpdfBool)((Object *)obj)->isName();
87 XpdfBool _xpdfObjIsNull(XpdfObject obj) {
88 return (XpdfBool)((Object *)obj)->isNull();
91 XpdfBool _xpdfObjIsArray(XpdfObject obj) {
92 return (XpdfBool)((Object *)obj)->isArray();
95 XpdfBool _xpdfObjIsDict(XpdfObject obj) {
96 return (XpdfBool)((Object *)obj)->isDict();
99 XpdfBool _xpdfObjIsStream(XpdfObject obj) {
100 return (XpdfBool)((Object *)obj)->isStream();
103 XpdfBool _xpdfObjIsRef(XpdfObject obj) {
104 return (XpdfBool)((Object *)obj)->isRef();
107 XpdfBool _xpdfBoolValue(XpdfObject obj) {
108 return (XpdfBool)((Object *)obj)->getBool();
111 int _xpdfIntValue(XpdfObject obj) {
112 if (!((Object *)obj)->isInt()) {
113 return 0;
115 return ((Object *)obj)->getInt();
118 double _xpdfRealValue(XpdfObject obj) {
119 if (!((Object *)obj)->isReal()) {
120 return 0;
122 return ((Object *)obj)->getReal();
125 double _xpdfNumberValue(XpdfObject obj) {
126 if (!((Object *)obj)->isNum()) {
127 return 0;
129 return ((Object *)obj)->getNum();
132 int _xpdfStringLength(XpdfObject obj) {
133 if (!((Object *)obj)->isString()) {
134 return 0;
136 return ((Object *)obj)->getString()->getLength();
139 char *_xpdfStringValue(XpdfObject obj) {
140 if (!((Object *)obj)->isString()) {
141 return 0;
143 return ((Object *)obj)->getString()->getCString();
146 char *_xpdfNameValue(XpdfObject obj) {
147 if (!((Object *)obj)->isName()) {
148 return NULL;
150 return ((Object *)obj)->getName();
153 int _xpdfArrayLength(XpdfObject obj) {
154 if (!((Object *)obj)->isArray()) {
155 return 0;
157 return ((Object *)obj)->arrayGetLength();
160 XpdfObject _xpdfArrayGet(XpdfObject obj, int idx) {
161 Object *elem;
163 elem = allocObj();
164 if (!((Object *)obj)->isArray()) {
165 return (XpdfObject)elem->initNull();
167 return (XpdfObject)((Object *)obj)->arrayGet(idx, elem);
170 XpdfObject _xpdfDictGet(XpdfObject obj, char *key) {
171 Object *elem;
173 elem = allocObj();
174 if (!((Object *)obj)->isDict()) {
175 return (XpdfObject)elem->initNull();
177 return (XpdfObject)((Object *)obj)->dictLookup(key, elem);
180 void _xpdfFreeObj(XpdfObject obj) {
181 ((Object *)obj)->free();
182 gfree(obj);
185 //------------------------------------------------------------------------
186 // Memory allocation functions
187 //------------------------------------------------------------------------
189 void *_xpdfMalloc(int size) {
190 return gmalloc(size);
193 void *_xpdfRealloc(void *p, int size) {
194 return grealloc(p, size);
197 void _xpdfFree(void *p) {
198 gfree(p);
201 //------------------------------------------------------------------------
202 // Security handlers
203 //------------------------------------------------------------------------
205 void _xpdfRegisterSecurityHandler(XpdfSecurityHandler *handler) {
206 if (handler->version <= xpdfPluginAPIVersion) {
207 globalParams->addSecurityHandler(handler);
211 //------------------------------------------------------------------------
213 XpdfPluginVecTable xpdfPluginVecTable = {
214 xpdfPluginAPIVersion,
215 &_xpdfGetInfoDict,
216 &_xpdfGetCatalog,
217 &_xpdfObjIsBool,
218 &_xpdfObjIsInt,
219 &_xpdfObjIsReal,
220 &_xpdfObjIsString,
221 &_xpdfObjIsName,
222 &_xpdfObjIsNull,
223 &_xpdfObjIsArray,
224 &_xpdfObjIsDict,
225 &_xpdfObjIsStream,
226 &_xpdfObjIsRef,
227 &_xpdfBoolValue,
228 &_xpdfIntValue,
229 &_xpdfRealValue,
230 &_xpdfStringLength,
231 &_xpdfStringValue,
232 &_xpdfNameValue,
233 &_xpdfArrayLength,
234 &_xpdfArrayGet,
235 &_xpdfDictGet,
236 &_xpdfFreeObj,
237 &_xpdfMalloc,
238 &_xpdfRealloc,
239 &_xpdfFree,
240 &_xpdfRegisterSecurityHandler,
243 #endif // ENABLE_PLUGINS