pdf_mbox * pdf_get_mbox(PDF *p, pdc_vtr *mboxes, const char *name, int number, int *o_count) { pdf_mbox *o_mbox = NULL; int count = 0; if (mboxes == NULL) mboxes = p->curr_ppt->mboxes; if (mboxes != NULL) { if (name == NULL && number <= 0) { count = pdc_vtr_size(mboxes); } else { int i, n = pdc_vtr_size(mboxes); for (i = 0; i < n; i++) { pdf_mbox *mbox = (pdf_mbox *) &pdc_vtr_at(mboxes, i, pdf_mbox); if (name == NULL || !pdc_strcmp(name, mbox->name)) { count++; if (o_count == NULL && count == number) { o_mbox = mbox; break; } } } } } if (o_count != NULL) *o_count = count; return o_mbox; }
pdc_bool pdf_parse_and_write_actionlist(PDF *p, pdf_event_object eventobj, pdc_id *act_idlist, const char *optlist) { const pdc_defopt *defopttable = NULL; const pdc_keyconn *keyconntable = NULL; pdc_resopt *resopts = NULL; pdc_clientdata data; pdc_id ret_id = PDC_BAD_ID; pdf_action *action = NULL; pdc_bool calcevent = pdc_false; const char *keyword, *type; char **strlist; int *actlist; int i, code, nsact, beginjava = 0; switch(eventobj) { case event_annotation: defopttable = pdf_annotevent_options; keyconntable = pdf_annotevent_keylist; beginjava = pdf_annotevent_beginjava; break; case event_bookmark: defopttable = pdf_bookmarkevent_options; keyconntable = pdf_bookmarkevent_keylist; beginjava = pdf_bookmarkevent_beginjava; break; case event_document: defopttable = pdf_documentevent_options; keyconntable = pdf_documentevent_keylist; beginjava = pdf_documentevent_beginjava; break; case event_page: defopttable = pdf_pageevent_options; keyconntable = pdf_pageevent_keylist; beginjava = pdf_pageevent_beginjava; break; default: break; } /* parsing option list */ pdf_set_clientdata(p, &data); resopts = pdc_parse_optionlist(p->pdc, optlist, defopttable, &data, pdc_true); /* write actions and saving action ids */ for (code = 0; ; code++) { keyword = pdc_get_keyword(code, keyconntable); if (keyword) { nsact = pdc_get_optvalues(keyword, resopts, NULL, &strlist); actlist = (int *) strlist; /* Not activate event */ if (code && nsact) { /* additional action type check */ for (i = 0; i < nsact; i++) { action = (pdf_action *) &pdc_vtr_at(p->actions, actlist[i], pdf_action); if (code >= beginjava && action->atype != pdf_javascript) { type = pdc_get_keyword(action->atype, pdf_action_pdfkeylist); pdc_error(p->pdc, PDF_E_ACT_BADACTTYPE, type, keyword, 0, 0); } } /* saving calculation event */ if (!strcmp(keyword, "calculate")) calcevent = pdc_true; } /* write action objects */ if (act_idlist != NULL) { ret_id = PDC_BAD_ID; if (nsact == 1) { action = (pdf_action *) &pdc_vtr_at(p->actions, actlist[0], pdf_action); if (action->obj_id == PDC_BAD_ID) ret_id = pdf_write_action(p, action, ret_id); else ret_id = action->obj_id; } else if (nsact > 1) { for (i = nsact-1; i >= 0; i--) { action = (pdf_action *) &pdc_vtr_at(p->actions, actlist[i], pdf_action); ret_id = pdf_write_action(p, action, ret_id); } } act_idlist[code] = ret_id; } } else break; } return calcevent; }