]> Cypherpunks repositories - gostls13.git/commitdiff
exp/html: add more cases to inBodyIM
authorAndrew Balholm <andybalholm@gmail.com>
Sun, 22 Apr 2012 06:19:21 +0000 (16:19 +1000)
committerNigel Tao <nigeltao@golang.org>
Sun, 22 Apr 2012 06:19:21 +0000 (16:19 +1000)
Don't set framesetOK to false for hidden input elements.

Handle <param>, <source>, <track>, <textarea>, <iframe>, <noembed>,
and <noscript>

Pass 7 additional tests.

R=nigeltao
CC=golang-dev
https://golang.org/cl/6094045

src/pkg/exp/html/parse.go
src/pkg/exp/html/testlogs/pending-spec-changes.dat.log
src/pkg/exp/html/testlogs/tests19.dat.log
src/pkg/exp/html/testlogs/tests25.dat.log
src/pkg/exp/html/testlogs/webkit01.dat.log

index 1cb65b7dcb1930989f3563294a340d52a4536324..3e5ffa58427a7035bf0d7d6ea5a25cac509a2045 100644 (file)
@@ -643,7 +643,7 @@ func inBodyIM(p *parser) bool {
        case TextToken:
                d := p.tok.Data
                switch n := p.oe.top(); n.Data {
-               case "pre", "listing", "textarea":
+               case "pre", "listing":
                        if len(n.Child) == 0 {
                                // Ignore a newline at the start of a <pre> block.
                                if d != "" && d[0] == '\r' {
@@ -779,12 +779,6 @@ func inBodyIM(p *parser) bool {
                        p.addElement(p.tok.Data, p.tok.Attr)
                        p.afe = append(p.afe, &scopeMarker)
                        p.framesetOK = false
-               case "area", "br", "embed", "img", "input", "keygen", "wbr":
-                       p.reconstructActiveFormattingElements()
-                       p.addElement(p.tok.Data, p.tok.Attr)
-                       p.oe.pop()
-                       p.acknowledgeSelfClosingTag()
-                       p.framesetOK = false
                case "table":
                        if !p.quirks {
                                p.popUntil(buttonScope, "p")
@@ -793,6 +787,26 @@ func inBodyIM(p *parser) bool {
                        p.framesetOK = false
                        p.im = inTableIM
                        return true
+               case "area", "br", "embed", "img", "input", "keygen", "wbr":
+                       p.reconstructActiveFormattingElements()
+                       p.addElement(p.tok.Data, p.tok.Attr)
+                       p.oe.pop()
+                       p.acknowledgeSelfClosingTag()
+                       if p.tok.Data == "input" {
+                               for _, a := range p.tok.Attr {
+                                       if a.Key == "type" {
+                                               if strings.ToLower(a.Val) == "hidden" {
+                                                       // Skip setting framesetOK = false
+                                                       return true
+                                               }
+                                       }
+                               }
+                       }
+                       p.framesetOK = false
+               case "param", "source", "track":
+                       p.addElement(p.tok.Data, p.tok.Attr)
+                       p.oe.pop()
+                       p.acknowledgeSelfClosingTag()
                case "hr":
                        p.popUntil(buttonScope, "p")
                        p.addElement(p.tok.Data, p.tok.Attr)
@@ -852,11 +866,27 @@ func inBodyIM(p *parser) bool {
                        p.oe.pop()
                        p.oe.pop()
                        p.form = nil
+               case "textarea":
+                       p.addElement(p.tok.Data, p.tok.Attr)
+                       p.setOriginalIM()
+                       p.framesetOK = false
+                       p.im = textIM
                case "xmp":
                        p.popUntil(buttonScope, "p")
                        p.reconstructActiveFormattingElements()
                        p.framesetOK = false
                        p.addElement(p.tok.Data, p.tok.Attr)
+                       p.setOriginalIM()
+                       p.im = textIM
+               case "iframe":
+                       p.framesetOK = false
+                       p.addElement(p.tok.Data, p.tok.Attr)
+                       p.setOriginalIM()
+                       p.im = textIM
+               case "noembed", "noscript":
+                       p.addElement(p.tok.Data, p.tok.Attr)
+                       p.setOriginalIM()
+                       p.im = textIM
                case "math", "svg":
                        p.reconstructActiveFormattingElements()
                        if p.tok.Data == "math" {
@@ -1074,7 +1104,20 @@ func textIM(p *parser) bool {
        case ErrorToken:
                p.oe.pop()
        case TextToken:
-               p.addText(p.tok.Data)
+               d := p.tok.Data
+               if n := p.oe.top(); n.Data == "textarea" && len(n.Child) == 0 {
+                       // Ignore a newline at the start of a <textarea> block.
+                       if d != "" && d[0] == '\r' {
+                               d = d[1:]
+                       }
+                       if d != "" && d[0] == '\n' {
+                               d = d[1:]
+                       }
+               }
+               if d == "" {
+                       return true
+               }
+               p.addText(d)
                return true
        case EndTagToken:
                p.oe.pop()
index 5852062b0efc24a18904f6d351362b0eb599b268..3adabe79eea01d0962bb0bfc163ce17d2bc4ea41 100644 (file)
@@ -1,2 +1,2 @@
-FAIL "<input type=\"hidden\"><frameset>"
+PASS "<input type=\"hidden\"><frameset>"
 PASS "<!DOCTYPE html><table><caption><svg>foo</table>bar"
index 27ab4f05ef2d1fd9a9066e1c8ab5289efa66d0af..49180ad9eb17b2dd0e33fb685567f7dd88807e3a 100644 (file)
@@ -66,9 +66,9 @@ PASS "<!doctype html><input><frameset>"
 PASS "<!doctype html><keygen><frameset>"
 PASS "<!doctype html><wbr><frameset>"
 PASS "<!doctype html><hr><frameset>"
-FAIL "<!doctype html><textarea></textarea><frameset>"
+PASS "<!doctype html><textarea></textarea><frameset>"
 PASS "<!doctype html><xmp></xmp><frameset>"
-FAIL "<!doctype html><iframe></iframe><frameset>"
+PASS "<!doctype html><iframe></iframe><frameset>"
 PASS "<!doctype html><select></select><frameset>"
 PASS "<!doctype html><svg></svg><frameset><frame>"
 PASS "<!doctype html><math></math><frameset><frame>"
index dbcfe54d597b02cff14a3e11ab2aceeeda74bf85..95f96c304d0321a2b39371325f8222388cf3b5d9 100644 (file)
@@ -14,7 +14,7 @@ PASS "<!DOCTYPE html><body><input>A"
 PASS "<!DOCTYPE html><body><keygen>A"
 PASS "<!DOCTYPE html><body><link>A"
 PASS "<!DOCTYPE html><body><meta>A"
-FAIL "<!DOCTYPE html><body><param>A"
-FAIL "<!DOCTYPE html><body><source>A"
-FAIL "<!DOCTYPE html><body><track>A"
+PASS "<!DOCTYPE html><body><param>A"
+PASS "<!DOCTYPE html><body><source>A"
+PASS "<!DOCTYPE html><body><track>A"
 PASS "<!DOCTYPE html><body><wbr>A"
index 088684bc0cfe41e7d9dfa7d7cb6ebf4b5bef7823..3cb8b447c4ceff66e78a45293f971e501d4864c4 100644 (file)
@@ -45,5 +45,5 @@ PASS "<svg><em><desc></em>"
 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>"
-FAIL "<!doctype html><input type=\"hidden\"><frameset>"
+PASS "<!doctype html><input type=\"hidden\"><frameset>"
 PASS "<!doctype html><input type=\"button\"><frameset>"