Annotation of gpl/axl/src/axl_node.h, revision 1.1.1.1
1.1 misho 1: /*
2: * LibAxl: Another XML library
3: * Copyright (C) 2006 Advanced Software Production Line, S.L.
4: *
5: * This program is free software; you can redistribute it and/or
6: * modify it under the terms of the GNU Lesser General Public License
7: * as published by the Free Software Foundation; either version 2.1 of
8: * the License, or (at your option) any later version.
9: *
10: * This program is distributed in the hope that it will be useful,
11: * but WITHOUT ANY WARRANTY; without even the implied warranty of
12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13: * GNU Lesser General Public License for more details.
14: *
15: * You should have received a copy of the GNU Lesser General Public
16: * License along with this program; if not, write to the Free
17: * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18: * 02111-1307 USA
19: *
20: * You may find a copy of the license under this software is released
21: * at COPYING file. This is LGPL software: you are welcome to
22: * develop proprietary applications using this library without any
23: * royalty or fee but returning back any change, improvement or
24: * addition in the form of source code, project image, documentation
25: * patches, etc.
26: *
27: * For commercial support on build XML enabled solutions contact us:
28: *
29: * Postal address:
30: * Advanced Software Production Line, S.L.
31: * Edificio Alius A, Oficina 102,
32: * C/ Antonio Suarez Nº 10,
33: * Alcalá de Henares 28802 Madrid
34: * Spain
35: *
36: * Email address:
37: * info@aspl.es - http://www.aspl.es/xml
38: */
39: #ifndef __AXL_NODE_H__
40: #define __AXL_NODE_H__
41:
42: #include <axl_decl.h>
43:
44: BEGIN_C_DECLS
45:
46: /**
47: * \addtogroup axl_node_module
48: * @{
49: */
50:
51: axlNode * axl_node_create (const char * name);
52:
53: axlNode * axl_node_create_ref (char * name);
54:
55: axlNode * axl_node_parse_strings (axlError ** error, ...);
56:
57: axlNode * axl_node_parse (axlError ** error, const char * content, ...);
58:
59: void axl_node_set_name (axlNode * node,
60: const char * name);
61:
62: void axl_node_set_name_ref (axlNode * node,
63: char * name);
64:
65: void axl_node_set_name_from_factory (axlNode * node,
66: char * name);
67:
68: axlNode * axl_node_copy (axlNode * node,
69: axl_bool copy_attributes,
70: axl_bool copy_childs);
71:
72: axlDoc * axl_node_get_doc (axlNode * node);
73:
74: void axl_node_set_doc (axlNode * node,
75: axlDoc * doc);
76:
77: void axl_node_set_attribute (axlNode * node,
78: const char * attribute,
79: const char * value);
80:
81: void axl_node_set_attribute_ref (axlNode * node,
82: char * attribute,
83: char * value);
84:
85: void axl_node_set_attribute_from_factory (axlFactory * factory,
86: axlNode * node,
87: char * attribute,
88: char * value);
89:
90: /**
91: * @brief Macro definition which works as an alias for \ref
92: * axl_node_get_attribute_value.
93: *
94: * @param node The node being checked to have an attribute value.
95: * @param attr The attribute that is being check to be present in the node provided.
96: *
97: * @return \ref axl_true if the node has the provided attribute, otherwise
98: * \ref axl_false is returned.
99: */
100: #define HAS_ATTR(node,attr) axl_node_has_attribute(node,attr)
101:
102: axl_bool axl_node_has_attribute (axlNode * node,
103: const char * attribute);
104:
105: void axl_node_remove_attribute (axlNode * node,
106: const char * attribute);
107:
108: int axl_node_num_attributes (axlNode * node);
109:
110:
111: /**
112: * @brief Macro definition, which works as an alias for \ref
113: * axl_node_get_attribute_value.
114: *
115: * @param node The node that is being required to return the content
116: * of a particular node.
117: *
118: * @param attr The attribute that is requested.
119: *
120: * @return The value assocaited to the attribute value or null if it
121: * fails. See \ref axl_node_get_attribute_value.
122: */
123: #define ATTR_VALUE(node,attr) axl_node_get_attribute_value(node, attr)
124:
125: const char * axl_node_get_attribute_value (axlNode * node,
126: const char * attribute);
127:
128: char * axl_node_get_attribute_value_copy (axlNode * node,
129: const char * attribute);
130:
131: /**
132: * @brief Simple alias definition to \ref axl_node_get_attribute_value_trans function.
133: *
134: * @param node The node which contains the attribute requested.
135: *
136: * @param attr The attribute key that is being requested.
137: *
138: * @return A newly allocated string containing the attribute value,
139: * with known entity references translated.
140: */
141: #define ATTR_VALUE_TRANS(node,attr) axl_node_get_attribute_value_trans(node,attr)
142:
143: char * axl_node_get_attribute_value_trans (axlNode * node,
144: const char * attribute);
145:
146: /**
147: * @brief Allows to get the value associated to the attributed
148: * provided, inside the node selected, removing trailing and ending
149: * white spaces (in the W3C sence: \\n, \\t, \\r, ' ').
150: *
151: * This is a macro alias to \ref axl_node_get_attribute_value_trimmed.
152: *
153: * @param node The node that is requested to return the associated
154: * value to the attributed.
155: *
156: * @param attr The attribute that is being requested.
157: *
158: * @return A reference to the attribute value or NULL if it fails.
159: */
160: #define ATTR_VALUE_TRIMMED(node,attr) axl_node_get_attribute_value_trimmed(node,attr)
161:
162: const char * axl_node_get_attribute_value_trimmed (axlNode * node,
163: const char * attribute);
164:
165: /**
166: * @brief Convenience macro wrapping \ref
167: * axl_node_has_attribute_value.
168: */
169: #define HAS_ATTR_VALUE(node, attr,value) (axl_node_has_attribute_value (node, attr, value))
170:
171: axl_bool axl_node_has_attribute_value (axlNode * node,
172: const char * attribute,
173: const char * value);
174:
175: axl_bool axl_node_has_attributes (axlNode * node);
176:
177: /**
178: * @}
179: */
180:
181: /**
182: * \addtogroup axl_node_attribute_cursor
183: * @{
184: */
185:
186: /* XML node attribute iteration API provided to traverse all
187: * attributes without knowing them. */
188: axlAttrCursor * axl_node_attr_cursor_new (axlNode * node);
189:
190: void axl_node_attr_cursor_first (axlAttrCursor * cursor);
191:
192: void axl_node_attr_cursor_next (axlAttrCursor * cursor);
193:
194: axl_bool axl_node_attr_cursor_has_next (axlAttrCursor * cursor);
195:
196: axl_bool axl_node_attr_cursor_has_item (axlAttrCursor * cursor);
197:
198: const char * axl_node_attr_cursor_get_key (axlAttrCursor * cursor);
199:
200: const char * axl_node_attr_cursor_get_value (axlAttrCursor * cursor);
201:
202: void axl_node_attr_cursor_free (axlAttrCursor * cursor);
203:
204: void axl_node_attr_foreach (axlNode * node,
205: axlNodeAttrForeachFunc func,
206: axlPointer data,
207: axlPointer data2);
208:
209:
210: /**
211: * @}
212: */
213:
214: /**
215: * \addtogroup axl_node_annotate
216: * @{
217: */
218:
219: void axl_node_annotate_data (axlNode * node,
220: const char * key,
221: axlPointer data);
222:
223: void axl_node_annotate_data_full (axlNode * node,
224: const char * key,
225: axlDestroyFunc key_destroy,
226: axlPointer data,
227: axlDestroyFunc data_destroy);
228:
229: axlPointer axl_node_annotate_get (axlNode * node,
230: const char * key,
231: axl_bool lookup_in_parent);
232:
233: void axl_node_annotate_int (axlNode * node,
234: const char * key,
235: int int_value);
236:
237: void axl_node_annotate_string (axlNode * node,
238: const char * key,
239: const char * string_value);
240:
241: void axl_node_annotate_double (axlNode * node,
242: const char * key,
243: double double_value);
244:
245: int axl_node_annotate_get_int (axlNode * node,
246: const char * key,
247: axl_bool lookup_in_parent);
248:
249: char * axl_node_annotate_get_string (axlNode * node,
250: const char * key,
251: axl_bool lookup_in_parent);
252:
253: double axl_node_annotate_get_double (axlNode * node,
254: const char * key,
255: axl_bool lookup_in_parent);
256:
257: /**
258: * @}
259: */
260:
261:
262: /**
263: * \addtogroup axl_node_module
264: * @{
265: */
266:
267: /**
268: * @brief Allows to easily check that the given xml node (\ref
269: * axlNode) have the provided name.
270: *
271: * This macro is provided as a convenience to check that a particular
272: * node have a particular name. Check the documentation that this
273: * macro is wrapping to get examples: \ref axl_node_get_name.
274: *
275: * <i><b>NOTE:</b> This function isn't XML Namespace aware. You must use \ref axl_ns_node_cmp instead. See \ref axl_ns_doc_validate. </i>
276: *
277: * @param node The \ref axlNode where the name will be compared with
278: * the provided value.
279: *
280: * @param name The name to compare.
281: *
282: * @return \ref axl_true if names are equal or \ref axl_false if not.
283: */
284: #define NODE_CMP_NAME(node,name) (axl_cmp ((node != NULL) ? axl_node_get_name(node) : "><", (name != NULL) ? name : "<>"))
285:
286: const char * axl_node_get_name (axlNode * node);
287:
288: axlNode * axl_node_get_parent (axlNode * node);
289:
290: axlNode * axl_node_get_next (axlNode * node);
291:
292: axlNode * axl_node_get_next_called (axlNode * node,
293: const char * name);
294:
295: axlNode * axl_node_get_previous (axlNode * node);
296:
297: axlNode * axl_node_get_previous_called (axlNode * node,
298: const char * name);
299:
300: axlNode * axl_node_get_first_child (axlNode * node);
301:
302: axlNode * axl_node_get_last_child (axlNode * node);
303:
304: void axl_node_set_child (axlNode * parent,
305: axlNode * child);
306:
307: void axl_node_set_child_after (axlNode * reference,
308: axlNode * child);
309:
310: void axl_node_replace (axlNode * node,
311: axlNode * new_node,
312: axl_bool dealloc);
313:
314: void axl_node_remove (axlNode * node,
315: axl_bool dealloc);
316:
317: void axl_node_deattach (axlNode * node);
318:
319:
320: void axl_node_set_is_empty (axlNode * node,
321: axl_bool empty);
322:
323: axl_bool axl_node_is_empty (axlNode * node);
324:
325: const char * axl_node_get_content (axlNode * node,
326: int * content_size);
327:
328: char * axl_node_get_content_copy (axlNode * node,
329: int * content_size);
330:
331: char * axl_node_get_content_trans (axlNode * node,
332: int * content_size);
333:
334: char * axl_node_get_content_trim (axlNode * node,
335: int * content_size);
336:
337: void axl_node_set_content (axlNode * node,
338: const char * content,
339: int content_size);
340:
341: void axl_node_set_content_ref (axlNode * node,
342: char * content,
343: int content_size);
344:
345: void axl_node_set_content_from_factory (axlFactory * factory,
346: axlNode * node,
347: char * content,
348: int content_size);
349:
350: void axl_node_set_cdata_content (axlNode * node,
351: const char * content,
352: int content_size);
353:
354: void axl_node_set_cdata_content_from_factory (axlFactory * factory,
355: axlNode * node,
356: char * content,
357: int content_size);
358:
359: void axl_node_set_comment (axlNode * node,
360: char * comment,
361: int comment_size);
362:
363: void axl_node_set_have_childs (axlNode * node, axl_bool childs);
364:
365: axl_bool axl_node_have_childs (axlNode * node);
366:
367: axlNode * axl_node_get_child_called (axlNode * parent, const char * name);
368:
369: axlNode * axl_node_find_called (axlNode * parent, const char * name);
370:
371: axlNode * axl_node_get_child_nth (axlNode * parent, int position);
372:
373: int axl_node_get_child_num (axlNode * parent);
374:
375: axlList * axl_node_get_childs (axlNode * node);
376:
377: axl_bool axl_node_are_equal (axlNode * node, axlNode * node2);
378:
379: axl_bool axl_node_are_equal_full (axlNode * node, axlNode * node2, axlError ** error);
380:
381: void axl_node_add_pi_target (axlNode * node,
382: char * target,
383: char * content);
384:
385: axl_bool axl_node_has_pi_target (axlNode * node,
386: char * pi_target);
387:
388: char * axl_node_get_pi_target_content (axlNode * node,
389: char * pi_target);
390:
391: axlList * axl_node_get_pi_target_list (axlNode * node);
392:
393: void axl_node_transfer_childs (axlNode * old_parent,
394: axlNode * new_parent);
395:
396: axl_bool axl_node_dump (axlNode * node,
397: char ** content,
398: int * size);
399:
400: axl_bool axl_node_dump_pretty (axlNode * node,
401: char ** content,
402: int * size,
403: int tabular);
404:
405: axl_bool axl_node_dump_to_file (axlNode * node,
406: char * file_path);
407:
408: axl_bool axl_node_dump_pretty_to_file (axlNode * node,
409: char * file_path,
410: int tabular);
411:
412: int axl_node_get_flat_size (axlNode * node,
413: axl_bool pretty_print,
414: int level,
415: int tabular);
416:
417: int axl_node_dump_at (axlNode * node,
418: char * content,
419: int desp,
420: axl_bool pretty_print,
421: int level,
422: int tabular);
423:
424: axl_bool axl_node_has_invalid_chars (const char * content,
425: int content_size,
426: int * added_size);
427:
428: axl_bool axl_node_has_invalid_chars_cdata (const char * content,
429: int content_size,
430: int * added_size);
431:
432: char * axl_node_content_translate_defaults (char * content,
433: int * content_size);
434:
435: char * axl_node_content_copy_and_escape (const char * content,
436: int content_size,
437: int additional_size);
438:
439: char * axl_node_content_copy_and_escape_cdata (const char * content,
440: int content_size,
441: int additional_size);
442:
443: void axl_node_free (axlNode * node);
444:
445: void axl_node_free_full (axlNode * node, axl_bool also_childs);
446:
447: /* @} */
448:
449: /* item interface */
450:
451: axlItem * axl_item_new (AxlItemType type,
452: axlPointer data);
453:
454: axlItem * axl_item_new_ref (AxlItemType type,
455: axlPointer data);
456:
457: axlDoc * axl_item_get_doc (axlItem * item);
458:
459: void axl_item_set_doc (axlItem * item, axlDoc * doc);
460:
461: axlNode * axl_item_get_parent (axlItem * item);
462:
463: axlItem * axl_item_get_next (axlItem * item);
464:
465: axlItem * axl_item_node_next (axlNode * node);
466:
467: axlItem * axl_item_get_previous (axlItem * item);
468:
469: axlItem * axl_item_node_previous (axlNode * node);
470:
471: axlItem * axl_item_node_holder (axlNode * node);
472:
473: axlItem * axl_item_get_first_child (axlNode * node);
474:
475: axlItem * axl_item_get_last_child (axlNode * node);
476:
477: AxlItemType axl_item_get_type (axlItem * item);
478:
479: axlPointer axl_item_get_data (axlItem * item);
480:
481: char * axl_item_get_content (axlItem * item,
482: int * size);
483:
484: void axl_item_set_child (axlNode * parent,
485: AxlItemType type,
486: axlPointer data);
487:
488: void axl_item_set_child_ref (axlNode * parent,
489: axlItem * item);
490:
491: void axl_item_set_after (axlItem * item,
492: AxlItemType type,
493: axlPointer data);
494:
495: axlItem * axl_item_copy (axlItem * item,
496: axlNode * set_parent);
497:
498: void axl_item_remove (axlItem * item,
499: axl_bool dealloc);
500:
501: void axl_item_replace (axlItem * item,
502: axlItem * new_item,
503: axl_bool dealloc);
504:
505: void axl_item_transfer_childs_after (axlNode * old_parent,
506: axlItem * item_ref);
507:
508: axl_bool axl_item_are_equal (axlItem * item,
509: axlItem * item2,
510: axl_bool trimmed);
511:
512: axl_bool axl_item_are_equal_full (axlItem * item,
513: axlItem * item2,
514: axl_bool trimmed,
515: axlError ** error);
516:
517: void axl_item_free (axlItem * item,
518: axl_bool dealloc);
519:
520: axlFactory * axl_item_factory_create (void);
521:
522: axlItem * axl_item_factory_get (axlFactory * factory);
523:
524: axlFactory * axl_node_factory_create (void);
525:
526: axlNode * axl_node_factory_get (axlFactory * factory);
527:
528: axlFactory * axl_item_content_factory_create (void);
529:
530: axlFactory * axl_item_attr_factory_create (void);
531:
532: END_C_DECLS
533:
534: #endif
535:
536:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>