mirror of
https://github.com/golang/go
synced 2024-11-21 21:04:41 -07:00
html: parse <caption> elements
Pass tests2.dat, test 33: <!DOCTYPE html><table><caption>test TEST</caption><td>test | <!DOCTYPE html> | <html> | <head> | <body> | <table> | <caption> | "test TEST" | <tbody> | <tr> | <td> | "test" R=nigeltao CC=golang-dev https://golang.org/cl/5371099
This commit is contained in:
parent
5e5c5c2789
commit
28546ed56a
@ -298,7 +298,7 @@ func (p *parser) resetInsertionMode() {
|
||||
case "tbody", "thead", "tfoot":
|
||||
p.im = inTableBodyIM
|
||||
case "caption":
|
||||
// TODO: p.im = inCaptionIM
|
||||
p.im = inCaptionIM
|
||||
case "colgroup":
|
||||
p.im = inColumnGroupIM
|
||||
case "table":
|
||||
@ -887,6 +887,12 @@ func inTableIM(p *parser) bool {
|
||||
// TODO.
|
||||
case StartTagToken:
|
||||
switch p.tok.Data {
|
||||
case "caption":
|
||||
p.clearStackToContext(tableScopeStopTags)
|
||||
p.afe = append(p.afe, &scopeMarker)
|
||||
p.addElement(p.tok.Data, p.tok.Attr)
|
||||
p.im = inCaptionIM
|
||||
return true
|
||||
case "tbody", "tfoot", "thead":
|
||||
p.clearStackToContext(tableScopeStopTags)
|
||||
p.addElement(p.tok.Data, p.tok.Attr)
|
||||
@ -960,6 +966,46 @@ func (p *parser) clearStackToContext(stopTags []string) {
|
||||
}
|
||||
}
|
||||
|
||||
// Section 11.2.5.4.11.
|
||||
func inCaptionIM(p *parser) bool {
|
||||
switch p.tok.Type {
|
||||
case StartTagToken:
|
||||
switch p.tok.Data {
|
||||
case "caption", "col", "colgroup", "tbody", "td", "tfoot", "thead", "tr":
|
||||
if p.popUntil(tableScopeStopTags, "caption") {
|
||||
p.clearActiveFormattingElements()
|
||||
p.im = inTableIM
|
||||
return false
|
||||
} else {
|
||||
// Ignore the token.
|
||||
return true
|
||||
}
|
||||
}
|
||||
case EndTagToken:
|
||||
switch p.tok.Data {
|
||||
case "caption":
|
||||
if p.popUntil(tableScopeStopTags, "caption") {
|
||||
p.clearActiveFormattingElements()
|
||||
p.im = inTableIM
|
||||
}
|
||||
return true
|
||||
case "table":
|
||||
if p.popUntil(tableScopeStopTags, "caption") {
|
||||
p.clearActiveFormattingElements()
|
||||
p.im = inTableIM
|
||||
return false
|
||||
} else {
|
||||
// Ignore the token.
|
||||
return true
|
||||
}
|
||||
case "body", "col", "colgroup", "html", "tbody", "td", "tfoot", "th", "thead", "tr":
|
||||
// Ignore the token.
|
||||
return true
|
||||
}
|
||||
}
|
||||
return inBodyIM(p)
|
||||
}
|
||||
|
||||
// Section 11.2.5.4.12.
|
||||
func inColumnGroupIM(p *parser) bool {
|
||||
switch p.tok.Type {
|
||||
|
@ -134,7 +134,7 @@ func TestParser(t *testing.T) {
|
||||
}{
|
||||
// TODO(nigeltao): Process all the test cases from all the .dat files.
|
||||
{"tests1.dat", -1},
|
||||
{"tests2.dat", 33},
|
||||
{"tests2.dat", 34},
|
||||
{"tests3.dat", 0},
|
||||
}
|
||||
for _, tf := range testFiles {
|
||||
|
Loading…
Reference in New Issue
Block a user