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>