int pdc_get_opt_utf8strings(pdc_core *pdc, const char *keyword, pdc_resopt *resopt, int flags, char ***strings) { int ns = pdc_get_optvalues(keyword, resopt, NULL, strings); if (ns) { if (pdc_is_lastopt_utf8(resopt)) { int i = resopt[0].lastind; pdc_resopt *ropt = &resopt[i]; char **s = (char **) ropt->val; int j; for (j = 0; j < ropt->num; j++) { char *sb = pdc_strdup_withbom(pdc, s[j]); if (s[j] != NULL) pdc_free(pdc, s[j]); s[j] = sb; } } pdc_save_lastopt(resopt, flags); } return ns; }
int pdf__create_action(PDF *p, const char *type, const char *optlist) { pdc_resopt *resopts = NULL; pdc_clientdata data; pdf_action *action; pdf_actiontype atype; pdf_dest *dest = NULL; pdc_bool verbose = pdc_true; pdc_bool hasdest = pdc_false; pdc_encoding htenc; int htcp; const char *keyword; char **strlist; int i, k, ns; if (type == NULL || *type == '\0') pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "type", 0, 0, 0); k = pdc_get_keycode_ci(type, pdf_action_pdfkeylist); if (k == PDC_KEY_NOTFOUND) pdc_error(p->pdc, PDC_E_ILLARG_STRING, "type", type, 0, 0); atype = (pdf_actiontype) k; if (atype == pdf_javascript) pdc_error(p->pdc, PDF_E_UNSUPP_JAVASCRIPT, 0, 0, 0, 0); /* compatibility */ if (p->compatibility < PDC_1_6 && atype == pdf_goto3dview) { pdc_error(p->pdc, PDC_E_PAR_VERSION, type, pdc_get_pdfversion(p->pdc, PDC_1_6), 0, 0); } if (p->compatibility < PDC_1_5 && (atype == pdf_setocgstate || atype == pdf_trans)) { pdc_error(p->pdc, PDC_E_PAR_VERSION, type, pdc_get_pdfversion(p->pdc, PDC_1_5), 0, 0); } /* new action */ action = pdf_new_action(p); action->atype = atype; /* Parsing option list */ pdf_set_clientdata(p, &data); resopts = pdc_parse_optionlist(p->pdc, optlist, pdf_create_action_options, &data, pdc_true); keyword = "actionwarning"; pdc_get_optvalues(keyword, resopts, &verbose, NULL); verbose = pdf_get_errorpolicy(p, resopts, verbose); htenc = pdf_get_hypertextencoding_opt(p, resopts, &htcp, pdc_true); keyword = "destination"; if (pdc_get_optvalues(keyword, resopts, NULL, &strlist)) { if (!pdf_opt_effectless(p, keyword, atype, (pdf_actiontype) (pdf_goto | pdf_gotor))) { action->dest = pdf_parse_destination_optlist(p, strlist[0], (atype == pdf_goto) ? 0 : 1, (atype == pdf_goto) ? pdf_locallink : pdf_remotelink); hasdest = pdc_true; } } else { keyword = "destname"; if (atype == pdf_goto || atype == pdf_gotor) dest = pdf_get_option_destname(p, resopts, htenc, htcp); else if (pdc_get_optvalues(keyword, resopts, NULL, NULL)) pdf_opt_effectless(p, keyword, atype, (pdf_actiontype) (pdf_goto | pdf_gotor)); if (dest) { action->dest = dest; hasdest = pdc_true; } } /* filename or url */ for (i = 0; ; i++) { keyword = pdf_filename_keylist[i].word; if (keyword == NULL) break; if (!pdc_get_optvalues(keyword, resopts, NULL, NULL) || pdf_opt_effectless(p, keyword, atype, (pdf_actiontype) pdf_filename_keylist[i].code)) continue; /* DON'T change order */ /* native filename */ if (!i) action->nativefilename = pdf_get_opt_filename(p, keyword, resopts, htenc, htcp); /* Unicode filename */ pdf_get_opt_textlist(p, keyword, resopts, htenc, htcp, pdc_true, NULL, &action->filename, NULL); pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM); } keyword = "parameters"; if (pdc_get_optvalues(keyword, resopts, NULL, NULL) && !pdf_opt_effectless(p, keyword, atype, pdf_launch)) action->parameters = (char *) pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM); keyword = "operation"; if (pdc_get_optvalues(keyword, resopts, &k, NULL) && !pdf_opt_effectless(p, keyword, atype, (pdf_actiontype) (pdf_launch | pdf_movie))) { if ((atype == pdf_launch && k >= PDF_MIN_MOVIEKEY) || (atype == pdf_movie && k < PDF_MIN_MOVIEKEY)) { pdc_error(p->pdc, PDC_E_OPT_ILLKEYWORD, keyword, pdc_get_keyword(k, pdf_operation_pdfkeylist), 0, 0); } action->operation = (char *) pdc_get_keyword(k, pdf_operation_pdfkeylist); } keyword = "defaultdir"; if (pdc_get_optvalues(keyword, resopts, NULL, NULL) && !pdf_opt_effectless(p, keyword, atype, pdf_launch)) action->defaultdir = (char *) pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM); keyword = "menuname"; if (pdc_get_optvalues(keyword, resopts, NULL, NULL) && !pdf_opt_effectless(p, keyword, atype, pdf_named)) { action->menuname = (char *) pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM); } keyword = "namelist"; ns = pdc_get_optvalues(keyword, resopts, NULL, NULL); if (ns && !pdf_opt_effectless(p, keyword, atype, (pdf_actiontype) (pdf_hide | pdf_submitform | pdf_resetform))) { action->namelist = (char **) pdc_save_lastopt(resopts, PDC_OPT_SAVEALL); action->nsnames = ns; } keyword = "exportmethod"; if (pdc_get_optvalues(keyword, resopts, &k, NULL)) { action->exportmethod = (pdf_exportmethod) k; if (!pdf_opt_effectless(p, keyword, atype, pdf_submitform)) { if ((action->exportmethod & pdf_exp_fdf && (action->exportmethod | pdf_allfdf) != pdf_allfdf) || (action->exportmethod & pdf_exp_html && (action->exportmethod | pdf_allhtml) != pdf_allhtml) || (action->exportmethod & pdf_exp_xfdf && (action->exportmethod | pdf_allxfdf) != pdf_allxfdf) || (action->exportmethod & pdf_exp_pdf && (action->exportmethod | pdf_allpdf) != pdf_allpdf)) { pdc_error(p->pdc, PDC_E_OPT_ILLCOMB, keyword, 0, 0, 0); } if (action->exportmethod & pdf_exp_fdf) action->exportmethod = (pdf_exportmethod) (action->exportmethod & ~pdf_exp_fdf); } } keyword = "newwindow"; if (pdc_get_optvalues(keyword, resopts, &action->newwindow, NULL)) pdf_opt_effectless(p, keyword, atype, (pdf_actiontype) (pdf_gotor | pdf_launch)); keyword = "ismap"; if (pdc_get_optvalues(keyword, resopts, &action->ismap, NULL)) pdf_opt_effectless(p, keyword, atype, pdf_uri); keyword = "hide"; if (pdc_get_optvalues(keyword, resopts, &action->hide, NULL)) pdf_opt_effectless(p, keyword, atype, pdf_hide); keyword = "exclude"; if (pdc_get_optvalues(keyword, resopts, &action->exclude, NULL)) pdf_opt_effectless(p, keyword, atype, (pdf_actiontype) (pdf_submitform | pdf_resetform)); keyword = "submitemptyfields"; if (pdc_get_optvalues(keyword, resopts, &action->submitemptyfields, NULL)) pdf_opt_effectless(p, keyword, atype, pdf_submitform); keyword = "canonicaldate"; if (pdc_get_optvalues(keyword, resopts, &action->canonicaldate, NULL)) pdf_opt_effectless(p, keyword, atype, pdf_submitform); keyword = "transition"; if (pdc_get_optvalues(keyword, resopts, &action->transition, NULL)) pdf_opt_effectless(p, keyword, atype, pdf_trans); keyword = "duration"; if (pdc_get_optvalues(keyword, resopts, &action->duration, NULL)) pdf_opt_effectless(p, keyword, atype, pdf_trans); /* required options */ keyword = NULL; if (!hasdest && (atype == pdf_goto || atype == pdf_gotor)) keyword = "destination"; if (!action->filename && (atype == pdf_gotor || atype == pdf_launch || atype == pdf_importdata)) keyword = "filename"; if (!action->menuname && atype == pdf_named) keyword = "menuname"; if (!action->namelist && atype == pdf_hide) keyword = "namelist"; if (!action->filename && (atype == pdf_uri || atype == pdf_submitform)) keyword = "url"; if (keyword) pdc_error(p->pdc, PDC_E_OPT_NOTFOUND, keyword, 0, 0, 0); return pdf_get_max_action(p); }
int pdf__create_bookmark(PDF *p, const char *text, int len, const char *optlist) { pdc_resopt *resopts = NULL; pdc_clientdata data; pdf_outline self; pdf_dest *dest = NULL; pdc_text_format hypertextformat; pdc_encoding hypertextencoding; pdf_coloropt textcolor; char *hypertext = NULL; const char *keyword = NULL; char **strlist = NULL; int hypertextcodepage; int ns, inum, outlen, retval = 0; int jndex = -2; len = pdc_check_text_length(p->pdc, &text, len, PDF_MAXSTRINGSIZE); if (!len) pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "text", 0, 0, 0); /* Initialize */ pdf_init_outline(p, &self); hypertextformat = p->hypertextformat; hypertextencoding = p->hypertextencoding; hypertextcodepage = p->hypertextcodepage; /* Parsing option list */ if (optlist && strlen(optlist)) { pdf_set_clientdata(p, &data); resopts = pdc_parse_optionlist(p->pdc, optlist, pdf_create_bookmark_options, &data, pdc_true); hypertextencoding = pdf_get_hypertextencoding_opt(p, resopts, &hypertextcodepage, pdc_true); if (pdc_get_optvalues("hypertextformat", resopts, &inum, NULL)) { hypertextformat = (pdc_text_format) inum; pdf_check_hypertextformat(p, hypertextformat); } ns = pdc_get_optvalues("textcolor", resopts, NULL, &strlist); if (ns) { pdf_parse_coloropt(p, "textcolor", strlist, ns, (int) color_rgb, &textcolor); self.textcolor[0] = textcolor.value[0]; self.textcolor[1] = textcolor.value[1]; self.textcolor[2] = textcolor.value[2]; } if (pdc_get_optvalues("fontstyle", resopts, &inum, NULL)) self.fontstyle = (fnt_fontstyle) inum; pdc_get_optvalues("parent", resopts, &self.parent, NULL); pdc_get_optvalues("index", resopts, &jndex, NULL); pdc_get_optvalues("open", resopts, &self.open, NULL); if (pdc_get_optvalues("destination", resopts, NULL, &strlist)) { self.dest = pdf_parse_destination_optlist(p, strlist[0], 0, pdf_bookmark); keyword = "destination"; } else { dest = pdf_get_option_destname(p, resopts, hypertextencoding, hypertextcodepage); if (dest) { self.dest = dest; keyword = "destname"; } } if (pdc_get_optvalues("action", resopts, NULL, &strlist)) { if (self.dest) { pdf_cleanup_destination(p, self.dest); self.dest = NULL; pdc_warning(p->pdc, PDC_E_OPT_IGNORE, keyword, "action", 0, 0); } /* parsing of action list */ pdf_parse_and_write_actionlist(p, event_bookmark, NULL, (const char *) strlist[0]); self.action = (char *) pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM); } pdc_cleanup_optionlist(p->pdc, resopts); } /* create hypertext string */ hypertext = pdf_convert_hypertext(p, text, len, hypertextformat, hypertextencoding, hypertextcodepage, &outlen, PDC_UTF8_FLAG, pdc_true); if (hypertext) retval = pdf_insert_bookmark(p, hypertext, &self, jndex); return retval; }
pdf_dest * pdf_parse_destination_optlist( PDF *p, const char *optlist, int page, pdf_destuse destuse) { int minpage; pdc_resopt *resopts; pdc_encoding hypertextencoding; int hypertextcodepage; const char *keyword; const char *type_name; char **strlist = NULL; int inum; pdc_bool boolval; /* Defaults */ pdf_dest *dest = pdf_init_destination(p); /* parse option list */ resopts = pdc_parse_optionlist(p->pdc, optlist, pdf_destination_options, NULL, pdc_true); if (pdc_get_optvalues("fitbbox", resopts, &boolval, NULL) && boolval == pdc_true) dest->type = fitvisible; if (pdc_get_optvalues("fitheight", resopts, &boolval, NULL) && boolval == pdc_true) dest->type = fitheight; if (pdc_get_optvalues("fitpage", resopts, &boolval, NULL) && boolval == pdc_true) dest->type = fitwindow; if (pdc_get_optvalues("fitwidth", resopts, &boolval, NULL) && boolval == pdc_true) dest->type = fitwidth; if (pdc_get_optvalues("retain", resopts, &boolval, NULL) && boolval == pdc_true) dest->type = fixed; if (pdc_get_optvalues("type", resopts, &inum, NULL)) dest->type = (pdf_desttype) inum; type_name = pdc_get_keyword(dest->type, pdf_type_keylist); hypertextencoding = pdf_get_hypertextencoding_opt(p, resopts, &hypertextcodepage, pdc_true); keyword = "name"; if (pdf_get_opt_textlist(p, keyword, resopts, hypertextencoding, hypertextcodepage, pdc_true, NULL, &dest->name, NULL)) { if (dest->type != nameddest) { dest->name = NULL; pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, 0, 0); } else pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM); } keyword = "page"; if (pdc_get_optvalues(keyword, resopts, &page, NULL) && dest->type == filedest) pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, 0, 0); keyword = "group"; if (pdc_get_optvalues(keyword, resopts, NULL, &strlist)) { page = pdf_xlat_pageno(p, page, strlist[0]); } keyword = "zoom"; if (pdc_get_optvalues(keyword, resopts, &dest->zoom, NULL) && dest->type != fixed) pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, 0, 0); keyword = "left"; if (pdc_get_optvalues(keyword, resopts, &dest->left, NULL) && (dest->type == fitwindow || dest->type == fitwidth || dest->type == fitvisible || dest->type == fitvisiblewidth || dest->type == nameddest || dest->type == filedest)) pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, 0, 0); keyword = "right"; if (pdc_get_optvalues(keyword, resopts, &dest->right, NULL) && dest->type != fitrect) pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, 0, 0); keyword = "bottom"; if (pdc_get_optvalues(keyword, resopts, &dest->bottom, NULL) && dest->type != fitrect) pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, 0, 0); keyword = "top"; if (pdc_get_optvalues(keyword, resopts, &dest->top, NULL) && (dest->type == fitwindow || dest->type == fitheight || dest->type == fitvisible || dest->type == fitvisibleheight || dest->type == nameddest || dest->type == filedest)) pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, 0, 0); keyword = "color"; if (pdc_get_optvalues(keyword, resopts, &dest->color, NULL) && destuse != pdf_bookmark) pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORELEM, keyword, 0, 0, 0); keyword = "fontstyle"; if (pdc_get_optvalues(keyword, resopts, &inum, NULL)) { dest->fontstyle = (fnt_fontstyle) inum; if (destuse != pdf_bookmark) pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORELEM, keyword, 0, 0, 0); } keyword = "filename"; if (pdc_get_optvalues(keyword, resopts, NULL, NULL)) { if (dest->type != filedest) { pdc_warning(p->pdc, PDF_E_HYP_OPTIGNORE_FORTYPE, keyword, type_name, 0, 0); } else dest->filename = (char *) pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM); } pdc_cleanup_optionlist(p->pdc, resopts); switch (dest->type) { case fitwidth: /* Trick: we don't know the height of a future page yet, * so we use a "large" value for top which will do for * most pages. If it doesn't work, not much harm is done. */ if (dest->top == -1) dest->top = 10000; break; case fitrect: case fitheight: case fitvisiblewidth: case fitvisibleheight: if (dest->left == -1) dest->left = 0; if (dest->bottom == -1) dest->bottom = 0; if (dest->right == -1) dest->right = 1000; if (dest->top == -1) dest->top = 1000; break; case nameddest: if (destuse == pdf_nameddest) { pdf_cleanup_destination(p, dest); pdc_error(p->pdc, PDC_E_OPT_ILLKEYWORD, "type", type_name, 0, 0); } if (dest->name == NULL) { pdf_cleanup_destination(p, dest); pdc_error(p->pdc, PDC_E_OPT_NOTFOUND, "name", 0, 0, 0); } break; case filedest: if (destuse != pdf_bookmark) { pdf_cleanup_destination(p, dest); pdc_error(p->pdc, PDC_E_OPT_ILLKEYWORD, "type", type_name, 0, 0); } if (dest->filename == NULL) { pdf_cleanup_destination(p, dest); pdc_error(p->pdc, PDC_E_OPT_NOTFOUND, "filename", 0, 0, 0); } break; default: break; } /* check for minpage */ minpage = (destuse == pdf_bookmark) ? 0 : 1; switch (destuse) { case pdf_nameddest: case pdf_locallink: if (page == 0) { page = pdf_current_page(p); } case pdf_openaction: case pdf_bookmark: case pdf_remotelink: if (page < minpage) { const char *stemp = pdc_errprintf(p->pdc, "%d", page); pdf_cleanup_destination(p, dest); pdc_error(p->pdc, PDC_E_ILLARG_HANDLE, "page", stemp, 0, 0); } break; } dest->pgnum = page; if (destuse != pdf_remotelink && destuse != pdf_openaction && page != 0) { dest->page = pdf_get_page_id(p, page); } /* remote page number */ if (destuse == pdf_remotelink) dest->remote_page = page; return dest; }
pdf_mbox * pdf_parse_mbox_optlist(PDF *p, const char *optlist) { static const char fn[] = "pdf_parse_mbox_optlist"; pdc_resopt *resopts = NULL; pdf_mbox *mbox; char **strlist = NULL; pdc_scalar margin; int i, ns; resopts = pdc_parse_optionlist(p->pdc, optlist, pdf_create_mbox_options, NULL, pdc_true); mbox = (pdf_mbox *) pdc_malloc(p->pdc, sizeof(pdf_mbox), fn); pdf_reclaim_mbox(mbox); if (pdc_get_optvalues("name", resopts, NULL, NULL)) mbox->name = (char *) pdc_save_lastopt(resopts, PDC_OPT_SAVE1ELEM); pdc_get_optvalues("boxheight", resopts, mbox->boxheight, NULL); if (pdc_get_optvalues("clipping", resopts, mbox->clipping, NULL)) { for (i = 0; i < 4; i++) mbox->percentclipping[i] = pdc_is_lastopt_percent(resopts, i) ? pdc_true : pdc_false; } pdc_get_optvalues("innerbox", resopts, &mbox->innerbox, NULL); pdc_get_optvalues("openrect", resopts, &mbox->openrect, NULL); ns = pdc_get_optvalues("fillcolor", resopts, NULL, &strlist); if (ns) pdf_parse_coloropt(p, "fillcolor", strlist, ns, (int) color_max, &mbox->fillcolor); pdf_init_coloropt(p, &mbox->strokecolor); ns = pdc_get_optvalues("strokecolor", resopts, NULL, &strlist); if (ns) pdf_parse_coloropt(p, "strokecolor", strlist, ns, (int) color_max, &mbox->strokecolor); pdc_get_optvalues("borderwidth", resopts, &mbox->borderwidth, NULL); mbox->dashlength = pdc_get_optvalues("dasharray", resopts, mbox->dasharray, NULL); pdc_get_optvalues("dashphase", resopts, &mbox->dashphase, NULL); pdc_get_optvalues("linecap", resopts, &mbox->linecap, NULL); pdc_get_optvalues("linejoin", resopts, &mbox->linejoin, NULL); pdc_get_optvalues("drawleft", resopts, &mbox->drawleft, NULL); pdc_get_optvalues("drawbottom", resopts, &mbox->drawbottom, NULL); pdc_get_optvalues("drawright", resopts, &mbox->drawright, NULL); pdc_get_optvalues("drawtop", resopts, &mbox->drawtop, NULL); if (pdc_get_optvalues("margin", resopts, &margin, NULL)) { mbox->offsetleft = margin; mbox->percentleft = pdc_is_lastopt_percent(resopts, 0); mbox->offsetbottom = margin; mbox->percentbottom = pdc_is_lastopt_percent(resopts, 0); mbox->offsetright = -margin; mbox->percentright = pdc_is_lastopt_percent(resopts, 0); mbox->offsettop = -margin; mbox->percenttop = pdc_is_lastopt_percent(resopts, 0); } if (pdc_get_optvalues("offsetleft", resopts, &mbox->offsetleft, NULL)) { mbox->percentleft = pdc_is_lastopt_percent(resopts, 0); } if (pdc_get_optvalues("offsetbottom", resopts, &mbox->offsetbottom, NULL)) { mbox->percentbottom = pdc_is_lastopt_percent(resopts, 0); } if (pdc_get_optvalues("offsetright", resopts, &mbox->offsetright, NULL)) { mbox->percentright = pdc_is_lastopt_percent(resopts, 0); } if (pdc_get_optvalues("offsettop", resopts, &mbox->offsettop, NULL)) { mbox->percenttop = pdc_is_lastopt_percent(resopts, 0); } pdc_cleanup_optionlist(p->pdc, resopts); return mbox; }
int pdf__create_gstate(PDF *p, const char *optlist) { pdf_extgstateresource *gs; int slot = -1; int font = pdc_undef; int inum; pdc_clientdata data; pdc_resopt *results; if (optlist == NULL || !*optlist) pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "optlist", 0, 0, 0); slot = p->extgstates_number; if (slot == p->extgstates_capacity) pdf_grow_extgstates(p); p->extgstates_number++; gs = &p->extgstates[slot]; gs->obj_id = pdc_alloc_id(p->out); /* parsing optlist */ pdf_set_clientdata(p, &data); results = pdc_parse_optionlist(p->pdc, optlist, pdf_create_gstate_options, &data, pdc_true); pdc_get_optvalues("alphaisshape", results, &gs->alpha_is_shape, NULL); if (pdc_get_optvalues("blendmode", results, &inum, NULL)) gs->blendmode = (pdf_blendmode) inum; gs->dash_count = pdc_get_optvalues("dasharray", results, NULL, NULL); gs->dash_array = (pdc_scalar *) pdc_save_lastopt(results, PDC_OPT_SAVEALL); pdc_get_optvalues("dashphase", results, &gs->dash_phase, NULL); pdc_get_optvalues("flatness", results, &gs->flatness, NULL); pdc_get_optvalues("font", results, &font, NULL); if (font != pdc_undef) gs->font_obj = p->fonts[font].obj_id; pdc_get_optvalues("fontsize", results, &gs->font_size, NULL); pdc_get_optvalues("linecap", results, &gs->line_cap, NULL); pdc_get_optvalues("linejoin", results, &gs->line_join, NULL); pdc_get_optvalues("linewidth", results, &gs->line_width, NULL); pdc_get_optvalues("miterlimit", results, &gs->miter_limit, NULL); pdc_get_optvalues("opacityfill", results, &gs->opacity_fill, NULL); pdc_get_optvalues("opacitystroke", results, &gs->opacity_stroke, NULL); pdc_get_optvalues("overprintfill", results, &gs->overprint_fill, NULL); pdc_get_optvalues("overprintmode", results, &gs->overprint_mode, NULL); pdc_get_optvalues("overprintstroke", results, &gs->overprint_stroke, NULL); if (pdc_get_optvalues("renderingintent", results, &inum, NULL)) gs->ri = (pdf_renderingintent) inum; pdc_get_optvalues("smoothness", results, &gs->smoothness, NULL); pdc_get_optvalues("strokeadjust", results, &gs->stroke_adjust, NULL); pdc_get_optvalues("textknockout", results, &gs->text_knockout, NULL); pdc_cleanup_optionlist(p->pdc, results); return slot; }
int pdf_get_opt_textlist(PDF *p, const char *keyword, pdc_resopt *resopts, pdc_encoding enc, int codepage, pdc_bool ishypertext, const char *fieldname, char **text, char ***textlist) { pdc_bool logg1 = pdc_logg_is_enabled(p->pdc, 1, trc_optlist); int ns; char **strlist; ns = pdc_get_optvalues(keyword, resopts, NULL, &strlist); if (ns) { pdc_byte *string = NULL; pdc_encodingvector *inev = NULL, *outev = NULL; pdc_text_format intextformat = pdc_bytes; pdc_text_format outtextformat = pdc_utf16be; pdc_text_format textformat; int convflags = PDC_CONV_WITHBOM; pdc_bool isutf8; int i, outlen; /* whole option list or string list is in UTF-8 */ isutf8 = pdc_is_lastopt_utf8(resopts); /* Encoding */ if (ishypertext) { /* Initialize */ if (!isutf8) { if (enc < 0 && enc != pdc_unicode && enc != pdc_cid) enc = pdf_get_hypertextencoding(p, "auto", &codepage, pdc_true); if (enc >= 0) inev = pdc_get_encoding_vector(p->pdc, enc); } outev = pdc_get_encoding_vector(p->pdc, pdc_pdfdoc); /* conversion to PDFDocEncoding if possible */ convflags |= PDC_CONV_TRYBYTES; } else { if (enc == pdc_invalidenc) { if (fieldname) { pdc_cleanup_optionlist(p->pdc, resopts); pdc_error(p->pdc, PDF_E_FF_FONTMISSING, fieldname, 0, 0, 0); } return 0; } else if (enc >= 0 && !isutf8) { /* bug #2069: always conversion to UTF-16BE */ inev = pdc_get_encoding_vector(p->pdc, enc); } } if (logg1) { if (isutf8) { pdc_logg(p->pdc, "\tOption \"%s\" is "PDC_UTF8_STRG" encoded\n", keyword); } else { pdc_logg(p->pdc, "\tOption \"%s\" is %s encoded\n", keyword, pdc_get_user_encoding(p->pdc, enc)); } } for (i = 0; i < ns; i++) { string = (pdc_byte *) strlist[i]; { if (ishypertext || isutf8 || inev != NULL) { intextformat = isutf8 ? PDC_UTF8 : pdc_bytes; if (pdc_logg_is_enabled(p->pdc, 3, trc_text)) convflags |= PDC_CONV_LOGGING; pdf_set_convertflags(p, &convflags); textformat = outtextformat; pdc_convert_string(p->pdc, intextformat, codepage, inev, string, (int) strlen((char *) string), &textformat, outev, &string, &outlen, convflags, pdc_true); pdc_free(p->pdc, strlist[i]); strlist[i] = (char *) string; } } } if (text) *text = strlist[0]; else *textlist = strlist; if (fieldname) { strlist = (char **) pdc_save_lastopt(resopts, PDC_OPT_SAVEALL); pdf_insert_stringlist(p, strlist, ns); } } return ns; }