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:
parent
cc1f84d1d3
commit
ce7d51f9be
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user