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>