2 * Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
4 * This file is part of miniDOM, a minimal implementation of the
5 * Document Object Model
7 * miniDOM is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * miniDOM is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with miniDOM; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 * For details, send a mail to <luca.padovani@cs.unibo.it>
27 #include <parserInternals.h>
32 mdom_string_eq(mDOMConstStringRef s1, mDOMConstStringRef s2)
34 g_return_val_if_fail(s1 != NULL, FALSE);
35 g_return_val_if_fail(s2 != NULL, FALSE);
37 return strcmp(C_CONST_STRING(s1), C_CONST_STRING(s2)) ? FALSE : TRUE;
41 mdom_string_dup(mDOMConstStringRef s)
43 g_return_val_if_fail(s != NULL, NULL);
48 mdom_string_free(mDOMStringRef s)
54 mdom_load(const char* file_name, gboolean subst, mDOMEntityResolver entity_resolver)
57 xmlParserCtxtPtr ctxt;
60 g_return_val_if_fail(file_name != NULL, NULL);
62 xmlSubstituteEntitiesDefault(subst);
64 sax = xmlDefaultSAXHandler;
65 sax.getEntity = entity_resolver;
67 ctxt = xmlCreateFileParserCtxt(file_name);
68 if (ctxt == NULL) return NULL;
72 xmlParseDocument(ctxt);
76 xmlFreeParserCtxt(ctxt);
82 mdom_unload(mDOMDocRef doc)
84 g_return_if_fail(doc != NULL);
89 mdom_doc_new(mDOMConstStringRef version)
93 g_return_val_if_fail(version != NULL, NULL);
94 doc = xmlNewDoc(version);
95 g_return_val_if_fail(doc != NULL, NULL);
97 doc->extSubset = xmlNewDtd(doc, DOM_CONST_STRING("Entities"), NULL, NULL);
103 mdom_doc_free(mDOMDocRef doc)
105 g_return_if_fail(doc != NULL);
110 mdom_doc_add_entity(mDOMDocRef doc, mDOMConstStringRef name, mDOMConstStringRef content)
112 g_return_val_if_fail(doc != NULL, NULL);
113 g_return_val_if_fail(name != NULL, NULL);
114 g_return_val_if_fail(content != NULL, NULL);
116 return xmlAddDtdEntity(doc, name, XML_INTERNAL_GENERAL_ENTITY, NULL, NULL, content);
118 xmlAddDtdEntity(doc, name, XML_INTERNAL_GENERAL_ENTITY, NULL, NULL, content);
124 mdom_doc_get_entity(mDOMDocRef doc, mDOMConstStringRef name)
126 g_return_val_if_fail(doc != NULL, NULL);
127 g_return_val_if_fail(name != NULL, NULL);
128 return xmlGetDtdEntity(doc, name);
132 mdom_get_predefined_entity(mDOMConstStringRef name)
134 g_return_val_if_fail(name != NULL, NULL);
135 return xmlGetPredefinedEntity(name);
139 mdom_entity_get_content(mDOMEntityRef entity)
141 g_return_val_if_fail(entity != NULL, NULL);
142 return entity->content;
146 mdom_doc_get_root_node(mDOMDocRef doc)
148 g_return_val_if_fail(doc != NULL, NULL);
149 return xmlDocGetRootElement(doc);
153 mdom_node_set_user_data(mDOMNodeRef node, gpointer user_data)
155 g_return_if_fail(node != NULL);
156 #ifndef XML_WITHOUT_CORBA
157 node->_private = user_data;
159 g_assert_not_reached();
164 mdom_node_get_user_data(mDOMNodeRef node)
166 g_return_val_if_fail(node != NULL, NULL);
167 #ifndef XML_WITHOUT_CORBA
168 return node->_private;
170 g_assert_not_reached();
175 mdom_node_is_text(mDOMNodeRef node)
177 g_return_val_if_fail(node != NULL, FALSE);
178 return xmlNodeIsText(node) ? TRUE : FALSE;
182 mdom_node_is_element(mDOMNodeRef node)
184 g_return_val_if_fail(node != NULL, FALSE);
185 return node->type == XML_ELEMENT_NODE;
189 mdom_node_is_blank(mDOMNodeRef node)
191 g_return_val_if_fail(node != NULL, FALSE);
193 return xmlIsBlankNode(node) ? TRUE : FALSE;
200 mdom_node_is_entity_ref(mDOMNodeRef node)
202 g_return_val_if_fail(node != NULL, FALSE);
203 return node->type == XML_ENTITY_REF_NODE;
207 mdom_node_get_type(mDOMNodeRef node)
209 g_return_val_if_fail(node != NULL, 0);
214 mdom_node_get_name(mDOMNodeRef node)
216 g_return_val_if_fail(node != NULL, NULL);
221 mdom_node_get_ns_uri(mDOMNodeRef node)
223 g_return_val_if_fail(node != NULL, NULL);
224 if (node->ns == NULL) return NULL;
225 return node->ns->href;
229 mdom_node_get_attribute(mDOMNodeRef node, mDOMConstStringRef name)
231 g_return_val_if_fail(node != NULL, NULL);
232 g_return_val_if_fail(name != NULL, NULL);
233 return xmlGetProp(node, name);
237 mdom_node_get_attribute_ns(mDOMNodeRef node, mDOMConstStringRef name, mDOMConstStringRef uri)
239 g_return_val_if_fail(node != NULL, NULL);
240 g_return_val_if_fail(uri != NULL, NULL);
241 g_return_val_if_fail(name != NULL, NULL);
242 g_return_val_if_fail(mdom_node_is_element(node), NULL);
243 return xmlGetNsProp(node, name, uri);
247 mdom_node_has_attribute(mDOMNodeRef node, mDOMConstStringRef name)
250 mDOMStringRef s = NULL;
251 #endif /* HAVE_LIBXML2 */
252 g_return_val_if_fail(node != NULL, FALSE);
253 g_return_val_if_fail(name != NULL, FALSE);
255 return (xmlHasProp(node, name) != NULL) ? TRUE : FALSE;
257 s = xmlGetProp(node, name);
263 #endif /* HAVE_LIBXML2 */
267 mdom_node_get_content(mDOMNodeRef node)
269 g_return_val_if_fail(node != NULL, NULL);
270 return xmlNodeGetContent(node);
274 mdom_node_get_parent(mDOMNodeRef node)
276 g_return_val_if_fail(node != NULL, NULL);
281 mdom_node_get_prev_sibling(mDOMNodeRef node)
283 g_return_val_if_fail(node != NULL, NULL);
288 mdom_node_get_next_sibling(mDOMNodeRef node)
290 g_return_val_if_fail(node != NULL, NULL);
295 mdom_node_get_first_child(mDOMNodeRef node)
297 g_return_val_if_fail(node != NULL, NULL);
299 return node->children;
306 mdom_node_get_first_attribute(mDOMNodeRef node)
308 g_return_val_if_fail(node != NULL, NULL);
309 return node->properties;
313 mdom_node_is_first(mDOMNodeRef node)
315 g_return_val_if_fail(node != NULL, FALSE);
316 return node->prev == NULL;
320 mdom_node_is_last(mDOMNodeRef node)
322 g_return_val_if_fail(node != NULL, FALSE);
323 return node->next == NULL;
327 mdom_attr_get_name(mDOMAttrRef attr)
329 g_return_val_if_fail(attr != NULL, NULL);
334 mdom_attr_get_ns_uri(mDOMAttrRef attr)
336 g_return_val_if_fail(attr != NULL, NULL);
337 if (attr->ns == NULL) return NULL;
338 return attr->ns->href;
342 mdom_attr_get_value(mDOMAttrRef attr)
345 g_return_val_if_fail(attr != NULL, NULL);
346 return xmlNodeListGetString(attr->doc, attr->children, 1);
349 g_return_val_if_fail(attr != NULL, NULL);
352 if (child == NULL) return NULL;
353 else return xmlNodeListGetString(child->doc, attr->val, 1);
358 mdom_attr_get_prev_sibling(mDOMAttrRef attr)
361 g_return_val_if_fail(attr != NULL, NULL);
364 /* in libxml 1.x there is no prev link in attributes */
370 mdom_attr_get_next_sibling(mDOMAttrRef attr)
372 g_return_val_if_fail(attr != NULL, NULL);
377 mdom_attr_get_parent(mDOMAttrRef attr)
379 g_return_val_if_fail(attr != NULL, NULL);