aboutsummaryrefslogtreecommitdiff
path: root/neb/std/strings.py
diff options
context:
space:
mode:
authormryouse2022-06-21 01:49:29 +0000
committermryouse2022-06-21 01:49:29 +0000
commit776fe3193b515c028b5ac69326baed51d760d32f (patch)
treedb111c3fe7a20143b2f058259f86dbbecae4cbd6 /neb/std/strings.py
parentb1550660adaca68bb38541aed371e36b7000e124 (diff)
refactor: break stdlib into several files
Diffstat (limited to 'neb/std/strings.py')
-rw-r--r--neb/std/strings.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/neb/std/strings.py b/neb/std/strings.py
new file mode 100644
index 0000000..0d5ebdb
--- /dev/null
+++ b/neb/std/strings.py
@@ -0,0 +1,53 @@
+from .. import TypeEnum, Environment, Arg, Builtin, evaluate
+from ..structs import *
+
+STRINGS = Environment()
+
+def interpretConcat(symbol, args, env, ns):
+ out = ""
+ for arg in args:
+ out += arg.value
+ return String(out)
+
+string_arg = Arg("arg", TypeEnum.STRING)
+STRINGS.register("concat", Builtin(interpretConcat, [string_arg, string_arg], string_arg))
+
+def interpretStrip(symbol, args, env, ns):
+ return String(args[0].value.strip())
+
+STRINGS.register("strip", Builtin(interpretStrip, [Arg("filename", TypeEnum.STRING)]))
+def interpretStrip(symbol, args, env, ns):
+ return String(args[0].value.strip())
+
+STRINGS.register("strip", Builtin(interpretStrip, [Arg("filename", TypeEnum.STRING)]))
+
+def interpretSplit(symbol, args, env, ns):
+ target = args[0]
+ if len(args) == 1:
+ return List([String(char) for char in target.value])
+ splitter = args[1]
+ ret = target.value.split(splitter.value)
+ return List([String(r) for r in ret])
+
+STRINGS.register("split", Builtin(interpretSplit, [Arg("target", TypeEnum.STRING)], Arg("splitter", TypeEnum.STRING, optional=True)))
+
+def interpretJoin(symbol, args, env, ns):
+ lst = args[0]
+ target = args[1]
+ return String(target.value.join([a.value for a in lst.args]))
+
+join_list_arg = Arg("list", TypeEnum.LIST)
+join_string_arg = Arg("joiner", TypeEnum.STRING)
+STRINGS.register("join", Builtin(interpretJoin, [join_list_arg, join_string_arg]))
+
+def interpretFirstChar(symbol, args, env, ns):
+ if len(args[0].value) == 0:
+ raise InterpretPanic(symbol, ":string is empty", ev)
+ return String(args[0].value[0])
+
+STRINGS.register("first-char", Builtin(interpretFirstChar, [Arg("string", TypeEnum.STRING)]))
+
+def interpretRestChar(symbol, args, env, ns):
+ return String(args[0].value[1:])
+
+STRINGS.register("rest-char", Builtin(interpretRestChar, [Arg("string", TypeEnum.STRING)]))