mirror of
https://codeberg.org/scip/tablizer.git
synced 2025-12-19 05:21:03 +01:00
added
This commit is contained in:
63
vendor/github.com/glycerine/zygomys/zygo/strutils.go
generated
vendored
Normal file
63
vendor/github.com/glycerine/zygomys/zygo/strutils.go
generated
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
package zygo
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func ConcatStr(str *SexpStr, rest []Sexp) (*SexpStr, error) {
|
||||
res := &SexpStr{S: str.S}
|
||||
for i, x := range rest {
|
||||
switch t := x.(type) {
|
||||
case *SexpStr:
|
||||
res.S += t.S
|
||||
case *SexpChar:
|
||||
res.S += string(t.Val)
|
||||
default:
|
||||
return &SexpStr{}, fmt.Errorf("ConcatStr error: %d-th argument (0-based) is "+
|
||||
"not a string (was %T)", i, t)
|
||||
}
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func AppendStr(str *SexpStr, expr Sexp) (*SexpStr, error) {
|
||||
var chr *SexpChar
|
||||
switch t := expr.(type) {
|
||||
case *SexpChar:
|
||||
chr = t
|
||||
case *SexpStr:
|
||||
return &SexpStr{S: str.S + t.S}, nil
|
||||
default:
|
||||
return &SexpStr{}, errors.New("second argument is not a char")
|
||||
}
|
||||
|
||||
return &SexpStr{S: str.S + string(chr.Val)}, nil
|
||||
}
|
||||
|
||||
func StringUtilFunction(env *Zlisp, name string, args []Sexp) (Sexp, error) {
|
||||
if len(args) != 1 {
|
||||
return SexpNull, WrongNargs
|
||||
}
|
||||
var s string
|
||||
switch str := args[0].(type) {
|
||||
case *SexpStr:
|
||||
s = str.S
|
||||
default:
|
||||
return SexpNull, fmt.Errorf("string required, got %T", s)
|
||||
}
|
||||
|
||||
switch name {
|
||||
case "chomp":
|
||||
n := len(s)
|
||||
if n > 0 && s[n-1] == '\n' {
|
||||
return &SexpStr{S: s[:n-1]}, nil
|
||||
}
|
||||
return &SexpStr{S: s}, nil
|
||||
case "trim":
|
||||
return &SexpStr{S: strings.TrimSpace(s)}, nil
|
||||
}
|
||||
return SexpNull, fmt.Errorf("unrecognized command '%s'", name)
|
||||
}
|
||||
Reference in New Issue
Block a user