summaryrefslogtreecommitdiff
path: root/lib/fmtutil
diff options
context:
space:
mode:
authorLuke T. Shumaker <lukeshu@lukeshu.com>2024-02-19 14:46:33 -0700
committerLuke T. Shumaker <lukeshu@lukeshu.com>2024-02-19 21:49:29 -0700
commit8d9d4c98439bdfbfccaba28357944b6d866867bf (patch)
treeea1c03dac3b0b7e197bdf150a8392ce7731aa9ad /lib/fmtutil
parent76f668122f9feeb20e885be330990a750107d5dd (diff)
textui: Fix Metric() and IEC(), add tests, accept math/big values
Diffstat (limited to 'lib/fmtutil')
-rw-r--r--lib/fmtutil/fmt.go24
1 files changed, 23 insertions, 1 deletions
diff --git a/lib/fmtutil/fmt.go b/lib/fmtutil/fmt.go
index bad4a30..3d5fcb5 100644
--- a/lib/fmtutil/fmt.go
+++ b/lib/fmtutil/fmt.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2024 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -35,6 +35,28 @@ func FmtStateString(st fmt.State, verb rune) string {
return ret.String()
}
+// FmtStateStringWidth is like [FmtStateString], but overrides
+// st.Width().
+func FmtStateStringWidth(st fmt.State, verb rune, width int) string {
+ var ret strings.Builder
+ ret.WriteByte('%')
+ for _, flag := range []int{'-', '+', '#', ' ', '0'} {
+ if st.Flag(flag) {
+ ret.WriteByte(byte(flag))
+ }
+ }
+ fmt.Fprintf(&ret, "%v", width)
+ if prec, ok := st.Precision(); ok {
+ if prec == 0 {
+ ret.WriteByte('.')
+ } else {
+ fmt.Fprintf(&ret, ".%v", prec)
+ }
+ }
+ ret.WriteRune(verb)
+ return ret.String()
+}
+
// FormatByteArrayStringer is function for helping to implement
// fmt.Formatter for []byte or [n]byte types that have a custom string
// representation. Use it like: