1
0
mirror of https://github.com/janet-lang/janet synced 2024-12-01 20:39:55 +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))) (if (not= i len) (array/push ret (slicer ind i)))
ret) 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 ### IO Helpers