}
switch n.Namespace {
case "math":
- // TODO: annotation-xml elements whose start tags have "text/html" or
- // "application/xhtml+xml" encodings.
+ if n.Data == "annotation-xml" {
+ for _, a := range n.Attr {
+ if a.Key == "encoding" {
+ val := strings.ToLower(a.Val)
+ if val == "text/html" || val == "application/xhtml+xml" {
+ return true
+ }
+ }
+ }
+ }
case "svg":
switch n.Data {
case "desc", "foreignObject", "title":
return false
}
+func mathMLTextIntegrationPoint(n *Node) bool {
+ if n.Namespace != "math" {
+ return false
+ }
+ switch n.Data {
+ case "mi", "mo", "mn", "ms", "mtext":
+ return true
+ }
+ return false
+}
+
// Section 12.2.5.5.
var breakout = map[string]bool{
"b": true,
if n.Namespace == "" {
return false
}
- // TODO: MathML, HTML integration points.
- // TODO: MathML's annotation-xml combining with SVG's svg.
+ if mathMLTextIntegrationPoint(n) {
+ if p.tok.Type == StartTagToken && p.tok.Data != "mglyph" && p.tok.Data != "malignmark" {
+ return false
+ }
+ if p.tok.Type == TextToken {
+ return false
+ }
+ }
+ if n.Namespace == "math" && n.Data == "annotation-xml" && p.tok.Type == StartTagToken && p.tok.Data == "svg" {
+ return false
+ }
+ if htmlIntegrationPoint(n) && (p.tok.Type == StartTagToken || p.tok.Type == TextToken) {
+ return false
+ }
+ if p.tok.Type == ErrorToken {
+ return false
+ }
return true
}
PASS "<input type=\"hidden\"><frameset>"
PASS "<!DOCTYPE html><table><caption><svg>foo</table>bar"
-FAIL "<table><tr><td><svg><desc><td></desc><circle>"
+PASS "<table><tr><td><svg><desc><td></desc><circle>"
FAIL "<svg><![CDATA[\x00filler\x00text\x00]]>"
FAIL "<body><!\x00>"
FAIL "<body><!\x00filler\x00text>"
-FAIL "<body><svg><foreignObject>\x00filler\x00text"
+PASS "<body><svg><foreignObject>\x00filler\x00text"
FAIL "<svg>\x00filler\x00text"
FAIL "<svg>\x00<frameset>"
FAIL "<svg>\x00 <frameset>"
FAIL "<!DOCTYPE html><pre>\r\n\r\nA</pre>"
FAIL "<!DOCTYPE html><pre>\r\rA</pre>"
PASS "<!DOCTYPE html><pre>\rA</pre>"
-FAIL "<!DOCTYPE html><table><tr><td><math><mtext>\x00a"
-FAIL "<!DOCTYPE html><table><tr><td><svg><foreignObject>\x00a"
-FAIL "<!DOCTYPE html><math><mi>a\x00b"
-FAIL "<!DOCTYPE html><math><mo>a\x00b"
-FAIL "<!DOCTYPE html><math><mn>a\x00b"
-FAIL "<!DOCTYPE html><math><ms>a\x00b"
-FAIL "<!DOCTYPE html><math><mtext>a\x00b"
+PASS "<!DOCTYPE html><table><tr><td><math><mtext>\x00a"
+PASS "<!DOCTYPE html><table><tr><td><svg><foreignObject>\x00a"
+PASS "<!DOCTYPE html><math><mi>a\x00b"
+PASS "<!DOCTYPE html><math><mo>a\x00b"
+PASS "<!DOCTYPE html><math><mn>a\x00b"
+PASS "<!DOCTYPE html><math><ms>a\x00b"
+PASS "<!DOCTYPE html><math><mtext>a\x00b"
PASS "<table><tr></body></caption></col></colgroup></html></td></th><td>foo"
PASS "<table><td><tr>"
PASS "<table><td><button><td>"
-FAIL "<table><tr><td><svg><desc><td>"
+PASS "<table><tr><td><svg><desc><td>"
PASS "<!DOCTYPE html><p><svg><desc><p>"
FAIL "<!DOCTYPE html><p><svg><title><p>"
PASS "<div><svg><path><foreignObject><p></foreignObject><p>"
-FAIL "<math><mi><div><object><div><span></span></div></object></div></mi><mi>"
-FAIL "<math><mi><svg><foreignObject><div><div></div></div></foreignObject></svg></mi><mi>"
+PASS "<math><mi><div><object><div><span></span></div></object></div></mi><mi>"
+PASS "<math><mi><svg><foreignObject><div><div></div></div></foreignObject></svg></mi><mi>"
PASS "<svg><script></script><path>"
PASS "<table><svg></svg><tr>"
PASS "<math><mi><mglyph>"
PASS "<math><ms><malignmark>"
PASS "<math><mtext><mglyph>"
PASS "<math><mtext><malignmark>"
-FAIL "<math><annotation-xml><svg></svg></annotation-xml><mi>"
-FAIL "<math><annotation-xml><svg><foreignObject><div><math><mi></mi></math><span></span></div></foreignObject><path></path></svg></annotation-xml><mi>"
-FAIL "<math><annotation-xml><svg><foreignObject><math><mi><svg></svg></mi><mo></mo></math><span></span></foreignObject><path></path></svg></annotation-xml><mi>"
+PASS "<math><annotation-xml><svg></svg></annotation-xml><mi>"
+PASS "<math><annotation-xml><svg><foreignObject><div><math><mi></mi></math><span></span></div></foreignObject><path></path></svg></annotation-xml><mi>"
+PASS "<math><annotation-xml><svg><foreignObject><math><mi><svg></svg></mi><mo></mo></math><span></span></foreignObject><path></path></svg></annotation-xml><mi>"
-FAIL "<!DOCTYPE html><body><p>foo<math><mtext><i>baz</i></mtext><annotation-xml><svg><desc><b>eggs</b></desc><g><foreignObject><P>spam<TABLE><tr><td><img></td></table></foreignObject></g><g>quux</g></svg></annotation-xml></math>bar"
-FAIL "<!DOCTYPE html><body>foo<math><mtext><i>baz</i></mtext><annotation-xml><svg><desc><b>eggs</b></desc><g><foreignObject><P>spam<TABLE><tr><td><img></td></table></foreignObject></g><g>quux</g></svg></annotation-xml></math>bar"
+PASS "<!DOCTYPE html><body><p>foo<math><mtext><i>baz</i></mtext><annotation-xml><svg><desc><b>eggs</b></desc><g><foreignObject><P>spam<TABLE><tr><td><img></td></table></foreignObject></g><g>quux</g></svg></annotation-xml></math>bar"
+PASS "<!DOCTYPE html><body>foo<math><mtext><i>baz</i></mtext><annotation-xml><svg><desc><b>eggs</b></desc><g><foreignObject><P>spam<TABLE><tr><td><img></td></table></foreignObject></g><g>quux</g></svg></annotation-xml></math>bar"
PASS "<!doctype html><select><option><option>"
PASS "<!doctype html><select><option></optgroup>"
PASS "<!doctype html><select><option></optgroup>"
-FAIL "<!doctype html><p><math><mi><p><h1>"
-FAIL "<!doctype html><p><math><mo><p><h1>"
-FAIL "<!doctype html><p><math><mn><p><h1>"
-FAIL "<!doctype html><p><math><ms><p><h1>"
-FAIL "<!doctype html><p><math><mtext><p><h1>"
+PASS "<!doctype html><p><math><mi><p><h1>"
+PASS "<!doctype html><p><math><mo><p><h1>"
+PASS "<!doctype html><p><math><mn><p><h1>"
+PASS "<!doctype html><p><math><ms><p><h1>"
+PASS "<!doctype html><p><math><mtext><p><h1>"
PASS "<!doctype html><frameset></noframes>"
FAIL "<!doctype html><html c=d><body></html><html a=b>"
FAIL "<!doctype html><html c=d><frameset></frameset></html><html a=b>"
PASS "<!doctype html><div><frameset>"
PASS "<!doctype html><div><body><frameset>"
PASS "<!doctype html><p><math></p>a"
-FAIL "<!doctype html><p><math><mn><span></p>a"
+PASS "<!doctype html><p><math><mn><span></p>a"
PASS "<!doctype html><math></html>"
PASS "<!doctype html><meta charset=\"ascii\">"
FAIL "<!doctype html><meta http-equiv=\"content-type\" content=\"text/html;charset=ascii\">"
PASS "<option><option>"
PASS "<math><annotation-xml><div>"
PASS "<math><annotation-xml encoding=\"application/svg+xml\"><div>"
-FAIL "<math><annotation-xml encoding=\"application/xhtml+xml\"><div>"
-FAIL "<math><annotation-xml encoding=\"aPPlication/xhtmL+xMl\"><div>"
-FAIL "<math><annotation-xml encoding=\"text/html\"><div>"
-FAIL "<math><annotation-xml encoding=\"Text/htmL\"><div>"
+PASS "<math><annotation-xml encoding=\"application/xhtml+xml\"><div>"
+PASS "<math><annotation-xml encoding=\"aPPlication/xhtmL+xMl\"><div>"
+PASS "<math><annotation-xml encoding=\"text/html\"><div>"
+PASS "<math><annotation-xml encoding=\"Text/htmL\"><div>"
PASS "<math><annotation-xml encoding=\" text/html \"><div>"
PASS "<!DOCTYPE html><body><b><nobr>1<ins><nobr></b><i>2"
PASS "<!DOCTYPE html><body><b>1<nobr></b><i><nobr>2</i>"
FAIL "<p><code x</code></p>"
-FAIL "<!DOCTYPE html><svg><foreignObject><p><i></p>a"
-FAIL "<!DOCTYPE html><table><tr><td><svg><foreignObject><p><i></p>a"
-FAIL "<!DOCTYPE html><math><mtext><p><i></p>a"
-FAIL "<!DOCTYPE html><table><tr><td><math><mtext><p><i></p>a"
+PASS "<!DOCTYPE html><svg><foreignObject><p><i></p>a"
+PASS "<!DOCTYPE html><table><tr><td><svg><foreignObject><p><i></p>a"
+PASS "<!DOCTYPE html><math><mtext><p><i></p>a"
+PASS "<!DOCTYPE html><table><tr><td><math><mtext><p><i></p>a"
PASS "<!DOCTYPE html><body><div><!/div>a"
PASS "<!DOCTYPE html><math></math>"
PASS "<!DOCTYPE html><body><math></math>"
PASS "<!DOCTYPE html><math><mi>"
-FAIL "<!DOCTYPE html><math><annotation-xml><svg><u>"
+PASS "<!DOCTYPE html><math><annotation-xml><svg><u>"
PASS "<!DOCTYPE html><body><select><math></math></select>"
PASS "<!DOCTYPE html><body><select><option><math></math></option></select>"
PASS "<!DOCTYPE html><body><table><math></math></table>"
PASS "<img <=\"\" FAIL>"
FAIL "<ul><li><div id='foo'/>A</li><li>B<div>C</div></li></ul>"
PASS "<svg><em><desc></em>"
-FAIL "<table><tr><td><svg><desc><td></desc><circle>"
+PASS "<table><tr><td><svg><desc><td></desc><circle>"
PASS "<svg><tfoot></mi><td>"
PASS "<math><mrow><mrow><mn>1</mn></mrow><mi>a</mi></mrow></math>"
PASS "<!doctype html><input type=\"hidden\"><frameset>"