Scan media entities as well, not just url entities. This should expand more
[bitlbee.git] / lib / xmltree.h
blob5a0dbc8ead9b2a4519c11a40561b23a6d02d2cab
1 /***************************************************************************\
2 * *
3 * BitlBee - An IRC to IM gateway *
4 * Simple XML (stream) parse tree handling code (Jabber/XMPP, mainly) *
5 * *
6 * Copyright 2006 Wilmer van der Gaast <wilmer@gaast.net> *
7 * *
8 * This library is free software; you can redistribute it and/or *
9 * modify it under the terms of the GNU Lesser General Public *
10 * License as published by the Free Software Foundation, version *
11 * 2.1. *
12 * *
13 * This library is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
16 * Lesser General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU Lesser General Public License *
19 * along with this library; if not, write to the Free Software Foundation, *
20 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *
21 * *
22 ****************************************************************************/
24 #ifndef _XMLTREE_H
25 #define _XMLTREE_H
27 typedef enum
29 XT_COMPLETE = 1, /* </tag> reached */
30 XT_SEEN = 2, /* Handler called (or not defined) */
31 } xt_flags;
33 typedef enum
35 XT_ABORT, /* Abort, don't handle the rest anymore */
36 XT_HANDLED, /* Handled this tag properly, go to the next one */
37 XT_NEXT /* Try if there's another matching handler */
38 } xt_status;
40 struct xt_attr
42 char *key, *value;
45 struct xt_node
47 struct xt_node *parent;
48 struct xt_node *children;
50 char *name;
51 struct xt_attr *attr;
52 char *text;
53 int text_len;
55 struct xt_node *next;
56 xt_flags flags;
59 typedef xt_status (*xt_handler_func) ( struct xt_node *node, gpointer data );
61 struct xt_handler_entry
63 char *name, *parent;
64 xt_handler_func func;
67 struct xt_parser
69 GMarkupParseContext *parser;
70 struct xt_node *root;
71 struct xt_node *cur;
73 const struct xt_handler_entry *handlers;
74 gpointer data;
76 GError *gerr;
79 struct xt_parser *xt_new( const struct xt_handler_entry *handlers, gpointer data );
80 void xt_reset( struct xt_parser *xt );
81 int xt_feed( struct xt_parser *xt, const char *text, int text_len );
82 int xt_handle( struct xt_parser *xt, struct xt_node *node, int depth );
83 void xt_cleanup( struct xt_parser *xt, struct xt_node *node, int depth );
84 struct xt_node *xt_from_string( const char *in );
85 char *xt_to_string( struct xt_node *node );
86 void xt_print( struct xt_node *node );
87 struct xt_node *xt_dup( struct xt_node *node );
88 void xt_free_node( struct xt_node *node );
89 void xt_free( struct xt_parser *xt );
90 struct xt_node *xt_find_node( struct xt_node *node, const char *name );
91 struct xt_node *xt_find_path( struct xt_node *node, const char *name );
92 char *xt_find_attr( struct xt_node *node, const char *key );
94 struct xt_node *xt_new_node( char *name, const char *text, struct xt_node *children );
95 void xt_add_child( struct xt_node *parent, struct xt_node *child );
96 void xt_insert_child( struct xt_node *parent, struct xt_node *child );
97 void xt_add_attr( struct xt_node *node, const char *key, const char *value );
98 int xt_remove_attr( struct xt_node *node, const char *key );
100 #endif