[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 01/04: Refactor `format' to use when/unless conventional
From: |
Andy Wingo |
Subject: |
[Guile-commits] 01/04: Refactor `format' to use when/unless conventionally |
Date: |
Tue, 13 Aug 2019 17:09:47 -0400 (EDT) |
wingo pushed a commit to branch master
in repository guile.
commit 077ba996e809189f06e23fb3e91c286360530d0e
Author: Andy Wingo <address@hidden>
Date: Tue Aug 13 22:22:42 2019 +0200
Refactor `format' to use when/unless conventionally
* module/ice-9/format.scm (format): Update to make one-armed ifs use
when/unless.
---
module/ice-9/format.scm | 551 ++++++++++++++++++++++++------------------------
1 file changed, 279 insertions(+), 272 deletions(-)
diff --git a/module/ice-9/format.scm b/module/ice-9/format.scm
index e7258a1..31409c6 100644
--- a/module/ice-9/format.scm
+++ b/module/ice-9/format.scm
@@ -1,5 +1,5 @@
;;;; "format.scm" Common LISP text output formatter for SLIB
-;;; Copyright (C) 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
+;;; Copyright (C) 2010-2013,2019 Free Software Foundation, Inc.
;;;
;;; This library is free software; you can redistribute it and/or
;;; modify it under the terms of the GNU Lesser General Public
@@ -37,8 +37,8 @@
(define format:version "3.0")
(define (format destination format-string . format-args)
- (if (not (string? format-string))
- (error "format: expected a string for format string" format-string))
+ (unless (string? format-string)
+ (error "format: expected a string for format string" format-string))
(let* ((port
(cond
@@ -100,8 +100,8 @@
(define (format:error . args) ; never returns!
(let ((port (current-error-port)))
(set! format:error format:intern-error)
- (if (not (zero? format:arg-pos))
- (set! format:arg-pos (- format:arg-pos 1)))
+ (unless (zero? format:arg-pos)
+ (set! format:arg-pos (- format:arg-pos 1)))
(format port
"~%FORMAT: error with call: (format ~a \"~a<===~a\" ~
~{~a ~}===>~{~a ~})~% "
@@ -169,9 +169,9 @@
(peek-next-char
(lambda ()
- (if (>= format:pos format-string-len)
- (format:error "illegal format string")
- (string-ref format-string format:pos))))
+ (when (>= format:pos format-string-len)
+ (format:error "illegal format string"))
+ (string-ref format-string format:pos)))
(one-positive-integer?
(lambda (params)
@@ -186,18 +186,17 @@
(next-arg
(lambda ()
- (if (>= arg-pos arg-len)
- (begin
- (set! format:arg-pos (+ arg-len 1))
- (format:error "missing argument(s)")))
+ (when (>= arg-pos arg-len)
+ (set! format:arg-pos (+ arg-len 1))
+ (format:error "missing argument(s)"))
(add-arg-pos 1)
(list-ref arglist (- arg-pos 1))))
(prev-arg
(lambda ()
(add-arg-pos -1)
- (if (negative? arg-pos)
- (format:error "missing backward argument(s)"))
+ (when (negative? arg-pos)
+ (format:error "missing backward argument(s)"))
(list-ref arglist arg-pos)))
(rest-args
@@ -222,9 +221,9 @@
(set! param-value-found #f)
(tilde-dispatch))
(else
- (if (and (zero? conditional-nest)
- (zero? iteration-nest))
- (format:out-char char))
+ (when (and (zero? conditional-nest)
+ (zero? iteration-nest))
+ (format:out-char char))
(anychar-dispatch)))))))
(tilde-dispatch
@@ -321,8 +320,8 @@
(anychar-dispatch))
((#\I) ; Complex numbers
(let ((z (next-arg)))
- (if (not (complex? z))
- (format:error "argument not a complex number"))
+ (unless (complex? z)
+ (format:error "argument not a complex number"))
(format:out-fixed modifier (real-part z) params)
(format:out-fixed 'at (imag-part z) params)
(format:out-char #\i))
@@ -331,15 +330,15 @@
(let ((ch (if (one-positive-integer? params)
(integer->char (car params))
(next-arg))))
- (if (not (char? ch))
- (format:error "~~c expects a character"))
+ (unless (char? ch)
+ (format:error "~~c expects a character"))
(case modifier
((at)
(format:out-str (object->string ch)))
((colon)
(let ((c (char->integer ch)))
- (if (< c 0)
- (set! c (+ c 256))) ; compensate
+ (when (< c 0)
+ (set! c (+ c 256))) ; compensate
; complement
; impl.
(cond
@@ -357,14 +356,14 @@
(else (format:out-char ch))))
(anychar-dispatch))
((#\P) ; Plural
- (if (memq modifier '(colon colon-at))
- (prev-arg))
+ (when (memq modifier '(colon colon-at))
+ (prev-arg))
(let ((arg (next-arg)))
- (if (not (number? arg))
- (format:error "~~p expects a number argument"))
+ (unless (number? arg)
+ (format:error "~~p expects a number argument"))
(if (= arg 1)
- (if (memq modifier '(at colon-at))
- (format:out-char #\y))
+ (when (memq modifier '(at colon-at))
+ (format:out-char #\y))
(if (memq modifier '(at colon-at))
(format:out-str "ies")
(format:out-char #\s))))
@@ -383,15 +382,13 @@
((#\&) ; Fresh line
(if (one-positive-integer? params)
(begin
- (if (> (car params) 0)
- (format:out-fill (- (car params)
- (if (>
- output-col
- 0) 0 1))
- #\newline))
+ (when (> (car params) 0)
+ (format:out-fill (- (car params)
+ (if (> output-col 0) 0 1))
+ #\newline))
(set! output-col 0))
- (if (> output-col 0)
- (format:out-char #\newline)))
+ (when (> output-col 0)
+ (format:out-char #\newline)))
(anychar-dispatch))
((#\_) ; Space character
(if (one-positive-integer? params)
@@ -456,8 +453,8 @@
(set! flush-output? #t)
(anychar-dispatch))
((#\newline) ; Continuation lines
- (if (eq? modifier 'at)
- (format:out-char #\newline))
+ (when (eq? modifier 'at)
+ (format:out-char #\newline))
(if (< format:pos format-string-len)
(do ((ch (peek-next-char) (peek-next-char)))
((or (not (char-whitespace? ch))
@@ -475,8 +472,8 @@
(prev-arg))
(prev-arg)))
((at) ; jump absolute
- (set! arg-pos (if (one-positive-integer? params)
- (car params) 0)))
+ (set! arg-pos
+ (if (one-positive-integer? params) (car params)
0)))
((colon-at)
(format:error "illegal modifier `:@' in ~~* directive"))
(else ; jump forward
@@ -495,8 +492,8 @@
(else string-downcase)))
(anychar-dispatch))
((#\)) ; Case conversion end
- (if (not format:case-conversion)
- (format:error "missing ~~("))
+ (unless format:case-conversion
+ (format:error "missing ~~("))
(set! format:case-conversion #f)
(anychar-dispatch))
((#\[) ; Conditional begin
@@ -518,32 +515,33 @@
(next-arg)))))
(anychar-dispatch))
((#\;) ; Conditional separator
- (if (zero? conditional-nest)
- (format:error "~~; not in ~~[~~] conditional"))
- (if (not (null? params))
- (format:error "no parameter allowed in ~~;"))
- (if (= conditional-nest 1)
- (let ((clause-str
- (cond
- ((eq? modifier 'colon)
- (set! clause-default #t)
- (substring format-string clause-pos
- (- format:pos 3)))
- ((memq modifier '(at colon-at))
- (format:error "illegal modifier in ~~;"))
- (else
- (substring format-string clause-pos
- (- format:pos 2))))))
- (set! clauses (append clauses (list clause-str)))
- (set! clause-pos format:pos)))
+ (when (zero? conditional-nest)
+ (format:error "~~; not in ~~[~~] conditional"))
+ (unless (null? params)
+ (format:error "no parameter allowed in ~~;"))
+ (when (= conditional-nest 1)
+ (let ((clause-str
+ (cond
+ ((eq? modifier 'colon)
+ (set! clause-default #t)
+ (substring format-string clause-pos
+ (- format:pos 3)))
+ ((memq modifier '(at colon-at))
+ (format:error "illegal modifier in ~~;"))
+ (else
+ (substring format-string clause-pos
+ (- format:pos 2))))))
+ (set! clauses (append clauses (list clause-str)))
+ (set! clause-pos format:pos)))
(anychar-dispatch))
((#\]) ; Conditional end
- (if (zero? conditional-nest) (format:error "missing ~~["))
+ (when (zero? conditional-nest)
+ (format:error "missing ~~["))
(set! conditional-nest (- conditional-nest 1))
- (if modifier
- (format:error "no modifier allowed in ~~]"))
- (if (not (null? params))
- (format:error "no parameter allowed in ~~]"))
+ (when modifier
+ (format:error "no modifier allowed in ~~]"))
+ (unless (null? params)
+ (format:error "no parameter allowed in ~~]"))
(cond
((zero? conditional-nest)
(let ((clause-str (substring format-string clause-pos
@@ -553,9 +551,9 @@
(set! clauses (append clauses (list clause-str)))))
(case conditional-type
((if-then)
- (if conditional-arg
- (format:format-work (car clauses)
- (list conditional-arg))))
+ (when conditional-arg
+ (format:format-work (car clauses)
+ (list conditional-arg))))
((if-else-then)
(add-arg-pos
(format:format-work (if conditional-arg
@@ -563,17 +561,17 @@
(car clauses))
(rest-args))))
((num-case)
- (if (or (not (integer? conditional-arg))
- (< conditional-arg 0))
- (format:error "argument not a positive integer"))
- (if (not (and (>= conditional-arg (length clauses))
- (not clause-default)))
- (add-arg-pos
- (format:format-work
- (if (>= conditional-arg (length clauses))
- clause-default
- (list-ref clauses conditional-arg))
- (rest-args))))))))
+ (when (or (not (integer? conditional-arg))
+ (< conditional-arg 0))
+ (format:error "argument not a positive integer"))
+ (unless (and (>= conditional-arg (length clauses))
+ (not clause-default))
+ (add-arg-pos
+ (format:format-work
+ (if (>= conditional-arg (length clauses))
+ clause-default
+ (list-ref clauses conditional-arg))
+ (rest-args))))))))
(anychar-dispatch))
((#\{) ; Iteration begin
(set! iteration-nest (+ iteration-nest 1))
@@ -586,30 +584,32 @@
((colon) 'sublists)
((colon-at) 'rest-sublists)
(else 'list)))
- (set! max-iterations (if (one-positive-integer? params)
- (car params) #f))))
+ (set! max-iterations
+ (if (one-positive-integer? params)
+ (car params)
+ #f))))
(anychar-dispatch))
((#\}) ; Iteration end
- (if (zero? iteration-nest) (format:error "missing ~~{"))
+ (when (zero? iteration-nest) (format:error "missing ~~{"))
(set! iteration-nest (- iteration-nest 1))
(case modifier
((colon)
- (if (not max-iterations) (set! max-iterations 1)))
+ (unless max-iterations (set! max-iterations 1)))
((colon-at at) (format:error "illegal modifier")))
- (if (not (null? params))
- (format:error "no parameters allowed in ~~}"))
+ (unless (null? params)
+ (format:error "no parameters allowed in ~~}"))
(if (zero? iteration-nest)
(let ((iteration-str
(substring format-string iteration-pos
(- format:pos (if modifier 3 2)))))
- (if (string=? iteration-str "")
- (set! iteration-str (next-arg)))
+ (when (string=? iteration-str "")
+ (set! iteration-str (next-arg)))
(case iteration-type
((list)
(let ((args (next-arg))
(args-len 0))
- (if (not (list? args))
- (format:error "expected a list argument"))
+ (unless (list? args)
+ (format:error "expected a list argument"))
(set! args-len (length args))
(do ((arg-pos 0 (+ arg-pos
(format:format-work
@@ -622,17 +622,16 @@
((sublists)
(let ((args (next-arg))
(args-len 0))
- (if (not (list? args))
- (format:error "expected a list argument"))
+ (unless (list? args)
+ (format:error "expected a list argument"))
(set! args-len (length args))
(do ((arg-pos 0 (+ arg-pos 1)))
((or (>= arg-pos args-len)
(and max-iterations
(>= arg-pos max-iterations))))
(let ((sublist (list-ref args arg-pos)))
- (if (not (list? sublist))
- (format:error
- "expected a list of lists argument"))
+ (unless (list? sublist)
+ (format:error "expected a list of lists
argument"))
(format:format-work iteration-str
sublist)))))
((rest-args)
(let* ((args (rest-args))
@@ -659,8 +658,8 @@
(>= arg-pos max-iterations)))
arg-pos)
(let ((sublist (list-ref args arg-pos)))
- (if (not (list? sublist))
- (format:error "expected list
arguments"))
+ (unless (list? sublist)
+ (format:error "expected list
arguments"))
(format:format-work iteration-str
sublist)))))
(add-arg-pos usedup-args)))
(else (format:error "internal error in ~~}")))))
@@ -684,28 +683,30 @@
((>= arg-pos arg-len)
(set! format:pos format-string-len) #f)
(else #t))))
- (if continue
- (anychar-dispatch))))
+ (when continue
+ (anychar-dispatch))))
;; format directive modifiers and parameters
((#\@) ; `@' modifier
- (if (memq modifier '(at colon-at))
- (format:error "double `@' modifier"))
+ (when (memq modifier '(at colon-at))
+ (format:error "double `@' modifier"))
(set! modifier (if (eq? modifier 'colon) 'colon-at 'at))
(tilde-dispatch))
((#\:) ; `:' modifier
- (if (memq modifier '(colon colon-at))
- (format:error "double `:' modifier"))
+ (when (memq modifier '(colon colon-at))
+ (format:error "double `:' modifier"))
(set! modifier (if (eq? modifier 'at) 'colon-at 'colon))
(tilde-dispatch))
((#\') ; Character parameter
- (if modifier (format:error "misplaced modifier"))
+ (when modifier
+ (format:error "misplaced modifier"))
(set! params (append params (list (char->integer
(next-char)))))
(set! param-value-found #t)
(tilde-dispatch))
((#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9 #\- #\+) ; num.
paramtr
- (if modifier (format:error "misplaced modifier"))
+ (when modifier
+ (format:error "misplaced modifier"))
(let ((num-str-beg (- format:pos 1))
(num-str-end format:pos))
(do ((ch (peek-next-char) (peek-next-char)))
@@ -721,20 +722,24 @@
(set! param-value-found #t)
(tilde-dispatch))
((#\V) ; Variable parameter from next argum.
- (if modifier (format:error "misplaced modifier"))
+ (when modifier
+ (format:error "misplaced modifier"))
(set! params (append params (list (next-arg))))
(set! param-value-found #t)
(tilde-dispatch))
((#\#) ; Parameter is number of remaining args
- (if param-value-found (format:error "misplaced '#'"))
- (if modifier (format:error "misplaced modifier"))
+ (when param-value-found
+ (format:error "misplaced '#'"))
+ (when modifier
+ (format:error "misplaced modifier"))
(set! params (append params (list (length (rest-args)))))
(set! param-value-found #t)
(tilde-dispatch))
((#\,) ; Parameter separators
- (if modifier (format:error "misplaced modifier"))
- (if (not param-value-found)
- (set! params (append params '(#f)))) ; append empty
paramtr
+ (when modifier
+ (format:error "misplaced modifier"))
+ (unless param-value-found
+ (set! params (append params '(#f)))) ; append empty
paramtr
(set! param-value-found #f)
(tilde-dispatch))
((#\Q) ; Inquiry messages
@@ -802,17 +807,18 @@
(padchar (integer->char
(format:par pars l 3 format:space-ch #f)))
(objstr (format:obj->str obj slashify)))
- (if (not pad-left)
- (format:out-str objstr))
+ (unless pad-left
+ (format:out-str objstr))
(do ((objstr-len (string-length objstr))
(i minpad (+ i colinc)))
((>= (+ objstr-len i) mincol)
(format:out-fill i padchar)))
- (if pad-left
- (format:out-str objstr))))))
+ (when pad-left
+ (format:out-str objstr))))))
(define (format:out-num-padded modifier number pars radix)
- (if (not (integer? number)) (format:error "argument not an integer"))
+ (unless (integer? number)
+ (format:error "argument not an integer"))
(let ((numstr (number->string number radix)))
(if (and (null? pars) (not modifier))
(format:out-str numstr)
@@ -824,28 +830,28 @@
(commachar (integer->char
(format:par pars l 2 (char->integer #\,) #f)))
(commawidth (format:par pars l 3 3 "commawidth")))
- (if mincol
- (let ((numlen numstr-len)) ; calc. the output len of number
- (if (and (memq modifier '(at colon-at)) (>= number 0))
- (set! numlen (+ numlen 1)))
- (if (memq modifier '(colon colon-at))
- (set! numlen (+ (quotient (- numstr-len
- (if (< number 0) 2 1))
- commawidth)
- numlen)))
- (if (> mincol numlen)
- (format:out-fill (- mincol numlen) padchar))))
- (if (and (memq modifier '(at colon-at))
- (>= number 0))
- (format:out-char #\+))
+ (when mincol
+ (let ((numlen numstr-len)) ; calc. the output len of number
+ (when (and (memq modifier '(at colon-at)) (>= number 0))
+ (set! numlen (+ numlen 1)))
+ (when (memq modifier '(colon colon-at))
+ (set! numlen (+ (quotient (- numstr-len
+ (if (< number 0) 2 1))
+ commawidth)
+ numlen)))
+ (when (> mincol numlen)
+ (format:out-fill (- mincol numlen) padchar))))
+ (when (and (memq modifier '(at colon-at))
+ (>= number 0))
+ (format:out-char #\+))
(if (memq modifier '(colon colon-at)) ; insert comma character
(let ((start (remainder numstr-len commawidth))
(ns (if (< number 0) 1 0)))
(format:out-substr numstr 0 start)
(do ((i start (+ i commawidth)))
((>= i numstr-len))
- (if (> i ns)
- (format:out-char commachar))
+ (when (> i ns)
+ (format:out-char commachar))
(format:out-substr numstr i (+ i commawidth))))
(format:out-str numstr)))))))
@@ -894,7 +900,8 @@
(let loop ((n n)
(romans format:roman-alist)
(s '()))
- (if (null? romans) (list->string (reverse s))
+ (if (null? romans)
+ (list->string (reverse s))
(let ((roman-val (caar romans))
(roman-dgt (cadar romans)))
(do ((q (quotient n roman-val) (- q 1))
@@ -905,30 +912,30 @@
(format:error "only positive integers can be romanized")))
(define (format:num->roman n)
- (if (and (integer? n) (> n 0))
- (let loop ((n n)
- (romans format:roman-alist)
- (boundaries format:roman-boundary-values)
- (s '()))
- (if (null? romans)
- (list->string (reverse s))
- (let ((roman-val (caar romans))
- (roman-dgt (cadar romans))
- (bdry (car boundaries)))
- (let loop2 ((q (quotient n roman-val))
- (r (remainder n roman-val))
- (s s))
- (if (= q 0)
- (if (and bdry (>= r (- roman-val bdry)))
- (loop (remainder r bdry) (cdr romans)
- (cdr boundaries)
- (cons roman-dgt
- (append
- (cdr (assv bdry romans))
- s)))
- (loop r (cdr romans) (cdr boundaries) s))
- (loop2 (- q 1) r (cons roman-dgt s)))))))
- (format:error "only positive integers can be romanized")))
+ (unless (and (integer? n) (> n 0))
+ (format:error "only positive integers can be romanized"))
+ (let loop ((n n)
+ (romans format:roman-alist)
+ (boundaries format:roman-boundary-values)
+ (s '()))
+ (if (null? romans)
+ (list->string (reverse s))
+ (let ((roman-val (caar romans))
+ (roman-dgt (cadar romans))
+ (bdry (car boundaries)))
+ (let loop2 ((q (quotient n roman-val))
+ (r (remainder n roman-val))
+ (s s))
+ (if (= q 0)
+ (if (and bdry (>= r (- roman-val bdry)))
+ (loop (remainder r bdry) (cdr romans)
+ (cdr boundaries)
+ (cons roman-dgt
+ (append
+ (cdr (assv bdry romans))
+ s)))
+ (loop r (cdr romans) (cdr boundaries) s))
+ (loop2 (- q 1) r (cons roman-dgt s))))))))
;; cardinals & ordinals (from address@hidden)
@@ -1001,7 +1008,8 @@
(if (> n-after-block 0)
(append
(if (> n-before-block 0)
- (string->list ", ") '())
+ (string->list ", ")
+ '())
(format:num->cardinal999 n-after-block)
(if (< power3 power3-word-limit)
(string->list
@@ -1042,7 +1050,8 @@
(format:num->cardinal (* hundreds 100))
(if (= tens+ones 0) "th" " "))
"")
- (if (= tens+ones 0) ""
+ (if (= tens+ones 0)
+ ""
(if (< tens+ones 20)
(list-ref format:ordinal-ones-list tens+ones)
(let ((tens (quotient tens+ones 10))
@@ -1082,8 +1091,8 @@
;; format fixed flonums (~F)
(define (format:out-fixed modifier number pars)
- (if (not (or (number? number) (string? number)))
- (format:error "argument is not a number or a number string"))
+ (unless (or (number? number) (string? number))
+ (format:error "argument is not a number or a number string"))
(let ((l (length pars)))
(let ((width (format:par pars l 0 #f "width"))
@@ -1104,12 +1113,12 @@
(format:fn-round digits))
(if width
(let ((numlen (+ format:fn-len 1)))
- (if (or (not format:fn-pos?) (eq? modifier 'at))
- (set! numlen (+ numlen 1)))
- (if (and (= format:fn-dot 0) (> width (+ digits 1)))
- (set! numlen (+ numlen 1)))
- (if (< numlen width)
- (format:out-fill (- width numlen) (integer->char padch)))
+ (when (or (not format:fn-pos?) (eq? modifier 'at))
+ (set! numlen (+ numlen 1)))
+ (when (and (= format:fn-dot 0) (> width (+ digits 1)))
+ (set! numlen (+ numlen 1)))
+ (when (< numlen width)
+ (format:out-fill (- width numlen) (integer->char padch)))
(if (and overch (> numlen width))
(format:out-fill width (integer->char overch))
(format:fn-out modifier (> width (+ digits 1)))))
@@ -1120,12 +1129,12 @@
(format:fn-strip)
(if width
(let ((numlen (+ format:fn-len 1)))
- (if (or (not format:fn-pos?) (eq? modifier 'at))
- (set! numlen (+ numlen 1)))
- (if (= format:fn-dot 0)
- (set! numlen (+ numlen 1)))
- (if (< numlen width)
- (format:out-fill (- width numlen) (integer->char padch)))
+ (when (or (not format:fn-pos?) (eq? modifier 'at))
+ (set! numlen (+ numlen 1)))
+ (when (= format:fn-dot 0)
+ (set! numlen (+ numlen 1)))
+ (when (< numlen width)
+ (format:out-fill (- width numlen) (integer->char padch)))
(if (> numlen width) ; adjust precision if possible
(let ((dot-index (- numlen
(- format:fn-len format:fn-dot))))
@@ -1142,8 +1151,8 @@
;; format exponential flonums (~E)
(define (format:out-expon modifier number pars)
- (if (not (or (number? number) (string? number)))
- (format:error "argument is not a number"))
+ (unless (or (number? number) (string? number))
+ (format:error "argument is not a number"))
(let ((l (length pars)))
(let ((width (format:par pars l 0 #f "width"))
@@ -1174,18 +1183,18 @@
(if (and edigits overch (> format:en-len edigits))
(format:out-fill width (integer->char overch))
(let ((numlen (+ format:fn-len 3))) ; .E+
- (if (or (not format:fn-pos?) (eq? modifier 'at))
- (set! numlen (+ numlen 1)))
- (if (and (= format:fn-dot 0) (> width (+ digits 1)))
- (set! numlen (+ numlen 1)))
+ (when (or (not format:fn-pos?) (eq? modifier 'at))
+ (set! numlen (+ numlen 1)))
+ (when (and (= format:fn-dot 0) (> width (+ digits 1)))
+ (set! numlen (+ numlen 1)))
(set! numlen
(+ numlen
(if (and edigits (>= edigits format:en-len))
edigits
format:en-len)))
- (if (< numlen width)
- (format:out-fill (- width numlen)
- (integer->char padch)))
+ (when (< numlen width)
+ (format:out-fill (- width numlen)
+ (integer->char padch)))
(if (and overch (> numlen width))
(format:out-fill width (integer->char overch))
(begin
@@ -1202,18 +1211,18 @@
(if (and edigits overch (> format:en-len edigits))
(format:out-fill width (integer->char overch))
(let ((numlen (+ format:fn-len 3))) ; .E+
- (if (or (not format:fn-pos?) (eq? modifier 'at))
- (set! numlen (+ numlen 1)))
- (if (= format:fn-dot 0)
- (set! numlen (+ numlen 1)))
+ (when (or (not format:fn-pos?) (eq? modifier 'at))
+ (set! numlen (+ numlen 1)))
+ (when (= format:fn-dot 0)
+ (set! numlen (+ numlen 1)))
(set! numlen
(+ numlen
(if (and edigits (>= edigits format:en-len))
edigits
format:en-len)))
- (if (< numlen width)
- (format:out-fill (- width numlen)
- (integer->char padch)))
+ (when (< numlen width)
+ (format:out-fill (- width numlen)
+ (integer->char padch)))
(if (> numlen width) ; adjust precision if possible
(let ((f (- format:fn-len format:fn-dot))) ; fract
len
(if (> (- numlen f) width)
@@ -1237,8 +1246,8 @@
;; format general flonums (~G)
(define (format:out-general modifier number pars)
- (if (not (or (number? number) (string? number)))
- (format:error "argument is not a number or a number string"))
+ (unless (or (number? number) (string? number))
+ (format:error "argument is not a number or a number string"))
(let ((l (length pars)))
(let ((width (if (> l 0) (list-ref pars 0) #f))
@@ -1272,8 +1281,8 @@
;; format dollar flonums (~$)
(define (format:out-dollar modifier number pars)
- (if (not (or (number? number) (string? number)))
- (format:error "argument is not a number or a number string"))
+ (unless (or (number? number) (string? number))
+ (format:error "argument is not a number or a number string"))
(let ((l (length pars)))
(let ((digits (format:par pars l 0 2 "digits"))
@@ -1292,17 +1301,17 @@
(format:fn-zfill #f (- digits (- format:fn-len format:fn-dot)))
(format:fn-round digits))
(let ((numlen (+ format:fn-len 1)))
- (if (or (not format:fn-pos?) (memq modifier '(at colon-at)))
- (set! numlen (+ numlen 1)))
- (if (and mindig (> mindig format:fn-dot))
- (set! numlen (+ numlen (- mindig format:fn-dot))))
- (if (and (= format:fn-dot 0) (not mindig))
- (set! numlen (+ numlen 1)))
+ (when (or (not format:fn-pos?) (memq modifier '(at colon-at)))
+ (set! numlen (+ numlen 1)))
+ (when (and mindig (> mindig format:fn-dot))
+ (set! numlen (+ numlen (- mindig format:fn-dot))))
+ (when (and (= format:fn-dot 0) (not mindig))
+ (set! numlen (+ numlen 1)))
(if (< numlen width)
(case modifier
((colon)
- (if (not format:fn-pos?)
- (format:out-char #\-))
+ (unless format:fn-pos?
+ (format:out-char #\-))
(format:out-fill (- width numlen) (integer->char padch)))
((at)
(format:out-fill (- width numlen) (integer->char padch))
@@ -1312,15 +1321,16 @@
(format:out-fill (- width numlen) (integer->char padch)))
(else
(format:out-fill (- width numlen) (integer->char padch))
- (if (not format:fn-pos?)
- (format:out-char #\-))))
+ (unless format:fn-pos?
+ (format:out-char #\-))))
(if format:fn-pos?
- (if (memq modifier '(at colon-at)) (format:out-char #\+))
+ (when (memq modifier '(at colon-at))
+ (format:out-char #\+))
(format:out-char #\-))))
- (if (and mindig (> mindig format:fn-dot))
- (format:out-fill (- mindig format:fn-dot) #\0))
- (if (and (= format:fn-dot 0) (not mindig))
- (format:out-char #\0))
+ (when (and mindig (> mindig format:fn-dot))
+ (format:out-fill (- mindig format:fn-dot) #\0))
+ (when (and (= format:fn-dot 0) (not mindig))
+ (format:out-char #\0))
(format:out-substr format:fn-str 0 format:fn-dot)
(format:out-char #\.)
(format:out-substr format:fn-str format:fn-dot format:fn-len))))))
@@ -1353,49 +1363,48 @@
(num-len (string-length num-str))
(c #f)) ; current exam. character in num-str
((= i num-len)
- (if (not format:fn-dot)
- (set! format:fn-dot format:fn-len))
+ (unless format:fn-dot
+ (set! format:fn-dot format:fn-len))
- (if all-zeros?
- (begin
- (set! left-zeros 0)
- (set! format:fn-dot 0)
- (set! format:fn-len 1)))
+ (when all-zeros?
+ (set! left-zeros 0)
+ (set! format:fn-dot 0)
+ (set! format:fn-len 1))
;; now format the parsed values according to format's need
(if fixed?
(begin ; fixed format m.nnn or .nnn
- (if (and (> left-zeros 0) (> format:fn-dot 0))
- (if (> format:fn-dot left-zeros)
- (begin ; norm 0{0}nn.mm to nn.mm
- (format:fn-shiftleft left-zeros)
- (set! format:fn-dot (- format:fn-dot left-zeros))
- (set! left-zeros 0))
- (begin ; normalize 0{0}.nnn to .nnn
- (format:fn-shiftleft format:fn-dot)
- (set! left-zeros (- left-zeros format:fn-dot))
- (set! format:fn-dot 0))))
- (if (or (not (= scale 0)) (> format:en-len 0))
- (let ((shift (+ scale (format:en-int))))
- (cond
- (all-zeros? #t)
- ((> (+ format:fn-dot shift) format:fn-len)
- (format:fn-zfill
- #f (- shift (- format:fn-len format:fn-dot)))
- (set! format:fn-dot format:fn-len))
- ((< (+ format:fn-dot shift) 0)
- (format:fn-zfill #t (- (- shift) format:fn-dot))
- (set! format:fn-dot 0))
- (else
- (if (> left-zeros 0)
- (if (<= left-zeros shift) ; shift always > 0
here
- (format:fn-shiftleft shift) ; shift out 0s
- (begin
- (format:fn-shiftleft left-zeros)
- (set! format:fn-dot (- shift
left-zeros))))
- (set! format:fn-dot (+ format:fn-dot
shift))))))))
+ (when (and (> left-zeros 0) (> format:fn-dot 0))
+ (if (> format:fn-dot left-zeros)
+ (begin ; norm 0{0}nn.mm to nn.mm
+ (format:fn-shiftleft left-zeros)
+ (set! format:fn-dot (- format:fn-dot left-zeros))
+ (set! left-zeros 0))
+ (begin ; normalize 0{0}.nnn to .nnn
+ (format:fn-shiftleft format:fn-dot)
+ (set! left-zeros (- left-zeros format:fn-dot))
+ (set! format:fn-dot 0))))
+ (when (or (not (= scale 0)) (> format:en-len 0))
+ (let ((shift (+ scale (format:en-int))))
+ (cond
+ (all-zeros? #t)
+ ((> (+ format:fn-dot shift) format:fn-len)
+ (format:fn-zfill
+ #f (- shift (- format:fn-len format:fn-dot)))
+ (set! format:fn-dot format:fn-len))
+ ((< (+ format:fn-dot shift) 0)
+ (format:fn-zfill #t (- (- shift) format:fn-dot))
+ (set! format:fn-dot 0))
+ (else
+ (if (> left-zeros 0)
+ (if (<= left-zeros shift) ; shift always > 0 here
+ (format:fn-shiftleft shift) ; shift out 0s
+ (begin
+ (format:fn-shiftleft left-zeros)
+ (set! format:fn-dot (- shift left-zeros))))
+ (set! format:fn-dot (+ format:fn-dot shift))))))))
(let ((negexp ; expon format m.nnnEee
(if (> left-zeros 0)
@@ -1405,8 +1414,8 @@
(begin ; normalize 0{0}.nnn to n.nn
(format:fn-shiftleft left-zeros)
(set! format:fn-dot 1))
- (if (= format:fn-dot 0)
- (set! format:fn-dot 1)))
+ (when (= format:fn-dot 0)
+ (set! format:fn-dot 1)))
(format:en-set (- (+ (- format:fn-dot scale)
(format:en-int))
negexp))
(cond
@@ -1430,8 +1439,8 @@
(if mantissa? ; complex numbers
(begin
(if (char=? c #\0)
- (if all-zeros?
- (set! left-zeros (+ left-zeros 1)))
+ (when all-zeros?
+ (set! left-zeros (+ left-zeros 1)))
(begin
(set! all-zeros? #f)))
(string-set! format:fn-str format:fn-len c)
@@ -1476,14 +1485,13 @@
(c #f))
((= i en-len))
(set! c (string-ref en-str i))
- (if (char-numeric? c)
- (begin
- (string-set! format:en-str format:en-len c)
- (set! format:en-len (+ format:en-len 1)))))))
+ (when (char-numeric? c)
+ (string-set! format:en-str format:en-len c)
+ (set! format:en-len (+ format:en-len 1))))))
(define (format:fn-zfill left? n) ; fill current number string with 0s
- (if (> (+ n format:fn-len) format:fn-max) ; from the left or right
- (format:error "number is too long to format (enlarge
format:fn-max)"))
+ (when (> (+ n format:fn-len) format:fn-max) ; from the left or right
+ (format:error "number is too long to format (enlarge format:fn-max)"))
(set! format:fn-len (+ format:fn-len n))
(if left?
(do ((i format:fn-len (- i 1))) ; fill n 0s to left
@@ -1497,9 +1505,9 @@
(string-set! format:fn-str i #\0))))
(define (format:fn-shiftleft n) ; shift left current number n positions
- (if (> n format:fn-len)
- (format:error "internal error in format:fn-shiftleft (~d,~d)"
- n format:fn-len))
+ (when (> n format:fn-len)
+ (format:error "internal error in format:fn-shiftleft (~d,~d)"
+ n format:fn-len))
(do ((i n (+ i 1)))
((= i format:fn-len)
(set! format:fn-len (- format:fn-len n)))
@@ -1527,12 +1535,12 @@
(define (format:fn-out modifier add-leading-zero?)
(if format:fn-pos?
- (if (eq? modifier 'at)
- (format:out-char #\+))
+ (when (eq? modifier 'at)
+ (format:out-char #\+))
(format:out-char #\-))
(if (= format:fn-dot 0)
- (if add-leading-zero?
- (format:out-char #\0))
+ (when add-leading-zero?
+ (format:out-char #\0))
(format:out-substr format:fn-str 0 format:fn-dot))
(format:out-char #\.)
(format:out-substr format:fn-str format:fn-dot format:fn-len))
@@ -1540,9 +1548,8 @@
(define (format:en-out edigits expch)
(format:out-char (if expch (integer->char expch) #\E))
(format:out-char (if format:en-pos? #\+ #\-))
- (if edigits
- (if (< format:en-len edigits)
- (format:out-fill (- edigits format:en-len) #\0)))
+ (when (and edigits (< format:en-len edigits))
+ (format:out-fill (- edigits format:en-len) #\0))
(format:out-substr format:en-str 0 format:en-len))
(define (format:fn-strip) ; strip trailing zeros but one
@@ -1570,12 +1577,12 @@
(do ((i 0 (+ i 1)))
((= i str-len) cap-str)
(let ((c (string-ref str i)))
- (if (char-alphabetic? c)
- (if non-first-alpha
- (string-set! cap-str i (char-downcase c))
- (begin
- (set! non-first-alpha #t)
- (string-set! cap-str i (char-upcase c)))))))))
+ (when (char-alphabetic? c)
+ (if non-first-alpha
+ (string-set! cap-str i (char-downcase c))
+ (begin
+ (set! non-first-alpha #t)
+ (string-set! cap-str i (char-upcase c)))))))))
;; Aborts the program when a formatting error occures. This is a null
;; argument closure to jump to the interpreters toplevel continuation.
@@ -1590,8 +1597,8 @@
(display format:arg-pos)
(format:error "~a missing argument~:p" (- arg-pos arg-len)))
(else
- (if flush-output?
- (force-output port))
+ (when flush-output?
+ (force-output port))
(if destination
#t
(let ((str (get-output-string port)))