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; }
PDFLIB_API int PDFLIB_CALL PDF_create_gstate(PDF *p, const char *optlist) { static const char fn[] = "PDF_create_gstate"; pdf_extgstateresource *gs; int slot = -1; int font = pdc_undef; int inum; pdc_clientdata data; pdc_resopt *results; if (!pdf_enter_api(p, fn, (pdf_state) (pdf_state_document | pdf_state_content), "(p[%p], \"%s\")", (void *) p, optlist)) { PDF_RETURN_HANDLE(p, slot) } 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 */ data.compatibility = p->compatibility; data.maxfont = p->fonts_number - 1; data.hastobepos = p->hastobepos; results = pdc_parse_optionlist(p->pdc, optlist, pdf_create_gstate_options, &data, pdc_true); pdc_get_optvalues(p->pdc, "alphaisshape", results, &gs->alpha_is_shape, NULL); if (pdc_get_optvalues(p->pdc, "blendmode", results, &inum, NULL)) gs->blendmode = (pdf_blendmode) inum; gs->dash_count = pdc_get_optvalues(p->pdc, "dasharray", results, NULL, (void **) &gs->dash_array); pdc_get_optvalues(p->pdc, "dashphase", results, &gs->dash_phase, NULL); pdc_get_optvalues(p->pdc, "flatness", results, &gs->flatness, NULL); pdc_get_optvalues(p->pdc, "font", results, &font, NULL); if (font != pdc_undef) gs->font_obj = p->fonts[font].obj_id; pdc_get_optvalues(p->pdc, "fontsize", results, &gs->font_size, NULL); pdc_get_optvalues(p->pdc, "linecap", results, &gs->line_cap, NULL); pdc_get_optvalues(p->pdc, "linejoin", results, &gs->line_join, NULL); pdc_get_optvalues(p->pdc, "linewidth", results, &gs->line_width, NULL); pdc_get_optvalues(p->pdc, "miterlimit", results, &gs->miter_limit, NULL); pdc_get_optvalues(p->pdc, "opacityfill", results, &gs->opacity_fill, NULL); pdc_get_optvalues(p->pdc, "opacitystroke", results, &gs->opacity_stroke, NULL); pdc_get_optvalues(p->pdc, "overprintfill", results, &gs->overprint_fill, NULL); pdc_get_optvalues(p->pdc, "overprintmode", results, &gs->overprint_mode, NULL); pdc_get_optvalues(p->pdc, "overprintstroke", results, &gs->overprint_stroke, NULL); if (pdc_get_optvalues(p->pdc, "renderingintent", results, &inum, NULL)) gs->ri = (pdf_renderingintent) inum; pdc_get_optvalues(p->pdc, "smoothness", results, &gs->smoothness, NULL); pdc_get_optvalues(p->pdc, "strokeadjust", results, &gs->stroke_adjust, NULL); pdc_get_optvalues(p->pdc, "textknockout", results, &gs->text_knockout, NULL); pdc_cleanup_optionlist(p->pdc, results); PDF_RETURN_HANDLE(p, slot) }