diff options
author | Paul Gardiner <paulg.artifex@glidos.net> | 2012-08-30 15:29:50 +0100 |
---|---|---|
committer | Paul Gardiner <paulg.artifex@glidos.net> | 2012-08-31 17:06:11 +0100 |
commit | 48f3bc177ff70e855bd7d602e38351d873bae999 (patch) | |
tree | 96a9b5a67a1abf2b650ce740f09bd08a5b859753 | |
parent | a99ce016e03d94498a914ed8a060b1355c693592 (diff) | |
download | mupdf-48f3bc177ff70e855bd7d602e38351d873bae999.tar.xz |
Forms: provide js engine method for determining object type
-rw-r--r-- | pdf/mupdf-internal.h | 11 | ||||
-rw-r--r-- | pdf/pdf_jsimp_cpp.c | 10 | ||||
-rw-r--r-- | pdf/pdf_jsimp_cpp.h | 1 | ||||
-rw-r--r-- | pdf/pdf_jsimp_v8.cpp | 20 |
4 files changed, 42 insertions, 0 deletions
diff --git a/pdf/mupdf-internal.h b/pdf/mupdf-internal.h index 9229bf2d..d3326fb4 100644 --- a/pdf/mupdf-internal.h +++ b/pdf/mupdf-internal.h @@ -653,6 +653,15 @@ typedef pdf_jsimp_obj *(pdf_jsimp_method)(void *jsctx, void *obj, int argc, pdf_ typedef pdf_jsimp_obj *(pdf_jsimp_getter)(void *jsctx, void *obj); typedef void (pdf_jsimp_setter)(void *jsctx, void *obj, pdf_jsimp_obj *val); +enum +{ + JS_TYPE_UNKNOWN, + JS_TYPE_NULL, + JS_TYPE_STRING, + JS_TYPE_NUMBER, + JS_TYPE_ARRAY +}; + pdf_jsimp *pdf_new_jsimp(fz_context *ctx, void *jsctx); void pdf_drop_jsimp(pdf_jsimp *imp); @@ -665,6 +674,8 @@ void pdf_jsimp_set_global_type(pdf_jsimp *imp, pdf_jsimp_type *type); pdf_jsimp_obj *pdf_jsimp_new_obj(pdf_jsimp *imp, pdf_jsimp_type *type, void *obj); void pdf_jsimp_drop_obj(pdf_jsimp *imp, pdf_jsimp_obj *obj); +int pdf_jsimp_toType(pdf_jsimp *imp, pdf_jsimp_obj *obj); + pdf_jsimp_obj *pdf_jsimp_fromString(pdf_jsimp *imp, char *str); char *pdf_jsimp_toString(pdf_jsimp *imp, pdf_jsimp_obj *obj); diff --git a/pdf/pdf_jsimp_cpp.c b/pdf/pdf_jsimp_cpp.c index b1767700..649d42c4 100644 --- a/pdf/pdf_jsimp_cpp.c +++ b/pdf/pdf_jsimp_cpp.c @@ -83,6 +83,16 @@ void pdf_jsimp_drop_obj(pdf_jsimp *imp, pdf_jsimp_obj *obj) fz_warn(pdf_jsimp_ctx_cpp(imp), "%s", err); } +int pdf_jsimp_toType(pdf_jsimp *imp, pdf_jsimp_obj *obj) +{ + int type = 0; + const char *err = pdf_jsimp_toType_cpp(imp, obj, &type); + if (err != NULL) + fz_throw(pdf_jsimp_ctx_cpp(imp), "%s", err); + + return type; +} + pdf_jsimp_obj *pdf_jsimp_fromString(pdf_jsimp *imp, char *str) { pdf_jsimp_obj *obj = NULL; diff --git a/pdf/pdf_jsimp_cpp.h b/pdf/pdf_jsimp_cpp.h index 09e78a9d..a777791d 100644 --- a/pdf/pdf_jsimp_cpp.h +++ b/pdf/pdf_jsimp_cpp.h @@ -12,6 +12,7 @@ const char *pdf_jsimp_addproperty_cpp(pdf_jsimp *imp, pdf_jsimp_type *type, char const char *pdf_jsimp_set_global_type_cpp(pdf_jsimp *imp, pdf_jsimp_type *type); const char *pdf_jsimp_new_obj_cpp(pdf_jsimp *imp, pdf_jsimp_type *type, void *natobj, pdf_jsimp_obj **obj); const char *pdf_jsimp_drop_obj_cpp(pdf_jsimp *imp, pdf_jsimp_obj *obj); +const char *pdf_jsimp_toType_cpp(pdf_jsimp *imp, pdf_jsimp_obj *obj, int *type); const char *pdf_jsimp_fromString_cpp(pdf_jsimp *imp, char *str, pdf_jsimp_obj **obj); const char *pdf_jsimp_toString_cpp(pdf_jsimp *imp, pdf_jsimp_obj *obj, char **str); const char *pdf_jsimp_fromNumber_cpp(pdf_jsimp *imp, double num, pdf_jsimp_obj **obj); diff --git a/pdf/pdf_jsimp_v8.cpp b/pdf/pdf_jsimp_v8.cpp index 522a747a..2db77bef 100644 --- a/pdf/pdf_jsimp_v8.cpp +++ b/pdf/pdf_jsimp_v8.cpp @@ -154,6 +154,20 @@ public: pobj.Dispose(); } + int type() + { + if (pobj->IsNull()) + return JS_TYPE_NULL; + else if (pobj->IsString() || pobj->IsStringObject()) + return JS_TYPE_STRING; + else if (pobj->IsNumber() || pobj->IsNumberObject()) + return JS_TYPE_NUMBER; + else if (pobj->IsArray()) + return JS_TYPE_ARRAY; + else + return JS_TYPE_UNKNOWN; + } + char *toString() { delete utf8; @@ -365,6 +379,12 @@ extern "C" const char *pdf_jsimp_drop_obj_cpp(pdf_jsimp *imp, pdf_jsimp_obj *obj return NULL; } +extern "C" const char *pdf_jsimp_toType_cpp(pdf_jsimp *imp, pdf_jsimp_obj *obj, int *type) +{ + *type = reinterpret_cast<PDFJSImpObject *>(obj)->type(); + return NULL; +} + extern "C" const char *pdf_jsimp_fromString_cpp(pdf_jsimp *imp, char *str, pdf_jsimp_obj **obj) { *obj = reinterpret_cast<pdf_jsimp_obj *>(new PDFJSImpObject(str)); |