Annotation of embedaddon/php/ext/xmlrpc/libxmlrpc/xml_element.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:   This file is part of libXMLRPC - a C library for xml-encoded function calls.
                      3: 
                      4:   Author: Dan Libby (dan@libby.com)
                      5:   Epinions.com may be contacted at feedback@epinions-inc.com
                      6: */
                      7: 
                      8: /*  
                      9:   Copyright 2000 Epinions, Inc. 
                     10: 
                     11:   Subject to the following 3 conditions, Epinions, Inc.  permits you, free 
                     12:   of charge, to (a) use, copy, distribute, modify, perform and display this 
                     13:   software and associated documentation files (the "Software"), and (b) 
                     14:   permit others to whom the Software is furnished to do so as well.  
                     15: 
                     16:   1) The above copyright notice and this permission notice shall be included 
                     17:   without modification in all copies or substantial portions of the 
                     18:   Software.  
                     19: 
                     20:   2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF 
                     21:   ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY 
                     22:   IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR 
                     23:   PURPOSE OR NONINFRINGEMENT.  
                     24: 
                     25:   3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, 
                     26:   SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT 
                     27:   OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING 
                     28:   NEGLIGENCE), EVEN IF EPINIONS, INC.  IS AWARE OF THE POSSIBILITY OF SUCH 
                     29:   DAMAGES.    
                     30: 
                     31: */
                     32: 
                     33: #ifndef __XML_ELEMENT_H__
                     34:  #define __XML_ELEMENT_H__
                     35: 
                     36: /* includes */
                     37: #include <stdio.h>
                     38: #include "queue.h"
                     39: #include "simplestring.h"
                     40: #include "encodings.h"
                     41: 
                     42: #ifdef __cplusplus
                     43: extern "C" {
                     44: #endif
                     45: 
                     46: /****d* enum/XML_ELEM_VERBOSITY
                     47:  * NAME
                     48:  *   XML_ELEM_VERBOSITY
                     49:  * NOTES
                     50:  *   verbosity/readability options for generated xml
                     51:  * SEE ALSO
                     52:  *   XML_ELEM_OUTPUT_OPTIONS
                     53:  * SOURCE
                     54:  */
                     55: typedef enum _xml_elem_verbosity {
                     56:    xml_elem_no_white_space,    /* compact xml with no white space            */
                     57:    xml_elem_newlines_only,     /* add newlines for enhanced readability      */
                     58:    xml_elem_pretty             /* add newlines and indent accordint to depth */
                     59: } XML_ELEM_VERBOSITY;
                     60: /******/
                     61: 
                     62: 
                     63: /****d* enum/XML_ELEM_ESCAPING
                     64:  * NAME
                     65:  *   XML_ELEM_ESCAPING
                     66:  * NOTES
                     67:  * xml escaping options for generated xml
                     68:  * SEE ALSO
                     69:  *   XML_ELEM_OUTPUT_OPTIONS
                     70:  * SOURCE
                     71:  */
                     72: typedef enum _xml_elem_escaping {
                     73:    xml_elem_no_escaping             = 0x000,
                     74:    xml_elem_markup_escaping         = 0x002,   /* entity escape xml special chars         */
                     75:    xml_elem_non_ascii_escaping      = 0x008,   /* entity escape chars above 127           */
                     76:    xml_elem_non_print_escaping      = 0x010,   /* entity escape non print (illegal) chars */
                     77:    xml_elem_cdata_escaping          = 0x020,   /* wrap in cdata section                   */
                     78: } XML_ELEM_ESCAPING;
                     79: /******/
                     80: 
                     81: 
                     82: /****s* struct/XML_ELEM_OUTPUT_OPTIONS
                     83:  * NAME
                     84:  *   XML_ELEM_OUTPUT_OPTIONS
                     85:  * NOTES
                     86:  *   defines various output options
                     87:  * SOURCE
                     88:  */
                     89: typedef struct _xml_output_options {
                     90:    XML_ELEM_VERBOSITY           verbosity;      /* length/verbosity of xml        */
                     91:    XML_ELEM_ESCAPING            escaping;       /* how to escape special chars    */
                     92:    const char*                  encoding;       /* <?xml encoding="<encoding>" ?> */
                     93: } STRUCT_XML_ELEM_OUTPUT_OPTIONS, *XML_ELEM_OUTPUT_OPTIONS;
                     94: /******/
                     95: 
                     96: /****s* struct/XML_ELEM_INPUT_OPTIONS
                     97:  * NAME
                     98:  *   XML_ELEM_INPUT_OPTIONS
                     99:  * NOTES
                    100:  *   defines various input options
                    101:  * SOURCE
                    102:  */
                    103: typedef struct _xml_input_options {
                    104:   ENCODING_ID                  encoding;       /* which encoding to use.       */
                    105: } STRUCT_XML_ELEM_INPUT_OPTIONS, *XML_ELEM_INPUT_OPTIONS;
                    106: /******/
                    107: 
                    108: /****s* struct/XML_ELEM_ERROR
                    109:  * NAME
                    110:  *   XML_ELEM_ERROR
                    111:  * NOTES
                    112:  *   defines an xml parser error
                    113:  * SOURCE
                    114:  */
                    115: typedef struct _xml_elem_error {
                    116:   int parser_code;
                    117:   const char* parser_error;
                    118:   long line;
                    119:   long column;
                    120:   long byte_index;
                    121: } STRUCT_XML_ELEM_ERROR, *XML_ELEM_ERROR;
                    122: /******/
                    123: 
                    124: 
                    125: /*-************************
                    126: * begin xml element stuff *
                    127: **************************/
                    128: 
                    129: /****s* struct/xml_elem_attr
                    130:  * NAME
                    131:  *  xml_elem_attr
                    132:  * NOTES
                    133:  *   representation of an xml attribute, foo="bar"
                    134:  * SOURCE
                    135:  */
                    136: typedef struct _xml_element_attr {
                    137:    char* key;        /* attribute key   */
                    138:    char* val;        /* attribute value */
                    139: } xml_element_attr;
                    140: /******/
                    141: 
                    142: /****s* struct/xml_elem_attr
                    143:  * NAME
                    144:  *  xml_elem_attr
                    145:  * NOTES
                    146:  *   representation of an xml element, eg <candidate name="Harry Browne" party="Libertarian"/>
                    147:  * SOURCE
                    148:  */
                    149: typedef struct _xml_element {
                    150:    const char*   name;           /* element identifier */
                    151:    simplestring  text;           /* text contained between element begin/end pairs */
                    152:    struct _xml_element* parent;  /* element's parent */
                    153:                                  
                    154:    queue        attrs;           /* attribute list */
                    155:    queue        children;        /* child element list */
                    156: } xml_element;
                    157: /******/
                    158: 
                    159: void xml_elem_free(xml_element* root);
                    160: void xml_elem_free_non_recurse(xml_element* root);
                    161: xml_element* xml_elem_new(void);
                    162: char* xml_elem_serialize_to_string(xml_element *el, XML_ELEM_OUTPUT_OPTIONS options, int *buf_len);
                    163: void xml_elem_serialize_to_stream(xml_element *el, FILE *output, XML_ELEM_OUTPUT_OPTIONS options);
                    164: xml_element* xml_elem_parse_buf(const char* in_buf, int len, XML_ELEM_INPUT_OPTIONS options, XML_ELEM_ERROR error);
                    165: 
                    166: /*-**********************
                    167: * end xml element stuff *
                    168: ************************/
                    169: 
                    170: /*-**********************
                    171: * Begin xml_element API *
                    172: ************************/
                    173: 
                    174: /****d* VALUE/XMLRPC_MACROS
                    175:  * NAME
                    176:  *   Some Helpful Macros
                    177:  * NOTES
                    178:  *   Some macros for making life easier.  Should be self-explanatory.
                    179:  * SEE ALSO
                    180:  *   XMLRPC_AddValueToVector ()
                    181:  *   XMLRPC_VectorGetValueWithID_Case ()
                    182:  *   XMLRPC_VALUE
                    183:  * SOURCE
                    184:  */
                    185: #define xml_elem_next_element(el) ((el) ? (xml_element *)Q_Next(&el->children) : NULL)
                    186: #define xml_elem_head_element(el) ((el) ? (xml_element *)Q_Head(&el->children) : NULL)
                    187: #define xml_elem_next_attr(el) ((el) ? (xml_element_attr *)Q_Next(&el->attrs) : NULL)
                    188: #define xml_elem_head_attr(el) ((el) ? (xml_element_attr *)Q_Head(&el->attrs) : NULL)
                    189: #define xml_elem_get_name(el) (char *)((el) ? el->name : NULL)
                    190: #define xml_elem_get_val(el) (char *)((el) ? el->text.str : NULL)
                    191: /******/
                    192: 
                    193: 
                    194: /*-********************
                    195: * End xml_element API *
                    196: **********************/
                    197: 
                    198: #ifdef __cplusplus
                    199: }
                    200: #endif
                    201: 
                    202: #endif /* __XML_ELEMENT_H__ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>