1
0
mirror of https://github.com/golang/go synced 2024-10-03 07:21:21 -06:00

exp/html: improve beforeHeadIM

Add a case to ignore doctype tokens.

Clean up the flow of control to more clearly match the spec.

Pass one more test.

R=nigeltao
CC=golang-dev
https://golang.org/cl/6062047
This commit is contained in:
Andrew Balholm 2012-04-18 22:45:36 +10:00 committed by Nigel Tao
parent b39bbf1e5b
commit b65c9a633e
2 changed files with 14 additions and 19 deletions

View File

@ -446,37 +446,30 @@ func beforeHTMLIM(p *parser) bool {
// Section 12.2.5.4.3.
func beforeHeadIM(p *parser) bool {
var (
add bool
attr []Attribute
implied bool
)
switch p.tok.Type {
case ErrorToken:
implied = true
case TextToken:
p.tok.Data = strings.TrimLeft(p.tok.Data, whitespace)
if len(p.tok.Data) == 0 {
// It was all whitespace, so ignore it.
return true
}
implied = true
case StartTagToken:
switch p.tok.Data {
case "head":
add = true
attr = p.tok.Attr
p.addElement(p.tok.Data, p.tok.Attr)
p.head = p.top()
p.im = inHeadIM
return true
case "html":
return inBodyIM(p)
default:
implied = true
}
case EndTagToken:
switch p.tok.Data {
case "head", "body", "html", "br":
implied = true
// Drop down to adding an implied <head> tag.
default:
// Ignore the token.
return true
}
case CommentToken:
p.addChild(&Node{
@ -484,13 +477,15 @@ func beforeHeadIM(p *parser) bool {
Data: p.tok.Data,
})
return true
case DoctypeToken:
// Ignore the token.
return true
}
if add || implied {
p.addElement("head", attr)
p.head = p.top()
}
p.addElement("head", nil)
p.head = p.top()
p.im = inHeadIM
return !implied
return false
}
// Section 12.2.5.4.4.

View File

@ -1,5 +1,5 @@
FAIL "<!doctype html><math><mn DefinitionUrl=\"foo\">"
FAIL "<!doctype html><html></p><!--foo-->"
PASS "<!doctype html><html></p><!--foo-->"
PASS "<!doctype html><head></head></p><!--foo-->"
FAIL "<!doctype html><body><p><pre>"
FAIL "<!doctype html><body><p><listing>"