diff options
author | Rob Pike <r@golang.org> | 2011-10-06 15:21:56 -0700 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2011-10-06 15:21:56 -0700 |
commit | 4f353a7cea3af4cae55ab76cfbe60851e4c5439a (patch) | |
tree | d042f8162b6ac67f514abf1ac39d735a4ab35fcd | |
parent | 53f1670a96b2c04e4698d8f535b0e0e580003bf5 (diff) | |
download | go-4f353a7cea3af4cae55ab76cfbe60851e4c5439a.tar.gz |
template: fix comments with different delimiters.
R=golang-dev, dsymonds
CC=golang-dev
http://codereview.appspot.com/5208042
-rw-r--r-- | src/pkg/template/exec_test.go | 17 | ||||
-rw-r--r-- | src/pkg/template/parse/lex.go | 10 | ||||
-rw-r--r-- | src/pkg/template/parse/lex_test.go | 2 |
3 files changed, 18 insertions, 11 deletions
diff --git a/src/pkg/template/exec_test.go b/src/pkg/template/exec_test.go index 57c63257c..46b89fd29 100644 --- a/src/pkg/template/exec_test.go +++ b/src/pkg/template/exec_test.go @@ -507,14 +507,21 @@ func TestDelims(t *testing.T) { for i := 0; i < len(delimPairs); i += 2 { text := ".Str" left := delimPairs[i+0] + trueLeft := left right := delimPairs[i+1] + trueRight := right if left == "" { // default case - text = "{{" + text + trueLeft = "{{" } if right == "" { // default case - text = text + "}}" + trueRight = "}}" } - text = left + text + right + text = trueLeft + text + trueRight + // Now add a comment + text += trueLeft + "/*comment*/" + trueRight + // Now add an action containing a string. + text += trueLeft + `"` + trueLeft + `"` + trueRight + // At this point text looks like `{{.Str}}{{/*comment*/}}{{"{{"}}`. tmpl, err := New("delims").Delims(left, right).Parse(text) if err != nil { t.Fatalf("delim %q text %q parse err %s", left, text, err) @@ -524,8 +531,8 @@ func TestDelims(t *testing.T) { if err != nil { t.Fatalf("delim %q exec err %s", left, err) } - if b.String() != hello { - t.Error("expected %q got %q", hello, b.String()) + if b.String() != hello+trueLeft { + t.Error("expected %q got %q", hello+trueLeft, b.String()) } } } diff --git a/src/pkg/template/parse/lex.go b/src/pkg/template/parse/lex.go index 07740d791..16ff590d3 100644 --- a/src/pkg/template/parse/lex.go +++ b/src/pkg/template/parse/lex.go @@ -230,8 +230,8 @@ func lex(name, input, left, right string) *lexer { const ( leftDelim = "{{" rightDelim = "}}" - leftComment = "{{/*" - rightComment = "*/}}" + leftComment = "/*" + rightComment = "*/" ) // lexText scans until an opening action delimiter, "{{". @@ -257,7 +257,7 @@ func lexText(l *lexer) stateFn { // lexLeftDelim scans the left delimiter, which is known to be present. func lexLeftDelim(l *lexer) stateFn { - if strings.HasPrefix(l.input[l.pos:], leftComment) { + if strings.HasPrefix(l.input[l.pos:], l.leftDelim+leftComment) { return lexComment } l.pos += len(l.leftDelim) @@ -267,11 +267,11 @@ func lexLeftDelim(l *lexer) stateFn { // lexComment scans a comment. The left comment marker is known to be present. func lexComment(l *lexer) stateFn { - i := strings.Index(l.input[l.pos:], rightComment) + i := strings.Index(l.input[l.pos:], rightComment+l.rightDelim) if i < 0 { return l.errorf("unclosed comment") } - l.pos += i + len(rightComment) + l.pos += i + len(rightComment) + len(l.rightDelim) l.ignore() return lexText } diff --git a/src/pkg/template/parse/lex_test.go b/src/pkg/template/parse/lex_test.go index f2569b157..6ee1b4701 100644 --- a/src/pkg/template/parse/lex_test.go +++ b/src/pkg/template/parse/lex_test.go @@ -222,7 +222,7 @@ func TestLex(t *testing.T) { } } -// Some easy cases from above, but with delimiters are $$ and @@ +// Some easy cases from above, but with delimiters $$ and @@ var lexDelimTests = []lexTest{ {"punctuation", "$$,@%{{}}@@", []item{ tLeftDelim, |