tpls

Extendable, Fast Template Engine for Go
git clone git://git.lair.cx/tpls
Log | Files | Refs | README | LICENSE

commit 2c7dce3db9efad2b13095820575af97c99fdbe05
parent 1b0d19f4294c76a2cb232b7be3fbc774076d7758
Author: Yongbin Kim <iam@yongbin.kim>
Date:   Thu, 21 Apr 2022 07:30:30 +0900

fix: Fixed to have more than one linebreak applied

Signed-off-by: Yongbin Kim <iam@yongbin.kim>

Diffstat:
Mexamples/plaintext/templates/template.html.go | 3+++
Mtplc/builtin_template.go | 13++++++++++---
Mtplc/builtin_template_test.go | 5+++--
3 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/examples/plaintext/templates/template.html.go b/examples/plaintext/templates/template.html.go @@ -12,11 +12,14 @@ type Page interface { func Render(w tpls.Writer, p Page) { w.WriteRaw(` Company Name + `) p.Body(w) w.WriteRaw(` + 문의사항이 있으시다면 아래 이메일 주소로 연락해주세요. email@domain.tld + 감사합니다. `) } diff --git a/tplc/builtin_template.go b/tplc/builtin_template.go @@ -20,7 +20,7 @@ var regexTemplateClassParser = regexp.MustCompile( `^\s*(\((?:[^\s)]+[ \t]+)?[^\s)]+\)[ \t]+)?([^\s(]+)\(([^)]+)?\)\s*$`) var regexTemplatePlainTextLineParser = regexp.MustCompile( - `(?:[\t\f\v ]*([\r\n])|^)\s*([^\n\r]*)`) + `^(?:[\t ]*([\r\n])[\t ]*)?([^\n\r]*)`) func TagTemplate(b *Builder, w *Writer, t *htmlx.Tokenizer) error { attrs := getAttrs(t) @@ -173,11 +173,18 @@ loop: // Plain Text Mode // In this mode, only the prefix 'space' character on each line // is removed. space characters do not include line breaks. + var src = txt + var caps [][]byte + for len(src) > 0 { + caps = regexTemplatePlainTextLineParser.FindSubmatch(src) + if caps == nil { + break + } - lines := regexTemplatePlainTextLineParser.FindAllSubmatch(txt, -1) - for _, caps := range lines { buf.B = append(buf.B, caps[1]...) buf.B = append(buf.B, caps[2]...) + + src = src[len(caps[0]):] } } else { // Smart Indent Mode diff --git a/tplc/builtin_template_test.go b/tplc/builtin_template_test.go @@ -87,14 +87,15 @@ func Test_renderTag(t *testing.T) { "plain text", ` Hello, World! - And this is second line. + + And this is second paragraph. </template>`, true, "template", nil, false, false, - "w.WriteRaw(`\nHello, World!\nAnd this is second line.\n`)\n", + "w.WriteRaw(`\nHello, World!\n\nAnd this is second paragraph.\n`)\n", }, { "plain text with tag",