]> Cypherpunks repositories - gostls13.git/commitdiff
html: parse <isindex>
authorAndrew Balholm <andybalholm@gmail.com>
Thu, 17 Nov 2011 02:12:13 +0000 (13:12 +1100)
committerNigel Tao <nigeltao@golang.org>
Thu, 17 Nov 2011 02:12:13 +0000 (13:12 +1100)
Pass tests2.dat, test 42:
<isindex test=x name=x>

| <html>
|   <head>
|   <body>
|     <form>
|       <hr>
|       <label>
|         "This is a searchable index. Enter search keywords: "
|         <input>
|           name="isindex"
|           test="x"
|       <hr>

R=nigeltao
CC=golang-dev
https://golang.org/cl/5399049

src/pkg/html/parse.go
src/pkg/html/parse_test.go

index 58b754ef3d080ba4f8c4904b9bcd7752419861ed..9b7e934ac343e27b1ac9e6f55d587a421e0b729d 100644 (file)
@@ -683,6 +683,44 @@ func inBodyIM(p *parser) bool {
                case "image":
                        p.tok.Data = "img"
                        return false
+               case "isindex":
+                       if p.form != nil {
+                               // Ignore the token.
+                               return true
+                       }
+                       action := ""
+                       prompt := "This is a searchable index. Enter search keywords: "
+                       attr := []Attribute{{Key: "name", Val: "isindex"}}
+                       for _, a := range p.tok.Attr {
+                               switch a.Key {
+                               case "action":
+                                       action = a.Val
+                               case "name":
+                                       // Ignore the attribute.
+                               case "prompt":
+                                       prompt = a.Val
+                               default:
+                                       attr = append(attr, a)
+                               }
+                       }
+                       p.acknowledgeSelfClosingTag()
+                       p.popUntil(buttonScopeStopTags, "p")
+                       p.addElement("form", nil)
+                       p.form = p.top()
+                       if action != "" {
+                               p.form.Attr = []Attribute{{Key: "action", Val: action}}
+                       }
+                       p.addElement("hr", nil)
+                       p.oe.pop()
+                       p.addElement("label", nil)
+                       p.addText(prompt)
+                       p.addElement("input", attr)
+                       p.oe.pop()
+                       p.oe.pop()
+                       p.addElement("hr", nil)
+                       p.oe.pop()
+                       p.oe.pop()
+                       p.form = nil
                case "caption", "col", "colgroup", "frame", "head", "tbody", "td", "tfoot", "th", "thead", "tr":
                        // Ignore the token.
                default:
index 07e84907cfef5ec917898c0ce4018fc0c6e843c7..4f15ae1d554c55eae9a3db4a9708939fc1759468 100644 (file)
@@ -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", 42},
+               {"tests2.dat", 43},
                {"tests3.dat", 0},
        }
        for _, tf := range testFiles {