From 183dd0293b22c9089cacb0f035d9027a2ca53011 Mon Sep 17 00:00:00 2001 From: gnembon Date: Sun, 18 Oct 2020 21:28:58 -0300 Subject: [PATCH] split has default behaviour with no delimiter present --- docs/scarpet/Full.md | 8 +++++--- docs/scarpet/language/Containers.md | 8 +++++--- .../script/language/DataStructures.java | 20 ++++++++++++++++--- 3 files changed, 27 insertions(+), 9 deletions(-) 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()));