diff --git a/docs/scarpet/Full.md b/docs/scarpet/Full.md index 87375758..1fbefde5 100644 --- a/docs/scarpet/Full.md +++ b/docs/scarpet/Full.md @@ -1579,12 +1579,14 @@ join('-','foo') => foo join('-', 'foo', 'bar') => foo-bar -### `split(delim, expr)` +### `split(delim?, expr)` -Splits a string undr `expr` by `delim` which can be a regular expression +Splits a string under `expr` by `delim` which can be a regular expression. If no delimiter is specified, it splits +by characters.
-split('',foo)  => [f, o, o]
+split('foo') => [f, o, o]
+split('','foo')  => [f, o, o]
 split('.','foo.bar')  => []
 split('\\.','foo.bar')  => [foo, bar]
 
diff --git a/docs/scarpet/language/Containers.md b/docs/scarpet/language/Containers.md index 1dcd4fb1..1f4759d9 100644 --- a/docs/scarpet/language/Containers.md +++ b/docs/scarpet/language/Containers.md @@ -155,12 +155,14 @@ join('-','foo') => foo join('-', 'foo', 'bar') => foo-bar -### `split(delim, expr)` +### `split(delim?, expr)` -Splits a string undr `expr` by `delim` which can be a regular expression +Splits a string under `expr` by `delim` which can be a regular expression. If no delimiter is specified, it splits +by characters.
-split('',foo)  => [f, o, o]
+split('foo') => [f, o, o]
+split('','foo')  => [f, o, o]
 split('.','foo.bar')  => []
 split('\\.','foo.bar')  => [foo, bar]
 
diff --git a/src/main/java/carpet/script/language/DataStructures.java b/src/main/java/carpet/script/language/DataStructures.java index 42bdfdfa..c61f5d42 100644 --- a/src/main/java/carpet/script/language/DataStructures.java +++ b/src/main/java/carpet/script/language/DataStructures.java @@ -52,10 +52,24 @@ public class DataStructures { return new StringValue(toJoin.stream().map(Value::getString).collect(Collectors.joining(delimiter))); }); - expression.addBinaryFunction("split", (d, v) -> + expression.addFunction("split", (lv) -> { - String delimiter = d.getString(); - String hwat = v.getString(); + String delimiter; + String hwat; + if (lv.size() == 1) + { + hwat = lv.get(0).getString(); + delimiter = ""; + } + else if (lv.size() == 2) + { + delimiter = lv.get(0).getString(); + hwat = lv.get(1).getString(); + } + else + { + throw new InternalExpressionException("'split' takes 1 or 2 arguments"); + } try { return ListValue.wrap(Arrays.stream(hwat.split(delimiter)).map(StringValue::new).collect(Collectors.toList()));