Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbep <bjorn.erik.pedersen@gmail.com>2015-03-23 14:18:34 +0300
committerbep <bjorn.erik.pedersen@gmail.com>2015-03-23 14:18:27 +0300
commitbe19f4eb91be594d4bcb5d7fde37be20835d294a (patch)
tree099d8b5a9b5a080efe45034a2b38c7d0f361b7ee
parentbe4fe8f8afb09e8fd0d50f000d52619d3824516d (diff)
Rename Substr to Slice
That is whas was implemented, not Substr. Also make the API more similar to Go's internal slice by making both the start and end indices optional. See #990
-rw-r--r--tpl/template.go19
-rw-r--r--tpl/template_test.go9
2 files changed, 22 insertions, 6 deletions
diff --git a/tpl/template.go b/tpl/template.go
index 7e9f41f1f..1f899faf7 100644
--- a/tpl/template.go
+++ b/tpl/template.go
@@ -188,12 +188,25 @@ func compareGetFloat(a interface{}, b interface{}) (float64, float64) {
return left, right
}
-func Substr(a interface{}, pos, length int) (string, error) {
+// Slicing in Slice is done by specifying a half-open range with
+// two indices, lower and upper. 1 and 4 creates a slice including elements 1 through 3.
+// The start and/or end indices can be omitted by setting one or both of them to -1; they default to zero and the slice's length respectively
+func Slice(a interface{}, start, end int) (string, error) {
aStr, err := cast.ToStringE(a)
if err != nil {
return "", err
}
- return aStr[pos:length], nil
+
+ if start != -1 && end != -1 {
+ return aStr[start:end], nil
+ } else if start == -1 && end == -1 {
+ return aStr[:], nil
+ } else if start == -1 {
+ return aStr[:end], nil
+ } else {
+ return aStr[start:], nil
+ }
+
}
func Split(a interface{}, delimiter string) ([]string, error) {
@@ -1324,7 +1337,7 @@ func init() {
"lt": Lt,
"le": Le,
"in": In,
- "substr": Substr,
+ "slice": Slice,
"split": Split,
"intersect": Intersect,
"isSet": IsSet,
diff --git a/tpl/template_test.go b/tpl/template_test.go
index dca4711d1..55f739576 100644
--- a/tpl/template_test.go
+++ b/tpl/template_test.go
@@ -276,7 +276,7 @@ func TestIn(t *testing.T) {
}
}
-func TestSubstr(t *testing.T) {
+func TestSlice(t *testing.T) {
for i, this := range []struct {
v1 interface{}
v2 int
@@ -286,14 +286,17 @@ func TestSubstr(t *testing.T) {
{"abc", 1, 2, "b"},
{"abc", 1, 3, "bc"},
{"abc", 0, 1, "a"},
+ {"abcdef", -1, -1, "abcdef"},
+ {"abcdef", -1, 2, "ab"},
+ {"abcdef", 2, -1, "cdef"},
{123, 1, 3, "23"},
{tstNoStringer{}, 0, 1, false},
} {
- result, err := Substr(this.v1, this.v2, this.v3)
+ result, err := Slice(this.v1, this.v2, this.v3)
if b, ok := this.expect.(bool); ok && !b {
if err == nil {
- t.Errorf("[%d] Substr didn't return an expected error", i)
+ t.Errorf("[%d] Slice didn't return an expected error", i)
}
} else {
if err != nil {