Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,104 @@
|
||||
module strconv
|
||||
|
||||
import strings
|
||||
|
||||
/*
|
||||
printf/sprintf V implementation
|
||||
|
||||
Copyright (c) 2020 Dario Deledda. All rights reserved.
|
||||
Use of this source code is governed by an MIT license
|
||||
that can be found in the LICENSE file.
|
||||
|
||||
This file contains the printf/sprintf functions
|
||||
*/
|
||||
|
||||
// Align_text is used to describe the different ways to align a text - left, right and center
|
||||
pub enum Align_text {
|
||||
right = 0
|
||||
left
|
||||
center
|
||||
}
|
||||
|
||||
// Float conversion utility
|
||||
|
||||
// rounding value
|
||||
const dec_round = [
|
||||
f64(0.5),
|
||||
0.05,
|
||||
0.005,
|
||||
0.0005,
|
||||
0.00005,
|
||||
0.000005,
|
||||
0.0000005,
|
||||
0.00000005,
|
||||
0.000000005,
|
||||
0.0000000005,
|
||||
0.00000000005,
|
||||
0.000000000005,
|
||||
0.0000000000005,
|
||||
0.00000000000005,
|
||||
0.000000000000005,
|
||||
0.0000000000000005,
|
||||
0.00000000000000005,
|
||||
0.000000000000000005,
|
||||
0.0000000000000000005,
|
||||
0.00000000000000000005,
|
||||
0.000000000000000000005,
|
||||
0.0000000000000000000005,
|
||||
0.00000000000000000000005,
|
||||
0.000000000000000000000005,
|
||||
0.0000000000000000000000005,
|
||||
0.00000000000000000000000005,
|
||||
0.000000000000000000000000005,
|
||||
0.0000000000000000000000000005,
|
||||
0.00000000000000000000000000005,
|
||||
0.000000000000000000000000000005,
|
||||
0.0000000000000000000000000000005,
|
||||
0.00000000000000000000000000000005,
|
||||
0.000000000000000000000000000000005,
|
||||
0.0000000000000000000000000000000005,
|
||||
0.00000000000000000000000000000000005,
|
||||
0.000000000000000000000000000000000005,
|
||||
]!
|
||||
|
||||
// Single format functions
|
||||
|
||||
// BF_param is used for describing the formatting options for a single interpolated value
|
||||
pub struct BF_param {
|
||||
pub mut:
|
||||
pad_ch u8 = u8(` `) // padding char
|
||||
len0 int = -1 // default len for whole the number or string
|
||||
len1 int = 6 // number of decimal digits, if needed
|
||||
positive bool = true // mandatory: the sign of the number passed
|
||||
sign_flag bool // flag for print sign as prefix in padding
|
||||
align Align_text = .right // alignment of the string
|
||||
rm_tail_zero bool // remove the tail zeros from floats
|
||||
}
|
||||
|
||||
// format_str returns the `s` formatted, according to the options set in `p`.
|
||||
@[manualfree]
|
||||
pub fn format_str(s string, p BF_param) string {
|
||||
if p.len0 <= 0 {
|
||||
return s.clone()
|
||||
}
|
||||
dif := p.len0 - utf8_str_visible_length(s)
|
||||
if dif <= 0 {
|
||||
return s.clone()
|
||||
}
|
||||
mut res := strings.new_builder(s.len + dif)
|
||||
defer {
|
||||
unsafe { res.free() }
|
||||
}
|
||||
if p.align == .right {
|
||||
for i1 := 0; i1 < dif; i1++ {
|
||||
res.write_u8(p.pad_ch)
|
||||
}
|
||||
}
|
||||
res.write_string(s)
|
||||
if p.align == .left {
|
||||
for i1 := 0; i1 < dif; i1++ {
|
||||
res.write_u8(p.pad_ch)
|
||||
}
|
||||
}
|
||||
return res.str()
|
||||
}
|
||||
Reference in new issue
Block a user