mirror of
				https://github.com/janet-lang/janet
				synced 2025-10-31 15:43:01 +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:
		| @@ -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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Calvin Rose
					Calvin Rose