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
		
			
				
	
	
		
			274 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			274 lines
		
	
	
		
			11 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: pc_optparse.h,v 1.2 2006-07-11 13:10:33 alex Exp $
 | 
						|
 *
 | 
						|
 * Definitions for option parser routines
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef PC_OPTPARSE_H
 | 
						|
#define PC_OPTPARSE_H
 | 
						|
 | 
						|
/*
 | 
						|
 *  Optlist
 | 
						|
 *  -------
 | 
						|
 *  An optlist is a string containing pairs of the form
 | 
						|
 *  "optionname optionvalue(s)". The separator characters
 | 
						|
 *  are "\f\n\r\t\v =".
 | 
						|
 *
 | 
						|
 *  There are options of different types (see pdc_opttype):
 | 
						|
 *
 | 
						|
 *      Boolean   (pdc_booleanlist)
 | 
						|
 *      Strings   (pdc_stringlist)
 | 
						|
 *      Keywords  (pdc_keywordlist)
 | 
						|
 *      Integers  (pdc_integerlist)
 | 
						|
 *      Floats    (pdc_floatlist)
 | 
						|
 *      Doubles   (pdc_doublelist)
 | 
						|
 *      Scalars   (pdc_scalarlist)
 | 
						|
 *      Unichars  (pdc_unicharlist)
 | 
						|
 *      Handles   (pdc_colorhandle ...)
 | 
						|
 *
 | 
						|
 *  An option can have one or more values. Boolean options can be
 | 
						|
 *  provided without any value. If an option has more than one value,
 | 
						|
 *  then these values have to be set in braces. Examples:
 | 
						|
 *
 | 
						|
 *      dasharray {11 22 33}
 | 
						|
 *
 | 
						|
 *  Strings with white spaces have to be set in braces too.
 | 
						|
 *  Examples:
 | 
						|
 *
 | 
						|
 *      fullname {Ludwig Wittgenstein}
 | 
						|
 *      composers {{Gustav Mahler}}
 | 
						|
 *      comment {}
 | 
						|
 *
 | 
						|
 *  The allowed option names and the limitations of their values
 | 
						|
 *  must be defined in an array of enumeration type pdc_defopt
 | 
						|
 *  (see below). Such an option definition specifies (in brackets
 | 
						|
 *  the member name in the pdc_defopt struct)
 | 
						|
 *
 | 
						|
 *      - the name of the option (name)
 | 
						|
 *      - the type of the option (type)
 | 
						|
 *      - value restrictions by bit flags (flags)
 | 
						|
 *      - the minimal and maximal permitted number of values
 | 
						|
 *        (minnum, maxnum)
 | 
						|
 *      - the minimal and maximal permitted value, or string
 | 
						|
 *        length resp. (minval, maxval)
 | 
						|
 *      - the permitted keywords in a keyword list (is required) or
 | 
						|
 *        the permitted integer numbers in a integer list (is optional),
 | 
						|
 *        resp. (keylist)
 | 
						|
 *      - the number of default values and the default values
 | 
						|
 *        themselves (defnum, defval)
 | 
						|
 *
 | 
						|
 *  Remarks:
 | 
						|
 *
 | 
						|
 *      - minnum = maxnum = 1: The program expects a single value,
 | 
						|
 *        otherwise an array. If an array consists of only one value
 | 
						|
 *        the braces can be omitted - but not in the case of strings
 | 
						|
 *        with white spaces (see example above).
 | 
						|
 *      - Boolean options have the values "true" or "false". A shorter
 | 
						|
 *        equivalent notation is "name" or "noname". for "name true"
 | 
						|
 *        or "name false", resp.
 | 
						|
 *      - White spaces in strings can be forbidden by the flag
 | 
						|
 *        PDC_OPT_NOSPACES.
 | 
						|
 *      - It's only possible to specify a single number interval (minval,
 | 
						|
 *        maxval) which must contain the number. The flag PDC_OPT_NOZERO
 | 
						|
 *        can forbid zero additionally.
 | 
						|
 *      - Keywords will always be converted to integer numbers (keycodes)
 | 
						|
 *        according to the specified pdc_keyconn array.
 | 
						|
 *      - It is possible to specify keywords for integers, floats and
 | 
						|
 *        doubles additionally by an optional keylist entry. For integers
 | 
						|
 *        it is possible to specify the allowed integer values by an optional
 | 
						|
 *        keylist and by the flag PDC_OPT_INTLIST.
 | 
						|
 *      - If more than one keyword is permitted, then the flag
 | 
						|
 *        PDC_OPT_BUILDOR decides, whether a bit pattern must be
 | 
						|
 *        built by or-ing the single keycodes or not.
 | 
						|
 *
 | 
						|
 *  Program run:
 | 
						|
 *
 | 
						|
 *  An optlist is parsed by the function "pdc_parse_optionlist".
 | 
						|
 *  After successfully parsing this function returns a pointer to the
 | 
						|
 *  allocated "pdc_resopt" structures containing the option values.
 | 
						|
 *  These structures must be freed by the function "pdc_cleanup_optionlist".
 | 
						|
 *
 | 
						|
 *  Values can be fetched by the function "pdc_get_optvalues". This can
 | 
						|
 *  be achieved by specifying a variable pointer (lvalues) or by a pointer
 | 
						|
 *  to a pointer (mvalues). In the first case the variable must be large
 | 
						|
 *  enough to hold the values. In the second case the pointer is the pointer
 | 
						|
 *  to the allocated array with the option values. This pointer will be
 | 
						|
 *  freed in "pdc_cleanup_optionlist". To avoid this you can call the function
 | 
						|
 *  "pdc_save_lastopt" after the call of "pdc_get_optvalues". Function
 | 
						|
 *  "pdc_save_lastopt" returns the pointer which is protected now against
 | 
						|
 *  freeing in "pdc_cleanup_optionlist". In the special case of type =
 | 
						|
 *  pdc_stringlist, you can protect only the first element in the string
 | 
						|
 *  list by calling "pdc_save_lastopt" with the flag PDC_OPT_SAVE1ELEM.
 | 
						|
 *  Flag = PDC_OPT_SAVEALL defines the general case. The caller has the
 | 
						|
 *  responsibility to free the protected pointers after use.
 | 
						|
 *
 | 
						|
 *  pdc_stringlist:
 | 
						|
 *  maxnum = 1: lvalues: char s[maxval+1]  (defined char array)
 | 
						|
 *  maxnum > 1: lvalues: char *s[maxnum]   (defined char pointer array)
 | 
						|
 *              mvalues: char **s          (pointer to a char pointer array)
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
typedef struct pdc_keyconn_s pdc_keyconn;
 | 
						|
typedef struct pdc_clientdata_s pdc_clientdata;
 | 
						|
typedef struct pdc_defopt_s pdc_defopt;
 | 
						|
typedef struct pdc_resopt_s pdc_resopt;
 | 
						|
 | 
						|
/* types of option values */
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    pdc_booleanlist = 0,
 | 
						|
    pdc_stringlist,
 | 
						|
    pdc_keywordlist,
 | 
						|
    pdc_integerlist,
 | 
						|
    pdc_floatlist,
 | 
						|
    pdc_doublelist,
 | 
						|
    pdc_scalarlist,
 | 
						|
    pdc_unicharlist,
 | 
						|
 | 
						|
    /* correspondig member of pdc_clientdata_s must be specified */
 | 
						|
    pdc_actionhandle,
 | 
						|
    pdc_bookmarkhandle,
 | 
						|
    pdc_colorhandle,
 | 
						|
    pdc_documenthandle,
 | 
						|
    pdc_fonthandle,
 | 
						|
    pdc_gstatehandle,
 | 
						|
    pdc_iccprofilehandle,
 | 
						|
    pdc_imagehandle,
 | 
						|
    pdc_layerhandle,
 | 
						|
    pdc_pagehandle,
 | 
						|
    pdc_patternhandle,
 | 
						|
    pdc_shadinghandle,
 | 
						|
    pdc_templatehandle,
 | 
						|
    pdc_textflowhandle
 | 
						|
}
 | 
						|
