]> Cypherpunks repositories - gostls13.git/commitdiff
exp/html: improve beforeHeadIM
authorAndrew Balholm <andybalholm@gmail.com>
Wed, 18 Apr 2012 12:45:36 +0000 (22:45 +1000)
committerNigel Tao <nigeltao@golang.org>
Wed, 18 Apr 2012 12:45:36 +0000 (22:45 +1000)
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

src/pkg/exp/html/parse.go
src/pkg/exp/html/testlogs/tests19.dat.log

index 6e433785fdbdcdd3e82a5cb3aa99c8018225a9c1..1a6bc2eebde4516d9126bf2e8923e51dd1da7201 100644 (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.
index c3186d307eb951d55b7cf7531e930dbeb5367168..45269a870ad16b2f62d07b3c4bc55be6af87b1c3 100644 (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>"