summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/mutool/run.html4
-rw-r--r--source/tools/murun.c26
2 files changed, 29 insertions, 1 deletions
diff --git a/docs/mutool/run.html b/docs/mutool/run.html
index 5cc96a88..2eb4be0a 100644
--- a/docs/mutool/run.html
+++ b/docs/mutool/run.html
@@ -693,6 +693,10 @@ to JavaScript objects and arrays by getting and setting their properties.
<dt>PDFObject#isDictionary()
<dt>PDFObject#forEach(function(key,value){...})
<dd>Iterate over all the entries in a dictionary or array and call fun for each key-value pair.
+<dt>PDFObject#length
+<dd>Length of the array.
+<dt>PDFObject#push(item)
+<dd>Append item to the end of the array.
</dl>
<p>
diff --git a/source/tools/murun.c b/source/tools/murun.c
index 12c274d1..0d208cad 100644
--- a/source/tools/murun.c
+++ b/source/tools/murun.c
@@ -2723,7 +2723,16 @@ static int ffi_pdf_obj_has(js_State *J, void *obj, const char *key)
{
fz_context *ctx = js_getcontext(J);
pdf_obj *val;
- int idx;
+ int idx, len;
+
+ if (!strcmp(key, "length")) {
+ fz_try(ctx)
+ len = pdf_array_len(ctx, obj);
+ fz_catch(ctx)
+ rethrow(J);
+ js_pushnumber(J, len);
+ return 1;
+ }
if (is_number(key, &idx)) {
fz_try(ctx)
@@ -3225,6 +3234,20 @@ static void ffi_PDFObject_delete(js_State *J)
ffi_pdf_obj_delete(J, obj, key);
}
+static void ffi_PDFObject_push(js_State *J)
+{
+ fz_context *ctx = js_getcontext(J);
+ pdf_obj *obj = js_touserdata(J, 0, "pdf_obj");
+ pdf_document *pdf = pdf_get_bound_document(ctx, obj);
+ pdf_obj *item = ffi_toobj(J, pdf, 1);
+ fz_try(ctx)
+ pdf_array_push(ctx, obj, item);
+ fz_always(ctx)
+ pdf_drop_obj(ctx, item);
+ fz_catch(ctx)
+ rethrow(J);
+}
+
static void ffi_PDFObject_resolve(js_State *J)
{
fz_context *ctx = js_getcontext(J);
@@ -3758,6 +3781,7 @@ int murun_main(int argc, char **argv)
{
jsB_propfun(J, "PDFObject.get", ffi_PDFObject_get, 0);
jsB_propfun(J, "PDFObject.put", ffi_PDFObject_put, 0);
+ jsB_propfun(J, "PDFObject.push", ffi_PDFObject_push, 0);
jsB_propfun(J, "PDFObject.delete", ffi_PDFObject_delete, 0);
jsB_propfun(J, "PDFObject.resolve", ffi_PDFObject_resolve, 0);
jsB_propfun(J, "PDFObject.toString", ffi_PDFObject_toString, 1);