1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-07-13 09:01:53 +03:00

another couple of problem related to IsEmptyElement reported by Stphane

* xmlreader.c python/tests/reader.py: another couple of problem
  related to IsEmptyElement reported by Stphane Bidoul needed
  some fixes.
Daniel
This commit is contained in:
Daniel Veillard
2003-01-02 14:16:45 +00:00
parent 4f86020248
commit dab8ea9b83
3 changed files with 47 additions and 2 deletions

View File

@ -1,3 +1,9 @@
Thu Jan 2 15:15:26 CET 2003 Daniel Veillard <daniel@veillard.com>
* xmlreader.c python/tests/reader.py: another couple of problem
related to IsEmptyElement reported by St<53>phane Bidoul needed
some fixes.
Thu Jan 2 13:57:07 CET 2003 Daniel Veillard <daniel@veillard.com> Thu Jan 2 13:57:07 CET 2003 Daniel Veillard <daniel@veillard.com>
* libxml.spec.in python/Makefile.am python/drv_libxml2.py: * libxml.spec.in python/Makefile.am python/drv_libxml2.py:

View File

@ -377,6 +377,28 @@ if res != expect:
print res print res
sys.exit(1) sys.exit(1)
doc="""<test><p></p></test>"""
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="""<p></p>"""
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 # cleanup for memory allocation counting
# #

View File

@ -382,10 +382,16 @@ xmlTextReaderRead(xmlTextReaderPtr reader) {
} while ((reader->ctxt->node == NULL) && } while ((reader->ctxt->node == NULL) &&
(reader->mode != XML_TEXTREADER_MODE_EOF)); (reader->mode != XML_TEXTREADER_MODE_EOF));
if (reader->ctxt->node == NULL) { if (reader->ctxt->node == NULL) {
if (reader->ctxt->myDoc != NULL) if (reader->ctxt->myDoc != NULL) {
reader->node = reader->ctxt->myDoc->children; 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) if (reader->node == NULL)
return(-1); return(-1);
reader->state = XML_TEXTREADER_ELEMENT;
} else { } else {
reader->node = reader->ctxt->nodeTab[0]; reader->node = reader->ctxt->nodeTab[0];
} }
@ -395,7 +401,14 @@ xmlTextReaderRead(xmlTextReaderPtr reader) {
oldstate = reader->state; oldstate = reader->state;
olddepth = reader->ctxt->nodeNr; olddepth = reader->ctxt->nodeNr;
oldnode = reader->node; oldnode = reader->node;
wasempty = (((reader->wasempty == 1) && (reader->ctxt->node != NULL) && /*
* the <p></p> vs. <p/> 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->ctxt->node->last == reader->node)) ||
(reader->node != reader->ctxt->node)); (reader->node != reader->ctxt->node));
@ -1448,6 +1461,10 @@ xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader) {
return(0); return(0);
if (reader->node->children != NULL) if (reader->node->children != NULL)
return(0); return(0);
if (reader->state == XML_TEXTREADER_END)
return(0);
if (reader->wasempty == -1)
return(0);
if (reader->node != reader->ctxt->node) if (reader->node != reader->ctxt->node)
return(1); return(1);
if ((reader->ctxt->node != NULL) && if ((reader->ctxt->node != NULL) &&