Skip to content

Commit 3768233

Browse files
author
j30ng
committed
Enable Zero-padding with Format Strings
1 parent 215eefe commit 3768233

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

vm/src/format.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,11 +181,11 @@ fn parse_alternate_form(text: &str) -> (bool, &str) {
181181
}
182182
}
183183

184-
fn parse_zero(text: &str) -> &str {
184+
fn parse_zero(text: &str) -> (bool, &str) {
185185
let mut chars = text.chars();
186186
match chars.next() {
187-
Some('0') => chars.as_str(),
188-
_ => text,
187+
Some('0') => (true, chars.as_str()),
188+
_ => (false, text),
189189
}
190190
}
191191

@@ -235,15 +235,20 @@ fn parse_format_type(text: &str) -> (Option<FormatType>, &str) {
235235

236236
fn parse_format_spec(text: &str) -> FormatSpec {
237237
let (preconversor, after_preconversor) = parse_preconversor(text);
238-
let (fill, align, after_align) = parse_fill_and_align(after_preconversor);
238+
let (mut fill, mut align, after_align) = parse_fill_and_align(after_preconversor);
239239
let (sign, after_sign) = parse_sign(after_align);
240240
let (alternate_form, after_alternate_form) = parse_alternate_form(after_sign);
241-
let after_zero = parse_zero(after_alternate_form);
241+
let (zero, after_zero) = parse_zero(after_alternate_form);
242242
let (width, after_width) = parse_number(after_zero);
243243
let (grouping_option, after_grouping_option) = parse_grouping_option(after_width);
244244
let (precision, after_precision) = parse_precision(after_grouping_option);
245245
let (format_type, _) = parse_format_type(after_precision);
246246

247+
if zero && fill.is_none() {
248+
fill.replace('0');
249+
align = align.or(Some(FormatAlign::AfterSign));
250+
}
251+
247252
FormatSpec {
248253
preconversor,
249254
fill,

0 commit comments

Comments
 (0)