diff options
Diffstat (limited to 'libs/fstring.neb')
| -rw-r--r-- | libs/fstring.neb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/libs/fstring.neb b/libs/fstring.neb new file mode 100644 index 0000000..5edddca --- /dev/null +++ b/libs/fstring.neb @@ -0,0 +1,35 @@ + +; bugs: +;#16> (fmt "{x} x {") +;exception! <class 'NameError'> name 'ev' is not defined + + +(func fmt :string (inp :string) + ; need two variables + ; 1. the current processed string + ; 2. the neb code to run + ; + ; algorithm + ; - read characters one by one, adding to result + ; - if reach a { + ; - read characters one by one, adding to neb code + ; - when reach }, try to execute the neb code, + ; then append to the end of the result + ; - if the end of the string is successfully reached, return the result + + (func brace-parse :[:string] (str :string cur :string) + ; returns (remaining value) + (if (eq? "}" (first-char str)) + (list (rest-char str) (->string (eval (parse-neb cur)))) + (brace-parse (rest-char str) (concat cur (first-char str))))) + + (func inner-parse (str cur) + (branch + ((eq? 0 (length str)) cur) + ((eq? "{" (first-char str)) + (block + (def tmp (brace-parse (rest-char str) "")) + (inner-parse (first tmp) (concat cur (first (rest tmp)))))) + (#true (inner-parse (rest-char str) (concat cur (first-char str)))))) + + (inner-parse inp "")) |
