summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--stream.c3
-rw-r--r--tests/018/format.tl5
-rw-r--r--txr.112
3 files changed, 20 insertions, 0 deletions
diff --git a/stream.c b/stream.c
index 248a51b2..77af0b37 100644
--- a/stream.c
+++ b/stream.c
@@ -3351,6 +3351,9 @@ val formatv(val stream_in, val fmtstr, struct args *al)
case '+': case ' ':
sign = ch;
continue;
+ case '-':
+ sign = '0';
+ continue;
case '*':
saved_state = state;
state = vf_star;
diff --git a/tests/018/format.tl b/tests/018/format.tl
index b8cf7445..6c58d45b 100644
--- a/tests/018/format.tl
+++ b/tests/018/format.tl
@@ -24,6 +24,11 @@
(fmt "~4,03x" #xaf) " 0af"
(fmt "~-4,03X" #xaf) "0AF ")
+(mtest
+ (fmt "~8,02f" 12) " 0012.00"
+ (fmt "~8,+02f" 12) "+0012.00"
+ (fmt "~8,-02f" 12) "00012.00")
+
(test
(fmt "~x" (sha256 "abc"))
"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad")
diff --git a/txr.1 b/txr.1
index 3bbcf973..9ef21238 100644
--- a/txr.1
+++ b/txr.1
@@ -54526,9 +54526,21 @@ The precision specifier may begin with these optional characters:
(the "leading zero indicator"),
.coIP +
(print a sign for positive values")
+.coIP -
+(print a zero in place of a positive sign).
.IP space
(print a space in place of a positive sign).
.RE
+If the
+.codn + ,
+.code -
+or
+space are multiply specified, the rightmost one takes precedence. The
+prefix character that these three options produce (plus sign, zero or space) is
+produced unconditionally, even if it overflows the width of the field.
+Leading zeros produced by the
+.code 0
+option are not generated if they would overflow the field.
The precision specifier itself follows: it must be either a decimal integer
or the