mirror of
https://github.com/golang/go
synced 2024-11-22 08:44: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":
|
case "tbody", "thead", "tfoot":
|
||||||
p.im = inTableBodyIM
|
p.im = inTableBodyIM
|
||||||
case "caption":
|
case "caption":
|
||||||
// TODO: p.im = inCaptionIM
|
p.im = inCaptionIM
|
||||||
case "colgroup":
|
case "colgroup":
|
||||||
p.im = inColumnGroupIM
|
p.im = inColumnGroupIM
|
||||||
case "table":
|
case "table":
|
||||||
@ -887,6 +887,12 @@ func inTableIM(p *parser) bool {
|
|||||||
// TODO.
|
// TODO.
|
||||||
case StartTagToken:
|
case StartTagToken:
|
||||||
switch p.tok.Data {
|
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":
|
case "tbody", "tfoot", "thead":
|
||||||
p.clearStackToContext(tableScopeStopTags)
|
p.clearStackToContext(tableScopeStopTags)
|
||||||
p.addElement(p.tok.Data, p.tok.Attr)
|
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.
|
// Section 11.2.5.4.12.
|
||||||
func inColumnGroupIM(p *parser) bool {
|
func inColumnGroupIM(p *parser) bool {
|
||||||
switch p.tok.Type {
|
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.
|
// TODO(nigeltao): Process all the test cases from all the .dat files.
|
||||||
{"tests1.dat", -1},
|
{"tests1.dat", -1},
|
||||||
{"tests2.dat", 33},
|
{"tests2.dat", 34},
|
||||||
{"tests3.dat", 0},
|
{"tests3.dat", 0},
|
||||||
}
|
}
|
||||||
for _, tf := range testFiles {
|
for _, tf := range testFiles {
|
||||||
|
Loading…
Reference in New Issue
Block a user