From dab8ea9b83b22ecd48d97dd13fe5035cf392d3fd Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Thu, 2 Jan 2003 14:16:45 +0000 Subject: [PATCH] =?UTF-8?q?another=20couple=20of=20problem=20related=20to?= =?UTF-8?q?=20IsEmptyElement=20reported=20by=20St=E9phane?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * xmlreader.c python/tests/reader.py: another couple of problem related to IsEmptyElement reported by Stéphane Bidoul needed some fixes. Daniel --- ChangeLog | 6 ++++++ python/tests/reader.py | 22 ++++++++++++++++++++++ xmlreader.c | 21 +++++++++++++++++++-- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9f8a3ab4..c5ce5c93 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Thu Jan 2 15:15:26 CET 2003 Daniel Veillard + + * xmlreader.c python/tests/reader.py: another couple of problem + related to IsEmptyElement reported by Stéphane Bidoul needed + some fixes. + Thu Jan 2 13:57:07 CET 2003 Daniel Veillard * libxml.spec.in python/Makefile.am python/drv_libxml2.py: diff --git a/python/tests/reader.py b/python/tests/reader.py index 83fa0e4b..5fd61603 100755 --- a/python/tests/reader.py +++ b/python/tests/reader.py @@ -377,6 +377,28 @@ if res != expect: print res sys.exit(1) +doc="""

""" +expect="""1 (test) [None] 0 0 +1 (p) [None] 0 1 +15 (p) [None] 0 1 +15 (test) [None] 0 0 +""" +res = tst_reader(doc) +if res != expect: + print "test13 failed" + print res + sys.exit(1) + +doc="""

""" +expect="""1 (p) [None] 0 0 +15 (p) [None] 0 0 +""" +res = tst_reader(doc) +if res != expect: + print "test14 failed" + print res + sys.exit(1) + # # cleanup for memory allocation counting # diff --git a/xmlreader.c b/xmlreader.c index 1d65df6b..930ec53b 100644 --- a/xmlreader.c +++ b/xmlreader.c @@ -382,10 +382,16 @@ xmlTextReaderRead(xmlTextReaderPtr reader) { } while ((reader->ctxt->node == NULL) && (reader->mode != XML_TEXTREADER_MODE_EOF)); if (reader->ctxt->node == NULL) { - if (reader->ctxt->myDoc != NULL) + if (reader->ctxt->myDoc != NULL) { reader->node = reader->ctxt->myDoc->children; + if ((reader->ctxt->input != NULL) && + (reader->ctxt->input->cur != NULL) && + (reader->ctxt->input->cur[-2] != '/')) + reader->wasempty = -1; + } if (reader->node == NULL) return(-1); + reader->state = XML_TEXTREADER_ELEMENT; } else { reader->node = reader->ctxt->nodeTab[0]; } @@ -395,7 +401,14 @@ xmlTextReaderRead(xmlTextReaderPtr reader) { oldstate = reader->state; olddepth = reader->ctxt->nodeNr; oldnode = reader->node; - wasempty = (((reader->wasempty == 1) && (reader->ctxt->node != NULL) && + /* + * the

vs.

distinction at the API level royally sucks, + * Microsoft priviledge ... + */ + if (reader->wasempty == -1) + wasempty = 0; + else + wasempty = (((reader->wasempty == 1) && (reader->ctxt->node != NULL) && (reader->ctxt->node->last == reader->node)) || (reader->node != reader->ctxt->node)); @@ -1448,6 +1461,10 @@ xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader) { return(0); if (reader->node->children != NULL) return(0); + if (reader->state == XML_TEXTREADER_END) + return(0); + if (reader->wasempty == -1) + return(0); if (reader->node != reader->ctxt->node) return(1); if ((reader->ctxt->node != NULL) &&