diff options
| author | mryouse | 2022-07-13 01:38:16 +0000 |
|---|---|---|
| committer | mryouse | 2022-07-13 01:38:16 +0000 |
| commit | 2ff2a5a22b53e20100447069ab24d0071a924a8c (patch) | |
| tree | 2d94bdb58b7eb4f793c5744282159bd7a73ae75b /libs | |
| parent | e8577528a1df781c7a4f858d422820a3987e3e7e (diff) | |
add align
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/fstring.neb | 44 |
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 |
