mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
Bug 809403 - Sync Gecko C++ version of the HTML parser with changes made for Rust. rs=smaug.
This commit is contained in:
parent
0bc2b12b46
commit
3c818a1876
@ -203,49 +203,71 @@ public abstract class TreeBuilder<T> implements TokenHandler,
|
||||
|
||||
// start insertion modes
|
||||
|
||||
private static final int INITIAL = 0;
|
||||
private static final int IN_ROW = 0;
|
||||
|
||||
private static final int BEFORE_HTML = 1;
|
||||
private static final int IN_TABLE_BODY = 1;
|
||||
|
||||
private static final int BEFORE_HEAD = 2;
|
||||
private static final int IN_TABLE = 2;
|
||||
|
||||
private static final int IN_HEAD = 3;
|
||||
private static final int IN_CAPTION = 3;
|
||||
|
||||
private static final int IN_HEAD_NOSCRIPT = 4;
|
||||
private static final int IN_CELL = 4;
|
||||
|
||||
private static final int AFTER_HEAD = 5;
|
||||
private static final int FRAMESET_OK = 5;
|
||||
|
||||
private static final int IN_BODY = 6;
|
||||
|
||||
private static final int IN_TABLE = 7;
|
||||
private static final int IN_HEAD = 7;
|
||||
|
||||
private static final int IN_CAPTION = 8;
|
||||
private static final int IN_HEAD_NOSCRIPT = 8;
|
||||
|
||||
// no fall-through
|
||||
|
||||
private static final int IN_COLUMN_GROUP = 9;
|
||||
|
||||
private static final int IN_TABLE_BODY = 10;
|
||||
// no fall-through
|
||||
|
||||
private static final int IN_SELECT_IN_TABLE = 10;
|
||||
|
||||
private static final int IN_ROW = 11;
|
||||
private static final int IN_SELECT = 11;
|
||||
|
||||
private static final int IN_CELL = 12;
|
||||
// no fall-through
|
||||
|
||||
private static final int AFTER_BODY = 12;
|
||||
|
||||
private static final int IN_SELECT = 13;
|
||||
// no fall-through
|
||||
|
||||
private static final int IN_FRAMESET = 13;
|
||||
|
||||
private static final int IN_SELECT_IN_TABLE = 14;
|
||||
private static final int AFTER_FRAMESET = 14;
|
||||
|
||||
private static final int AFTER_BODY = 15;
|
||||
// no fall-through
|
||||
|
||||
private static final int INITIAL = 15;
|
||||
|
||||
// could add fall-through
|
||||
|
||||
private static final int IN_FRAMESET = 16;
|
||||
private static final int BEFORE_HTML = 16;
|
||||
|
||||
private static final int AFTER_FRAMESET = 17;
|
||||
// could add fall-through
|
||||
|
||||
private static final int AFTER_AFTER_BODY = 18;
|
||||
private static final int BEFORE_HEAD = 17;
|
||||
|
||||
private static final int AFTER_AFTER_FRAMESET = 19;
|
||||
// no fall-through
|
||||
|
||||
private static final int AFTER_HEAD = 18;
|
||||
|
||||
private static final int TEXT = 20;
|
||||
// no fall-through
|
||||
|
||||
private static final int AFTER_AFTER_BODY = 19;
|
||||
|
||||
private static final int FRAMESET_OK = 21;
|
||||
// no fall-through
|
||||
|
||||
private static final int AFTER_AFTER_FRAMESET = 20;
|
||||
|
||||
// no fall-through
|
||||
|
||||
private static final int TEXT = 21;
|
||||
|
||||
// start charset states
|
||||
|
||||
@ -614,232 +636,214 @@ public abstract class TreeBuilder<T> implements TokenHandler,
|
||||
public final void doctype(@Local String name, String publicIdentifier,
|
||||
String systemIdentifier, boolean forceQuirks) throws SAXException {
|
||||
needToDropLF = false;
|
||||
if (!isInForeign()) {
|
||||
switch (mode) {
|
||||
case INITIAL:
|
||||
// [NOCPP[
|
||||
if (reportingDoctype) {
|
||||
// ]NOCPP]
|
||||
String emptyString = Portability.newEmptyString();
|
||||
appendDoctypeToDocument(name == null ? "" : name,
|
||||
publicIdentifier == null ? emptyString
|
||||
: publicIdentifier,
|
||||
systemIdentifier == null ? emptyString
|
||||
: systemIdentifier);
|
||||
Portability.releaseString(emptyString);
|
||||
// [NOCPP[
|
||||
}
|
||||
switch (doctypeExpectation) {
|
||||
case HTML:
|
||||
// ]NOCPP]
|
||||
if (isQuirky(name, publicIdentifier,
|
||||
systemIdentifier, forceQuirks)) {
|
||||
errQuirkyDoctype();
|
||||
documentModeInternal(DocumentMode.QUIRKS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
false);
|
||||
} else if (isAlmostStandards(publicIdentifier,
|
||||
systemIdentifier)) {
|
||||
// [NOCPP[
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.", firstCommentLocation);
|
||||
}
|
||||
// ]NOCPP]
|
||||
errAlmostStandardsDoctype();
|
||||
documentModeInternal(
|
||||
DocumentMode.ALMOST_STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
false);
|
||||
} else {
|
||||
// [NOCPP[
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.", firstCommentLocation);
|
||||
}
|
||||
if ((Portability.literalEqualsString(
|
||||
"-//W3C//DTD HTML 4.0//EN",
|
||||
publicIdentifier) && (systemIdentifier == null || Portability.literalEqualsString(
|
||||
"http://www.w3.org/TR/REC-html40/strict.dtd",
|
||||
systemIdentifier)))
|
||||
|| (Portability.literalEqualsString(
|
||||
"-//W3C//DTD HTML 4.01//EN",
|
||||
publicIdentifier) && (systemIdentifier == null || Portability.literalEqualsString(
|
||||
"http://www.w3.org/TR/html4/strict.dtd",
|
||||
systemIdentifier)))
|
||||
|| (Portability.literalEqualsString(
|
||||
"-//W3C//DTD XHTML 1.0 Strict//EN",
|
||||
publicIdentifier) && Portability.literalEqualsString(
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd",
|
||||
systemIdentifier))
|
||||
|| (Portability.literalEqualsString(
|
||||
"-//W3C//DTD XHTML 1.1//EN",
|
||||
publicIdentifier) && Portability.literalEqualsString(
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd",
|
||||
systemIdentifier))
|
||||
|
||||
) {
|
||||
warn("Obsolete doctype. Expected \u201C<!DOCTYPE html>\u201D.");
|
||||
} else if (!((systemIdentifier == null || Portability.literalEqualsString(
|
||||
"about:legacy-compat", systemIdentifier)) && publicIdentifier == null)) {
|
||||
err("Legacy doctype. Expected \u201C<!DOCTYPE html>\u201D.");
|
||||
}
|
||||
// ]NOCPP]
|
||||
documentModeInternal(
|
||||
DocumentMode.STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
false);
|
||||
}
|
||||
// [NOCPP[
|
||||
break;
|
||||
case HTML401_STRICT:
|
||||
html4 = true;
|
||||
tokenizer.turnOnAdditionalHtml4Errors();
|
||||
if (isQuirky(name, publicIdentifier,
|
||||
systemIdentifier, forceQuirks)) {
|
||||
err("Quirky doctype. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\u201D.");
|
||||
documentModeInternal(DocumentMode.QUIRKS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
true);
|
||||
} else if (isAlmostStandards(publicIdentifier,
|
||||
systemIdentifier)) {
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.", firstCommentLocation);
|
||||
}
|
||||
err("Almost standards mode doctype. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\u201D.");
|
||||
documentModeInternal(
|
||||
DocumentMode.ALMOST_STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
true);
|
||||
} else {
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.", firstCommentLocation);
|
||||
}
|
||||
if ("-//W3C//DTD HTML 4.01//EN".equals(publicIdentifier)) {
|
||||
if (!"http://www.w3.org/TR/html4/strict.dtd".equals(systemIdentifier)) {
|
||||
warn("The doctype did not contain the system identifier prescribed by the HTML 4.01 specification. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\u201D.");
|
||||
}
|
||||
} else {
|
||||
err("The doctype was not the HTML 4.01 Strict doctype. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\u201D.");
|
||||
}
|
||||
documentModeInternal(
|
||||
DocumentMode.STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
true);
|
||||
}
|
||||
break;
|
||||
case HTML401_TRANSITIONAL:
|
||||
html4 = true;
|
||||
tokenizer.turnOnAdditionalHtml4Errors();
|
||||
if (isQuirky(name, publicIdentifier,
|
||||
systemIdentifier, forceQuirks)) {
|
||||
err("Quirky doctype. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\u201D.");
|
||||
documentModeInternal(DocumentMode.QUIRKS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
true);
|
||||
} else if (isAlmostStandards(publicIdentifier,
|
||||
systemIdentifier)) {
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.", firstCommentLocation);
|
||||
}
|
||||
if ("-//W3C//DTD HTML 4.01 Transitional//EN".equals(publicIdentifier)
|
||||
&& systemIdentifier != null) {
|
||||
if (!"http://www.w3.org/TR/html4/loose.dtd".equals(systemIdentifier)) {
|
||||
warn("The doctype did not contain the system identifier prescribed by the HTML 4.01 specification. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\u201D.");
|
||||
}
|
||||
} else {
|
||||
err("The doctype was not a non-quirky HTML 4.01 Transitional doctype. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\u201D.");
|
||||
}
|
||||
documentModeInternal(
|
||||
DocumentMode.ALMOST_STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
true);
|
||||
} else {
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.", firstCommentLocation);
|
||||
}
|
||||
err("The doctype was not the HTML 4.01 Transitional doctype. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\u201D.");
|
||||
documentModeInternal(
|
||||
DocumentMode.STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
true);
|
||||
}
|
||||
break;
|
||||
case AUTO:
|
||||
html4 = isHtml4Doctype(publicIdentifier);
|
||||
if (html4) {
|
||||
tokenizer.turnOnAdditionalHtml4Errors();
|
||||
}
|
||||
if (isQuirky(name, publicIdentifier,
|
||||
systemIdentifier, forceQuirks)) {
|
||||
err("Quirky doctype. Expected e.g. \u201C<!DOCTYPE html>\u201D.");
|
||||
documentModeInternal(DocumentMode.QUIRKS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
html4);
|
||||
} else if (isAlmostStandards(publicIdentifier,
|
||||
systemIdentifier)) {
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.", firstCommentLocation);
|
||||
}
|
||||
if ("-//W3C//DTD HTML 4.01 Transitional//EN".equals(publicIdentifier)) {
|
||||
if (!"http://www.w3.org/TR/html4/loose.dtd".equals(systemIdentifier)) {
|
||||
warn("The doctype did not contain the system identifier prescribed by the HTML 4.01 specification. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\u201D.");
|
||||
}
|
||||
} else {
|
||||
err("Almost standards mode doctype. Expected e.g. \u201C<!DOCTYPE html>\u201D.");
|
||||
}
|
||||
documentModeInternal(
|
||||
DocumentMode.ALMOST_STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
html4);
|
||||
} else {
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.", firstCommentLocation);
|
||||
}
|
||||
if ("-//W3C//DTD HTML 4.01//EN".equals(publicIdentifier)) {
|
||||
if (!"http://www.w3.org/TR/html4/strict.dtd".equals(systemIdentifier)) {
|
||||
warn("The doctype did not contain the system identifier prescribed by the HTML 4.01 specification. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\u201D.");
|
||||
}
|
||||
} else if (!((systemIdentifier == null || Portability.literalEqualsString(
|
||||
"about:legacy-compat", systemIdentifier)) && publicIdentifier == null)) {
|
||||
err("Legacy doctype. Expected e.g. \u201C<!DOCTYPE html>\u201D.");
|
||||
}
|
||||
documentModeInternal(
|
||||
DocumentMode.STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
html4);
|
||||
}
|
||||
break;
|
||||
case NO_DOCTYPE_ERRORS:
|
||||
if (isQuirky(name, publicIdentifier,
|
||||
systemIdentifier, forceQuirks)) {
|
||||
documentModeInternal(DocumentMode.QUIRKS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
false);
|
||||
} else if (isAlmostStandards(publicIdentifier,
|
||||
systemIdentifier)) {
|
||||
documentModeInternal(
|
||||
DocumentMode.ALMOST_STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
false);
|
||||
} else {
|
||||
documentModeInternal(
|
||||
DocumentMode.STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier,
|
||||
false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (!isInForeign() && mode == INITIAL) {
|
||||
// [NOCPP[
|
||||
if (reportingDoctype) {
|
||||
// ]NOCPP]
|
||||
String emptyString = Portability.newEmptyString();
|
||||
appendDoctypeToDocument(name == null ? "" : name,
|
||||
publicIdentifier == null ? emptyString
|
||||
: publicIdentifier,
|
||||
systemIdentifier == null ? emptyString
|
||||
: systemIdentifier);
|
||||
Portability.releaseString(emptyString);
|
||||
// [NOCPP[
|
||||
}
|
||||
switch (doctypeExpectation) {
|
||||
case HTML:
|
||||
// ]NOCPP]
|
||||
if (isQuirky(name, publicIdentifier, systemIdentifier,
|
||||
forceQuirks)) {
|
||||
errQuirkyDoctype();
|
||||
documentModeInternal(DocumentMode.QUIRKS_MODE,
|
||||
publicIdentifier, systemIdentifier, false);
|
||||
} else if (isAlmostStandards(publicIdentifier,
|
||||
systemIdentifier)) {
|
||||
// [NOCPP[
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.",
|
||||
firstCommentLocation);
|
||||
}
|
||||
// ]NOCPP]
|
||||
errAlmostStandardsDoctype();
|
||||
documentModeInternal(
|
||||
DocumentMode.ALMOST_STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier, false);
|
||||
} else {
|
||||
// [NOCPP[
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.",
|
||||
firstCommentLocation);
|
||||
}
|
||||
if ((Portability.literalEqualsString(
|
||||
"-//W3C//DTD HTML 4.0//EN", publicIdentifier) && (systemIdentifier == null || Portability.literalEqualsString(
|
||||
"http://www.w3.org/TR/REC-html40/strict.dtd",
|
||||
systemIdentifier)))
|
||||
|| (Portability.literalEqualsString(
|
||||
"-//W3C//DTD HTML 4.01//EN",
|
||||
publicIdentifier) && (systemIdentifier == null || Portability.literalEqualsString(
|
||||
"http://www.w3.org/TR/html4/strict.dtd",
|
||||
systemIdentifier)))
|
||||
|| (Portability.literalEqualsString(
|
||||
"-//W3C//DTD XHTML 1.0 Strict//EN",
|
||||
publicIdentifier) && Portability.literalEqualsString(
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd",
|
||||
systemIdentifier))
|
||||
|| (Portability.literalEqualsString(
|
||||
"-//W3C//DTD XHTML 1.1//EN",
|
||||
publicIdentifier) && Portability.literalEqualsString(
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd",
|
||||
systemIdentifier))
|
||||
|
||||
/*
|
||||
*
|
||||
* Then, switch to the root element mode of the tree
|
||||
* construction stage.
|
||||
*/
|
||||
mode = BEFORE_HTML;
|
||||
return;
|
||||
default:
|
||||
) {
|
||||
warn("Obsolete doctype. Expected \u201C<!DOCTYPE html>\u201D.");
|
||||
} else if (!((systemIdentifier == null || Portability.literalEqualsString(
|
||||
"about:legacy-compat", systemIdentifier)) && publicIdentifier == null)) {
|
||||
err("Legacy doctype. Expected \u201C<!DOCTYPE html>\u201D.");
|
||||
}
|
||||
// ]NOCPP]
|
||||
documentModeInternal(DocumentMode.STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier, false);
|
||||
}
|
||||
// [NOCPP[
|
||||
break;
|
||||
case HTML401_STRICT:
|
||||
html4 = true;
|
||||
tokenizer.turnOnAdditionalHtml4Errors();
|
||||
if (isQuirky(name, publicIdentifier, systemIdentifier,
|
||||
forceQuirks)) {
|
||||
err("Quirky doctype. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\u201D.");
|
||||
documentModeInternal(DocumentMode.QUIRKS_MODE,
|
||||
publicIdentifier, systemIdentifier, true);
|
||||
} else if (isAlmostStandards(publicIdentifier,
|
||||
systemIdentifier)) {
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.",
|
||||
firstCommentLocation);
|
||||
}
|
||||
err("Almost standards mode doctype. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\u201D.");
|
||||
documentModeInternal(
|
||||
DocumentMode.ALMOST_STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier, true);
|
||||
} else {
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.",
|
||||
firstCommentLocation);
|
||||
}
|
||||
if ("-//W3C//DTD HTML 4.01//EN".equals(publicIdentifier)) {
|
||||
if (!"http://www.w3.org/TR/html4/strict.dtd".equals(systemIdentifier)) {
|
||||
warn("The doctype did not contain the system identifier prescribed by the HTML 4.01 specification. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\u201D.");
|
||||
}
|
||||
} else {
|
||||
err("The doctype was not the HTML 4.01 Strict doctype. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\u201D.");
|
||||
}
|
||||
documentModeInternal(DocumentMode.STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier, true);
|
||||
}
|
||||
break;
|
||||
case HTML401_TRANSITIONAL:
|
||||
html4 = true;
|
||||
tokenizer.turnOnAdditionalHtml4Errors();
|
||||
if (isQuirky(name, publicIdentifier, systemIdentifier,
|
||||
forceQuirks)) {
|
||||
err("Quirky doctype. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\u201D.");
|
||||
documentModeInternal(DocumentMode.QUIRKS_MODE,
|
||||
publicIdentifier, systemIdentifier, true);
|
||||
} else if (isAlmostStandards(publicIdentifier,
|
||||
systemIdentifier)) {
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.",
|
||||
firstCommentLocation);
|
||||
}
|
||||
if ("-//W3C//DTD HTML 4.01 Transitional//EN".equals(publicIdentifier)
|
||||
&& systemIdentifier != null) {
|
||||
if (!"http://www.w3.org/TR/html4/loose.dtd".equals(systemIdentifier)) {
|
||||
warn("The doctype did not contain the system identifier prescribed by the HTML 4.01 specification. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\u201D.");
|
||||
}
|
||||
} else {
|
||||
err("The doctype was not a non-quirky HTML 4.01 Transitional doctype. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\u201D.");
|
||||
}
|
||||
documentModeInternal(
|
||||
DocumentMode.ALMOST_STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier, true);
|
||||
} else {
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.",
|
||||
firstCommentLocation);
|
||||
}
|
||||
err("The doctype was not the HTML 4.01 Transitional doctype. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\u201D.");
|
||||
documentModeInternal(DocumentMode.STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier, true);
|
||||
}
|
||||
break;
|
||||
case AUTO:
|
||||
html4 = isHtml4Doctype(publicIdentifier);
|
||||
if (html4) {
|
||||
tokenizer.turnOnAdditionalHtml4Errors();
|
||||
}
|
||||
if (isQuirky(name, publicIdentifier, systemIdentifier,
|
||||
forceQuirks)) {
|
||||
err("Quirky doctype. Expected e.g. \u201C<!DOCTYPE html>\u201D.");
|
||||
documentModeInternal(DocumentMode.QUIRKS_MODE,
|
||||
publicIdentifier, systemIdentifier, html4);
|
||||
} else if (isAlmostStandards(publicIdentifier,
|
||||
systemIdentifier)) {
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.",
|
||||
firstCommentLocation);
|
||||
}
|
||||
if ("-//W3C//DTD HTML 4.01 Transitional//EN".equals(publicIdentifier)) {
|
||||
if (!"http://www.w3.org/TR/html4/loose.dtd".equals(systemIdentifier)) {
|
||||
warn("The doctype did not contain the system identifier prescribed by the HTML 4.01 specification. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\u201D.");
|
||||
}
|
||||
} else {
|
||||
err("Almost standards mode doctype. Expected e.g. \u201C<!DOCTYPE html>\u201D.");
|
||||
}
|
||||
documentModeInternal(
|
||||
DocumentMode.ALMOST_STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier, html4);
|
||||
} else {
|
||||
if (firstCommentLocation != null) {
|
||||
warn("Comments seen before doctype. Internet Explorer will go into the quirks mode.",
|
||||
firstCommentLocation);
|
||||
}
|
||||
if ("-//W3C//DTD HTML 4.01//EN".equals(publicIdentifier)) {
|
||||
if (!"http://www.w3.org/TR/html4/strict.dtd".equals(systemIdentifier)) {
|
||||
warn("The doctype did not contain the system identifier prescribed by the HTML 4.01 specification. Expected \u201C<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\u201D.");
|
||||
}
|
||||
} else if (!((systemIdentifier == null || Portability.literalEqualsString(
|
||||
"about:legacy-compat", systemIdentifier)) && publicIdentifier == null)) {
|
||||
err("Legacy doctype. Expected e.g. \u201C<!DOCTYPE html>\u201D.");
|
||||
}
|
||||
documentModeInternal(DocumentMode.STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier, html4);
|
||||
}
|
||||
break;
|
||||
case NO_DOCTYPE_ERRORS:
|
||||
if (isQuirky(name, publicIdentifier, systemIdentifier,
|
||||
forceQuirks)) {
|
||||
documentModeInternal(DocumentMode.QUIRKS_MODE,
|
||||
publicIdentifier, systemIdentifier, false);
|
||||
} else if (isAlmostStandards(publicIdentifier,
|
||||
systemIdentifier)) {
|
||||
documentModeInternal(
|
||||
DocumentMode.ALMOST_STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier, false);
|
||||
} else {
|
||||
documentModeInternal(DocumentMode.STANDARDS_MODE,
|
||||
publicIdentifier, systemIdentifier, false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
// ]NOCPP]
|
||||
|
||||
/*
|
||||
*
|
||||
* Then, switch to the root element mode of the tree construction
|
||||
* stage.
|
||||
*/
|
||||
mode = BEFORE_HTML;
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* A DOCTYPE token Parse error.
|
||||
@ -1611,6 +1615,35 @@ public abstract class TreeBuilder<T> implements TokenHandler,
|
||||
} // foreignObject / annotation-xml
|
||||
}
|
||||
switch (mode) {
|
||||
case IN_ROW:
|
||||
switch (group) {
|
||||
case TD_OR_TH:
|
||||
clearStackBackTo(findLastOrRoot(TreeBuilder.TR));
|
||||
appendToCurrentNodeAndPushElement(
|
||||
elementName,
|
||||
attributes);
|
||||
mode = IN_CELL;
|
||||
insertMarker();
|
||||
attributes = null; // CPP
|
||||
break starttagloop;
|
||||
case CAPTION:
|
||||
case COL:
|
||||
case COLGROUP:
|
||||
case TBODY_OR_THEAD_OR_TFOOT:
|
||||
case TR:
|
||||
eltPos = findLastOrRoot(TreeBuilder.TR);
|
||||
if (eltPos == 0) {
|
||||
assert fragment;
|
||||
errNoTableRowToClose();
|
||||
break starttagloop;
|
||||
}
|
||||
clearStackBackTo(eltPos);
|
||||
pop();
|
||||
mode = IN_TABLE_BODY;
|
||||
continue;
|
||||
default:
|
||||
// fall through to IN_TABLE
|
||||
}
|
||||
case IN_TABLE_BODY:
|
||||
switch (group) {
|
||||
case TR:
|
||||
@ -1646,35 +1679,6 @@ public abstract class TreeBuilder<T> implements TokenHandler,
|
||||
default:
|
||||
// fall through to IN_TABLE
|
||||
}
|
||||
case IN_ROW:
|
||||
switch (group) {
|
||||
case TD_OR_TH:
|
||||
clearStackBackTo(findLastOrRoot(TreeBuilder.TR));
|
||||
appendToCurrentNodeAndPushElement(
|
||||
elementName,
|
||||
attributes);
|
||||
mode = IN_CELL;
|
||||
insertMarker();
|
||||
attributes = null; // CPP
|
||||
break starttagloop;
|
||||
case CAPTION:
|
||||
case COL:
|
||||
case COLGROUP:
|
||||
case TBODY_OR_THEAD_OR_TFOOT:
|
||||
case TR:
|
||||
eltPos = findLastOrRoot(TreeBuilder.TR);
|
||||
if (eltPos == 0) {
|
||||
assert fragment;
|
||||
errNoTableRowToClose();
|
||||
break starttagloop;
|
||||
}
|
||||
clearStackBackTo(eltPos);
|
||||
pop();
|
||||
mode = IN_TABLE_BODY;
|
||||
continue;
|
||||
default:
|
||||
// fall through to IN_TABLE
|
||||
}
|
||||
case IN_TABLE:
|
||||
intableloop: for (;;) {
|
||||
switch (group) {
|
||||
@ -3606,6 +3610,37 @@ public abstract class TreeBuilder<T> implements TokenHandler,
|
||||
eltPos--;
|
||||
}
|
||||
}
|
||||
case IN_HEAD:
|
||||
switch (group) {
|
||||
case HEAD:
|
||||
pop();
|
||||
mode = AFTER_HEAD;
|
||||
break endtagloop;
|
||||
case BR:
|
||||
case HTML:
|
||||
case BODY:
|
||||
pop();
|
||||
mode = AFTER_HEAD;
|
||||
continue;
|
||||
default:
|
||||
errStrayEndTag(name);
|
||||
break endtagloop;
|
||||
}
|
||||
case IN_HEAD_NOSCRIPT:
|
||||
switch (group) {
|
||||
case NOSCRIPT:
|
||||
pop();
|
||||
mode = IN_HEAD;
|
||||
break endtagloop;
|
||||
case BR:
|
||||
errStrayEndTag(name);
|
||||
pop();
|
||||
mode = IN_HEAD;
|
||||
continue;
|
||||
default:
|
||||
errStrayEndTag(name);
|
||||
break endtagloop;
|
||||
}
|
||||
case IN_COLUMN_GROUP:
|
||||
switch (group) {
|
||||
case COLGROUP:
|
||||
@ -3806,37 +3841,6 @@ public abstract class TreeBuilder<T> implements TokenHandler,
|
||||
errStrayEndTag(name);
|
||||
break endtagloop;
|
||||
}
|
||||
case IN_HEAD:
|
||||
switch (group) {
|
||||
case HEAD:
|
||||
pop();
|
||||
mode = AFTER_HEAD;
|
||||
break endtagloop;
|
||||
case BR:
|
||||
case HTML:
|
||||
case BODY:
|
||||
pop();
|
||||
mode = AFTER_HEAD;
|
||||
continue;
|
||||
default:
|
||||
errStrayEndTag(name);
|
||||
break endtagloop;
|
||||
}
|
||||
case IN_HEAD_NOSCRIPT:
|
||||
switch (group) {
|
||||
case NOSCRIPT:
|
||||
pop();
|
||||
mode = IN_HEAD;
|
||||
break endtagloop;
|
||||
case BR:
|
||||
errStrayEndTag(name);
|
||||
pop();
|
||||
mode = IN_HEAD;
|
||||
continue;
|
||||
default:
|
||||
errStrayEndTag(name);
|
||||
break endtagloop;
|
||||
}
|
||||
case AFTER_HEAD:
|
||||
switch (group) {
|
||||
case HTML:
|
||||
|
@ -51,6 +51,7 @@
|
||||
#include "nsAHtml5TreeBuilderState.h"
|
||||
#include "nsHtml5Highlighter.h"
|
||||
#include "nsHtml5ViewSourceUtils.h"
|
||||
#include "mozilla/Likely.h"
|
||||
|
||||
#include "nsHtml5Tokenizer.h"
|
||||
#include "nsHtml5MetaScanner.h"
|
||||
@ -64,8 +65,6 @@
|
||||
|
||||
#include "nsHtml5TreeBuilder.h"
|
||||
|
||||
#include "mozilla/Likely.h"
|
||||
|
||||
PRUnichar nsHtml5TreeBuilder::REPLACEMENT_CHARACTER[] = { 0xfffd };
|
||||
static const char* const QUIRKY_PUBLIC_IDS_DATA[] = { "+//silmaril//dtd html pro v0r11 19970101//", "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", "-//as//dtd html 3.0 aswedit + extensions//", "-//ietf//dtd html 2.0 level 1//", "-//ietf//dtd html 2.0 level 2//", "-//ietf//dtd html 2.0 strict level 1//", "-//ietf//dtd html 2.0 strict level 2//", "-//ietf//dtd html 2.0 strict//", "-//ietf//dtd html 2.0//", "-//ietf//dtd html 2.1e//", "-//ietf//dtd html 3.0//", "-//ietf//dtd html 3.2 final//", "-//ietf//dtd html 3.2//", "-//ietf//dtd html 3//", "-//ietf//dtd html level 0//", "-//ietf//dtd html level 1//", "-//ietf//dtd html level 2//", "-//ietf//dtd html level 3//", "-//ietf//dtd html strict level 0//", "-//ietf//dtd html strict level 1//", "-//ietf//dtd html strict level 2//", "-//ietf//dtd html strict level 3//", "-//ietf//dtd html strict//", "-//ietf//dtd html//", "-//metrius//dtd metrius presentational//", "-//microsoft//dtd internet explorer 2.0 html strict//", "-//microsoft//dtd internet explorer 2.0 html//", "-//microsoft//dtd internet explorer 2.0 tables//", "-//microsoft//dtd internet explorer 3.0 html strict//", "-//microsoft//dtd internet explorer 3.0 html//", "-//microsoft//dtd internet explorer 3.0 tables//", "-//netscape comm. corp.//dtd html//", "-//netscape comm. corp.//dtd strict html//", "-//o'reilly and associates//dtd html 2.0//", "-//o'reilly and associates//dtd html extended 1.0//", "-//o'reilly and associates//dtd html extended relaxed 1.0//", "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//", "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//", "-//spyglass//dtd html 2.0 extended//", "-//sq//dtd html 2.0 hotmetal + extensions//", "-//sun microsystems corp.//dtd hotjava html//", "-//sun microsystems corp.//dtd hotjava strict html//", "-//w3c//dtd html 3 1995-03-24//", "-//w3c//dtd html 3.2 draft//", "-//w3c//dtd html 3.2 final//", "-//w3c//dtd html 3.2//", "-//w3c//dtd html 3.2s draft//", "-//w3c//dtd html 4.0 frameset//", "-//w3c//dtd html 4.0 transitional//", "-//w3c//dtd html experimental 19960712//", "-//w3c//dtd html experimental 970421//", "-//w3c//dtd w3 html//", "-//w3o//dtd w3 html 3.0//", "-//webtechs//dtd mozilla html 2.0//", "-//webtechs//dtd mozilla html//" };
|
||||
staticJArray<const char*,int32_t> nsHtml5TreeBuilder::QUIRKY_PUBLIC_IDS = { QUIRKY_PUBLIC_IDS_DATA, NS_ARRAY_LENGTH(QUIRKY_PUBLIC_IDS_DATA) };
|
||||
@ -125,28 +124,21 @@ void
|
||||
nsHtml5TreeBuilder::doctype(nsIAtom* name, nsString* publicIdentifier, nsString* systemIdentifier, bool forceQuirks)
|
||||
{
|
||||
needToDropLF = false;
|
||||
if (!isInForeign()) {
|
||||
switch(mode) {
|
||||
case NS_HTML5TREE_BUILDER_INITIAL: {
|
||||
nsString* emptyString = nsHtml5Portability::newEmptyString();
|
||||
appendDoctypeToDocument(!name ? nsHtml5Atoms::emptystring : name, !publicIdentifier ? emptyString : publicIdentifier, !systemIdentifier ? emptyString : systemIdentifier);
|
||||
nsHtml5Portability::releaseString(emptyString);
|
||||
if (isQuirky(name, publicIdentifier, systemIdentifier, forceQuirks)) {
|
||||
errQuirkyDoctype();
|
||||
documentModeInternal(QUIRKS_MODE, publicIdentifier, systemIdentifier, false);
|
||||
} else if (isAlmostStandards(publicIdentifier, systemIdentifier)) {
|
||||
errAlmostStandardsDoctype();
|
||||
documentModeInternal(ALMOST_STANDARDS_MODE, publicIdentifier, systemIdentifier, false);
|
||||
} else {
|
||||
documentModeInternal(STANDARDS_MODE, publicIdentifier, systemIdentifier, false);
|
||||
}
|
||||
mode = NS_HTML5TREE_BUILDER_BEFORE_HTML;
|
||||
return;
|
||||
}
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
if (!isInForeign() && mode == NS_HTML5TREE_BUILDER_INITIAL) {
|
||||
nsString* emptyString = nsHtml5Portability::newEmptyString();
|
||||
appendDoctypeToDocument(!name ? nsHtml5Atoms::emptystring : name, !publicIdentifier ? emptyString : publicIdentifier, !systemIdentifier ? emptyString : systemIdentifier);
|
||||
nsHtml5Portability::releaseString(emptyString);
|
||||
if (isQuirky(name, publicIdentifier, systemIdentifier, forceQuirks)) {
|
||||
errQuirkyDoctype();
|
||||
documentModeInternal(QUIRKS_MODE, publicIdentifier, systemIdentifier, false);
|
||||
} else if (isAlmostStandards(publicIdentifier, systemIdentifier)) {
|
||||
errAlmostStandardsDoctype();
|
||||
documentModeInternal(ALMOST_STANDARDS_MODE, publicIdentifier, systemIdentifier, false);
|
||||
} else {
|
||||
documentModeInternal(STANDARDS_MODE, publicIdentifier, systemIdentifier, false);
|
||||
}
|
||||
mode = NS_HTML5TREE_BUILDER_BEFORE_HTML;
|
||||
return;
|
||||
}
|
||||
errStrayDoctype();
|
||||
return;
|
||||
@ -637,6 +629,36 @@ nsHtml5TreeBuilder::startTag(nsHtml5ElementName* elementName, nsHtml5HtmlAttribu
|
||||
}
|
||||
}
|
||||
switch(mode) {
|
||||
case NS_HTML5TREE_BUILDER_IN_ROW: {
|
||||
switch(group) {
|
||||
case NS_HTML5TREE_BUILDER_TD_OR_TH: {
|
||||
clearStackBackTo(findLastOrRoot(NS_HTML5TREE_BUILDER_TR));
|
||||
appendToCurrentNodeAndPushElement(elementName, attributes);
|
||||
mode = NS_HTML5TREE_BUILDER_IN_CELL;
|
||||
insertMarker();
|
||||
attributes = nullptr;
|
||||
NS_HTML5_BREAK(starttagloop);
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_CAPTION:
|
||||
case NS_HTML5TREE_BUILDER_COL:
|
||||
case NS_HTML5TREE_BUILDER_COLGROUP:
|
||||
case NS_HTML5TREE_BUILDER_TBODY_OR_THEAD_OR_TFOOT:
|
||||
case NS_HTML5TREE_BUILDER_TR: {
|
||||
eltPos = findLastOrRoot(NS_HTML5TREE_BUILDER_TR);
|
||||
if (!eltPos) {
|
||||
MOZ_ASSERT(fragment);
|
||||
errNoTableRowToClose();
|
||||
NS_HTML5_BREAK(starttagloop);
|
||||
}
|
||||
clearStackBackTo(eltPos);
|
||||
pop();
|
||||
mode = NS_HTML5TREE_BUILDER_IN_TABLE_BODY;
|
||||
continue;
|
||||
}
|
||||
default:
|
||||
; // fall through
|
||||
}
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_IN_TABLE_BODY: {
|
||||
switch(group) {
|
||||
case NS_HTML5TREE_BUILDER_TR: {
|
||||
@ -672,36 +694,6 @@ nsHtml5TreeBuilder::startTag(nsHtml5ElementName* elementName, nsHtml5HtmlAttribu
|
||||
; // fall through
|
||||
}
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_IN_ROW: {
|
||||
switch(group) {
|
||||
case NS_HTML5TREE_BUILDER_TD_OR_TH: {
|
||||
clearStackBackTo(findLastOrRoot(NS_HTML5TREE_BUILDER_TR));
|
||||
appendToCurrentNodeAndPushElement(elementName, attributes);
|
||||
mode = NS_HTML5TREE_BUILDER_IN_CELL;
|
||||
insertMarker();
|
||||
attributes = nullptr;
|
||||
NS_HTML5_BREAK(starttagloop);
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_CAPTION:
|
||||
case NS_HTML5TREE_BUILDER_COL:
|
||||
case NS_HTML5TREE_BUILDER_COLGROUP:
|
||||
case NS_HTML5TREE_BUILDER_TBODY_OR_THEAD_OR_TFOOT:
|
||||
case NS_HTML5TREE_BUILDER_TR: {
|
||||
eltPos = findLastOrRoot(NS_HTML5TREE_BUILDER_TR);
|
||||
if (!eltPos) {
|
||||
MOZ_ASSERT(fragment);
|
||||
errNoTableRowToClose();
|
||||
NS_HTML5_BREAK(starttagloop);
|
||||
}
|
||||
clearStackBackTo(eltPos);
|
||||
pop();
|
||||
mode = NS_HTML5TREE_BUILDER_IN_TABLE_BODY;
|
||||
continue;
|
||||
}
|
||||
default:
|
||||
; // fall through
|
||||
}
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_IN_TABLE: {
|
||||
for (; ; ) {
|
||||
switch(group) {
|
||||
@ -2534,6 +2526,45 @@ nsHtml5TreeBuilder::endTag(nsHtml5ElementName* elementName)
|
||||
}
|
||||
}
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_IN_HEAD: {
|
||||
switch(group) {
|
||||
case NS_HTML5TREE_BUILDER_HEAD: {
|
||||
pop();
|
||||
mode = NS_HTML5TREE_BUILDER_AFTER_HEAD;
|
||||
NS_HTML5_BREAK(endtagloop);
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_BR:
|
||||
case NS_HTML5TREE_BUILDER_HTML:
|
||||
case NS_HTML5TREE_BUILDER_BODY: {
|
||||
pop();
|
||||
mode = NS_HTML5TREE_BUILDER_AFTER_HEAD;
|
||||
continue;
|
||||
}
|
||||
default: {
|
||||
errStrayEndTag(name);
|
||||
NS_HTML5_BREAK(endtagloop);
|
||||
}
|
||||
}
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_IN_HEAD_NOSCRIPT: {
|
||||
switch(group) {
|
||||
case NS_HTML5TREE_BUILDER_NOSCRIPT: {
|
||||
pop();
|
||||
mode = NS_HTML5TREE_BUILDER_IN_HEAD;
|
||||
NS_HTML5_BREAK(endtagloop);
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_BR: {
|
||||
errStrayEndTag(name);
|
||||
pop();
|
||||
mode = NS_HTML5TREE_BUILDER_IN_HEAD;
|
||||
continue;
|
||||
}
|
||||
default: {
|
||||
errStrayEndTag(name);
|
||||
NS_HTML5_BREAK(endtagloop);
|
||||
}
|
||||
}
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_IN_COLUMN_GROUP: {
|
||||
switch(group) {
|
||||
case NS_HTML5TREE_BUILDER_COLGROUP: {
|
||||
@ -2718,45 +2749,6 @@ nsHtml5TreeBuilder::endTag(nsHtml5ElementName* elementName)
|
||||
}
|
||||
}
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_IN_HEAD: {
|
||||
switch(group) {
|
||||
case NS_HTML5TREE_BUILDER_HEAD: {
|
||||
pop();
|
||||
mode = NS_HTML5TREE_BUILDER_AFTER_HEAD;
|
||||
NS_HTML5_BREAK(endtagloop);
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_BR:
|
||||
case NS_HTML5TREE_BUILDER_HTML:
|
||||
case NS_HTML5TREE_BUILDER_BODY: {
|
||||
pop();
|
||||
mode = NS_HTML5TREE_BUILDER_AFTER_HEAD;
|
||||
continue;
|
||||
}
|
||||
default: {
|
||||
errStrayEndTag(name);
|
||||
NS_HTML5_BREAK(endtagloop);
|
||||
}
|
||||
}
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_IN_HEAD_NOSCRIPT: {
|
||||
switch(group) {
|
||||
case NS_HTML5TREE_BUILDER_NOSCRIPT: {
|
||||
pop();
|
||||
mode = NS_HTML5TREE_BUILDER_IN_HEAD;
|
||||
NS_HTML5_BREAK(endtagloop);
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_BR: {
|
||||
errStrayEndTag(name);
|
||||
pop();
|
||||
mode = NS_HTML5TREE_BUILDER_IN_HEAD;
|
||||
continue;
|
||||
}
|
||||
default: {
|
||||
errStrayEndTag(name);
|
||||
NS_HTML5_BREAK(endtagloop);
|
||||
}
|
||||
}
|
||||
}
|
||||
case NS_HTML5TREE_BUILDER_AFTER_HEAD: {
|
||||
switch(group) {
|
||||
case NS_HTML5TREE_BUILDER_HTML:
|
||||
|
@ -52,6 +52,7 @@
|
||||
#include "nsAHtml5TreeBuilderState.h"
|
||||
#include "nsHtml5Highlighter.h"
|
||||
#include "nsHtml5ViewSourceUtils.h"
|
||||
#include "mozilla/Likely.h"
|
||||
|
||||
class nsHtml5StreamParser;
|
||||
|
||||
@ -318,28 +319,28 @@ class nsHtml5TreeBuilder : public nsAHtml5TreeBuilderState
|
||||
#define NS_HTML5TREE_BUILDER_FONT 64
|
||||
#define NS_HTML5TREE_BUILDER_KEYGEN 65
|
||||
#define NS_HTML5TREE_BUILDER_MENUITEM 66
|
||||
#define NS_HTML5TREE_BUILDER_INITIAL 0
|
||||
#define NS_HTML5TREE_BUILDER_BEFORE_HTML 1
|
||||
#define NS_HTML5TREE_BUILDER_BEFORE_HEAD 2
|
||||
#define NS_HTML5TREE_BUILDER_IN_HEAD 3
|
||||
#define NS_HTML5TREE_BUILDER_IN_HEAD_NOSCRIPT 4
|
||||
#define NS_HTML5TREE_BUILDER_AFTER_HEAD 5
|
||||
#define NS_HTML5TREE_BUILDER_IN_ROW 0
|
||||
#define NS_HTML5TREE_BUILDER_IN_TABLE_BODY 1
|
||||
#define NS_HTML5TREE_BUILDER_IN_TABLE 2
|
||||
#define NS_HTML5TREE_BUILDER_IN_CAPTION 3
|
||||
#define NS_HTML5TREE_BUILDER_IN_CELL 4
|
||||
#define NS_HTML5TREE_BUILDER_FRAMESET_OK 5
|
||||
#define NS_HTML5TREE_BUILDER_IN_BODY 6
|
||||
#define NS_HTML5TREE_BUILDER_IN_TABLE 7
|
||||
#define NS_HTML5TREE_BUILDER_IN_CAPTION 8
|
||||
#define NS_HTML5TREE_BUILDER_IN_HEAD 7
|
||||
#define NS_HTML5TREE_BUILDER_IN_HEAD_NOSCRIPT 8
|
||||
#define NS_HTML5TREE_BUILDER_IN_COLUMN_GROUP 9
|
||||
#define NS_HTML5TREE_BUILDER_IN_TABLE_BODY 10
|
||||
#define NS_HTML5TREE_BUILDER_IN_ROW 11
|
||||
#define NS_HTML5TREE_BUILDER_IN_CELL 12
|
||||
#define NS_HTML5TREE_BUILDER_IN_SELECT 13
|
||||
#define NS_HTML5TREE_BUILDER_IN_SELECT_IN_TABLE 14
|
||||
#define NS_HTML5TREE_BUILDER_AFTER_BODY 15
|
||||
#define NS_HTML5TREE_BUILDER_IN_FRAMESET 16
|
||||
#define NS_HTML5TREE_BUILDER_AFTER_FRAMESET 17
|
||||
#define NS_HTML5TREE_BUILDER_AFTER_AFTER_BODY 18
|
||||
#define NS_HTML5TREE_BUILDER_AFTER_AFTER_FRAMESET 19
|
||||
#define NS_HTML5TREE_BUILDER_TEXT 20
|
||||
#define NS_HTML5TREE_BUILDER_FRAMESET_OK 21
|
||||
#define NS_HTML5TREE_BUILDER_IN_SELECT_IN_TABLE 10
|
||||
#define NS_HTML5TREE_BUILDER_IN_SELECT 11
|
||||
#define NS_HTML5TREE_BUILDER_AFTER_BODY 12
|
||||
#define NS_HTML5TREE_BUILDER_IN_FRAMESET 13
|
||||
#define NS_HTML5TREE_BUILDER_AFTER_FRAMESET 14
|
||||
#define NS_HTML5TREE_BUILDER_INITIAL 15
|
||||
#define NS_HTML5TREE_BUILDER_BEFORE_HTML 16
|
||||
#define NS_HTML5TREE_BUILDER_BEFORE_HEAD 17
|
||||
#define NS_HTML5TREE_BUILDER_AFTER_HEAD 18
|
||||
#define NS_HTML5TREE_BUILDER_AFTER_AFTER_BODY 19
|
||||
#define NS_HTML5TREE_BUILDER_AFTER_AFTER_FRAMESET 20
|
||||
#define NS_HTML5TREE_BUILDER_TEXT 21
|
||||
#define NS_HTML5TREE_BUILDER_CHARSET_INITIAL 0
|
||||
#define NS_HTML5TREE_BUILDER_CHARSET_C 1
|
||||
#define NS_HTML5TREE_BUILDER_CHARSET_H 2
|
||||
|
Loading…
Reference in New Issue
Block a user