1
0
mirror of https://github.com/janet-lang/janet synced 2024-11-28 19:19:53 +00:00

Add dedent to core.

Makes longstrings easier to use - can be combined with comptime
for overhead free long strings.
This commit is contained in:
Calvin Rose 2020-04-26 11:53:26 -05:00
parent cc1f84d1d3
commit ce7d51f9be

View File

@ -1332,6 +1332,27 @@
(if (not= i len) (array/push ret (slicer ind i)))
ret)
(defn dedent
"Remove indentation after concatenating the arguments. Works by removing
leading whitespace, and then removing that same pattern of whitepsace after
new lines."
[& xs]
(def x (string ;xs))
(def first-letter (find-index (fn [c] (and (not= c (chr "\n"))
(not= c (chr " "))
(not= c (chr "\t"))
(not= c (chr "\r")))) x))
(if (not first-letter) (break ""))
(def leading-whitespace (string/slice x 0 first-letter))
(def indent (last (string/split "\n" leading-whitespace)))
(if (and indent (not= indent ""))
(let [y (string/replace-all (string "\n" indent) "\n" (string/replace indent "" x))]
# Remove trailing newline to mimic long string newline omission.
(if (= (chr "\n") (last y))
(slice y 0 -2)
y))
x))
###
###
### IO Helpers