Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 patch 650 git-svn-id: svn://10.65.10.50/trunk@14148 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			1081 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			1081 lines
		
	
	
		
			30 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /*---------------------------------------------------------------------------*
 | |
|  |              PDFlib - A library for generating PDF on the fly             |
 | |
|  +---------------------------------------------------------------------------+
 | |
|  | Copyright (c) 1997-2005 Thomas Merz and PDFlib GmbH. All rights reserved. |
 | |
|  +---------------------------------------------------------------------------+
 | |
|  |                                                                           |
 | |
|  |    This software is subject to the PDFlib license. It is NOT in the       |
 | |
|  |    public domain. Extended versions and commercial licenses are           |
 | |
|  |    available, please check http://www.pdflib.com.                         |
 | |
|  |                                                                           |
 | |
|  *---------------------------------------------------------------------------*/
 | |
| 
 | |
| /* $Id: p_params.c,v 1.2 2006-07-11 13:10:33 alex Exp $
 | |
|  *
 | |
|  * PDFlib parameter handling
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #define P_PARAMS_C
 | |
| 
 | |
| #include "p_intern.h"
 | |
| #include "p_color.h"
 | |
| #include "p_font.h"
 | |
| #include "p_image.h"
 | |
| #include "p_page.h"
 | |
| #include "p_tagged.h"
 | |
| 
 | |
| /*
 | |
|  * PDF_get_parameter() and PDF_set_parameter() deal with strings,
 | |
|  * PDF_get_value() and PDF_set_value() deal with numerical values.
 | |
|  */
 | |
| 
 | |
| typedef struct
 | |
| {
 | |
|     char *	name;		/* parameter name */
 | |
|     pdc_bool	mod_zero;	/* PDF_get_() modifier argument must be 0 */
 | |
|     int		get_scope;	/* bit mask of legal states for PDF_get_() */
 | |
|     int		set_scope;	/* bit mask of legal states for PDF_set_() */
 | |
| } pdf_parm_descr;
 | |
| 
 | |
| static pdf_parm_descr parms[] =
 | |
| {
 | |
| #define pdf_gen_parm_descr	1
 | |
| #include "p_params.h"
 | |
| #undef	pdf_gen_parm_descr
 | |
| 
 | |
|     { "", 0, 0, 0 }
 | |
| };
 | |
| 
 | |
| enum
 | |
| {
 | |
| #define pdf_gen_parm_enum	1
 | |
| #include "p_params.h"
 | |
| #undef	pdf_gen_parm_enum
 | |
| 
 | |
|     PDF_PARAMETER_LIMIT
 | |
| };
 | |
| 
 | |
| static int
 | |
| pdf_get_index(PDF *p, const char *key)
 | |
| {
 | |
|     int i;
 | |
| 
 | |
|     if (key == NULL || !*key)
 | |
|         pdc_error(p->pdc, PDC_E_ILLARG_EMPTY, "key", 0, 0, 0);
 | |
| 
 | |
|     for (i = 0; i < PDF_PARAMETER_LIMIT; ++i)
 | |
|     {
 | |
|         if (pdc_stricmp(key, parms[i].name) == 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);
 | |
| 	    return i;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     if (i == PDF_PARAMETER_LIMIT)
 | |
|         pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0);
 | |
| 
 | |
|     return -1;
 | |
| }
 | |
| 
 | |
| static pdc_bool
 | |
| pdf_bool_value(PDF *p, const char *key, const char *value)
 | |
| {
 | |
|     if (!pdc_stricmp(value, "true"))
 | |
| 	return pdc_true;
 | |
| 
 | |
|     if (!pdc_stricmp(value, "false"))
 | |
| 	return pdc_false;
 | |
| 
 | |
|     pdc_error(p->pdc, PDC_E_ILLARG_BOOL, key, value, 0, 0);
 | |
| 
 | |
|     return pdc_false;		/* compilers love it */
 | |
| }
 | |
| 
 | |
| void
 | |
| pdf__set_parameter(PDF *p, const char *key, const char *value)
 | |
