mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 03:27:44 +00:00
printf: Improve support for printing multi-byte values of characters
This commit is contained in:
parent
d99b7b31a6
commit
8ff0db1db9
2 changed files with 22 additions and 1 deletions
|
@ -58,7 +58,18 @@ impl<'a, T: Iterator<Item = &'a FormatArgument>> ArgumentIter<'a> for T {
|
||||||
};
|
};
|
||||||
match next {
|
match next {
|
||||||
FormatArgument::UnsignedInt(n) => *n,
|
FormatArgument::UnsignedInt(n) => *n,
|
||||||
FormatArgument::Unparsed(s) => extract_value(u64::extended_parse(s), s),
|
FormatArgument::Unparsed(s) => {
|
||||||
|
// Check if the string is a character literal enclosed in quotes
|
||||||
|
if s.starts_with(['"', '\'']) && s.len() > 2 {
|
||||||
|
// Extract the content between the quotes safely
|
||||||
|
let chars: Vec<char> =
|
||||||
|
s.trim_matches(|c| c == '"' || c == '\'').chars().collect();
|
||||||
|
if chars.len() == 1 {
|
||||||
|
return chars[0] as u64; // Return the Unicode code point
|
||||||
|
}
|
||||||
|
}
|
||||||
|
extract_value(u64::extended_parse(s), s)
|
||||||
|
}
|
||||||
_ => 0,
|
_ => 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1385,3 +1385,13 @@ fn float_arg_with_whitespace() {
|
||||||
.fails()
|
.fails()
|
||||||
.stderr_contains("expected a numeric value");
|
.stderr_contains("expected a numeric value");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn mb_input() {
|
||||||
|
for format in ["\"á", "\'á"] {
|
||||||
|
new_ucmd!()
|
||||||
|
.args(&["%04x\n", format])
|
||||||
|
.succeeds()
|
||||||
|
.stdout_only("00e1\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue