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

more code cleanup, especially around error messages, the HTML parser has

* HTMLparser.c Makefile.am legacy.c parser.c parserInternals.c
  include/libxml/xmlerror.h: more code cleanup, especially around
  error messages, the HTML parser has now been upgraded to the new
  handling.
* result/HTML/*: a few changes in the resulting error messages
Daniel
parent 24eb9785
Sun Oct 5 15:49:14 CEST 2003 Daniel Veillard <daniel@veillard.com>
* HTMLparser.c Makefile.am legacy.c parser.c parserInternals.c
include/libxml/xmlerror.h: more code cleanup, especially around
error messages, the HTML parser has now been upgraded to the new
handling.
* result/HTML/*: a few changes in the resulting error messages
Sat Oct 4 23:06:41 CEST 2003 Daniel Veillard <daniel@veillard.com>
 
* parser.c include/libxml/xmlerror.h: more error/warning
......
This diff is collapsed.
......@@ -559,10 +559,10 @@ SAXtests : testSAX$(EXEEXT)
if [ ! -d $$i ] ; then \
if [ ! -f $(srcdir)/result/$$name.sax ] ; then \
echo New test file $$name ; \
$(CHECKER) $(top_builddir)/testSAX $$i > $(srcdir)/result/$$name.sax ; \
$(CHECKER) $(top_builddir)/testSAX $$i > $(srcdir)/result/$$name.sax 2> /dev/null ; \
grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
else \
log=`$(CHECKER) $(top_builddir)/testSAX $$i > result.$$name ; \
log=`$(CHECKER) $(top_builddir)/testSAX $$i > result.$$name 2> /dev/null ; \
grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
diff $(srcdir)/result/$$name.sax result.$$name` ; \
if [ -n "$$log" ] ; then echo $$name result ; echo $$log ; fi ; \
......
......@@ -247,7 +247,9 @@ typedef enum {
XML_WAR_UNKNOWN_VERSION,
XML_WAR_LANG_VALUE,
XML_WAR_NS_URI,
XML_WAR_NS_URI_RELATIVE
XML_WAR_NS_URI_RELATIVE,
XML_HTML_STRUCURE_ERROR,
XML_HTML_UNKNOWN_TAG
} xmlParserErrors;
/**
......
This diff is collapsed.
......@@ -128,7 +128,6 @@ xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
* *
************************************************************************/
/**
* xmlErrMemory:
* @ctxt: an XML parser context
......@@ -471,6 +470,32 @@ xmlFatalErrMsgInt(xmlParserCtxtPtr ctxt, xmlParserErrors error,
ctxt->disableSAX = 1;
}
/**
* xmlFatalErrMsgStrIntStr:
* @ctxt: an XML parser context
* @error: the error number
* @msg: the error message
* @str1: an string info
* @val: an integer value
* @str2: an string info
*
* Handle a fatal parser error, i.e. violating Well-Formedness constraints
*/
static void
xmlFatalErrMsgStrIntStr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
const char *msg, const xmlChar *str1, int val,
const xmlChar *str2)
{
ctxt->errNo = error;
__xmlRaiseError(NULL, NULL,
ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL,
NULL, 0, (const char *) str1, (const char *) str2,
NULL, val, 0, msg, str1, val, str2);
ctxt->wellFormed = 0;
if (ctxt->recovery == 0)
ctxt->disableSAX = 1;
}
/**
* xmlFatalErrMsgStr:
* @ctxt: an XML parser context
......@@ -494,6 +519,26 @@ xmlFatalErrMsgStr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
ctxt->disableSAX = 1;
}
/**
* xmlErrMsgStr:
* @ctxt: an XML parser context
* @error: the error number
* @msg: the error message
* @val: a string value
*
* Handle a non fatal parser error
*/
static void
xmlErrMsgStr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
const char *msg, const xmlChar * val)
{
ctxt->errNo = error;
__xmlRaiseError(NULL, NULL, ctxt, NULL,
XML_FROM_PARSER, error, XML_ERR_ERROR,
NULL, 0, (const char *) val, NULL, NULL, 0, 0, msg,
val);
}
/**
* xmlNsErr:
* @ctxt: an XML parser context
......@@ -1849,9 +1894,8 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
if (ent->content != NULL) {
COPY_BUF(0,buffer,nbchars,ent->content[0]);
} else {
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"internal error entity has no content\n");
xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR,
"predefined entity has no content\n");
}
} else if ((ent != NULL) && (ent->content != NULL)) {
xmlChar *rep;
......@@ -4244,12 +4288,8 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) {
uri = xmlParseURI((const char *) URI);
if (uri == NULL) {
ctxt->errNo = XML_ERR_INVALID_URI;
if ((ctxt->sax != NULL) &&
(!ctxt->disableSAX) &&
(ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"Invalid URI: %s\n", URI);
xmlErrMsgStr(ctxt, XML_ERR_INVALID_URI,
"Invalid URI: %s\n", URI);
/*
* This really ought to be a well formedness error
* but the XML Core WG decided otherwise c.f. issue
......@@ -4307,12 +4347,8 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) {
uri = xmlParseURI((const char *)URI);
if (uri == NULL) {
ctxt->errNo = XML_ERR_INVALID_URI;
if ((ctxt->sax != NULL) &&
(!ctxt->disableSAX) &&
(ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"Invalid URI: %s\n", URI);
xmlErrMsgStr(ctxt, XML_ERR_INVALID_URI,
"Invalid URI: %s\n", URI);
/*
* This really ought to be a well formedness error
* but the XML Core WG decided otherwise c.f. issue
......@@ -5361,18 +5397,12 @@ xmlParseElementDecl(xmlParserCtxtPtr ctxt) {
*/
if ((RAW == '%') && (ctxt->external == 0) &&
(ctxt->inputNr == 1)) {
ctxt->errNo = XML_ERR_PEREF_IN_INT_SUBSET;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
xmlFatalErrMsg(ctxt, XML_ERR_PEREF_IN_INT_SUBSET,
"PEReference: forbidden within markup decl in internal subset\n");
} else {
ctxt->errNo = XML_ERR_ELEMCONTENT_NOT_STARTED;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
xmlFatalErrMsg(ctxt, XML_ERR_ELEMCONTENT_NOT_STARTED,
"xmlParseElementDecl: 'EMPTY', 'ANY' or '(' expected\n");
}
ctxt->wellFormed = 0;
if (ctxt->recovery == 0) ctxt->disableSAX = 1;
return(-1);
}
......@@ -5886,9 +5916,8 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
ctxt->depth--;
} else {
ret = XML_ERR_ENTITY_PE_INTERNAL;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"Internal: invalid entity type\n");
xmlErrMsgStr(ctxt, XML_ERR_INTERNAL_ERROR,
"invalid entity type found\n", NULL);
}
if (ret == XML_ERR_ENTITY_LOOP) {
xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
......@@ -6161,14 +6190,11 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt) {
(ctxt->hasPErefs == 0))) {
xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
"Entity '%s' not defined\n", name);
ctxt->valid = 0;
} else {
ctxt->errNo = XML_WAR_UNDECLARED_ENTITY;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
xmlErrMsgStr(ctxt, XML_WAR_UNDECLARED_ENTITY,
"Entity '%s' not defined\n", name);
ctxt->valid = 0;
}
ctxt->valid = 0;
}
/*
......@@ -6330,9 +6356,9 @@ xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) {
xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
"Entity '%s' not defined\n", name);
} else {
xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
xmlErrMsgStr(ctxt, XML_WAR_UNDECLARED_ENTITY,
"Entity '%s' not defined\n",
name, NULL);
name);
}
/* TODO ? check regressions ctxt->valid = 0; */
}
......@@ -6343,12 +6369,8 @@ xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) {
* unparsed entity
*/
else if (ent->etype == XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
ctxt->errNo = XML_ERR_UNPARSED_ENTITY;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
xmlFatalErrMsgStr(ctxt, XML_ERR_UNPARSED_ENTITY,
"Entity reference to unparsed entity %s\n", name);
ctxt->wellFormed = 0;
if (ctxt->recovery == 0) ctxt->disableSAX = 1;
}
/*
......@@ -6358,12 +6380,8 @@ xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) {
*/
else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) &&
(ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)) {
ctxt->errNo = XML_ERR_ENTITY_IS_EXTERNAL;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_EXTERNAL,
"Attribute references external entity '%s'\n", name);
ctxt->wellFormed = 0;
if (ctxt->recovery == 0) ctxt->disableSAX = 1;
}
/*
* [ WFC: No < in Attribute Values ]
......@@ -6376,12 +6394,9 @@ xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) {
(!xmlStrEqual(ent->name, BAD_CAST "lt")) &&
(ent->content != NULL) &&
(xmlStrchr(ent->content, '<'))) {
ctxt->errNo = XML_ERR_LT_IN_ATTRIBUTE;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"'<' in entity '%s' is not allowed in attributes values\n", name);
ctxt->wellFormed = 0;
if (ctxt->recovery == 0) ctxt->disableSAX = 1;
xmlFatalErrMsgStr(ctxt, XML_ERR_LT_IN_ATTRIBUTE,
"'<' in entity '%s' is not allowed in attributes values\n",
name);
}
/*
......@@ -6391,12 +6406,9 @@ xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) {
switch (ent->etype) {
case XML_INTERNAL_PARAMETER_ENTITY:
case XML_EXTERNAL_PARAMETER_ENTITY:
ctxt->errNo = XML_ERR_ENTITY_IS_PARAMETER;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"Attempt to reference the parameter entity '%s'\n", name);
ctxt->wellFormed = 0;
if (ctxt->recovery == 0) ctxt->disableSAX = 1;
xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_PARAMETER,
"Attempt to reference the parameter entity '%s'\n",
name);
break;
default:
break;
......@@ -6820,7 +6832,7 @@ xmlParseAttribute(xmlParserCtxtPtr ctxt, xmlChar **value) {
GROW;
name = xmlParseName(ctxt);
if (name == NULL) {
xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
"error parsing attribute name\n");
return(NULL);
}
......@@ -7049,7 +7061,7 @@ xmlParseEndTag1(xmlParserCtxtPtr ctxt, int line) {
GROW;
if ((RAW != '<') || (NXT(1) != '/')) {
xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
xmlFatalErrMsg(ctxt, XML_ERR_LTSLASH_REQUIRED,
"xmlParseEndTag: '</' not found\n");
return;
}
......@@ -7074,20 +7086,10 @@ xmlParseEndTag1(xmlParserCtxtPtr ctxt, int line) {
*
*/
if (name != (xmlChar*)1) {
ctxt->errNo = XML_ERR_TAG_NAME_MISMATCH;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) {
if (name != NULL) {
ctxt->sax->error(ctxt->userData,
if (name == NULL) name = BAD_CAST "unparseable";
xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
"Opening and ending tag mismatch: %s line %d and %s\n",
ctxt->name, line, name);
} else {
ctxt->sax->error(ctxt->userData,
"Ending tag error for: %s line %d\n", ctxt->name, line);
}
}
ctxt->wellFormed = 0;
if (ctxt->recovery == 0) ctxt->disableSAX = 1;
ctxt->name, line, name);
}
/*
......@@ -8033,20 +8035,10 @@ xmlParseEndTag2(xmlParserCtxtPtr ctxt, const xmlChar *prefix,
*
*/
if (name != (xmlChar*)1) {
ctxt->errNo = XML_ERR_TAG_NAME_MISMATCH;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) {
if (name != NULL) {
ctxt->sax->error(ctxt->userData,
if (name == NULL) name = BAD_CAST "unparseable";
xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
"Opening and ending tag mismatch: %s line %d and %s\n",
ctxt->name, line, name);
} else {
ctxt->sax->error(ctxt->userData,
"Ending tag error for: %s line %d\n", ctxt->name, line);
}
}
ctxt->wellFormed = 0;
if (ctxt->recovery == 0) ctxt->disableSAX = 1;
ctxt->name, line, name);
}
/*
......@@ -8341,13 +8333,9 @@ xmlParseElement(xmlParserCtxtPtr ctxt) {
if (RAW == '>') {
NEXT1;
} else {
ctxt->errNo = XML_ERR_GT_REQUIRED;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"Couldn't find end of Start Tag %s line %d\n",
name, line);
ctxt->wellFormed = 0;
if (ctxt->recovery == 0) ctxt->disableSAX = 1;
xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_GT_REQUIRED,
"Couldn't find end of Start Tag %s line %d\n",
name, line, NULL);
/*
* end of parsing of this node.
......@@ -8376,12 +8364,10 @@ xmlParseElement(xmlParserCtxtPtr ctxt) {
*/
xmlParseContent(ctxt);
if (!IS_BYTE_CHAR(RAW)) {
ctxt->errNo = XML_ERR_TAG_NOT_FINISHED;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"Premature end of data in tag %s line %d\n", name, line);
ctxt->wellFormed = 0;
if (ctxt->recovery == 0) ctxt->disableSAX = 1;
xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_TAG_NOT_FINISHED,
"Premature end of data in tag %s line %d\n"
"Couldn't find end of Start Tag %s line %d\n",
name, line, NULL);
/*
* end of parsing of this node.
......@@ -8649,9 +8635,7 @@ xmlParseEncodingDecl(xmlParserCtxtPtr ctxt) {
if (handler != NULL) {
xmlSwitchToEncoding(ctxt, handler);
} else {
ctxt->errNo = XML_ERR_UNSUPPORTED_ENCODING;
if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
xmlFatalErrMsgStr(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
"Unsupported encoding %s\n", encoding);
return(NULL);
}
......
......@@ -934,7 +934,7 @@ xmlNextChar(xmlParserCtxtPtr ctxt)
(xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0))
xmlPopInput(ctxt);
return;
encoding_error:
encoding_error:
/*
* If we detect an UTF8 error that probably mean that the
* input encoding didn't get properly advertised in the
......@@ -1045,7 +1045,7 @@ xmlCurrentChar(xmlParserCtxtPtr ctxt, int *len) {
(ctxt->sax->error != NULL))
ctxt->sax->error(ctxt->userData,
"Char 0x%X out of allowed range\n", val);
ctxt->errNo = XML_ERR_INVALID_ENCODING;
ctxt->errNo = XML_ERR_INVALID_CHAR;
ctxt->wellFormed = 0;
if (ctxt->recovery == 0) ctxt->disableSAX = 1;
}
......
./test/HTML/doc2.htm:10: error: Misplaced DOCTYPE declaration
./test/HTML/doc2.htm:10: HTML parser error : Misplaced DOCTYPE declaration
<!-- END Naviscope Javascript --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Tra
^
./test/HTML/doc3.htm:10: error: Misplaced DOCTYPE declaration
./test/HTML/doc3.htm:10: HTML parser error : Misplaced DOCTYPE declaration
<!-- END Naviscope Javascript --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN
^
./test/HTML/doc3.htm:52: error: htmlParseEntityRef: expecting ';'
./test/HTML/doc3.htm:52: HTML parser error : htmlParseEntityRef: expecting ';'
href="http://ads.gamesquad.net/addclick.exe/adclick.cgi?REGION=game|tech|ent&id
^
./test/HTML/doc3.htm:52: error: htmlParseEntityRef: expecting ';'
./test/HTML/doc3.htm:52: HTML parser error : htmlParseEntityRef: expecting ';'
_top"><img src="http://ads.gamesquad.net/addclick.exe/adcycle.cgi?group=52&media
^
./test/HTML/doc3.htm:52: error: htmlParseEntityRef: expecting ';'
./test/HTML/doc3.htm:52: HTML parser error : htmlParseEntityRef: expecting ';'
><img src="http://ads.gamesquad.net/addclick.exe/adcycle.cgi?group=52&media=1&id
^
./test/HTML/doc3.htm:145: error: error parsing attribute name
./test/HTML/doc3.htm:145: HTML parser error : error parsing attribute name
width=70 Gentus?.?></A><BR><A
^
./test/HTML/doc3.htm:148: error: Unexpected end tag : p
./test/HTML/doc3.htm:148: HTML parser error : Unexpected end tag : p
</P></TD></TR></TBODY></TABLE></CENTER></TD></TR></TBODY></TABLE></CENTER></P>
^
./test/HTML/doc3.htm:236: error: Unexpected end tag : font
./test/HTML/doc3.htm:236: HTML parser error : Unexpected end tag : font
Specials<BR><BR></FONT></A><BR></FONT></A><B><FONT color=yellow
^
./test/HTML/doc3.htm:236: error: Unexpected end tag : a
./test/HTML/doc3.htm:236: HTML parser error : Unexpected end tag : a
Specials<BR><BR></FONT></A><BR></FONT></A><B><FONT color=yellow
^
./test/HTML/doc3.htm:747: error: htmlParseEntityRef: expecting ';'
./test/HTML/doc3.htm:747: HTML parser error : htmlParseEntityRef: expecting ';'
er=0 alt="Advertisement" src="http://ads.adflight.com/ad_static.asp?pid=2097&sid
^
./test/HTML/doc3.htm:747: error: htmlParseEntityRef: expecting ';'
./test/HTML/doc3.htm:747: HTML parser error : htmlParseEntityRef: expecting ';'
Advertisement" src="http://ads.adflight.com/ad_static.asp?pid=2097&sid=1881&asid
^
./test/HTML/doc3.htm:747: error: Unexpected end tag : li
./test/HTML/doc3.htm:747: HTML parser error : Unexpected end tag : li
light.com/ad_static.asp?pid=2097&sid=1881&asid=7708"></a></IFRAME></CENTER></LI>
^
./test/HTML/doc3.htm:747: error: Unexpected end tag : font
./test/HTML/doc3.htm:747: HTML parser error : Unexpected end tag : font
om/ad_static.asp?pid=2097&sid=1881&asid=7708"></a></IFRAME></CENTER></LI></FONT>
^
./test/HTML/doc3.htm:747: error: Unexpected end tag : p
./test/HTML/doc3.htm:747: HTML parser error : Unexpected end tag : p
=7708"></a></IFRAME></CENTER></LI></FONT></TD></TR></TBODY></TABLE></CENTER></P>
^
./test/HTML/doc3.htm:772: error: Unexpected end tag : form
./test/HTML/doc3.htm:772: HTML parser error : Unexpected end tag : form
archive</A></FONT> </FORM></CENTER></TD></TR></TBODY></TABLE><!--
^
./test/HTML/doc3.htm:820: error: Unexpected end tag : a
./test/HTML/doc3.htm:820: HTML parser error : Unexpected end tag : a
</A></A></B><B></NOSCRIPT></B><B><!-- END GoTo.com Search Box --></B
^
./test/HTML/doc3.htm:820: error: Unexpected end tag : noscript
./test/HTML/doc3.htm:820: HTML parser error : Unexpected end tag : noscript
</A></A></B><B></NOSCRIPT></B><B><!-- END GoTo.com Search Box --></B
^
./test/HTML/doc3.htm:826: error: Opening and ending tag mismatch: form and center
ID submit already defined
./test/HTML/doc3.htm:826: HTML parser error : Opening and ending tag mismatch: (null) and (null)
</FORM><!-- Pricewatch Search Box --><A
^
./test/HTML/doc3.htm:833: error: Unexpected end tag : p
./test/HTML/doc3.htm:833: HTML parser error : Unexpected end tag : p
Special<BR>Code:BP6-hd</FONT></A> </P></CENTER></TD></TR></TBODY></T
^
./test/HTML/doc3.htm:833: error: Opening and ending tag mismatch: center and td
./test/HTML/doc3.htm:833: HTML parser error : Opening and ending tag mismatch: center and td
Special<BR>Code:BP6-hd</FONT></A> </P></CENTER></TD></TR></TBODY></T
^
./test/HTML/doc3.htm:839: error: Unexpected end tag : p
./test/HTML/doc3.htm:839: HTML parser error : Unexpected end tag : p
width="100%">&nbsp;</TD></TR></TBODY></TABLE></P></CENTER></TR></TBODY></TABLE><
^
./test/HTML/doc3.htm:840: error: Unexpected end tag : td
./test/HTML/doc3.htm:840: HTML parser error : Unexpected end tag : td
<CENTER></CENTER></TD></TR><TR><TD COLSPAN="3" VALIGN="TOP"
^
./test/HTML/doc3.htm:840: error: Unexpected end tag : tr
./test/HTML/doc3.htm:840: HTML parser error : Unexpected end tag : tr
<CENTER></CENTER></TD></TR><TR><TD COLSPAN="3" VALIGN="TOP"
^
./test/HTML/doc3.htm:841: error: Unexpected end tag : table
./test/HTML/doc3.htm:841: HTML parser error : Unexpected end tag : table
HEIGHT="70">&nbsp;</TD> </TR></TABLE>
^
./test/HTML/entities.html:1: error: htmlParseEntityRef: expecting ';'
./test/HTML/entities.html:1: HTML parser error : htmlParseEntityRef: expecting ';'
<p tst="a&amp;b" tst2="a&b" tst3="a & b">
^
./test/HTML/entities.html:1: error: htmlParseEntityRef: no name
./test/HTML/entities.html:1: HTML parser error : htmlParseEntityRef: no name
<p tst="a&amp;b" tst2="a&b" tst3="a & b">
^
./test/HTML/entities.html:3: error: htmlParseEntityRef: expecting ';'
./test/HTML/entities.html:3: HTML parser error : htmlParseEntityRef: expecting ';'
a&b
^
./test/HTML/entities.html:4: error: htmlParseEntityRef: no name
./test/HTML/entities.html:4: HTML parser error : htmlParseEntityRef: no name
a & b
^
./test/HTML/fp40.htm:153: error: htmlParseEntityRef: no name
./test/HTML/fp40.htm:153: HTML parser error : htmlParseEntityRef: no name
technical articles from Microsoft's extensive Knowledge Base, FAQs, & troublesho
^
./test/HTML/reg4.html:10: error: Unexpected end tag : p
./test/HTML/reg4.html:10: HTML parser error : Unexpected end tag : p
</p>
^
./test/HTML/test3.html:6: error: Unexpected end tag : p
./test/HTML/test3.html:6: HTML parser error : Unexpected end tag : p
</a><p><hr></p>
^
./test/HTML/test3.html:13: error: Unexpected end tag : p
./test/HTML/test3.html:13: HTML parser error : Unexpected end tag : p
<p><hr></p>
^
./test/HTML/test3.html:27: error: Opening and ending tag mismatch: h4 and b
./test/HTML/test3.html:27: HTML parser error : Opening and ending tag mismatch: (null) and (null)
<h4><b>Links</h4></b>
^
./test/HTML/test3.html:27: error: Unexpected end tag : b
./test/HTML/test3.html:27: HTML parser error : Unexpected end tag : b
<h4><b>Links</h4></b>
^
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment