From 695d50dc3206c1b21226473ad2695d76ca53a574 Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 17 Apr 2025 22:53:33 +0200 Subject: [PATCH] changed trunc to use []rune --- strings.go | 9 +++++---- strings_test.go | 4 ++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/strings.go b/strings.go index e0ae628c..e03215fe 100644 --- a/strings.go +++ b/strings.go @@ -187,11 +187,12 @@ func strval(v interface{}) string { } func trunc(c int, s string) string { - if c < 0 && len(s)+c > 0 { - return s[len(s)+c:] + runes := []rune(s) + if c < 0 && len(runes)+c > 0 { + return string(runes[len(runes)+c:]) } - if c >= 0 && len(s) > c { - return s[:c] + if c >= 0 && len(runes) > c { + return string(runes[:c]) } return s } diff --git a/strings_test.go b/strings_test.go index a75ab086..07c9fd94 100644 --- a/strings_test.go +++ b/strings_test.go @@ -29,6 +29,10 @@ func TestTrunc(t *testing.T) { if err := runt(tpl, "foo"); err != nil { t.Error(err) } + tpl = `{{ "аї😊бс" | trunc 3 }}` + if err := runt(tpl, "аї😊"); err != nil { + t.Error(err) + } tpl = `{{ "baaaaaar" | trunc -3 }}` if err := runt(tpl, "aar"); err != nil { t.Error(err)