void pdf__set_parameter(PDF *p, const char *key, const char *value) { pdc_pagebox usebox = pdc_pbox_none; pdc_text_format textformat = pdc_auto; char optlist[PDC_GEN_BUFSIZE]; pdf_ppt *ppt; int i, k; i = pdf_get_index(p, key, pdc_true); if (value == NULL) value = ""; ppt = p->curr_ppt; switch (i) { case PDF_PARAMETER_PDIUSEBOX: case PDF_PARAMETER_VIEWAREA: case PDF_PARAMETER_VIEWCLIP: case PDF_PARAMETER_PRINTAREA: case PDF_PARAMETER_PRINTCLIP: k = pdc_get_keycode_ci(value, pdf_usebox_keylist); if (k == PDC_KEY_NOTFOUND) pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); usebox = (pdc_pagebox) k; pdc_sprintf(p->pdc, pdc_false, optlist, "%s %s", key, value); break; case PDF_PARAMETER_TEXTFORMAT: case PDF_PARAMETER_HYPERTEXTFORMAT: k = pdc_get_keycode_ci(value, pdf_textformat_keylist); if (k == PDC_KEY_NOTFOUND) pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); textformat = (pdc_text_format) k; break; } switch (i) { case PDF_PARAMETER_SEARCHPATH: case PDF_PARAMETER_FONTAFM: case PDF_PARAMETER_FONTPFM: case PDF_PARAMETER_FONTOUTLINE: case PDF_PARAMETER_HOSTFONT: case PDF_PARAMETER_ENCODING: case PDF_PARAMETER_ICCPROFILE: case PDF_PARAMETER_STANDARDOUTPUTINTENT: { pdf_add_pdflib_resource(p, key, value); break; } case PDF_PARAMETER_DEBUG: { const unsigned char *c; for (c = (const unsigned char *) value; *c; c++) p->debug[(int) *c] = 1; break; } case PDF_PARAMETER_NODEBUG: { const unsigned char *c; for (c = (const unsigned char *) value; *c; c++) p->debug[(int) *c] = 0; break; } case PDF_PARAMETER_BINDING: if (!p->pdc->binding) p->pdc->binding = pdc_strdup(p->pdc, value); break; case PDF_PARAMETER_OBJORIENT: p->pdc->objorient = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_HASTOBEPOS: p->pdc->hastobepos = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_PTFRUN: p->pdc->ptfrun = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_SMOKERUN: p->pdc->smokerun = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_UNICAPLANG: p->pdc->unicaplang = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_ERRORPOLICY: k = pdc_get_keycode_ci(value, pdf_errpol_keylist); if (k == PDC_KEY_NOTFOUND) pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); p->errorpolicy = (pdf_errpol) k; break; case PDF_PARAMETER_UNDERLINE: pdf_set_tstate(p, (double) pdf_bool_value(p, key, value), to_underline); break; case PDF_PARAMETER_OVERLINE: pdf_set_tstate(p, (double) pdf_bool_value(p, key, value), to_overline); break; case PDF_PARAMETER_STRIKEOUT: pdf_set_tstate(p, (double) pdf_bool_value(p, key, value), to_strikeout); break; case PDF_PARAMETER_KERNING: pdc_warning(p->pdc, PDF_E_UNSUPP_KERNING, 0, 0, 0, 0); break; case PDF_PARAMETER_FAKEBOLD: pdf_set_tstate(p, (double) pdf_bool_value(p, key, value), to_fakebold); break; case PDF_PARAMETER_RESOURCEFILE: pdc_set_resourcefile(p->pdc, value); break; case PDF_PARAMETER_RENDERINGINTENT: k = pdc_get_keycode_ci(value, pdf_renderingintent_pdfkeylist); if (k == PDC_KEY_NOTFOUND) pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); p->rendintent = (pdf_renderingintent) k; break; case PDF_PARAMETER_PRESERVEOLDPANTONENAMES: p->preserveoldpantonenames = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_SPOTCOLORLOOKUP: p->spotcolorlookup = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_PDISTRICT: p->pdi_strict = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_TOPDOWN: if (pdf_bool_value(p, key, value)) p->ydirection = -1.0; else p->ydirection = 1.0; break; case PDF_PARAMETER_USERCOORDINATES: p->usercoordinates = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_USEHYPERTEXTENCODING: p->usehyptxtenc = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_TEXTFORMAT: pdf_check_textformat(p, textformat); p->textformat = textformat; if (p->curr_ppt) pdf_set_tstate(p, (double) textformat, to_textformat); break; case PDF_PARAMETER_HYPERTEXTFORMAT: pdf_check_hypertextformat(p, textformat); p->hypertextformat = textformat; break; case PDF_PARAMETER_HYPERTEXTENCODING: { p->hypertextencoding = pdf_get_hypertextencoding(p, value, &p->hypertextcodepage, pdc_true); pdf_check_hypertextencoding(p, p->hypertextencoding); break; } case PDF_PARAMETER_CHARREF: pdc_warning(p->pdc, PDF_E_UNSUPP_CHARREF, 0, 0, 0, 0); break; case PDF_PARAMETER_ESCAPESEQUENCE: pdc_warning(p->pdc, PDF_E_UNSUPP_ESCAPESEQU, 0, 0, 0, 0); break; case PDF_PARAMETER_HONORLANG: pdc_warning(p->pdc, PDF_E_UNSUPP_HONORLANG, 0, 0, 0, 0); break; case PDF_PARAMETER_GLYPHCHECK: pdc_warning(p->pdc, PDF_E_UNSUPP_GLYPHCHECK, 0, 0, 0, 0); break; case PDF_PARAMETER_FILLRULE: k = pdc_get_keycode_ci(value, pdf_fillrule_keylist); if (k == PDC_KEY_NOTFOUND) pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); ppt->fillrule = (pdf_fillrule) k; break; case PDF_PARAMETER_LOGGING: pdc_set_logg_options(p->pdc, value); break; case PDF_PARAMETER_LOGMSG: pdc_logg_cond(p->pdc, 1, trc_user, value); break; case PDF_PARAMETER_TRACEMSG: /* do nothing -- client-supplied string will show up * in the log file */ break; case PDF_PARAMETER_NODEMOSTAMP: break; case PDF_PARAMETER_SERIAL: case PDF_PARAMETER_LICENCE: case PDF_PARAMETER_LICENSE: break; case PDF_PARAMETER_LICENCEFILE: case PDF_PARAMETER_LICENSEFILE: break; case PDF_PARAMETER_AUTOSPACE: pdc_warning(p->pdc, PDF_E_UNSUPP_TAGGED, 0, 0, 0, 0); break; /*****************************************************************************/ /** deprecated historical parameters **/ /*****************************************************************************/ case PDF_PARAMETER_OPENWARNING: p->debug[(int) 'o'] = (char) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_FONTWARNING: p->debug[(int) 'F'] = (char) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_ICCWARNING: p->debug[(int) 'I'] = (char) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_IMAGEWARNING: p->debug[(int) 'i'] = (char) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_PDIWARNING: p->debug[(int) 'p'] = (char) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_HONORICCPROFILE: p->debug[(int) 'e'] = (char) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_GLYPHWARNING: p->debug[(int) 'g'] = (char) pdf_bool_value(p, key, value); if (p->curr_ppt) pdf_set_tstate(p, (double) pdf_bool_value(p, key, value), to_glyphwarning); break; case PDF_PARAMETER_TRACE: { pdc_bool bv = pdf_bool_value(p, key, value); if (bv) pdc_set_logg_options(p->pdc, ""); else pdc_set_logg_options(p->pdc, "disable"); break; } case PDF_PARAMETER_TRACEFILE: pdc_sprintf(p->pdc, pdc_false, optlist, "filename %s", value); pdc_set_logg_options(p->pdc, optlist); break; case PDF_PARAMETER_WARNING: break; case PDF_PARAMETER_MASTERPASSWORD: pdc_warning(p->pdc, PDF_E_UNSUPP_CRYPT, 0, 0, 0, 0); break; case PDF_PARAMETER_USERPASSWORD: pdc_warning(p->pdc, PDF_E_UNSUPP_CRYPT, 0, 0, 0, 0); break; case PDF_PARAMETER_PERMISSIONS: pdc_warning(p->pdc, PDF_E_UNSUPP_CRYPT, 0, 0, 0, 0); break; case PDF_PARAMETER_COMPATIBILITY: pdf_set_compatibility(p, value); break; case PDF_PARAMETER_FLUSH: pdf_set_flush(p, value); break; case PDF_PARAMETER_PDFX: pdc_warning(p->pdc, PDF_E_UNSUPP_PDFX, 0, 0, 0, 0); break; case PDF_PARAMETER_HIDETOOLBAR: case PDF_PARAMETER_HIDEMENUBAR: case PDF_PARAMETER_HIDEWINDOWUI: case PDF_PARAMETER_FITWINDOW: case PDF_PARAMETER_CENTERWINDOW: case PDF_PARAMETER_DISPLAYDOCTITLE: if (pdf_bool_value(p, key, value)) pdf_set_viewerpreference(p, key); break; case PDF_PARAMETER_NONFULLSCREENPAGEMODE: if (!pdc_stricmp(value, "useoutlines")) pdf_set_viewerpreference(p, "nonfullscreenpagemode bookmarks"); else if (!pdc_stricmp(value, "usethumbs")) pdf_set_viewerpreference(p, "nonfullscreenpagemode thumbnails"); else if (!pdc_stricmp(value, "usenone")) pdf_set_viewerpreference(p, "nonfullscreenpagemode none"); else pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); break; case PDF_PARAMETER_DIRECTION: if (!pdc_stricmp(value, "r2l")) pdf_set_viewerpreference(p, "direction r2l"); else if (!pdc_stricmp(value, "l2r")) pdf_set_viewerpreference(p, "direction l2r"); else pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); break; case PDF_PARAMETER_VIEWAREA: case PDF_PARAMETER_VIEWCLIP: case PDF_PARAMETER_PRINTAREA: case PDF_PARAMETER_PRINTCLIP: pdf_set_viewerpreference(p, optlist); break; case PDF_PARAMETER_OPENACTION: pdf_set_openaction(p, value); break; case PDF_PARAMETER_OPENMODE: pdf_set_openmode(p, value); break; case PDF_PARAMETER_BOOKMARKDEST: pdf_cleanup_destination(p, p->bookmark_dest); p->bookmark_dest = pdf_parse_destination_optlist(p, value, 0, pdf_bookmark); break; case PDF_PARAMETER_INHERITGSTATE: (void) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_TRANSITION: pdf_set_transition(p, value); break; case PDF_PARAMETER_BASE: pdf_set_uri(p, value); break; case PDF_PARAMETER_LAUNCHLINK_PARAMETERS: if (p->launchlink_parameters) { pdc_free(p->pdc, p->launchlink_parameters); p->launchlink_parameters = NULL; } p->launchlink_parameters = pdc_strdup(p->pdc, value); break; case PDF_PARAMETER_LAUNCHLINK_OPERATION: if (p->launchlink_operation) { pdc_free(p->pdc, p->launchlink_operation); p->launchlink_operation = NULL; } p->launchlink_operation = pdc_strdup(p->pdc, value); break; case PDF_PARAMETER_LAUNCHLINK_DEFAULTDIR: if (p->launchlink_defaultdir) { pdc_free(p->pdc, p->launchlink_defaultdir); p->launchlink_defaultdir = NULL; } p->launchlink_defaultdir = pdc_strdup(p->pdc, value); break; case PDF_PARAMETER_PDIUSEBOX: p->pdi_usebox = usebox; break; case PDF_PARAMETER_AUTOSUBSETTING: case PDF_PARAMETER_AUTOCIDFONT: case PDF_PARAMETER_UNICODEMAP: pdc_warning(p->pdc, PDF_E_UNSUPP_UNICODE, 0, 0, 0, 0); break; default: pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0); break; } /* switch */ } /* pdf__set_parameter */
PDFLIB_API void PDFLIB_CALL PDF_set_parameter(PDF *p, const char *key, const char *value) { static const char fn[] = "PDF_set_parameter"; pdc_usebox usebox = use_none; pdc_text_format textformat = pdc_auto; int i, k; if (key == NULL || !*key) pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "key", 0, 0, 0); i = get_index(key); if (!pdf_enter_api(p, fn, (pdf_state) pdf_state_all, "(p[%p], \"%s\", \"%s\")\n", (void *) p, key, value)) return; if (i == -1) pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0); if ((p->state_stack[p->state_sp] & parms[i].set_scope) == 0) pdc_error(p->pdc, PDF_E_DOC_SCOPE_SET, key, pdf_current_scope(p), 0, 0); if (value == NULL) pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "value", 0, 0, 0); switch (i) { case PDF_PARAMETER_PDIUSEBOX: case PDF_PARAMETER_VIEWAREA: case PDF_PARAMETER_VIEWCLIP: case PDF_PARAMETER_PRINTAREA: case PDF_PARAMETER_PRINTCLIP: k = pdc_get_keycode(value, pdf_usebox_keylist); if (k == PDC_KEY_NOTFOUND) pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); usebox = (pdc_usebox) k; break; case PDF_PARAMETER_TEXTFORMAT: case PDF_PARAMETER_HYPERTEXTFORMAT: k = pdc_get_keycode(value, pdf_textformat_keylist); if (k == PDC_KEY_NOTFOUND) pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); textformat = (pdc_text_format) k; break; } switch (i) { case PDF_PARAMETER_SEARCHPATH: case PDF_PARAMETER_FONTAFM: case PDF_PARAMETER_FONTPFM: case PDF_PARAMETER_FONTOUTLINE: case PDF_PARAMETER_HOSTFONT: case PDF_PARAMETER_ENCODING: case PDF_PARAMETER_ICCPROFILE: case PDF_PARAMETER_STANDARDOUTPUTINTENT: { pdf_add_resource(p, key, value); break; } case PDF_PARAMETER_FLUSH: if (p->binding != NULL && strcmp(p->binding, "C++")) break; if (!strcmp(value, "none")) p->flush = pdf_flush_none; else if (!strcmp(value, "page")) p->flush = (pdf_flush_state) (p->flush | pdf_flush_page); else if (!strcmp(value, "content")) p->flush = (pdf_flush_state) (p->flush | pdf_flush_content); else if (!strcmp(value, "heavy")) p->flush = (pdf_flush_state) (p->flush | pdf_flush_heavy); else pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); break; case PDF_PARAMETER_DEBUG: { const unsigned char *c; for (c = (const unsigned char *) value; *c; c++) { p->debug[(int) *c] = 1; if (*c == 't') { pdc_set_trace(p->pdc, "PDFlib " PDFLIB_VERSIONSTRING); } } break; } case PDF_PARAMETER_NODEBUG: { const unsigned char *c; for (c = (const unsigned char *) value; *c; c++) { if (*c == 't') pdc_set_trace(p->pdc, NULL); p->debug[(int) *c] = 0; } break; } case PDF_PARAMETER_BINDING: if (!p->binding) p->binding = pdc_strdup(p->pdc, value); break; case PDF_PARAMETER_HASTOBEPOS: p->hastobepos = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_UNDERLINE: p->underline = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_OVERLINE: p->overline = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_STRIKEOUT: p->strikeout = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_KERNING: pdc_warning(p->pdc, PDF_E_UNSUPP_KERNING, 0, 0, 0, 0); break; case PDF_PARAMETER_AUTOSUBSETTING: pdc_warning(p->pdc, PDF_E_UNSUPP_SUBSET, 0, 0, 0, 0); break; case PDF_PARAMETER_AUTOCIDFONT: pdc_warning(p->pdc, PDF_E_UNSUPP_UNICODE, 0, 0, 0, 0); break; case PDF_PARAMETER_UNICODEMAP: pdc_warning(p->pdc, PDF_E_UNSUPP_UNICODE, 0, 0, 0, 0); break; case PDF_PARAMETER_MASTERPASSWORD: pdc_warning(p->pdc, PDF_E_UNSUPP_CRYPT, 0, 0, 0, 0); break; case PDF_PARAMETER_USERPASSWORD: pdc_warning(p->pdc, PDF_E_UNSUPP_CRYPT, 0, 0, 0, 0); break; case PDF_PARAMETER_PERMISSIONS: pdc_warning(p->pdc, PDF_E_UNSUPP_CRYPT, 0, 0, 0, 0); break; case PDF_PARAMETER_COMPATIBILITY: if (!strcmp(value, "1.3")) p->compatibility = PDC_1_3; else if (!strcmp(value, "1.4")) p->compatibility = PDC_1_4; else if (!strcmp(value, "1.5")) p->compatibility = PDC_1_5; else pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); break; case PDF_PARAMETER_PDFX: pdc_warning(p->pdc, PDF_E_UNSUPP_PDFX, 0, 0, 0, 0); break; case PDF_PARAMETER_RESOURCEFILE: if (p->resourcefilename) { pdc_free(p->pdc, p->resourcefilename); p->resourcefilename = NULL; } p->resourcefilename = pdc_strdup(p->pdc, value); p->resfilepending = pdc_true; break; case PDF_PARAMETER_PREFIX: if (p->prefix) { pdc_free(p->pdc, p->prefix); p->prefix = NULL; } /* because of downward compatibility */ p->prefix = pdc_strdup(p->pdc, &value[value[0] == '/' ? 1 : 0]); break; case PDF_PARAMETER_WARNING: pdc_set_warnings(p->pdc, pdf_bool_value(p, key, value)); break; case PDF_PARAMETER_OPENWARNING: p->debug['o'] = (char) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_FONTWARNING: p->debug['F'] = (char) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_ICCWARNING: p->debug['I'] = (char) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_IMAGEWARNING: p->debug['i'] = (char) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_PDIWARNING: p->debug['p'] = (char) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_HONORICCPROFILE: p->debug['e'] = (char) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_GLYPHWARNING: p->debug['g'] = (char) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_RENDERINGINTENT: k = pdc_get_keycode(value, gs_renderingintents); if (k == PDC_KEY_NOTFOUND) pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); p->rendintent = (pdf_renderingintent) k; break; case PDF_PARAMETER_PRESERVEOLDPANTONENAMES: p->preserveoldpantonenames = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_SPOTCOLORLOOKUP: p->spotcolorlookup = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_INHERITGSTATE: p->inheritgs = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_PDISTRICT: p->pdi_strict = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_PDIUSEBOX: p->pdi_usebox = usebox; break; case PDF_PARAMETER_PASSTHROUGH: p->debug['P'] = (char) !pdf_bool_value(p, key, value); break; case PDF_PARAMETER_HIDETOOLBAR: if (pdf_bool_value(p, key, value)) p->ViewerPreferences.flags |= HideToolbar; break; case PDF_PARAMETER_HIDEMENUBAR: if (pdf_bool_value(p, key, value)) p->ViewerPreferences.flags |= HideMenubar; break; case PDF_PARAMETER_HIDEWINDOWUI: if (pdf_bool_value(p, key, value)) p->ViewerPreferences.flags |= HideWindowUI; break; case PDF_PARAMETER_FITWINDOW: if (pdf_bool_value(p, key, value)) p->ViewerPreferences.flags |= FitWindow; break; case PDF_PARAMETER_CENTERWINDOW: if (pdf_bool_value(p, key, value)) p->ViewerPreferences.flags |= CenterWindow; break; case PDF_PARAMETER_DISPLAYDOCTITLE: if (pdf_bool_value(p, key, value)) p->ViewerPreferences.flags |= DisplayDocTitle; break; case PDF_PARAMETER_NONFULLSCREENPAGEMODE: if (!strcmp(value, "useoutlines")) { p->ViewerPreferences.flags |= NonFullScreenPageModeOutlines; p->ViewerPreferences.flags &= ~NonFullScreenPageModeThumbs; } else if (!strcmp(value, "usethumbs")) { p->ViewerPreferences.flags &= ~NonFullScreenPageModeOutlines; p->ViewerPreferences.flags |= NonFullScreenPageModeThumbs; } else if (!strcmp(value, "usenone")) { p->ViewerPreferences.flags &= ~NonFullScreenPageModeOutlines; p->ViewerPreferences.flags &= ~NonFullScreenPageModeThumbs; } else { pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); } break; case PDF_PARAMETER_DIRECTION: if (!strcmp(value, "r2l")) { p->ViewerPreferences.flags |= DirectionR2L; } else if (!strcmp(value, "l2r")) { p->ViewerPreferences.flags &= ~DirectionR2L; } else { pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); } break; case PDF_PARAMETER_VIEWAREA: p->ViewerPreferences.ViewArea = usebox; break; case PDF_PARAMETER_VIEWCLIP: p->ViewerPreferences.ViewClip = usebox; break; case PDF_PARAMETER_PRINTAREA: p->ViewerPreferences.PrintArea = usebox; break; case PDF_PARAMETER_PRINTCLIP: p->ViewerPreferences.PrintClip = usebox; break; case PDF_PARAMETER_TOPDOWN: if (pdf_bool_value(p, key, value)) p->ydirection = (float) -1.0; else p->ydirection = (float) 1.0; break; case PDF_PARAMETER_USERCOORDINATES: p->usercoordinates = pdf_bool_value(p, key, value); break; case PDF_PARAMETER_OPENACTION: pdf_cleanup_destination(p, &p->open_action); pdf_parse_destination_optlist(p, value, &p->open_action, 1, pdf_openaction); break; case PDF_PARAMETER_OPENMODE: if (!strcmp(value, "none")) { p->open_mode = open_none; } else if (!strcmp(value, "bookmarks")) { p->open_mode = open_bookmarks; } else if (!strcmp(value, "thumbnails")) { p->open_mode = open_thumbnails; } else if (!strcmp(value, "fullscreen")) { p->open_mode = open_fullscreen; } else { pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); } break; case PDF_PARAMETER_BOOKMARKDEST: pdf_cleanup_destination(p, &p->bookmark_dest); pdf_parse_destination_optlist(p, value, &p->bookmark_dest, 0, pdf_bookmark); break; case PDF_PARAMETER_FILLRULE: if (!strcmp(value, "winding")) { p->fillrule = pdf_fill_winding; } else if (!strcmp(value, "evenodd")) { p->fillrule = pdf_fill_evenodd; } else { pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); } break; case PDF_PARAMETER_TEXTFORMAT: p->textformat = textformat; break; case PDF_PARAMETER_HYPERTEXTFORMAT: p->hypertextformat = textformat; break; case PDF_PARAMETER_HYPERTEXTENCODING: { pdc_encoding enc; if (!*value) { enc = pdc_unicode; } else { enc = pdf_find_encoding(p, (const char *) value); if (enc == pdc_invalidenc) enc = pdf_insert_encoding(p, (const char *) value); if (enc < 0 && enc != pdc_unicode) pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0); } p->hypertextencoding = enc; break; } /* deprecated */ case PDF_PARAMETER_NATIVEUNICODE: (void) pdf_bool_value(p, key, value); break; case PDF_PARAMETER_TRANSITION: pdf_set_transition(p, value); break; case PDF_PARAMETER_BASE: if (p->base) { pdc_free(p->pdc, p->base); p->base = NULL; } p->base = pdc_strdup(p->pdc, value); break; case PDF_PARAMETER_LAUNCHLINK_PARAMETERS: if (p->launchlink_parameters) { pdc_free(p->pdc, p->launchlink_parameters); p->launchlink_parameters = NULL; } p->launchlink_parameters = pdc_strdup(p->pdc, value); break; case PDF_PARAMETER_LAUNCHLINK_OPERATION: if (p->launchlink_operation) { pdc_free(p->pdc, p->launchlink_operation); p->launchlink_operation = NULL; } p->launchlink_operation = pdc_strdup(p->pdc, value); break; case PDF_PARAMETER_LAUNCHLINK_DEFAULTDIR: if (p->launchlink_defaultdir) { pdc_free(p->pdc, p->launchlink_defaultdir); p->launchlink_defaultdir = NULL; } p->launchlink_defaultdir = pdc_strdup(p->pdc, value); break; case PDF_PARAMETER_TRACE: if (pdf_bool_value(p, key, value)) { p->debug['t'] = 1; pdc_set_trace(p->pdc, "PDFlib " PDFLIB_VERSIONSTRING); } else { pdc_set_trace(p->pdc, NULL); p->debug['t'] = 0; } break; case PDF_PARAMETER_TRACEFILE: pdc_set_tracefile(p->pdc, value); break; case PDF_PARAMETER_TRACEMSG: /* do nothing -- client-supplied string will show up in the trace */ break; case PDF_PARAMETER_SERIAL: case PDF_PARAMETER_LICENSE: break; case PDF_PARAMETER_LICENSEFILE: break; default: pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0); break; } /* switch */ } /* PDF_set_parameter */