func regexpFindIndex( needle regexp.Regexp, haystack string) (glisp.Sexp, error) { loc := needle.FindStringIndex(haystack) arr := make([]glisp.Sexp, len(loc)) for i := range arr { arr[i] = glisp.Sexp(glisp.SexpInt(loc[i])) } return glisp.SexpArray(arr), nil }
func RegexpCompile(env *glisp.Glisp, name string, args []glisp.Sexp) (glisp.Sexp, error) { if len(args) < 1 { return glisp.SexpNull, glisp.WrongNargs } var re string switch t := args[0].(type) { case glisp.SexpStr: re = string(t) default: return glisp.SexpNull, errors.New("argument of regexp-compile should be a string") } r, err := regexp.Compile(re) if err != nil { return glisp.SexpNull, errors.New( fmt.Sprintf("error during regexp-compile: '%v'", err)) } return glisp.Sexp(SexpRegexp(*r)), nil }