- bux fixes in XPath implementation
- fixed xml-config --version
- updated TODO
Daniel
diff --git a/ChangeLog b/ChangeLog
index 6fc6b61..f0c84c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Mon Jan 24 14:31:09 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
+
+ * xml-config.in: xml-config --version to just return the
+ version number
+ * xpath.c: some cleanup w.r.t. axis when the current node is
+ an attribute.
+ * TODO: updated
+
Tue Jan 18 18:46:06 CET 2000 Daniel Veillard <Daniel.Veillard@w3.org>
* configure.in: prepared for libxml-1.8.5
diff --git a/TODO b/TODO
index 417ea00..8c4dffd 100644
--- a/TODO
+++ b/TODO
@@ -86,6 +86,10 @@
- dynamically adapt the alloc entry point to use g_alloc()/g_free()
if the programmer wants it
+- I18N: http://wap.trondheim.com/vaer/index.phtml is not XML and accepted
+ by the XML parser, UTF-8 should be checked when there is no "encoding"
+ declared !
+
Done:
=====
diff --git a/xml-config.in b/xml-config.in
index be9fe53..82c0cd1 100644
--- a/xml-config.in
+++ b/xml-config.in
@@ -44,7 +44,7 @@
;;
--version)
- echo @PACKAGE@ @VERSION@
+ echo @VERSION@
exit 0
;;
diff --git a/xpath.c b/xpath.c
index 7f2a589..bb94ab8 100644
--- a/xpath.c
+++ b/xpath.c
@@ -1488,10 +1488,26 @@
xmlNodePtr
xmlXPathNextChild(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
if (cur == NULL) {
- if ((ctxt->context->node->type == XML_DOCUMENT_NODE) ||
- (ctxt->context->node->type == XML_HTML_DOCUMENT_NODE))
- return(((xmlDocPtr) ctxt->context->node)->root);
- return(ctxt->context->node->childs);
+ if (ctxt->context->node == NULL) return(NULL);
+ switch (ctxt->context->node->type) {
+ case XML_ELEMENT_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_NOTATION_NODE:
+ return(ctxt->context->node->childs);
+ case XML_ATTRIBUTE_NODE:
+ return(NULL);
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+ return(((xmlDocPtr) ctxt->context->node)->root);
+ }
+ return(NULL);
}
if ((cur->type == XML_DOCUMENT_NODE) ||
(cur->type == XML_HTML_DOCUMENT_NODE))
@@ -1513,6 +1529,11 @@
xmlNodePtr
xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
if (cur == NULL) {
+ if (ctxt->context->node == NULL)
+ return(NULL);
+ if (ctxt->context->node->type == XML_ATTRIBUTE_NODE)
+ return(NULL);
+
if (ctxt->context->node == (xmlNodePtr) ctxt->context->doc)
return(ctxt->context->doc->root);
return(ctxt->context->node->childs);
@@ -1548,24 +1569,15 @@
*/
xmlNodePtr
xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if (cur == NULL)
+ if (cur == NULL) {
+ if (ctxt->context->node == NULL)
+ return(NULL);
+ if (ctxt->context->node->type == XML_ATTRIBUTE_NODE)
+ return(NULL);
return(ctxt->context->node);
+ }
- if (cur == (xmlNodePtr) ctxt->context->doc)
- return(ctxt->context->doc->root);
- if (cur->childs != NULL) return(cur->childs);
- if (cur->next != NULL) return(cur->next);
-
- do {
- cur = cur->parent;
- if (cur == NULL) return(NULL);
- if (cur == ctxt->context->node) return(NULL);
- if (cur->next != NULL) {
- cur = cur->next;
- return(cur);
- }
- } while (cur != NULL);
- return(cur);
+ return(xmlXPathNextDescendant(ctxt, cur));
}
/**
@@ -1581,14 +1593,35 @@
xmlNodePtr
xmlXPathNextParent(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
/*
- * !!!!!!!!!!!!!
* the parent of an attribute or namespace node is the element
* to which the attribute or namespace node is attached
+ * Namespace handling !!!
*/
if (cur == NULL) {
- if (ctxt->context->node->parent == NULL)
- return((xmlNodePtr) ctxt->context->doc);
- return(ctxt->context->node->parent);
+ if (ctxt->context->node == NULL) return(NULL);
+ switch (ctxt->context->node->type) {
+ case XML_ELEMENT_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_NOTATION_NODE:
+ if (ctxt->context->node->parent == NULL)
+ return((xmlNodePtr) ctxt->context->doc);
+ return(ctxt->context->node->parent);
+ case XML_ATTRIBUTE_NODE: {
+ xmlAttrPtr att = (xmlAttrPtr) ctxt->context->node;
+
+ return(att->node);
+ }
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+ return(NULL);
+ }
}
return(NULL);
}
@@ -1610,20 +1643,63 @@
xmlNodePtr
xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
/*
- * !!!!!!!!!!!!!
* the parent of an attribute or namespace node is the element
* to which the attribute or namespace node is attached
+ * !!!!!!!!!!!!!
*/
if (cur == NULL) {
- if (ctxt->context->node->parent == NULL)
- return((xmlNodePtr) ctxt->context->doc);
- return(ctxt->context->node->parent);
+ if (ctxt->context->node == NULL) return(NULL);
+ switch (ctxt->context->node->type) {
+ case XML_ELEMENT_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_NOTATION_NODE:
+ if (ctxt->context->node->parent == NULL)
+ return((xmlNodePtr) ctxt->context->doc);
+ return(ctxt->context->node->parent);
+ case XML_ATTRIBUTE_NODE: {
+ xmlAttrPtr cur = (xmlAttrPtr) ctxt->context->node;
+
+ return(cur->node);
+ }
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+ return(NULL);
+ }
+ return(NULL);
}
if (cur == ctxt->context->doc->root)
return((xmlNodePtr) ctxt->context->doc);
if (cur == (xmlNodePtr) ctxt->context->doc)
return(NULL);
- return(cur->parent);
+ switch (cur->type) {
+ case XML_ELEMENT_NODE:
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ case XML_ENTITY_REF_NODE:
+ case XML_ENTITY_NODE:
+ case XML_PI_NODE:
+ case XML_COMMENT_NODE:
+ case XML_NOTATION_NODE:
+ return(cur->parent);
+ case XML_ATTRIBUTE_NODE: {
+ xmlAttrPtr att = (xmlAttrPtr) ctxt->context->node;
+
+ return(att->node);
+ }
+ case XML_DOCUMENT_NODE:
+ case XML_DOCUMENT_TYPE_NODE:
+ case XML_DOCUMENT_FRAG_NODE:
+ case XML_HTML_DOCUMENT_NODE:
+ return(NULL);
+ }
+ return(NULL);
}
/**
@@ -1641,18 +1717,9 @@
*/
xmlNodePtr
xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- /*
- * !!!!!!!!!!!!!
- * the parent of an attribute or namespace node is the element
- * to which the attribute or namespace node is attached
- */
if (cur == NULL)
return(ctxt->context->node);
- if (cur == ctxt->context->doc->root)
- return((xmlNodePtr) ctxt->context->doc);
- if (cur == (xmlNodePtr) ctxt->context->doc)
- return(NULL);
- return(cur->parent);
+ return(xmlXPathNextAncestor(ctxt, cur));
}
/**