pdc_opttype;
 | 
						|
 | 
						|
/* keyword - keycode */
 | 
						|
struct pdc_keyconn_s
 | 
						|
{
 | 
						|
    char *word;
 | 
						|
    int  code;
 | 
						|
};
 | 
						|
 | 
						|
/* client data */
 | 
						|
struct pdc_clientdata_s
 | 
						|
{
 | 
						|
    int compatibility;
 | 
						|
    int maxaction;
 | 
						|
    int maxbookmark;
 | 
						|
    int maxcolor;
 | 
						|
    int maxdocument;
 | 
						|
    int maxfont;
 | 
						|
    int maxgstate;
 | 
						|
    int maxiccprofile;
 | 
						|
    int maximage;
 | 
						|
    int maxlayer;
 | 
						|
    int maxpage;
 | 
						|
    int maxpattern;
 | 
						|
    int maxshading;
 | 
						|
    int maxtemplate;
 | 
						|
    int maxtextflow;
 | 
						|
    pdc_bool hastobepos;
 | 
						|
};
 | 
						|
 | 
						|
/* definition of an option */
 | 
						|
struct pdc_defopt_s
 | 
						|
{
 | 
						|
    const char        *name;    /* name of option keyword */
 | 
						|
    pdc_opttype        type;    /* type of option */
 | 
						|
    int                flags;   /* flags (see below) */
 | 
						|
    int                minnum;  /* permitted minimal number of values */
 | 
						|
    int                maxnum;  /* permitted maximal number of values */
 | 
						|
    double             minval;  /* minimal permitted value / length of string */
 | 
						|
    double             maxval;  /* maximal permitted value / length of string */
 | 
						|
    const pdc_keyconn *keylist; /* list of permitted keywords - keycodes */
 | 
						|
};
 | 
						|
 | 
						|
