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() { ...@@ -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 { ...@@ -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) { ...@@ -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) { ...@@ -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 {
......
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