From e6ed164c3935160d3d42aa15017abe2863bbdaac Mon Sep 17 00:00:00 2001 From: Paul Gardiner Date: Thu, 6 Sep 2012 15:10:26 +0100 Subject: Forms: support property access in the javascript engine --- pdf/mupdf-internal.h | 2 ++ pdf/pdf_jsimp_cpp.c | 10 ++++++++++ pdf/pdf_jsimp_cpp.h | 1 + pdf/pdf_jsimp_v8.cpp | 16 +++++++++++----- 4 files changed, 24 insertions(+), 5 deletions(-) (limited to 'pdf') diff --git a/pdf/mupdf-internal.h b/pdf/mupdf-internal.h index 347f74b5..1d1fd4e7 100644 --- a/pdf/mupdf-internal.h +++ b/pdf/mupdf-internal.h @@ -690,6 +690,8 @@ double pdf_jsimp_to_number(pdf_jsimp *imp, pdf_jsimp_obj *obj); int pdf_jsimp_array_len(pdf_jsimp *imp, pdf_jsimp_obj *obj); pdf_jsimp_obj *pdf_jsimp_array_item(pdf_jsimp *imp, pdf_jsimp_obj *obj, int i); +pdf_jsimp_obj *pdf_jsimp_property(pdf_jsimp *imp, pdf_jsimp_obj *obj, char *prop); + void pdf_jsimp_execute(pdf_jsimp *imp, char *code); void pdf_jsimp_execute_count(pdf_jsimp *imp, char *code, int count); diff --git a/pdf/pdf_jsimp_cpp.c b/pdf/pdf_jsimp_cpp.c index 90f2a6e8..d47ffc8d 100644 --- a/pdf/pdf_jsimp_cpp.c +++ b/pdf/pdf_jsimp_cpp.c @@ -153,6 +153,16 @@ pdf_jsimp_obj *pdf_jsimp_array_item(pdf_jsimp *imp, pdf_jsimp_obj *obj, int i) return item; } +pdf_jsimp_obj *pdf_jsimp_property(pdf_jsimp *imp, pdf_jsimp_obj *obj, char *prop) +{ + pdf_jsimp_obj *pobj = NULL; + const char *err = pdf_jsimp_property_cpp(imp, obj, prop, &pobj); + if (err != NULL) + fz_throw(pdf_jsimp_ctx_cpp(imp), "%s", err); + + return pobj; +} + void pdf_jsimp_execute(pdf_jsimp *imp, char *code) { const char *err = pdf_jsimp_execute_cpp(imp, code); diff --git a/pdf/pdf_jsimp_cpp.h b/pdf/pdf_jsimp_cpp.h index 01b87edd..a35e9733 100644 --- a/pdf/pdf_jsimp_cpp.h +++ b/pdf/pdf_jsimp_cpp.h @@ -19,6 +19,7 @@ const char *pdf_jsimp_from_number_cpp(pdf_jsimp *imp, double num, pdf_jsimp_obj const char *pdf_jsimp_to_number_cpp(pdf_jsimp *imp, pdf_jsimp_obj *obj, double *num); const char *pdf_jsimp_array_len_cpp(pdf_jsimp *imp, pdf_jsimp_obj *obj, int *len); const char *pdf_jsimp_array_item_cpp(pdf_jsimp *imp, pdf_jsimp_obj *obj, int i, pdf_jsimp_obj **item); +const char *pdf_jsimp_property_cpp(pdf_jsimp *imp, pdf_jsimp_obj *obj, char *prop, pdf_jsimp_obj **pobj); const char *pdf_jsimp_execute_cpp(pdf_jsimp *imp, char *code); const char *pdf_jsimp_execute_count_cpp(pdf_jsimp *imp, char *code, int count); diff --git a/pdf/pdf_jsimp_v8.cpp b/pdf/pdf_jsimp_v8.cpp index 78a14eac..47fab860 100644 --- a/pdf/pdf_jsimp_v8.cpp +++ b/pdf/pdf_jsimp_v8.cpp @@ -411,17 +411,23 @@ extern "C" const char *pdf_jsimp_to_number_cpp(pdf_jsimp *imp, pdf_jsimp_obj *ob extern "C" const char *pdf_jsimp_array_len_cpp(pdf_jsimp *imp, pdf_jsimp_obj *obj, int *len) { - Local val = reinterpret_cast(obj)->toValue()->ToObject(); - Local arr = Local::Cast(val); + Local jsobj = reinterpret_cast(obj)->toValue()->ToObject(); + Local arr = Local::Cast(jsobj); *len = arr->Length(); return NULL; } extern "C" const char *pdf_jsimp_array_item_cpp(pdf_jsimp *imp, pdf_jsimp_obj *obj, int i, pdf_jsimp_obj **item) { - Local val = reinterpret_cast(obj)->toValue()->ToObject(); - Local arr = Local::Cast(val); - *item = reinterpret_cast(new PDFJSImpObject(arr->Get(Number::New(i)))); + Local jsobj = reinterpret_cast(obj)->toValue()->ToObject(); + *item = reinterpret_cast(new PDFJSImpObject(jsobj->Get(Number::New(i)))); + return NULL; +} + +extern "C" const char *pdf_jsimp_property_cpp(pdf_jsimp *imp, pdf_jsimp_obj *obj, char *prop, pdf_jsimp_obj **pobj) +{ + Local jsobj = reinterpret_cast(obj)->toValue()->ToObject(); + *pobj = reinterpret_cast(new PDFJSImpObject(jsobj->Get(String::New(prop)))); return NULL; } -- cgit v1.2.3