Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion external-resources/commit.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
https://github.com/html5lib/html5lib-tests.git 224991ec10db04f056a89eed8b0bd8695fd2950e
https://github.com/web-platform-tests/wpt.git c29bd2aeeb937753c3b946a3670b24e5dfb62f88
https://github.com/web-platform-tests/wpt.git 0968c868d8095217d18d86b34c7f21dccae58768
187 changes: 187 additions & 0 deletions external-resources/wpt/html/syntax/parsing/resources/template.dat
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,86 @@ bad frameset
| <span>
| <span>

#data
<head><template></template></head><p><frameset>
#errors
no doctype
bad frameset
eof in frameset
#document
| <html>
| <head>
| <template>
| content
| <frameset>

#data
<template>x</template><p><frameset>
#errors
no doctype
bad frameset
eof in frameset
#document
| <html>
| <head>
| <template>
| content
| "x"
| <frameset>

#data
<head></head><template></template><p><frameset>
#errors
no doctype
bad template
bad frameset
eof in frameset
#document
| <html>
| <head>
| <template>
| content
| <frameset>

#data
<p><template></template><frameset>
#errors
no doctype
bad frameset
#document
| <html>
| <head>
| <body>
| <p>
| <template>
| content

#data
<p><template><frameset></template>
#errors
no doctype
bad frameset
#document
| <html>
| <head>
| <body>
| <p>
| <template>
| content

#data
<template></template>x<frameset>
#errors
no doctype
bad frameset
#document
| <html>
| <head>
| <template>
| content
| <body>
| "x"

#data
<body><template><script>var i = 1;</script><td></td></template>
#errors
Expand Down Expand Up @@ -1641,6 +1721,113 @@ template
| <div>
| "second"

#data
<template><table><form></table></template>
#errors
no doctype
unexpected form in table
#document
| <html>
| <head>
| <template>
| content
| <table>
| <form>
| <body>

#data
<table><form></table>
#errors
unexpected form in table
#document-fragment
template
#document
| <table>
| <form>

#data
<template><form><form><input></template>
#errors
no doctype
#document
| <html>
| <head>
| <template>
| content
| <form>
| <form>
| <input>
| <body>

#data
<form><form>
#errors
#document-fragment
template
#document
| <form>
| <form>

#data
<template><form><template></template><form></template>
#errors
no doctype
#document
| <html>
| <head>
| <template>
| content
| <form>
| <template>
| content
| <form>
| <body>

#data
<template><template><form></template><form></template>
#errors
no doctype
#document
| <html>
| <head>
| <template>
| content
| <template>
| content
| <form>
| <form>
| <body>

#data
<form><template><form></template><form>
#errors
no doctype
nested form ignored
#document
| <html>
| <head>
| <body>
| <form>
| <template>
| content
| <form>

#data
<br>BC<form>D<div>E</form>F</div>G
#errors
unexpected end tag
unexpected end tag
#document-fragment
template
#document
| <br>
| "BC"
| <form>
| "D"
| <div>
| "E"
| "FG"

#data
<!DOCTYPE HTML><template><tr><td>cell</td></tr></template>
#errors
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -674,6 +674,11 @@ boolean stackOfOpenElementsContainsElementTemplateAndNamespaceHtml() {
return findLastElementPositionMatchingInNamespaceHtml(Common.ELEMENT_TEMPLATE_ID) != -1;
}

// https://html.spec.whatwg.org/multipage/parsing.html#parsing-template-contents
boolean parsingTemplateContents() {
return stackOfOpenElementsContainsElementTemplateAndNamespaceHtml() || (context != null && Common.isHtmlNS(context, Common.ELEMENT_TEMPLATE_ID));
}

// FIXME optimize(?)
void insertCharacter(char charToInsert) {
Node toInsert;
Expand Down Expand Up @@ -1033,6 +1038,10 @@ Boolean getFramesetOk() {
void framesetOkToFalse() {
framesetOk = Boolean.FALSE;
}

void framesetOkToTrue() {
framesetOk = Boolean.TRUE;
}
//

void saveInsertionMode() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,17 @@ static void afterHead(int tokenType, String tagName, int tagNameID, TreeConstruc
Common.ELEMENT_HTML_ID == tagNameID || //
Common.ELEMENT_BR_ID == tagNameID
)) {
// anything below
// Act as described in the "anything else" entry below.
treeConstructor.insertHtmlElementWithEmptyAttributes("body", Common.ELEMENT_BODY_ID);
treeConstructor.framesetOkToTrue();
treeConstructor.setInsertionMode(IM_IN_BODY);
treeConstructor.dispatch();
} else if (Common.isStartTagNamed(tokenType, Common.ELEMENT_HEAD_ID, tagNameID) || tokenType == TT_END_TAG) {
treeConstructor.emitParseError();
// ignore token
} else {
treeConstructor.insertHtmlElementWithEmptyAttributes("body", Common.ELEMENT_BODY_ID);
treeConstructor.framesetOkToTrue();
treeConstructor.setInsertionMode(IM_IN_BODY);
treeConstructor.dispatch();
}
Expand Down Expand Up @@ -762,11 +764,14 @@ static void inTable(int tokenType, String tagName, int tagNameID, TreeConstructo
}
} else if (Common.isStartTagNamed(tokenType, Common.ELEMENT_FORM_ID, tagNameID)) {
treeConstructor.emitParseError();
if (treeConstructor.stackOfOpenElementsContainsElementTemplateAndNamespaceHtml() || treeConstructor.getForm() != null) {
boolean parsingTemplateContents = treeConstructor.parsingTemplateContents();
if (treeConstructor.getForm() != null && !parsingTemplateContents) {
// ignore
} else {
Element form = treeConstructor.insertHtmlElementToken();
treeConstructor.setForm(form);
if (!parsingTemplateContents) {
treeConstructor.setForm(form);
}
treeConstructor.popCurrentNode();
}
} else if (tokenType == TT_EOF) {
Expand Down Expand Up @@ -1692,16 +1697,16 @@ private static void startLi(TreeConstructor treeConstructor) {
}

private static void startForm(TreeConstructor treeConstructor) {
boolean templateIsNotPresent = !treeConstructor.stackOfOpenElementsContainsElementTemplateAndNamespaceHtml();
if (treeConstructor.getForm() != null && templateIsNotPresent) {
boolean parsingTemplateContents = treeConstructor.parsingTemplateContents();
if (treeConstructor.getForm() != null && !parsingTemplateContents) {
treeConstructor.emitParseError();
// ignore the token
} else {
if (treeConstructor.hasElementInButtonScope(ELEMENT_P_ID)) {
treeConstructor.closePElement();
}
Element formElement = treeConstructor.insertHtmlElementToken();
if (templateIsNotPresent) {
if (!parsingTemplateContents) {
treeConstructor.setForm(formElement);
}
}
Expand Down Expand Up @@ -1939,8 +1944,8 @@ private static void endP(TreeConstructor treeConstructor) {
}

private static void endForm(TreeConstructor treeConstructor) {
boolean templateIsNotPresent = !treeConstructor.stackOfOpenElementsContainsElementTemplateAndNamespaceHtml();
if (templateIsNotPresent) {
boolean parsingTemplateContents = treeConstructor.parsingTemplateContents();
if (!parsingTemplateContents) {
Element node = treeConstructor.getForm();
treeConstructor.setForm(null);
if (node == null || !treeConstructor.hasElementInScope(node)) {
Expand Down
Loading