| {
 | |
|     pdc_usebox usebox = use_none;
 | |
|     pdc_text_format textformat = pdc_auto;
 | |
|     char optlist[64];
 | |
|     pdf_ppt *ppt;
 | |
|     int i, k;
 | |
| 
 | |
|     i = pdf_get_index(p, key);
 | |
| 
 | |
|     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_usebox) k;
 | |
|             strcpy(optlist, key);
 | |
|             strcat(optlist, " ");
 | |
|             strcat(optlist, 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_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;
 | |
| 
 | |
| 		if (*c == 't') {
 | |
|                     pdf_set_trace_options(p, "enable");
 | |
| 		}
 | |
| 	    }
 | |
| 	    break;
 | |
| 	}
 | |
| 
 | |
| 	case PDF_PARAMETER_NODEBUG:
 | |
| 	{
 | |
| 	    const unsigned char *c;
 | |
| 
 | |
| 	    for (c = (const unsigned char *) value; *c; c++) {
 | |
| 		if (*c == 't')
 | |
|                     pdf_set_trace_options(p, "disable");
 | |
| 
 | |
| 		p->debug[(int) *c] = 0;
 | |
| 	    }
 | |
| 	    break;
 | |
| 	}
 | |
| 
 | |
|         case PDF_PARAMETER_BINDING:
 | |
|             if (!p->binding)
 | |
|                 p->binding = pdc_strdup(p->pdc, value);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_OBJORIENT:
 | |
|             p->objorient = pdf_bool_value(p, key, value);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_HASTOBEPOS:
 | |
|             p->hastobepos = pdf_bool_value(p, key, value);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_PTFRUN:
 | |
|             p->ptfrun = pdf_bool_value(p, key, value);
 | |
|             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_AUTOSUBSETTING:
 | |
|         case PDF_PARAMETER_AUTOCIDFONT:
 | |
|         case PDF_PARAMETER_UNICODEMAP:
 | |
|             pdc_warning(p->pdc, PDF_E_UNSUPP_UNICODE, 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_WARNING:
 | |
|             pdc_set_warnings(p->pdc, pdf_bool_value(p, key, value));
 | |
|             break;
 | |
| 
 | |
|         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_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_PDIUSEBOX:
 | |
|             p->pdi_usebox = usebox;
 | |
|             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_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_FILLRULE:
 | |
|             if (!pdc_stricmp(value, "winding")) {
 | |
|                 ppt->fillrule = pdf_fill_winding;
 | |
|             } else if (!pdc_stricmp(value, "evenodd")) {
 | |
|                 ppt->fillrule = pdf_fill_evenodd;
 | |
|             } else {
 | |
|                 pdc_error(p->pdc, PDC_E_PAR_ILLPARAM, value, key, 0, 0);
 | |
|             }
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_LOGGING:
 | |
|             pdf_set_trace_options(p, value);
 | |
|             break;
 | |
| 
 | |
|         /* deprecated */
 | |
|         case PDF_PARAMETER_TRACE:
 | |
|         {
 | |
|             pdc_bool bv = pdf_bool_value(p, key, value);
 | |
|             if (bv)
 | |
|                 pdf_set_trace_options(p, "");
 | |
|             else
 | |
|                 pdf_set_trace_options(p, "disable");
 | |
|             break;
 | |
|         }
 | |
| 
 | |
|         /* deprecated */
 | |
|         case PDF_PARAMETER_TRACEFILE:
 | |
|             pdc_set_tracefile(p->pdc, value);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_LOGMSG:
 | |
|         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_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_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_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,
 | |
|                                               pdc_true);
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_NATIVEUNICODE:
 | |
|         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;
 | |
| 
 | |
| 	default:
 | |
| 	    pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0);
 | |
| 	    break;
 | |
|     } /* switch */
 | |
| } /* pdf__set_parameter */
 | |
| 
 | |
| static double
 | |
| pdf_value(PDF *p, const char *key, double value, int minver)
 | |
| {
 | |
|     if (p->compatibility < minver)
 | |
| 	pdc_error(p->pdc, PDC_E_PAR_VERSION,
 | |
|             key, pdc_get_pdfversion(p->pdc, minver), 0, 0);
 | |
| 
 | |
|     return value;
 | |
| }
 | |
| 
 | |
| static double
 | |
