Commit a3bfca59 authored by Daniel Veillard's avatar Daniel Veillard
Browse files

parsing real HTML is a nightmare.

- HTMLparser.c result/HTML/*: revamped the way the HTML
  parser handles end of tags or end of input
Daniel
parent 82daa81a
Thu Apr 12 17:41:09 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
* HTMLparser.c result/HTML/*: revamped the way the HTML
parser handles end of tags or end of input
Thu Apr 12 10:50:34 CEST 2001 Daniel Veillard <Daniel.Veillard@imag.fr>
* tree.[ch] : added xmlDocCopyNode for gdome2 support
......
......@@ -445,7 +445,7 @@ htmlElemDesc html40ElementTable[] = {
{ "th", 0, 1, 0, 0, 0, 0, "table header cell" },
{ "thead", 0, 1, 0, 0, 0, 0, "table header " },
{ "title", 0, 0, 0, 0, 0, 0, "document title " },
{ "tr", 0, 1, 0, 0, 0, 0, "table row " },
{ "tr", 0, 0, 0, 0, 0, 0, "table row " },
{ "tt", 0, 0, 0, 0, 0, 0, "teletype or monospaced text style" },
{ "u", 0, 0, 0, 0, 1, 1, "underlined text style" },
{ "ul", 0, 0, 0, 0, 0, 0, "unordered list " },
......@@ -661,6 +661,7 @@ htmlCheckAutoClose(const xmlChar *newtag, const xmlChar *oldtag) {
* htmlAutoCloseOnClose:
* @ctxt: an HTML parser context
* @newtag: The new tag name
* @force: force the tag closure
*
* The HTmL DtD allows an ending tag to implicitely close other tags.
*/
......@@ -688,11 +689,7 @@ htmlAutoCloseOnClose(htmlParserCtxtPtr ctxt, const xmlChar *newtag) {
xmlGenericError(xmlGenericErrorContext,"htmlAutoCloseOnClose: %s closes %s\n", newtag, ctxt->name);
#endif
} else {
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"Opening and ending tag mismatch: %s and %s\n",
newtag, ctxt->name);
ctxt->wellFormed = 0;
return;
}
if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
ctxt->sax->endElement(ctxt->userData, ctxt->name);
......@@ -706,6 +703,39 @@ htmlAutoCloseOnClose(htmlParserCtxtPtr ctxt, const xmlChar *newtag) {
}
}
/**
* htmlAutoCloseOnEnd:
* @ctxt: an HTML parser context
*
* Close all remaining tags at the end of the stream
*/
static void
htmlAutoCloseOnEnd(htmlParserCtxtPtr ctxt) {
xmlChar *oldname;
int i;
if (ctxt->nameNr == 0)
return;
#ifdef DEBUG
xmlGenericError(xmlGenericErrorContext,"Close of stack: %d elements\n", ctxt->nameNr);
#endif
for (i = (ctxt->nameNr - 1);i >= 0;i--) {
#ifdef DEBUG
xmlGenericError(xmlGenericErrorContext,"%d : %s\n", i, ctxt->nameTab[i]);
#endif
if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
ctxt->sax->endElement(ctxt->userData, ctxt->name);
oldname = htmlnamePop(ctxt);
if (oldname != NULL) {
#ifdef DEBUG
xmlGenericError(xmlGenericErrorContext,"htmlAutoCloseOnEnd: popped %s\n", oldname);
#endif
xmlFree(oldname);
}
}
}
/**
* htmlAutoClose:
* @ctxt: an HTML parser context
......@@ -737,9 +767,8 @@ htmlAutoClose(htmlParserCtxtPtr ctxt, const xmlChar *newtag) {
}
}
if (newtag == NULL) {
htmlAutoCloseOnClose(ctxt, BAD_CAST"head");
htmlAutoCloseOnClose(ctxt, BAD_CAST"body");
htmlAutoCloseOnClose(ctxt, BAD_CAST"html");
htmlAutoCloseOnEnd(ctxt);
return;
}
while ((newtag == NULL) && (ctxt->name != NULL) &&
((xmlStrEqual(ctxt->name, BAD_CAST"head")) ||
......@@ -3266,10 +3295,8 @@ htmlParseContent(htmlParserCtxtPtr ctxt) {
* Fourth : end of the resource
*/
else if (CUR == 0) {
int level = ctxt->nodeNr;
htmlAutoClose(ctxt, NULL);
if (level == ctxt->nodeNr)
break;
htmlAutoCloseOnEnd(ctxt);
break;
}
/*
......@@ -3439,29 +3466,6 @@ htmlParseElement(htmlParserCtxtPtr ctxt) {
if (ctxt->nameNr < depth) break;
}
if (!IS_CHAR(CUR)) {
/************
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"Premature end of data in tag %s\n", currentNode);
ctxt->wellFormed = 0;
*************/
/*
* end of parsing of this node.
*/
nodePop(ctxt);
oldname = htmlnamePop(ctxt);
#ifdef DEBUG
xmlGenericError(xmlGenericErrorContext,"Premature end of tag %s : popping out %s\n", name, oldname);
#endif
if (oldname != NULL)
xmlFree(oldname);
if (currentNode != NULL)
xmlFree(currentNode);
return;
}
/*
* Capture end position and add node
*/
......@@ -3472,6 +3476,10 @@ htmlParseElement(htmlParserCtxtPtr ctxt) {
node_info.node = ctxt->node;
xmlParserAddNodeInfo(ctxt, &node_info);
}
if (!IS_CHAR(CUR)) {
htmlAutoCloseOnEnd(ctxt);
}
if (currentNode != NULL)
xmlFree(currentNode);
}
......@@ -3556,7 +3564,7 @@ htmlParseDocument(htmlParserCtxtPtr ctxt) {
* autoclose
*/
if (CUR == 0)
htmlAutoClose(ctxt, NULL);
htmlAutoCloseOnEnd(ctxt);
/*
......@@ -3899,7 +3907,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
else
avail = in->buf->buffer->use - (in->cur - in->base);
if ((avail == 0) && (terminate)) {
htmlAutoClose(ctxt, NULL);
htmlAutoCloseOnEnd(ctxt);
if ((ctxt->nameNr == 0) && (ctxt->instate != XML_PARSER_EOF)) {
/*
* SAX: end of the document processing.
......@@ -4077,9 +4085,6 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
goto done;
} else {
ctxt->errNo = XML_ERR_DOCUMENT_END;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"Extra content at the end of the document\n");
ctxt->wellFormed = 0;
ctxt->instate = XML_PARSER_EOF;
#ifdef DEBUG_PUSH
......@@ -4491,7 +4496,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
}
done:
if ((avail == 0) && (terminate)) {
htmlAutoClose(ctxt, NULL);
htmlAutoCloseOnEnd(ctxt);
if ((ctxt->nameNr == 0) && (ctxt->instate != XML_PARSER_EOF)) {
/*
* SAX: end of the document processing.
......@@ -4555,9 +4560,6 @@ htmlParseChunk(htmlParserCtxtPtr ctxt, const char *chunk, int size,
(ctxt->instate != XML_PARSER_EPILOG) &&
(ctxt->instate != XML_PARSER_MISC)) {
ctxt->errNo = XML_ERR_DOCUMENT_END;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"Extra content at the end of the document\n");
ctxt->wellFormed = 0;
}
if (ctxt->instate != XML_PARSER_EOF) {
......
./test/HTML/autoclose3.html:4: error: Opening and ending tag mismatch: body and ul
^
......@@ -13,7 +13,6 @@ SAX.startElement(li)
SAX.characters(item 2
, 7)
SAX.endElement(li)
SAX.error: Opening and ending tag mismatch: body and ul
SAX.endElement(ul)
SAX.endElement(body)
SAX.endElement(html)
......
......@@ -803,15 +803,15 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
<!-- <input type="submit" name="npunsubscribe" value="Unsubscribe" style="font-size: xx-small; font-family: Verdana; font-weight: bold; color: #ffffff; background-color: #000000;"> -->
</font>
</form>
<font size="1"><form action="http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?search" method="post">Search news<br>
<font size="1">
<form action="http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?search" method="post">Search news<br>
<input name="searchstring" size="13">
<br>
<input name="submit" style="BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold" type="submit" value="Submit">
<br>
<a href="http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?newsall">News
archive</a>
</form></font>
</center></td></tr></tbody></table>
</form>
<!-- <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" BGCOLOR="silver">
<TR>
<TD WIDTH="100%">
......@@ -851,19 +851,21 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
}
// -->
</script>
<b><noscript></noscript></b>
<b><noscript>
<a href="http://www.goto.com/d/search/ssn/?fromGIF=true" target="_blank"><img align="bottom" border="0" height="90" ismap src="doc3_files/100x90.gif" width="100"></a>
<b><a href="http://www.goto.com/d/search/ssn/?fromGIF=true" target="_blank"></a></b>
<b></b>
<b><!-- END GoTo.com Search Box --></b>
<!-- Pricewatch Search Box --><form action="http://www.pricewatch.com/search/search.asp" method="get" target="_Blank"><center><p>
<!-- Pricewatch Search Box --><form action="http://www.pricewatch.com/search/search.asp" method="get" target="_Blank">
<center>
<p>
<b><font color="white" face="ARIAL, HELVETICA" size="1">PC Price
Search<br>
</font></b>
<input maxlength="30" name="criteria" size="10">
<br>
<input name="submit" style="BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold" type="submit" value="Search">
</p></center></form>
</p>
<!-- Pricewatch Search Box --><a href="http://www.puicorp.com/bp6specials.htm" target="_BLANK"><img src="doc3_files/puibp6.gif"></a>
<br>
<br>
......@@ -875,9 +877,7 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
<br>BP6.COM
Special<br>Code:BP6-hd</font>
</a>
</td></tr></tbody></table>
</center></td>
</tr></tbody></table>
</center>
<table bgcolor="silver" border="0" cellpadding="0" cellspacing="0" height="100%" width="100%"><tbody><tr><td width="100%"></td></tr></tbody></table>
<!-- </TABLE>--><center></center>
<tr><td colspan="3" valign="TOP" height="70"></td></tr>
......@@ -889,7 +889,14 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
</p></td></tr>
<!-- <TR> <TD WIDTH="780"> <P ALIGN="CENTER"><FONT SIZE="1" COLOR="#999999" FACE="Verdana,arial">Site design by Tim Brinkley</FONT> </TD> </TR> -->
</tbody></table>
</div>
<script> window.open=NS_ActualOpen; </script>
</form>
</noscript></b>
</td></tr></tbody></table>
</font>
</center></td></tr></tbody></table>
</center></td>
</tr></tbody></table>
</div>
</body>
</html>
......@@ -3,19 +3,19 @@
^
./test/HTML/doc3.htm:47: error: htmlParseEntityRef: expecting ';'
href="http://ads.gamesquad.net/addclick.exe/adclick.cgi?REGION=game|tech|ent&i
^
^
./test/HTML/doc3.htm:47: error: htmlParseEntityRef: expecting ';'
_top"><img src="http://ads.gamesquad.net/addclick.exe/adcycle.cgi?group=52&medi
^
^
./test/HTML/doc3.htm:47: error: htmlParseEntityRef: expecting ';'
><img src="http://ads.gamesquad.net/addclick.exe/adcycle.cgi?group=52&media=1&i
^
^
./test/HTML/doc3.htm:140: error: error parsing attribute name
width=70 Gentus?.?></A><BR><A
^
./test/HTML/doc3.htm:143: error: Unexpected end tag : p
</P></TD></TR></TBODY></TABLE></CENTER></TD></TR></TBODY></TABLE></CENTER></P
^
^
./test/HTML/doc3.htm:231: error: Unexpected end tag : font
Specials<BR><BR></FONT></A><BR></FONT></A><B><FONT color=yellow
^
......@@ -24,25 +24,37 @@ _top"><img src="http://ads.gamesquad.net/addclick.exe/adcycle.cgi?group=52&medi
^
./test/HTML/doc3.htm:742: error: htmlParseEntityRef: expecting ';'
er=0 alt="Advertisement" src="http://ads.adflight.com/ad_static.asp?pid=2097&si
^
^
./test/HTML/doc3.htm:742: error: htmlParseEntityRef: expecting ';'
Advertisement" src="http://ads.adflight.com/ad_static.asp?pid=2097&sid=1881&asi
^
^
./test/HTML/doc3.htm:742: error: Unexpected end tag : li
light.com/ad_static.asp?pid=2097&sid=1881&asid=7708"></a></IFRAME></CENTER></LI
^
^
./test/HTML/doc3.htm:742: error: Unexpected end tag : font
om/ad_static.asp?pid=2097&sid=1881&asid=7708"></a></IFRAME></CENTER></LI></FONT
^
^
./test/HTML/doc3.htm:742: error: Unexpected end tag : p
=7708"></a></IFRAME></CENTER></LI></FONT></TD></TR></TBODY></TABLE></CENTER></P
^
^
./test/HTML/doc3.htm:767: error: Opening and ending tag mismatch: font and form
archive</A></FONT> </FORM></CENTER></TD></TR></TBODY></TABLE><!--
^
./test/HTML/doc3.htm:767: error: Unexpected end tag : form
./test/HTML/doc3.htm:767: error: Opening and ending tag mismatch: center and font
archive</A></FONT> </FORM></CENTER></TD></TR></TBODY></TABLE><!--
^
^
./test/HTML/doc3.htm:767: error: Opening and ending tag mismatch: td and font
archive</A></FONT> </FORM></CENTER></TD></TR></TBODY></TABLE><!--
^
./test/HTML/doc3.htm:767: error: Opening and ending tag mismatch: tr and font
archive</A></FONT> </FORM></CENTER></TD></TR></TBODY></TABLE><!--
^
./test/HTML/doc3.htm:767: error: Opening and ending tag mismatch: tbody and font
archive</A></FONT> </FORM></CENTER></TD></TR></TBODY></TABLE><!--
^
./test/HTML/doc3.htm:767: error: Opening and ending tag mismatch: table and font
archive</A></FONT> </FORM></CENTER></TD></TR></TBODY></TABLE><!--
^
./test/HTML/doc3.htm:790: error: Unexpected end tag : iframe
document.write("42DF8478957377></IFRAME>");
^
......@@ -61,7 +73,7 @@ om/ad_static.asp?pid=2097&sid=1881&asid=7708"></a></IFRAME></CENTER></LI></FONT
./test/HTML/doc3.htm:815: error: Unexpected end tag : a
</A></A></B><B></NOSCRIPT></B><B><!-- END GoTo.com Search Box --></
^
./test/HTML/doc3.htm:815: error: Unexpected end tag : noscript
./test/HTML/doc3.htm:815: error: Opening and ending tag mismatch: noscript and b
</A></A></B><B></NOSCRIPT></B><B><!-- END GoTo.com Search Box --></
^
./test/HTML/doc3.htm:821: error: Opening and ending tag mismatch: form and center
......@@ -70,36 +82,48 @@ om/ad_static.asp?pid=2097&sid=1881&asid=7708"></a></IFRAME></CENTER></LI></FONT
./test/HTML/doc3.htm:828: error: Unexpected end tag : p
Special<BR>Code:BP6-hd</FONT></A> </P></CENTER></TD></TR></TBODY></
^
./test/HTML/doc3.htm:828: error: Opening and ending tag mismatch: center and td
./test/HTML/doc3.htm:828: error: Opening and ending tag mismatch: td and form
Special<BR>Code:BP6-hd</FONT></A> </P></CENTER></TD></TR></TBODY></
^
./test/HTML/doc3.htm:828: error: Opening and ending tag mismatch: center and tbody
^
./test/HTML/doc3.htm:828: error: Opening and ending tag mismatch: tr and form
Special<BR>Code:BP6-hd</FONT></A> </P></CENTER></TD></TR></TBODY></
^
./test/HTML/doc3.htm:828: error: Opening and ending tag mismatch: center and table
^
./test/HTML/doc3.htm:828: error: Opening and ending tag mismatch: tbody and form
Special<BR>Code:BP6-hd</FONT></A> </P></CENTER></TD></TR></TBODY></
^
^
./test/HTML/doc3.htm:828: error: Opening and ending tag mismatch: table and form
Special<BR>Code:BP6-hd</FONT></A> </P></CENTER></TD></TR></TBODY></TABL
^
./test/HTML/doc3.htm:834: error: Unexpected end tag : p
width="100%">&nbsp;</TD></TR></TBODY></TABLE></P></CENTER></TR></TBODY></TABLE>
^
./test/HTML/doc3.htm:834: error: Unexpected end tag : center
./test/HTML/doc3.htm:834: error: Opening and ending tag mismatch: center and form
width="100%">&nbsp;</TD></TR></TBODY></TABLE></P></CENTER></TR></TBODY></TABLE>
^
./test/HTML/doc3.htm:834: error: Unexpected end tag : tr
./test/HTML/doc3.htm:834: error: Opening and ending tag mismatch: tr and form
width="100%">&nbsp;</TD></TR></TBODY></TABLE></P></CENTER></TR></TBODY></TABLE>
^
./test/HTML/doc3.htm:834: error: Unexpected end tag : tbody
./test/HTML/doc3.htm:834: error: Opening and ending tag mismatch: tbody and form
width="100%">&nbsp;</TD></TR></TBODY></TABLE></P></CENTER></TR></TBODY></TABLE>
^
./test/HTML/doc3.htm:834: error: Unexpected end tag : table
./test/HTML/doc3.htm:834: error: Opening and ending tag mismatch: table and form
width="100%">&nbsp;</TD></TR></TBODY></TABLE></P></CENTER></TR></TBODY></TABLE>
^
./test/HTML/doc3.htm:835: error: Unexpected end tag : td
^
./test/HTML/doc3.htm:835: error: Opening and ending tag mismatch: td and form
<CENTER></CENTER></TD></TR><TR><TD COLSPAN="3" VALIGN="TOP"
^
./test/HTML/doc3.htm:835: error: Unexpected end tag : tr
./test/HTML/doc3.htm:835: error: Opening and ending tag mismatch: tr and form
<CENTER></CENTER></TD></TR><TR><TD COLSPAN="3" VALIGN="TOP"
^
./test/HTML/doc3.htm:836: error: Unexpected end tag : table
./test/HTML/doc3.htm:836: error: Opening and ending tag mismatch: table and form
HEIGHT="70">&nbsp;</TD> </TR></TABLE>
^
./test/HTML/doc3.htm:844: error: Opening and ending tag mismatch: div and form
,arial">Site design by Tim Brinkley</FONT> </TD> </TR> --></TBODY></TABLE></DI
^
./test/HTML/doc3.htm:846: error: Opening and ending tag mismatch: body and form
</BODY></HTML>
^
./test/HTML/doc3.htm:846: error: Opening and ending tag mismatch: html and form
</BODY></HTML>
^
......@@ -2658,15 +2658,13 @@ SAX.characters(News
archive, 26)
SAX.endElement(a)
SAX.error: Opening and ending tag mismatch: font and form
SAX.endElement(form)
SAX.endElement(font)
SAX.characters( , 1)
SAX.error: Unexpected end tag : form
SAX.endElement(center)
SAX.endElement(td)
SAX.endElement(tr)
SAX.endElement(tbody)
SAX.endElement(table)
SAX.endElement(form)
SAX.error: Opening and ending tag mismatch: center and font
SAX.error: Opening and ending tag mismatch: td and font
SAX.error: Opening and ending tag mismatch: tr and font
SAX.error: Opening and ending tag mismatch: tbody and font
SAX.error: Opening and ending tag mismatch: table and font
SAX.comment( <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" BGCOLOR="silver">
<TR>
<TD WIDTH="100%">
......@@ -2712,8 +2710,6 @@ SAX.characters(
SAX.startElement(b)
SAX.startElement(noscript)
SAX.error: Opening and ending tag mismatch: b and noscript
SAX.endElement(noscript)
SAX.endElement(b)
SAX.startElement(a, href='http://www.goto.com/d/search/ssn/?fromGIF=true', target='_blank')
SAX.startElement(img, align='bottom', border='0', height='90', ismap, src='doc3_files/100x90.gif', width='100')
SAX.endElement(img)
......@@ -2726,7 +2722,7 @@ SAX.endElement(a)
SAX.error: Unexpected end tag : a
SAX.endElement(b)
SAX.startElement(b)
SAX.error: Unexpected end tag : noscript
SAX.error: Opening and ending tag mismatch: noscript and b
SAX.endElement(b)
SAX.startElement(b)
SAX.comment( END GoTo.com Search Box )
......@@ -2759,8 +2755,6 @@ SAX.characters(
, 15)
SAX.endElement(p)
SAX.error: Opening and ending tag mismatch: form and center
SAX.endElement(center)
SAX.endElement(form)
SAX.comment( Pricewatch Search Box )
SAX.startElement(a, href='http://www.puicorp.com/bp6specials.htm', target='_BLANK')
SAX.startElement(img, src='doc3_files/puibp6.gif')
......@@ -2789,18 +2783,11 @@ SAX.endElement(font)
SAX.endElement(a)
SAX.characters( , 1)
SAX.error: Unexpected end tag : p
SAX.error: Opening and ending tag mismatch: center and td
SAX.endElement(td)
SAX.endElement(tr)
SAX.error: Opening and ending tag mismatch: center and tbody
SAX.endElement(tbody)
SAX.error: Opening and ending tag mismatch: center and table
SAX.endElement(table)
SAX.endElement(center)
SAX.endElement(td)
SAX.endElement(tr)
SAX.endElement(tbody)
SAX.endElement(table)
SAX.error: Opening and ending tag mismatch: td and form
SAX.error: Opening and ending tag mismatch: tr and form
SAX.error: Opening and ending tag mismatch: tbody and form
SAX.error: Opening and ending tag mismatch: table and form
SAX.characters(
, 8)
SAX.startElement(table, bgcolor='silver', border='0', cellpadding='0', cellspacing='0', height='100%', width='100%')
......@@ -2819,24 +2806,24 @@ SAX.endElement(tr)
SAX.endElement(tbody)
SAX.endElement(table)
SAX.error: Unexpected end tag : p
SAX.error: Unexpected end tag : center
SAX.error: Unexpected end tag : tr
SAX.error: Unexpected end tag : tbody
SAX.error: Unexpected end tag : table
SAX.error: Opening and ending tag mismatch: center and form
SAX.error: Opening and ending tag mismatch: tr and form
SAX.error: Opening and ending tag mismatch: tbody and form
SAX.error: Opening and ending tag mismatch: table and form
SAX.comment( </TABLE>)
SAX.characters(
, 2)
SAX.startElement(center)
SAX.endElement(center)
SAX.error: Unexpected end tag : td
SAX.error: Unexpected end tag : tr
SAX.error: Opening and ending tag mismatch: td and form
SAX.error: Opening and ending tag mismatch: tr and form
SAX.startElement(tr)
SAX.startElement(td, colspan='3', valign='TOP', height='70')
SAX.characters(&nbsp;, 2)
SAX.endElement(td)
SAX.characters( , 1)
SAX.endElement(tr)
SAX.error: Unexpected end tag : table
SAX.error: Opening and ending tag mismatch: table and form
SAX.characters(
, 2)
SAX.startElement(table, border='0', width='780')
......@@ -2871,16 +2858,37 @@ SAX.endElement(tr)
SAX.comment( <TR> <TD WIDTH="780"> <P ALIGN="CENTER"><FONT SIZE="1" COLOR="#999999" FACE="Verdana,arial">Site design by Tim Brinkley</FONT> </TD> </TR> )
SAX.endElement(tbody)
SAX.endElement(table)
SAX.endElement(div)
SAX.ignorableWhitespace(
SAX.error: Opening and ending tag mismatch: div and form
SAX.characters(
, 2)
SAX.startElement(script)
SAX.cdata( window.open=NS_ActualOpen; , 28)
SAX.endElement(script)
SAX.characters(
, 2)
SAX.error: Opening and ending tag mismatch: body and form
SAX.error: Opening and ending tag mismatch: html and form
SAX.ignorableWhitespace(
, 2)
SAX.endElement(form)
SAX.endElement(noscript)
SAX.endElement(b)
SAX.endElement(td)
SAX.endElement(tr)
SAX.endElement(tbody)
SAX.endElement(table)
SAX.endElement(font)
SAX.endElement(center)
SAX.endElement(td)
SAX.endElement(tr)
SAX.endElement(tbody)
SAX.endElement(table)
SAX.endElement(center)
SAX.endElement(td)
SAX.endElement(tr)
SAX.endElement(tbody)
SAX.endElement(table)
SAX.endElement(div)
SAX.endElement(body)
SAX.endElement(html)
SAX.ignorableWhitespace(
, 2)
SAX.endDocument()
......
./test/HTML/entities.html:1: error: htmlParseEntityRef: expecting ';'
<p tst="a&amp;b" tst2="a&b" tst3="a & b">
^
^
./test/HTML/entities.html:1: error: htmlParseEntityRef: no name
<p tst="a&amp;b" tst2="a&b" tst3="a & b">
^
^
./test/HTML/entities.html:3: error: htmlParseEntityRef: expecting ';'
a&b
^
......
......@@ -38,7 +38,8 @@
<dt><h4>Class <a href="ProblemDomain.Note.html#ProblemDomain.Note">ProblemDomain.Note</a>
</h4></dt>
</dl>
<h4><b>Links</b></h4>
<h4>
<b>Links</b>
<ul><li>
<b>Link to </b>
<a href="HumanInterface.Package.html#HumanInterface.Package">HumanInterface</a>
......@@ -54,5 +55,6 @@
<a href="DataManagement.Package.html#DataManagement.Package">DataManagement</a>
</li></ul>
<dir></dir>
</h4>
</body>
</html>
......@@ -7,6 +7,6 @@
./test/HTML/test3.html:27: error: Opening and ending tag mismatch: h4 and b
<h4><b>Links</h4></b>
^
./test/HTML/test3.html:27: error: Unexpected end tag : b
<h4><b>Links</h4></b>
^
./test/HTML/test3.html:34: error: Opening and ending tag mismatch: html and h4
</html>
^
......@@ -171,9 +171,7 @@ SAX.startElement(b)
SAX.characters(Links, 5)
SAX.error: Opening and ending tag mismatch: h4 and b
SAX.endElement(b)
SAX.endElement(h4)
SAX.error: Unexpected end tag : b
SAX.ignorableWhitespace(
SAX.characters(
, 2)
SAX.startElement(ul)
SAX.startElement(li)
......@@ -185,11 +183,11 @@ SAX.characters(HumanInterface, 14)
SAX.endElement(a)
SAX.endElement(li)
SAX.endElement(ul)
SAX.ignorableWhitespace(
SAX.characters(
, 2)
SAX.startElement(dir)
SAX.endElement(dir)
SAX.ignorableWhitespace(
SAX.characters(
, 2)
SAX.startElement(ul)
SAX.startElement(li)
......@@ -201,11 +199,11 @@ SAX.characters(DataManagement.FlatFile, 23)
SAX.endElement(a)
SAX.endElement(li)
SAX.endElement(ul)
SAX.ignorableWhitespace(
SAX.characters(
, 2)
SAX.startElement(dir)
SAX.endElement(dir)
SAX.ignorableWhitespace(
SAX.characters(
, 2)
SAX.startElement(ul)
SAX.startElement(li)
......@@ -217,14 +215,16 @@ SAX.characters(DataManagement, 14)
SAX.endElement(a)
SAX.endElement(li)
SAX.endElement(ul)
SAX.ignorableWhitespace(
SAX.characters(