diff --git a/ChangeLog b/ChangeLog index 6fc6b61e..f0c84c4f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Mon Jan 24 14:31:09 CET 2000 Daniel Veillard + + * 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 * configure.in: prepared for libxml-1.8.5 diff --git a/TODO b/TODO index 417ea004..8c4dffdb 100644 --- a/TODO +++ b/TODO @@ -86,6 +86,10 @@ TODO: - 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 be9fe531..82c0cd1e 100644 --- a/xml-config.in +++ b/xml-config.in @@ -44,7 +44,7 @@ while test $# -gt 0; do ;; --version) - echo @PACKAGE@ @VERSION@ + echo @VERSION@ exit 0 ;; diff --git a/xpath.c b/xpath.c index 7f2a5894..bb94ab85 100644 --- a/xpath.c +++ b/xpath.c @@ -1488,10 +1488,26 @@ xmlXPathNextSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { 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 @@ xmlXPathNextChild(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { 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 @@ xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { */ 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 @@ xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { 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 @@ xmlXPathNextParent(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { 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 @@ xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { */ 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)); } /**