| pdf_pos_value(PDF *p, const char *key, double value, int minver)
 | |
| {
 | |
|     if (p->compatibility < minver)
 | |
| 	pdc_error(p->pdc, PDC_E_PAR_VERSION,
 | |
|             key, pdc_get_pdfversion(p->pdc, minver), 0, 0);
 | |
| 
 | |
|     if (value <= 0)
 | |
| 	pdc_error(p->pdc, PDC_E_PAR_ILLVALUE,
 | |
| 	    pdc_errprintf(p->pdc, "%f", value), key, 0, 0);
 | |
| 
 | |
|     return value;
 | |
| }
 | |
| 
 | |
| void
 | |
| pdf__set_value(PDF *p, const char *key, double value)
 | |
| {
 | |
|     int i;
 | |
|     int ivalue = (int) value;
 | |
|     pdf_ppt *ppt;
 | |
| 
 | |
|     i = pdf_get_index(p, key);
 | |
| 
 | |
|     ppt = p->curr_ppt;
 | |
| 
 | |
|     pdc_check_number(p->pdc, "value", value);
 | |
| 
 | |
|     switch (i)
 | |
|     {
 | |
|         case PDF_PARAMETER_COMPRESS:
 | |
| 	    if (ivalue < 0 || ivalue > 9)
 | |
| 		pdc_error(p->pdc, PDC_E_PAR_ILLVALUE,
 | |
| 		    pdc_errprintf(p->pdc, "%f", value), key, 0, 0);
 | |
| 
 | |
| 	    if (pdc_get_compresslevel(p->out) != ivalue)
 | |
| 	    {
 | |
| 		/*
 | |
| 		 * We must restart the compression engine and start a new
 | |
| 		 * contents section if we're in the middle of a page.
 | |
| 		 */
 | |
| 		if (PDF_GET_STATE(p) == pdf_state_page) {
 | |
| 		    pdf_end_contents_section(p);
 | |
| 		    pdc_set_compresslevel(p->out, ivalue);
 | |
| 		    pdf_begin_contents_section(p);
 | |
| 		} else
 | |
| 		    pdc_set_compresslevel(p->out, ivalue);
 | |
| 	    }
 | |
| 
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_FLOATDIGITS:
 | |
| 	    if (3 <= ivalue && ivalue <= 6)
 | |
| 		pdc_set_floatdigits(p->pdc, ivalue);
 | |
| 	    else
 | |
| 		pdc_error(p->pdc, PDC_E_PAR_ILLVALUE,
 | |
| 		    pdc_errprintf(p->pdc, "%d", ivalue), key, 0, 0);
 | |
| 	    break;
 | |
| 
 | |
| 	/* TODO (york): take /CropBox into account?
 | |
| 	*/
 | |
| 	case PDF_PARAMETER_PAGEWIDTH:
 | |
| 	{
 | |
| 	    const pdc_rectangle *box = pdf_get_pagebox(p, pdf_mediabox);
 | |
| 
 | |
|             if (p->ydirection == -1)
 | |
|                 pdc_error(p->pdc, PDF_E_PAGE_ILLCHGSIZE, 0, 0, 0, 0);
 | |
| 
 | |
| 	    if (value < PDF_ACRO_MINPAGE || value > PDF_ACRO_MAXPAGE)
 | |
| 		pdc_warning(p->pdc, PDF_E_PAGE_SIZE_ACRO, 0, 0, 0, 0);
 | |
| 
 | |
| 	    pdf_set_pagebox_urx(p, pdf_mediabox,
 | |
| 		box->llx + pdf_pos_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 	}
 | |
| 
 | |
| 	/* TODO (york): take /CropBox into account?
 | |
| 	*/
 | |
| 	case PDF_PARAMETER_PAGEHEIGHT:
 | |
| 	{
 | |
| 	    const pdc_rectangle *box = pdf_get_pagebox(p, pdf_mediabox);
 | |
| 
 | |
|             if (p->ydirection == -1)
 | |
|                 pdc_error(p->pdc, PDF_E_PAGE_ILLCHGSIZE, 0, 0, 0, 0);
 | |
| 
 | |
| 	    if (value < PDF_ACRO_MINPAGE || value > PDF_ACRO_MAXPAGE)
 | |
| 		pdc_warning(p->pdc, PDF_E_PAGE_SIZE_ACRO, 0, 0, 0, 0);
 | |
| 
 | |
| 	    pdf_set_pagebox_ury(p, pdf_mediabox,
 | |
| 		box->lly + pdf_pos_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 	}
 | |
| 
 | |
| 	case PDF_PARAMETER_CROPBOX_LLX:
 | |
| 	    pdf_set_pagebox_llx(p, pdf_cropbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_CROPBOX_LLY:
 | |
| 	    pdf_set_pagebox_lly(p, pdf_cropbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_CROPBOX_URX:
 | |
| 	    pdf_set_pagebox_urx(p, pdf_cropbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_CROPBOX_URY:
 | |
| 	    pdf_set_pagebox_ury(p, pdf_cropbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_BLEEDBOX_LLX:
 | |
| 	    pdf_set_pagebox_llx(p, pdf_bleedbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_BLEEDBOX_LLY:
 | |
| 	    pdf_set_pagebox_lly(p, pdf_bleedbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_BLEEDBOX_URX:
 | |
| 	    pdf_set_pagebox_urx(p, pdf_bleedbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_BLEEDBOX_URY:
 | |
| 	    pdf_set_pagebox_ury(p, pdf_bleedbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_TRIMBOX_LLX:
 | |
| 	    pdf_set_pagebox_llx(p, pdf_trimbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_TRIMBOX_LLY:
 | |
| 	    pdf_set_pagebox_lly(p, pdf_trimbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_TRIMBOX_URX:
 | |
| 	    pdf_set_pagebox_urx(p, pdf_trimbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_TRIMBOX_URY:
 | |
| 	    pdf_set_pagebox_ury(p, pdf_trimbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_ARTBOX_LLX:
 | |
| 	    pdf_set_pagebox_llx(p, pdf_artbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_ARTBOX_LLY:
 | |
| 	    pdf_set_pagebox_lly(p, pdf_artbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_ARTBOX_URX:
 | |
| 	    pdf_set_pagebox_urx(p, pdf_artbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_ARTBOX_URY:
 | |
| 	    pdf_set_pagebox_ury(p, pdf_artbox,
 | |
| 				    pdf_value(p, key, value, PDC_1_3));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_LEADING:
 | |
|             pdf_set_tstate(p, value, to_leading);
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_TEXTRISE:
 | |
|             pdf_set_tstate(p, value, to_textrise);
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_HORIZSCALING:
 | |
|             pdf_set_tstate(p, value /100, to_horizscaling);
 | |
| 	    break;
 | |
| 
 | |
|         case PDF_PARAMETER_ITALICANGLE:
 | |
|             pdf_set_tstate(p, value, to_italicangle);
 | |
|             break;
 | |
| 
 | |
| 	case PDF_PARAMETER_TEXTRENDERING:
 | |
|             pdf_set_tstate(p, value, to_textrendering);
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_CHARSPACING:
 | |
|             pdf_set_tstate(p, value, to_charspacing);
 | |
| 	    break;
 | |
| 
 | |
|         case PDF_PARAMETER_WORDSPACING:
 | |
|             pdf_set_tstate(p, value, to_wordspacing);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_UNDERLINEWIDTH:
 | |
|             pdf_set_tstate(p, value, to_underlinewidth);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_UNDERLINEPOSITION:
 | |
|             pdf_set_tstate(p, value, to_underlineposition);
 | |
|             break;
 | |
| 
 | |
| 	case PDF_PARAMETER_DURATION:
 | |
| 	    pdf_set_duration(p, value);
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_DEFAULTGRAY:
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_DEFAULTRGB:
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_DEFAULTCMYK:
 | |
| 	    break;
 | |
| 
 | |
|         case PDF_PARAMETER_SETCOLOR_ICCPROFILEGRAY:
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_SETCOLOR_ICCPROFILERGB:
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_SETCOLOR_ICCPROFILECMYK:
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_SUBSETLIMIT:
 | |
|         case PDF_PARAMETER_SUBSETMINSIZE:
 | |
|         {
 | |
|             pdc_warning(p->pdc, PDF_E_UNSUPP_SUBSET, 0, 0, 0, 0);
 | |
|             break;
 | |
|         }
 | |
| 
 | |
| 	default:
 | |
| 	    pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0);
 | |
| 	    break;
 | |
|     } /* switch */
 | |
| } /* pdf__set_value */
 | |
| 
 | |
| double
 | |
| pdf__get_value(PDF *p, const char *key, double mod)
 | |
| {
 | |
|     int i = -1;
 | |
|     int imod = (int) mod;
 | |
|     double result = 0;
 | |
|     pdf_ppt *ppt;
 | |
| 
 | |
|     i = pdf_get_index(p, key);
 | |
| 
 | |
|     if (parms[i].mod_zero && mod != 0)
 | |
| 	pdc_error(p->pdc, PDC_E_PAR_ILLVALUE,
 | |
| 	    pdc_errprintf(p->pdc, "%f", mod), key, 0, 0);
 | |
| 
 | |
|     ppt = p->curr_ppt;
 | |
| 
 | |
|     switch (i)
 | |
|     {
 | |
|         case PDF_PARAMETER_IMAGEWIDTH:
 | |
|         case PDF_PARAMETER_IMAGEHEIGHT:
 | |
|         case PDF_PARAMETER_RESX:
 | |
|         case PDF_PARAMETER_RESY:
 | |
|         case PDF_PARAMETER_ORIENTATION:
 | |
|             if (p->hastobepos) imod -= 1;
 | |
|             pdf_check_handle(p, imod, pdc_imagehandle);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_FONTMAXCODE:
 | |
|         case PDF_PARAMETER_CAPHEIGHT:
 | |
|         case PDF_PARAMETER_ASCENDER:
 | |
|         case PDF_PARAMETER_DESCENDER:
 | |
|         case PDF_PARAMETER_XHEIGHT:
 | |
|             if (p->hastobepos) imod -= 1;
 | |
|             pdf_check_handle(p, imod, pdc_fonthandle);
 | |
|             break;
 | |
|     }
 | |
| 
 | |
|     switch (i)
 | |
|     {
 | |
| 	/* TODO (york): take /CropBox into account?
 | |
| 	*/
 | |
|         case PDF_PARAMETER_PAGEWIDTH:
 | |
| 	{
 | |
| 	    const pdc_rectangle *box = pdf_get_pagebox(p, pdf_mediabox);
 | |
| 
 | |
|             result = box->urx - box->llx;
 | |
|             break;
 | |
| 	}
 | |
| 
 | |
| 	/* TODO (york): take /CropBox into account?
 | |
| 	*/
 | |
|         case PDF_PARAMETER_PAGEHEIGHT:
 | |
| 	{
 | |
| 	    const pdc_rectangle *box = pdf_get_pagebox(p, pdf_mediabox);
 | |
| 
 | |
|             result = box->ury - box->lly;
 | |
|             break;
 | |
| 	}
 | |
| 
 | |
|         case PDF_PARAMETER_IMAGEWIDTH:
 | |
|             pdf_get_image_size(p, imod, (double *) &result, NULL);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_IMAGEHEIGHT:
 | |
|             pdf_get_image_size(p, imod, NULL, (double *) &result);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_RESX:
 | |
|             pdf_get_image_resolution(p, imod, (double *) &result, NULL);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_RESY:
 | |
|             pdf_get_image_resolution(p, imod, NULL, (double *) &result);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_ORIENTATION:
 | |
|             result = (double) (p->images[imod].orientation);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_IMAGE_ICCPROFILE:
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_ICCCOMPONENTS:
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_CURRENTX:
 | |
|             result = (double) (ppt->gstate[ppt->sl].x);
 | |
| 	    break;
 | |
| 
 | |
|         case PDF_PARAMETER_CURRENTY:
 | |
|             result = (double) (ppt->gstate[ppt->sl].y);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_CTM_A:
 | |
|             result = (double) (ppt->gstate[ppt->sl].ctm.a);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_CTM_B:
 | |
|             result = (double) (ppt->gstate[ppt->sl].ctm.b);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_CTM_C:
 | |
|             result = (double) (ppt->gstate[ppt->sl].ctm.c);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_CTM_D:
 | |
|             result = (double) (ppt->gstate[ppt->sl].ctm.d);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_CTM_E:
 | |
|             result = (double) (ppt->gstate[ppt->sl].ctm.e);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_CTM_F:
 | |
|             result = (double) (ppt->gstate[ppt->sl].ctm.f);
 | |
|             break;
 | |
| 
 | |
| 	case PDF_PARAMETER_TEXTX:
 | |
|             result = pdf_get_tstate(p, to_textx);
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_TEXTY:
 | |
|             result = pdf_get_tstate(p, to_texty);
 | |
| 	    break;
 | |
| 
 | |
|         case PDF_PARAMETER_UNDERLINEWIDTH:
 | |
|             result = pdf_get_tstate(p, to_underlinewidth);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_UNDERLINEPOSITION:
 | |
|             result = pdf_get_tstate(p, to_underlineposition);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_WORDSPACING:
 | |
|             result = pdf_get_tstate(p, to_wordspacing);
 | |
|             break;
 | |
| 
 | |
| 	case PDF_PARAMETER_CHARSPACING:
 | |
|             result = pdf_get_tstate(p, to_charspacing);
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_HORIZSCALING:
 | |
|             result = 100 * pdf_get_tstate(p, to_horizscaling);
 | |
| 	    break;
 | |
| 
 | |
|         case PDF_PARAMETER_ITALICANGLE:
 | |
|             result = pdf_get_tstate(p, to_italicangle);
 | |
|             break;
 | |
| 
 | |
| 	case PDF_PARAMETER_TEXTRISE:
 | |
|             result = pdf_get_tstate(p, to_textrise);
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_LEADING:
 | |
|             result = pdf_get_tstate(p, to_leading);
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_TEXTRENDERING:
 | |
|             result = pdf_get_tstate(p, to_textrendering);
 | |
| 	    break;
 | |
| 
 | |
|         case PDF_PARAMETER_FONTSIZE:
 | |
|             result = pdf_get_tstate(p, to_fontsize);
 | |
|             break;
 | |
| 
 | |
| 	case PDF_PARAMETER_FONT:
 | |
|             result = pdf_get_tstate(p, to_font);
 | |
|             if (p->hastobepos) result += 1;
 | |
| 	    break;
 | |
| 
 | |
|         case PDF_PARAMETER_MONOSPACE:
 | |
|             result = pdf_get_font_float_option(p, fo_monospace);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_FONTMAXCODE:
 | |
|             result = (double) (p->fonts[imod].numOfCodes - 1);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_ASCENDER:
 | |
|             result = pdf_font_get_metric_value(p->fonts[imod].ascender);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_DESCENDER:
 | |
|             result = pdf_font_get_metric_value(p->fonts[imod].descender);
 | |
|             break;
 | |
| 
 | |
| 	case PDF_PARAMETER_CAPHEIGHT:
 | |
|             result = pdf_font_get_metric_value(p->fonts[imod].capHeight);
 | |
| 	    break;
 | |
| 
 | |
|         case PDF_PARAMETER_XHEIGHT:
 | |
|             result = pdf_font_get_metric_value(p->fonts[imod].xHeight);
 | |
|             break;
 | |
| 
 | |
| 	default:
 | |
| 	    pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0);
 | |
| 	    break;
 | |
|     } /* switch */
 | |
| 
 | |
|     return result;
 | |
| } /* pdf__get_value */
 | |
| 
 | |
| const char *
 | |
| pdf__get_parameter(PDF *p, const char *key, double mod)
 | |
| {
 | |
|     int i = -1;
 | |
|     int imod = (int) mod;
 | |
|     const char *result = "";
 | |
|     pdf_ppt *ppt;
 | |
| 
 | |
|     i = pdf_get_index(p, key);
 | |
| 
 | |
|     if (parms[i].mod_zero && mod != 0)
 | |
| 	pdc_error(p->pdc, PDC_E_PAR_ILLPARAM,
 | |
| 	    pdc_errprintf(p->pdc, "%f", mod), key, 0, 0);
 | |
| 
 | |
|     ppt = p->curr_ppt;
 | |
| 
 | |
|     switch (i)
 | |
|     {
 | |
|         case PDF_PARAMETER_CAPHEIGHTFAKED:
 | |
|         case PDF_PARAMETER_ASCENDERFAKED:
 | |
|         case PDF_PARAMETER_DESCENDERFAKED:
 | |
|         case PDF_PARAMETER_XHEIGHTFAKED:
 | |
|             if (p->hastobepos) imod -= 1;
 | |
|             pdf_check_handle(p, imod, pdc_fonthandle);
 | |
|             break;
 | |
|     }
 | |
| 
 | |
|     switch (i)
 | |
|     {
 | |
| 	case PDF_PARAMETER_FONTNAME:
 | |
|             result = pdf_get_font_char_option(p, fo_fontname);
 | |
| 	    break;
 | |
| 
 | |
|         case PDF_PARAMETER_FONTENCODING:
 | |
|             result = pdf_get_font_char_option(p, fo_encoding);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_FONTSTYLE:
 | |
|             result = pdf_get_font_char_option(p, fo_fontstyle);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_ASCENDERFAKED:
 | |
|             result = PDC_BOOLSTR(pdf_font_get_is_faked(&p->fonts[imod],
 | |
|                                  font_ascender));
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_DESCENDERFAKED:
 | |
|             result = PDC_BOOLSTR(pdf_font_get_is_faked(&p->fonts[imod],
 | |
|                                  font_descender));
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_CAPHEIGHTFAKED:
 | |
|             result = PDC_BOOLSTR(pdf_font_get_is_faked(&p->fonts[imod],
 | |
|                                  font_capheight));
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_XHEIGHTFAKED:
 | |
|             result = PDC_BOOLSTR(pdf_font_get_is_faked(&p->fonts[imod],
 | |
|                                  font_xheight));
 | |
|             break;
 | |
| 
 | |
| 
 | |
|         case PDF_PARAMETER_UNDERLINE:
 | |
|             result = PDC_BOOLSTR((int) pdf_get_tstate(p, to_underline));
 | |
|             break;
 | |
| 
 | |
| 	case PDF_PARAMETER_OVERLINE:
 | |
|             result = PDC_BOOLSTR((int) pdf_get_tstate(p, to_overline));
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_STRIKEOUT:
 | |
|             result = PDC_BOOLSTR((int) pdf_get_tstate(p, to_strikeout));
 | |
| 	    break;
 | |
| 
 | |
|         /* deprecated */
 | |
| 	case PDF_PARAMETER_INHERITGSTATE:
 | |
|             result = PDC_BOOLSTR(pdc_false);
 | |
| 	    break;
 | |
| 
 | |
| 	case PDF_PARAMETER_SCOPE:
 | |
| 	    switch (p->state_stack[p->state_sp]) {
 | |
| 		case pdf_state_object:	result = "object";	break;
 | |
| 		case pdf_state_document:result = "document";	break;
 | |
| 		case pdf_state_page:	result = "page";	break;
 | |
| 		case pdf_state_pattern:	result = "pattern";	break;
 | |
| 		case pdf_state_template:result = "template";	break;
 | |
| 		case pdf_state_path:	result = "path";	break;
 | |
| 		default:		result = "(unknown)";	break;
 | |
| 	    }
 | |
| 	    break;
 | |
| 
 | |
|         case PDF_PARAMETER_TEXTFORMAT:
 | |
|             result = pdc_get_keyword(p->textformat, pdf_textformat_keylist);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_HYPERTEXTFORMAT:
 | |
|             result = pdc_get_keyword(p->hypertextformat,pdf_textformat_keylist);
 | |
|             break;
 | |
| 
 | |
|         case PDF_PARAMETER_HYPERTEXTENCODING:
 | |
|             result = pdf_get_encoding_name(p, p->hypertextencoding, NULL);
 | |
|             break;
 | |
| 
 | |
| 	default:
 | |
| 	    pdc_error(p->pdc, PDC_E_PAR_UNKNOWNKEY, key, 0, 0, 0);
 | |
| 	    break;
 | |
|     } /* switch */
 | |
| 
 | |
|     return result;
 | |
| } /* pdf__get_parameter */
 | |
| 
 | |
| 
 |