diff options
| author | Rob Pike <r@golang.org> | 2015-04-30 12:11:35 -0700 |
|---|---|---|
| committer | Rob Pike <r@golang.org> | 2015-05-01 01:07:43 +0000 |
| commit | 042200145fbf994e3fcbfa87e75b10d042867b3a (patch) | |
| tree | a915f6a65dabe237262f3ce77d4186c96cb84322 /src/text/template/parse | |
| parent | cf3ac26a4c79ec53a8a5161f15cc91ab75b3ac46 (diff) | |
| download | go-042200145fbf994e3fcbfa87e75b10d042867b3a.tar.xz | |
text/template: allow newlines in raw quotes
This was disallowed for error-checking reasons but people ask for
it, it's easy, and it's clear what it all means.
Fixes #7323.
Change-Id: I26542f5ac6519e45b335ad789713a4d9e356279b
Reviewed-on: https://go-review.googlesource.com/9537
Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/text/template/parse')
| -rw-r--r-- | src/text/template/parse/lex.go | 2 | ||||
| -rw-r--r-- | src/text/template/parse/lex_test.go | 29 |
2 files changed, 17 insertions, 14 deletions
diff --git a/src/text/template/parse/lex.go b/src/text/template/parse/lex.go index 1674aaf9cd..b829b7e3b4 100644 --- a/src/text/template/parse/lex.go +++ b/src/text/template/parse/lex.go @@ -525,7 +525,7 @@ func lexRawQuote(l *lexer) stateFn { Loop: for { switch l.next() { - case eof, '\n': + case eof: return l.errorf("unterminated raw quoted string") case '`': break Loop diff --git a/src/text/template/parse/lex_test.go b/src/text/template/parse/lex_test.go index d251ccffb6..a1cda19e67 100644 --- a/src/text/template/parse/lex_test.go +++ b/src/text/template/parse/lex_test.go @@ -58,18 +58,20 @@ type lexTest struct { } var ( - tEOF = item{itemEOF, 0, ""} - tFor = item{itemIdentifier, 0, "for"} - tLeft = item{itemLeftDelim, 0, "{{"} - tLpar = item{itemLeftParen, 0, "("} - tPipe = item{itemPipe, 0, "|"} - tQuote = item{itemString, 0, `"abc \n\t\" "`} - tRange = item{itemRange, 0, "range"} - tRight = item{itemRightDelim, 0, "}}"} - tRpar = item{itemRightParen, 0, ")"} - tSpace = item{itemSpace, 0, " "} - raw = "`" + `abc\n\t\" ` + "`" - tRawQuote = item{itemRawString, 0, raw} + tEOF = item{itemEOF, 0, ""} + tFor = item{itemIdentifier, 0, "for"} + tLeft = item{itemLeftDelim, 0, "{{"} + tLpar = item{itemLeftParen, 0, "("} + tPipe = item{itemPipe, 0, "|"} + tQuote = item{itemString, 0, `"abc \n\t\" "`} + tRange = item{itemRange, 0, "range"} + tRight = item{itemRightDelim, 0, "}}"} + tRpar = item{itemRightParen, 0, ")"} + tSpace = item{itemSpace, 0, " "} + raw = "`" + `abc\n\t\" ` + "`" + rawNL = "`now is{{\n}}the time`" // Contains newline inside raw quote. + tRawQuote = item{itemRawString, 0, raw} + tRawQuoteNL = item{itemRawString, 0, rawNL} ) var lexTests = []lexTest{ @@ -104,6 +106,7 @@ var lexTests = []lexTest{ {"for", `{{for}}`, []item{tLeft, tFor, tRight, tEOF}}, {"quote", `{{"abc \n\t\" "}}`, []item{tLeft, tQuote, tRight, tEOF}}, {"raw quote", "{{" + raw + "}}", []item{tLeft, tRawQuote, tRight, tEOF}}, + {"raw quote with newline", "{{" + rawNL + "}}", []item{tLeft, tRawQuoteNL, tRight, tEOF}}, {"numbers", "{{1 02 0x14 -7.2i 1e3 +1.2e-4 4.2i 1+2i}}", []item{ tLeft, {itemNumber, 0, "1"}, @@ -294,7 +297,7 @@ var lexTests = []lexTest{ tLeft, {itemError, 0, "unterminated quoted string"}, }}, - {"unclosed raw quote", "{{`xx\n`}}", []item{ + {"unclosed raw quote", "{{`xx}}", []item{ tLeft, {itemError, 0, "unterminated raw quoted string"}, }}, |
