Annotation of gpl/axl/src/axl_node.h, revision 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>