} pdf_keystroke_event;
int pdf_field_event_keystroke(fz_context *ctx, pdf_document *doc, pdf_obj *field, pdf_keystroke_event *evt);
-int pdf_field_event_validate(fz_context *ctx, pdf_document *doc, pdf_obj *field, const char *value);
+int pdf_field_event_validate(fz_context *ctx, pdf_document *doc, pdf_obj *field, const char *value, char **newvalue);
void pdf_field_event_calculate(fz_context *ctx, pdf_document *doc, pdf_obj *field);
char *pdf_field_event_format(fz_context *ctx, pdf_document *doc, pdf_obj *field);
void pdf_js_event_init(pdf_js *js, pdf_obj *target, const char *value, int willCommit);
int pdf_js_event_result(pdf_js *js);
+int pdf_js_event_result_validate(pdf_js *js, char **newvalue);
char *pdf_js_event_value(pdf_js *js);
void pdf_js_event_init_keystroke(pdf_js *js, pdf_obj *target, pdf_keystroke_event *evt);
int pdf_js_event_result_keystroke(pdf_js *js, pdf_keystroke_event *evt);
static int set_validated_field_value(fz_context *ctx, pdf_document *doc, pdf_obj *field, const char *text, int ignore_trigger_events)
{
+ char *newtext = NULL;
+
if (!ignore_trigger_events)
{
- if (!pdf_field_event_validate(ctx, doc, field, text))
+ if (!pdf_field_event_validate(ctx, doc, field, text, &newtext))
return 0;
}
- update_field_value(ctx, doc, field, text);
+ update_field_value(ctx, doc, field, newtext ? newtext : text);
+
+ fz_free(ctx, newtext);
return 1;
}
return NULL;
}
-int pdf_field_event_validate(fz_context *ctx, pdf_document *doc, pdf_obj *field, const char *value)
+int pdf_field_event_validate(fz_context *ctx, pdf_document *doc, pdf_obj *field, const char *value, char **newvalue)
{
pdf_js *js = doc->js;
+
+ *newvalue = NULL;
if (js)
{
pdf_obj *action = pdf_dict_getp_inheritable(ctx, field, "AA/V/JS");
{
pdf_js_event_init(js, field, value, 1);
pdf_execute_js_action(ctx, doc, field, "AA/V/JS", action);
- return pdf_js_event_result(js);
+ return pdf_js_event_result_validate(js, newvalue);
}
}
return 1;
return rc;
}
+int pdf_js_event_result_validate(pdf_js *js, char **newtext)
+{
+ int rc = 1;
+ *newtext = NULL;
+ if (js)
+ {
+ js_getglobal(js->imp, "event");
+ js_getproperty(js->imp, -1, "rc");
+ rc = js_tryboolean(js->imp, -1, 1);
+ js_pop(js->imp, 1);
+ if (rc)
+ {
+ js_getproperty(js->imp, -1, "value");
+ *newtext = fz_strdup(js->ctx, js_trystring(js->imp, -1, ""));
+ js_pop(js->imp, 1);
+ }
+ js_pop(js->imp, 1);
+ }
+ return rc;
+}
+
void pdf_js_event_init_keystroke(pdf_js *js, pdf_obj *target, pdf_keystroke_event *evt)
{
if (js)
int pdf_js_event_result(pdf_js *js) { return 1; }
char *pdf_js_event_value(pdf_js *js) { return ""; }
void pdf_js_execute(pdf_js *js, const char *name, const char *source) { }
+int pdf_js_event_result_validate(pdf_js *js, char **newvalue) { *newvalue=NULL; return 1; }
#endif /* FZ_ENABLE_JS */