mirror of
https://github.com/golang/go
synced 2024-11-22 00:24:41 -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:
parent
dcf5318990
commit
b3dd32776b
@ -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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user