#define PDC_OPT_TERMINATE \
 | 
						|
    {NULL, pdc_booleanlist, 0L, 0, 0, 0.0, 0.0, NULL}
 | 
						|
 | 
						|
#define PDC_OPT_NONE       (0)      /* no flag specified */
 | 
						|
#define PDC_OPT_NOZERO     (1L<<0)  /* zero value not allowed */
 | 
						|
#define PDC_OPT_NOSPACES   (1L<<1)  /* white spaces in strings not allowed */
 | 
						|
#define PDC_OPT_REQUIRED   (1L<<2)  /* option is required */
 | 
						|
#define PDC_OPT_BUILDOR    (1L<<3)  /* build an OR bit pattern by keycodes */
 | 
						|
#define PDC_OPT_INTLIST    (1L<<4)  /* keylist is list of allowed integers */
 | 
						|
#define PDC_OPT_IGNOREIF1  (1L<<5)  /* option is ignored if previous option is
 | 
						|
                                     * specified */
 | 
						|
#define PDC_OPT_IGNOREIF2  (1L<<6)  /* option is ignored if either of
 | 
						|
                                     * previous two options is specified */
 | 
						|
#define PDC_OPT_UNSUPP     (1L<<8)  /* option is not supported in this
 | 
						|
                                     * configuration */
 | 
						|
#define PDC_OPT_REQUIRIF1  (1L<<9)  /* option is required if previous option is
 | 
						|
                                     * specified */
 | 
						|
#define PDC_OPT_REQUIRIF2  (1L<<10) /* option is required if either of
 | 
						|
                                     * previous two options is specified */
 | 
						|
#define PDC_OPT_EVENNUM    (1L<<11) /* array has even number of elements */
 | 
						|
#define PDC_OPT_ODDNUM     (1L<<12) /* array has odd number of elements */
 | 
						|
 | 
						|
/* member "compatibility" of pdc_clientdata_s must be specified (1L<<13) ... */
 | 
						|
