Commit 28546ed5 authored by Andrew Balholm's avatar Andrew Balholm Committed by Nigel Tao

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
parent 5e5c5c27
......@@ -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 {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment