github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/lists/jsplit.go (about) 1 package lists 2 3 import ( 4 "regexp" 5 6 "github.com/lmorg/murex/lang" 7 "github.com/lmorg/murex/lang/types" 8 "github.com/lmorg/murex/utils" 9 "github.com/lmorg/murex/utils/json" 10 ) 11 12 func init() { 13 lang.DefineMethod("jsplit", cmdJsplit, types.Text, types.Json) 14 } 15 16 func cmdJsplit(p *lang.Process) error { 17 p.Stdout.SetDataType(types.Json) 18 19 b, err := p.Stdin.ReadAll() 20 if err != nil { 21 return err 22 } 23 24 pattern := p.Parameters.StringAll() 25 rx, err := regexp.Compile(pattern) 26 if err != nil { 27 return err 28 } 29 30 split := rx.Split(string(b), -1) 31 // remove trailing \n 32 for i := range split { 33 trimString: 34 if len(split[i]) > 0 && 35 (split[i][len(split[i])-1] == '\r' || split[i][len(split[i])-1] == '\n') { 36 split[i] = utils.CrLfTrimString(split[i]) 37 goto trimString 38 } 39 } 40 41 trimArray: 42 if len(split) > 0 && split[len(split)-1] == "" { 43 split = split[:len(split)-1] 44 goto trimArray 45 } 46 47 json, err := json.Marshal(split, p.Stdout.IsTTY()) 48 if err != nil { 49 return err 50 } 51 52 _, err = p.Stdout.Write(json) 53 return err 54 }