#define PDC_OPT_PDC_1_3    (1L<<PDC_1_3) /* compatibility PDC_1_3 */
 | 
						|
#define PDC_OPT_PDC_1_4    (1L<<PDC_1_4) /* compatibility PDC_1_4 */
 | 
						|
#define PDC_OPT_PDC_1_5    (1L<<PDC_1_5) /* compatibility PDC_1_5 */
 | 
						|
 | 
						|
#define PDC_OPT_CASESENS   (1L<<20) /* case-sensitive keywords */
 | 
						|
#define PDC_OPT_PERCENT    (1L<<21) /* number maybe with percent sign (123%) */
 | 
						|
#define PDC_OPT_DUPORIGVAL (1L<<22) /* duplicate original value */
 | 
						|
#define PDC_OPT_SUBOPTLIST (1L<<23) /* string list is a suboptlist */
 | 
						|
 | 
						|
/* flags for single result */
 | 
						|
#define PDC_OPT_SAVEALL    (1L<<0)  /* save all pointers */
 | 
						|
#define PDC_OPT_SAVE1ELEM  (1L<<1)  /* save only first string list element */
 | 
						|
#define PDC_OPT_SAVEORIG   (1L<<2)  /* save original value string */
 | 
						|
 | 
						|
/* flag for UTF-8 value */
 | 
						|
#define PDC_OPT_ISUTF8     (1L<<9)  /* string[list] is UTF-8 */
 | 
						|
 | 
						|
/* key word not found */
 | 
						|
#define PDC_KEY_NOTFOUND  -1234567890
 | 
						|
 | 
						|
/* separator signs in option lists */
 | 
						|
#define PDC_OPT_LISTSEPS    "\f\n\r\t\v ="
 | 
						|
 | 
						|
/* pc_optparse.c */
 | 
						|
int pdc_get_keycode(const char *keyword, const pdc_keyconn *keyconn);
 | 
						|
int pdc_get_keycode_ci(const char *keyword, const pdc_keyconn *keyconn);
 | 
						|
int pdc_get_keymask_ci(pdc_core *pdc, const char *option,
 | 
						|
                       const char *keywordlist, const pdc_keyconn *keyconn);
 | 
						|
const char *pdc_get_keyword(int keycode, const pdc_keyconn *keyconn);
 | 
						|
const char *pdc_get_int_keyword(const char *keyword,
 | 
						|
	const pdc_keyconn *keyconn);
 | 
						|
pdc_bool pdc_get_integerkeycode(const char *string, const pdc_keyconn *keyconn,
 | 
						|
                                int flags, void *o_iz);
 | 
						|
pdc_resopt *pdc_parse_optionlist(pdc_core *pdc, const char *optlist,
 | 
						|
                                 const pdc_defopt *defopt,
 | 
						|
                                 const pdc_clientdata *clientdata,
 | 
						|
                                 pdc_bool verbose);
 | 
						|
int pdc_get_optvalues(const char *keyword, pdc_resopt *resopt,
 | 
						|
                      void *lvalues, char ***mvalues);
 | 
						|
void *pdc_save_lastopt(pdc_resopt *resopt, int flags);
 | 
						|
int pdc_get_lastopt_index(pdc_resopt *resopt);
 | 
						|
pdc_bool pdc_is_lastopt_percent(pdc_resopt *resopt, int ind);
 | 
						|
pdc_bool pdc_is_lastopt_utf8(pdc_resopt *resopt);
 | 
						|
void pdc_cleanup_optionlist(pdc_core *pdc, pdc_resopt *resopt);
 | 
						|
void pdc_cleanup_optstringlist(pdc_core *pdc, char **stringlist, int ns);
 | 
						|
const char *pdc_get_handletype(pdc_opttype type);
 | 
						|
char *pdc_substitute_variables(pdc_core *pdc, const char *string,
 | 
						|
    const char **varslist, const char **valslist, int nvars, int *errind);
 | 
						|
 | 
						|
#endif  /* PC_OPTPARSE_H */
 | 
						|
 |