1
0
mirror of https://github.com/golang/go synced 2024-11-22 01:04:40 -07:00

template: fix comments with different delimiters.

R=golang-dev, dsymonds
CC=golang-dev
https://golang.org/cl/5208042
This commit is contained in:
Rob Pike 2011-10-06 15:21:56 -07:00
parent dcf5318990
commit b3dd32776b
3 changed files with 18 additions and 11 deletions

View File

@ -507,14 +507,21 @@ func TestDelims(t *testing.T) {
for i := 0; i < len(delimPairs); i += 2 { for i := 0; i < len(delimPairs); i += 2 {
text := ".Str" text := ".Str"
left := delimPairs[i+0] left := delimPairs[i+0]
trueLeft := left
right := delimPairs[i+1] right := delimPairs[i+1]
trueRight := right
if left == "" { // default case if left == "" { // default case
text = "{{" + text trueLeft = "{{"
} }
if right == "" { // default case 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) tmpl, err := New("delims").Delims(left, right).Parse(text)
if err != nil { if err != nil {
t.Fatalf("delim %q text %q parse err %s", left, text, err) t.Fatalf("delim %q text %q parse err %s", left, text, err)
@ -524,8 +531,8 @@ func TestDelims(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("delim %q exec err %s", left, err) t.Fatalf("delim %q exec err %s", left, err)
} }
if b.String() != hello { if b.String() != hello+trueLeft {
t.Error("expected %q got %q", hello, b.String()) t.Error("expected %q got %q", hello+trueLeft, b.String())
} }
} }
} }

View File

@ -230,8 +230,8 @@ func lex(name, input, left, right string) *lexer {
const ( const (
leftDelim = "{{" leftDelim = "{{"
rightDelim = "}}" rightDelim = "}}"
leftComment = "{{/*" leftComment = "/*"
rightComment = "*/}}" rightComment = "*/"
) )
// lexText scans until an opening action delimiter, "{{". // 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. // lexLeftDelim scans the left delimiter, which is known to be present.
func lexLeftDelim(l *lexer) stateFn { 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 return lexComment
} }
l.pos += len(l.leftDelim) 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. // lexComment scans a comment. The left comment marker is known to be present.
func lexComment(l *lexer) stateFn { 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 { if i < 0 {
return l.errorf("unclosed comment") return l.errorf("unclosed comment")
} }
l.pos += i + len(rightComment) l.pos += i + len(rightComment) + len(l.rightDelim)
l.ignore() l.ignore()
return lexText return lexText
} }

View File

@ -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{ var lexDelimTests = []lexTest{
{"punctuation", "$$,@%{{}}@@", []item{ {"punctuation", "$$,@%{{}}@@", []item{
tLeftDelim, tLeftDelim,