aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2011-10-06 15:21:56 -0700
committerRob Pike <r@golang.org>2011-10-06 15:21:56 -0700
commitb3dd32776b194e2b24bc47768624360452c04bd8 (patch)
treed83e9dde642d47a7f983f542d3d70ff295c02767
parentdcf53189900b814925475b09770092d06f362ebc (diff)
downloadgo-b3dd32776b194e2b24bc47768624360452c04bd8.tar.gz
go-b3dd32776b194e2b24bc47768624360452c04bd8.zip
template: fix comments with different delimiters.
R=golang-dev, dsymonds CC=golang-dev https://golang.org/cl/5208042
-rw-r--r--src/pkg/template/exec_test.go17
-rw-r--r--src/pkg/template/parse/lex.go10
-rw-r--r--src/pkg/template/parse/lex_test.go2
3 files changed, 18 insertions, 11 deletions
diff --git a/src/pkg/template/exec_test.go b/src/pkg/template/exec_test.go
index 57c63257c4..46b89fd294 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 07740d7911..16ff590d3b 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 f2569b1576..6ee1b47010 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,