diff options
author | Andrew Balholm <andybalholm@gmail.com> | 2011-11-30 11:44:54 +1100 |
---|---|---|
committer | Nigel Tao <nigeltao@golang.org> | 2011-11-30 11:44:54 +1100 |
commit | e32f4ba77d920411e916cece41b3a40e0db0a074 (patch) | |
tree | 8c861f198f0179ff5bc4dd246887d8fadb388ea8 | |
parent | 72a2979ef07e309f1168ed5a5e144ceeddb25472 (diff) | |
download | go-e32f4ba77d920411e916cece41b3a40e0db0a074.tar.gz go-e32f4ba77d920411e916cece41b3a40e0db0a074.zip |
html: parse the contents of <iframe> elements as raw text
Pass tests5.dat, test 4:
<iframe> <!---> </iframe>x
| <html>
| <head>
| <body>
| <iframe>
| " <!---> "
| "x"
Also pass tests through test 9:
<style> <!</-- </style>x
R=nigeltao
CC=golang-dev
https://golang.org/cl/5450044
-rw-r--r-- | src/pkg/html/parse_test.go | 2 | ||||
-rw-r--r-- | src/pkg/html/render.go | 2 | ||||
-rw-r--r-- | src/pkg/html/token.go | 7 |
3 files changed, 6 insertions, 5 deletions
diff --git a/src/pkg/html/parse_test.go b/src/pkg/html/parse_test.go index 3805bd7e9e..1e39f3ed70 100644 --- a/src/pkg/html/parse_test.go +++ b/src/pkg/html/parse_test.go @@ -153,6 +153,8 @@ func TestParser(t *testing.T) { {"tests1.dat", -1}, {"tests2.dat", -1}, {"tests3.dat", -1}, + // tests4.dat is fragment cases. + {"tests5.dat", 10}, } for _, tf := range testFiles { f, err := os.Open("testdata/webkit/" + tf.filename) diff --git a/src/pkg/html/render.go b/src/pkg/html/render.go index 2c868f511d..2a57566fd4 100644 --- a/src/pkg/html/render.go +++ b/src/pkg/html/render.go @@ -185,7 +185,7 @@ func render1(w writer, n *Node) error { // Render any child nodes. switch n.Data { - case "noembed", "noframes", "noscript", "plaintext", "script", "style": + case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style": for _, c := range n.Child { if c.Type != TextNode { return fmt.Errorf("html: raw text element <%s> has non-text child node", n.Data) diff --git a/src/pkg/html/token.go b/src/pkg/html/token.go index a6fbcdfcfe..2a2f96bbab 100644 --- a/src/pkg/html/token.go +++ b/src/pkg/html/token.go @@ -405,14 +405,13 @@ func (z *Tokenizer) readStartTag() TokenType { break } } - // Any "<noembed>", "<noframes>", "<noscript>", "<plaintext", "<script>", "<style>", - // "<textarea>" or "<title>" tag flags the tokenizer's next token as raw. + // Several tags flag the tokenizer's next token as raw. // The tag name lengths of these special cases ranges in [5, 9]. if x := z.data.end - z.data.start; 5 <= x && x <= 9 { switch z.buf[z.data.start] { - case 'n', 'p', 's', 't', 'N', 'P', 'S', 'T': + case 'i', 'n', 'p', 's', 't', 'I', 'N', 'P', 'S', 'T': switch s := strings.ToLower(string(z.buf[z.data.start:z.data.end])); s { - case "noembed", "noframes", "noscript", "plaintext", "script", "style", "textarea", "title": + case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "textarea", "title": z.rawTag = s } } |