diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-02-19 14:46:33 -0700 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-02-19 21:49:29 -0700 |
commit | 8d9d4c98439bdfbfccaba28357944b6d866867bf (patch) | |
tree | ea1c03dac3b0b7e197bdf150a8392ce7731aa9ad /lib/fmtutil | |
parent | 76f668122f9feeb20e885be330990a750107d5dd (diff) |
textui: Fix Metric() and IEC(), add tests, accept math/big values
Diffstat (limited to 'lib/fmtutil')
-rw-r--r-- | lib/fmtutil/fmt.go | 24 |
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: |