mirror of
https://github.com/golang/go
synced 2024-11-21 15:44:44 -07:00
html: parse <xmp> tags
Pass tests5.dat, test 10: <p><xmp></xmp> | <html> | <head> | <body> | <p> | <xmp> Also pass the remaining tests in tests5.dat. R=nigeltao CC=golang-dev https://golang.org/cl/5440062
This commit is contained in:
parent
e32f4ba77d
commit
3b3922771a
@ -770,6 +770,11 @@ func inBodyIM(p *parser) bool {
|
||||
p.oe.pop()
|
||||
p.oe.pop()
|
||||
p.form = nil
|
||||
case "xmp":
|
||||
p.popUntil(buttonScopeStopTags, "p")
|
||||
p.reconstructActiveFormattingElements()
|
||||
p.framesetOK = false
|
||||
p.addElement(p.tok.Data, p.tok.Attr)
|
||||
case "caption", "col", "colgroup", "frame", "head", "tbody", "td", "tfoot", "th", "thead", "tr":
|
||||
// Ignore the token.
|
||||
default:
|
||||
|
@ -154,7 +154,7 @@ func TestParser(t *testing.T) {
|
||||
{"tests2.dat", -1},
|
||||
{"tests3.dat", -1},
|
||||
// tests4.dat is fragment cases.
|
||||
{"tests5.dat", 10},
|
||||
{"tests5.dat", -1},
|
||||
}
|
||||
for _, tf := range testFiles {
|
||||
f, err := os.Open("testdata/webkit/" + tf.filename)
|
||||
|
@ -185,7 +185,7 @@ func render1(w writer, n *Node) error {
|
||||
|
||||
// Render any child nodes.
|
||||
switch n.Data {
|
||||
case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style":
|
||||
case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "xmp":
|
||||
for _, c := range n.Child {
|
||||
if c.Type != TextNode {
|
||||
return fmt.Errorf("html: raw text element <%s> has non-text child node", n.Data)
|
||||
|
@ -406,12 +406,12 @@ func (z *Tokenizer) readStartTag() TokenType {
|
||||
}
|
||||
}
|
||||
// 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 {
|
||||
// The tag name lengths of these special cases ranges in [3, 9].
|
||||
if x := z.data.end - z.data.start; 3 <= x && x <= 9 {
|
||||
switch z.buf[z.data.start] {
|
||||
case 'i', 'n', 'p', 's', 't', 'I', 'N', 'P', 'S', 'T':
|
||||
case 'i', 'n', 'p', 's', 't', 'x', 'I', 'N', 'P', 'S', 'T', 'X':
|
||||
switch s := strings.ToLower(string(z.buf[z.data.start:z.data.end])); s {
|
||||
case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "textarea", "title":
|
||||
case "iframe", "noembed", "noframes", "noscript", "plaintext", "script", "style", "textarea", "title", "xmp":
|
||||
z.rawTag = s
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user