1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */
2 /* gdome-xml-node.h
3  *
4  * Copyright (C) 1999 Raph Levien <raph@acm.org>
5  * Copyright (C) 2000 Mathieu Lacage <mathieu@gnu.org>
6  * Copyright (C) 2001 Paolo Casarini <paolo@casarini.org>
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; either
11  * version 2.1 of the License, or (at your option) any later version.
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
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
22 
23 
24 /* -------------------------------------------------------------- */
25 /* ---------------------------  Node  --------------------------- */
26 /* -------------------------------------------------------------- */
27 
28 
29 
30 #ifndef GDOME_NODE_FILE
31 #define GDOME_NODE_FILE
32 
33 struct _GdomeNodeVtab {
34 	void                (*ref)                  (GdomeNode *self, GdomeException *exc);
35 	void                (*unref)                (GdomeNode *self, GdomeException *exc);
36 	gpointer            (*query_interface)      (GdomeNode *self, const char *interface,
37                                                GdomeException *exc);
38 	GdomeDOMString *    (*nodeName)             (GdomeNode *self, GdomeException *exc);
39 	GdomeDOMString *    (*nodeValue)            (GdomeNode *self, GdomeException *exc);
40 	void                (*set_nodeValue)        (GdomeNode *self, GdomeDOMString *nodeValue,
41                                                GdomeException *exc);
42   unsigned short      (*nodeType)             (GdomeNode *self, GdomeException *exc);
43 	GdomeNode *         (*parentNode)           (GdomeNode *self, GdomeException *exc);
44 	GdomeNodeList *     (*childNodes)           (GdomeNode *self, GdomeException *exc);
45 	GdomeNode *         (*firstChild)           (GdomeNode *self, GdomeException *exc);
46 	GdomeNode *         (*lastChild)            (GdomeNode *self, GdomeException *exc);
47 	GdomeNode *         (*previousSibling)      (GdomeNode *self, GdomeException *exc);
48 	GdomeNode *         (*nextSibling)          (GdomeNode *self, GdomeException *exc);
49 	GdomeNamedNodeMap * (*attributes)           (GdomeNode *self, GdomeException *exc);
50 	GdomeDocument *     (*ownerDocument)        (GdomeNode *self, GdomeException *exc);
51 	GdomeNode *         (*insertBefore)         (GdomeNode *self, GdomeNode *newChild,
52                                                GdomeNode *refChild, GdomeException *exc);
53 	GdomeNode *         (*replaceChild)         (GdomeNode *self, GdomeNode *newChild,
54                                                GdomeNode *oldChild, GdomeException *exc);
55 	GdomeNode *         (*removeChild)          (GdomeNode *self, GdomeNode *oldChild,
56                                                GdomeException *exc);
57 	GdomeNode *         (*appendChild)          (GdomeNode *self, GdomeNode *newChild,
58                                                GdomeException *exc);
59 	GdomeBoolean        (*hasChildNodes)        (GdomeNode *self, GdomeException *exc);
60 	GdomeNode *         (*cloneNode)            (GdomeNode *self, GdomeBoolean deep,
61                                                GdomeException *exc);
62 	void                (*normalize)            (GdomeNode *self, GdomeException *exc);
63 	GdomeBoolean        (*isSupported)          (GdomeNode *self, GdomeDOMString *feature,
64                                                GdomeDOMString *version, GdomeException *exc);
65   GdomeDOMString *    (*namespaceURI)         (GdomeNode *self, GdomeException *exc);
66 	GdomeDOMString *    (*prefix)               (GdomeNode *self, GdomeException *exc);
67 	void                (*set_prefix)           (GdomeNode *self, GdomeDOMString *prefix,
68                                                GdomeException *exc);
69 	GdomeDOMString *    (*localName)            (GdomeNode *self, GdomeException *exc);
70 	GdomeBoolean        (*hasAttributes)        (GdomeNode *self, GdomeException *exc);
71 	void                (*addEventListener)     (GdomeNode *self, GdomeDOMString *type,
72                                                GdomeEventListener *listener,
73                                                GdomeBoolean useCapture,
74                                                GdomeException *exc);
75 	void                (*removeEventListener)  (GdomeNode *self, GdomeDOMString *type,
76                                                GdomeEventListener *listener,
77                                                GdomeBoolean useCapture, GdomeException *exc);
78 	GdomeBoolean        (*dispatchEvent)        (GdomeNode *self, GdomeEvent *evt,
79                                                GdomeException *exc);
80   void                (*subTreeDispatchEvent) (GdomeNode *self, GdomeEvent *evt,
81                                                GdomeException *exc);
82   GdomeBoolean        (*canAppend)            (GdomeNode *self,
83                                                GdomeNode *newChild,
84                                                GdomeException *exc);
85 };
86 
87 /* structure used for the Node events */
88 typedef struct _Gdome_xml_ListenerList Gdome_xml_ListenerList;
89 struct _Gdome_xml_ListenerList {
90 	Gdome_xml_ListenerList *next;
91 	guint32 type;
92 	GdomeEventListener *listener;
93   GdomeBoolean useCapture;
94 };
95 
96 
97 typedef struct _Gdome_xml_Node Gdome_xml_Node;
98 struct _Gdome_xml_Node {
99 	GdomeNode super;
100 	const GdomeNodeVtab *vtab;
101 	int refcnt;
102   xmlNode *n;
103   GdomeAccessType accessType;
104 	Gdome_xml_ListenerList *ll;
105 };
106 
107 xmlNode           * gdome_xml_n_get_xmlNode      (GdomeNode *node);
108 GdomeNode         * gdome_xml_n_mkref            (xmlNode *n);
109 void                gdome_xml_n_ref              (GdomeNode *self,
110 																									GdomeException *exc);
111 void                gdome_xml_n_unref            (GdomeNode *self,
112 																									GdomeException *exc);
113 gpointer            gdome_xml_n_query_interface  (GdomeNode *self,
114 																									const char *interface,
115 																									GdomeException *exc);
116 GdomeDOMString    * gdome_xml_n_nodeName         (GdomeNode *self,
117 																									GdomeException *exc);
118 GdomeDOMString    * gdome_xml_n_nodeValue        (GdomeNode *self,
119 																									GdomeException *exc);
120 void                gdome_xml_n_set_nodeValue    (GdomeNode *self,
121 																									GdomeDOMString *nodeValue,
122 																									GdomeException *exc);
123 unsigned short      gdome_xml_n_nodeType         (GdomeNode *self,
124 																									GdomeException *exc);
125 GdomeNode         * gdome_xml_n_parentNode       (GdomeNode *self,
126 																									GdomeException *exc);
127 GdomeNodeList     * gdome_xml_n_childNodes       (GdomeNode *self,
128 																									GdomeException *exc);
129 GdomeNode         * gdome_xml_n_firstChild       (GdomeNode *self,
130 																									GdomeException *exc);
131 GdomeNode         * gdome_xml_n_lastChild        (GdomeNode *self,
132 																									GdomeException *exc);
133 GdomeNode         * gdome_xml_n_previousSibling  (GdomeNode *self,
134 																									GdomeException *exc);
135 GdomeNode         * gdome_xml_n_nextSibling      (GdomeNode *self,
136 																									GdomeException *exc);
137 GdomeNamedNodeMap * gdome_xml_n_attributes       (GdomeNode *self,
138 																									GdomeException *exc);
139 GdomeDocument     * gdome_xml_n_ownerDocument    (GdomeNode *self,
140 																									GdomeException *exc);
141 GdomeNode         * gdome_xml_n_insertBefore     (GdomeNode *self,
142 																									GdomeNode *newChild,
143 																									GdomeNode *refChild,
144 																									GdomeException *exc);
145 GdomeNode         * gdome_xml_n_replaceChild     (GdomeNode *self,
146 																									GdomeNode *newChild,
147 																									GdomeNode *oldChild,
148 																									GdomeException *exc);
149 GdomeNode         * gdome_xml_n_removeChild      (GdomeNode *self,
150 																									GdomeNode *oldChild,
151 																									GdomeException *exc);
152 GdomeNode         * gdome_xml_n_appendChild      (GdomeNode *self,
153 																									GdomeNode *newChild,
154 																									GdomeException *exc);
155 GdomeBoolean        gdome_xml_n_hasChildNodes    (GdomeNode *self,
156 																									GdomeException *exc);
157 GdomeNode         * gdome_xml_n_cloneNode        (GdomeNode *self,
158 																									GdomeBoolean deep,
159 																									GdomeException *exc);
160 void                gdome_xml_n_normalize        (GdomeNode *self,
161 																									GdomeException *exc);
162 GdomeBoolean        gdome_xml_n_isSupported      (GdomeNode *self,
163 																									GdomeDOMString *feature,
164 																									GdomeDOMString *version,
165 																									GdomeException *exc);
166 GdomeDOMString    * gdome_xml_n_namespaceURI     (GdomeNode *self,
167 																									GdomeException *exc);
168 GdomeDOMString    * gdome_xml_n_prefix           (GdomeNode *self,
169 																									GdomeException *exc);
170 void                gdome_xml_n_set_prefix       (GdomeNode *self,
171 																									GdomeDOMString *prefix,
172 																									GdomeException *exc);
173 GdomeDOMString    * gdome_xml_n_localName        (GdomeNode *self,
174 																									GdomeException *exc);
175 GdomeBoolean        gdome_xml_n_hasAttributes    (GdomeNode *self,
176 																									GdomeException *exc);
177 void                gdome_xml_n_addEventListener (GdomeNode *self,
178 																									GdomeDOMString *type,
179 																									GdomeEventListener *listener,
180 																									GdomeBoolean useCapture,
181 																									GdomeException *exc);
182 void                gdome_xml_n_removeEventListener (GdomeNode *self,
183 																										 GdomeDOMString *type,
184 																										 GdomeEventListener *listener,
185 																										 GdomeBoolean useCapture,
186 																										 GdomeException *exc);
187 GdomeBoolean        gdome_xml_n_dispatchEvent    (GdomeNode *self,
188 																									GdomeEvent *evt,
189 																									GdomeException *exc);
190 GdomeNode         * gdome_xml_n_appendChild      (GdomeNode *self,
191 																									GdomeNode *newChild,
192 																									GdomeException *exc);
193 void                gdome_xml_n_subTreeDispatchEvent (GdomeNode *self,
194                                                       GdomeEvent *evt,
195                                                       GdomeException *exc);
196 GdomeBoolean        gdome_xml_n_canAppend        (GdomeNode *self,
197                                                   GdomeNode *newChild,
198                                                   GdomeException *exc);
199 GdomeBoolean        gdome_xml_n_eventEnabledByCode (GdomeNode *self,
200 																										guint32 code);
201 
202 extern const GdomeNodeVtab gdome_xml_n_vtab;
203 
204 #endif /* GDOME_NODE_FILE */
205