aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Balholm <andybalholm@gmail.com>2011-10-29 10:51:59 +1100
committerNigel Tao <nigeltao@golang.org>2011-10-29 10:51:59 +1100
commit604e10c34d359f6522b076e488dccd7b075f4bc7 (patch)
treefb890ab98ea2ad9c7d09ea6a2756df5932df00d8
parent03f163c7f22bfaab69a56d48160b0a184ce6bf54 (diff)
downloadgo-604e10c34d359f6522b076e488dccd7b075f4bc7.tar.gz
go-604e10c34d359f6522b076e488dccd7b075f4bc7.zip
html: adjust bookmark in "adoption agency" algorithm
In the adoption agency algorithm, the formatting element is sometimes removed from the list of active formatting elements and reinserted at a later index. In that case, the bookmark showing where it is to be reinserted needs to be moved, so that its position relative to its neighbors remains the same (and also so that it doesn't become out of bounds). Pass tests1.dat, test 70: <DIV> abc <B> def <I> ghi <P> jkl </B> | <html> | <head> | <body> | <div> | " abc " | <b> | " def " | <i> | " ghi " | <i> | <p> | <b> | " jkl " Also pass tests through test 76: <test attribute----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> R=nigeltao CC=golang-dev https://golang.org/cl/5322052
-rw-r--r--src/pkg/html/parse.go4
-rw-r--r--src/pkg/html/parse_test.go2
2 files changed, 5 insertions, 1 deletions
diff --git a/src/pkg/html/parse.go b/src/pkg/html/parse.go
index b0348790c1..49c7a65bab 100644
--- a/src/pkg/html/parse.go
+++ b/src/pkg/html/parse.go
@@ -756,6 +756,10 @@ func (p *parser) inBodyEndTagFormatting(tag string) {
furthestBlock.Add(clone)
// Step 14. Fix up the list of active formatting elements.
+ if oldLoc := p.afe.index(formattingElement); oldLoc != -1 && oldLoc < bookmark {
+ // Move the bookmark with the rest of the list.
+ bookmark--
+ }
p.afe.remove(formattingElement)
p.afe.insert(bookmark, clone)
diff --git a/src/pkg/html/parse_test.go b/src/pkg/html/parse_test.go
index e86a36f18a..861070d103 100644
--- a/src/pkg/html/parse_test.go
+++ b/src/pkg/html/parse_test.go
@@ -132,7 +132,7 @@ func TestParser(t *testing.T) {
rc := make(chan io.Reader)
go readDat(filename, rc)
// TODO(nigeltao): Process all test cases, not just a subset.
- for i := 0; i < 70; i++ {
+ for i := 0; i < 77; i++ {
// Parse the #data section.
b, err := ioutil.ReadAll(<-rc)
if err != nil {