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 */
 | 
						|
 | 
						|
 |