aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormryouse2022-07-13 01:38:16 +0000
committermryouse2022-07-13 01:38:16 +0000
commit2ff2a5a22b53e20100447069ab24d0071a924a8c (patch)
tree2d94bdb58b7eb4f793c5744282159bd7a73ae75b
parente8577528a1df781c7a4f858d422820a3987e3e7e (diff)
add align
-rw-r--r--libs/fstring.neb44
1 files changed, 41 insertions, 3 deletions
diff --git a/libs/fstring.neb b/libs/fstring.neb
index 5edddca..82a3d2c 100644
--- a/libs/fstring.neb
+++ b/libs/fstring.neb
@@ -17,11 +17,49 @@
; then append to the end of the result
; - if the end of the string is successfully reached, return the result
+ (def digits (split "0123456789"))
+ (def aligns (split "^<>"))
+
+ (func repeat (cnt)
+ (def out "")
+ (for-count cnt
+ (redef out (concat out " ")))
+ out)
+
+ (func special-parse (str cur val)
+ (if (eq? "}" (first-char str))
+ (block
+ ; [align][width] (to start)
+ (def align-width
+ (if (in? (first-char cur) aligns)
+ (list (first-char cur) (string->int (rest-char cur)))
+ (list "<" (string->int cur))))
+ (branch
+ ((>= (length val) (last align-width))
+ (list val (rest-char str)))
+ ((eq? "<" (first align-width)) ; align left
+ (list (concat val (repeat (- (last align-width) (length val)))) (rest-char str)))
+ ((eq? ">" (first align-width)) ; align right
+ (list (concat (repeat (- (last align-width) (length val))) val) (rest-char str)))
+ (#true ; align center
+ (block
+ (def half (/ (- (last align-width) (length val)) 2))
+ (if (int? half)
+ (list (concat (repeat half) val (repeat half)) (rest-char str))
+ (list (concat (repeat (floor half)) val (repeat (+ 1 (floor half)))) (rest-char str)))))))
+
+ (special-parse (rest-char str) (concat cur (first-char str)) val)))
+
+
(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)))))
+ (branch
+ ((eq? "}" (first-char str))
+ (list (rest-char str) (->string (eval (parse-neb cur)))))
+ ((eq? "," (first-char str))
+ (special-parse (rest-char str) "" (->string (eval (parse-neb cur)))))
+ (#true
+ (brace-parse (rest-char str) (concat cur (first-char str))))))
(func inner-parse (str cur)
(branch