Add support for upper-case hex and binary output to #fmt.
Only works for uints at present. Necessitated the addition of _str.to_upper.
This commit is contained in:
parent
5c0f4c1939
commit
99a697b56a
5 changed files with 40 additions and 0 deletions
|
|
@ -246,6 +246,9 @@ fn pieces_to_expr(vec[piece] pieces, vec[@ast.expr] args) -> @ast.expr {
|
|||
case (ty_hex(_)) {
|
||||
ret make_conv_call(arg.span, "uint", cnv, arg);
|
||||
}
|
||||
case (ty_bits) {
|
||||
ret make_conv_call(arg.span, "uint", cnv, arg);
|
||||
}
|
||||
case (_) {
|
||||
log unsupported;
|
||||
fail;
|
||||
|
|
|
|||
|
|
@ -315,6 +315,12 @@ mod RT {
|
|||
case (ty_hex_lower) {
|
||||
ret _uint.to_str(u, 16u);
|
||||
}
|
||||
case (ty_hex_upper) {
|
||||
ret _str.to_upper(_uint.to_str(u, 16u));
|
||||
}
|
||||
case (ty_bits) {
|
||||
ret _uint.to_str(u, 2u);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -470,6 +470,24 @@ fn connect(vec[str] v, str sep) -> str {
|
|||
ret s;
|
||||
}
|
||||
|
||||
// FIXME: This only handles ASCII
|
||||
fn to_upper(str s) -> str {
|
||||
auto outstr = "";
|
||||
auto ascii_a = 'a' as u8;
|
||||
auto ascii_z = 'z' as u8;
|
||||
auto diff = 32u8;
|
||||
for (u8 byte in s) {
|
||||
auto next;
|
||||
if (ascii_a <= byte && byte <= ascii_z) {
|
||||
next = byte - diff;
|
||||
} else {
|
||||
next = byte;
|
||||
}
|
||||
push_byte(outstr, next);
|
||||
}
|
||||
ret outstr;
|
||||
}
|
||||
|
||||
|
||||
// Local Variables:
|
||||
// mode: rust;
|
||||
|
|
|
|||
|
|
@ -89,6 +89,16 @@ fn test_connect() {
|
|||
t(vec("hi"), " ", "hi");
|
||||
}
|
||||
|
||||
fn test_to_upper() {
|
||||
// to_upper doesn't understand unicode yet,
|
||||
// but we need to at least preserve it
|
||||
auto unicode = "\u65e5\u672c";
|
||||
auto input = "abcDEF" + unicode + "xyz:.;";
|
||||
auto expected = "ABCDEF" + unicode + "XYZ:.;";
|
||||
auto actual = _str.to_upper(input);
|
||||
check (_str.eq(expected, actual));
|
||||
}
|
||||
|
||||
|
||||
fn main() {
|
||||
test_bytes_len();
|
||||
|
|
@ -98,4 +108,5 @@ fn main() {
|
|||
test_substr();
|
||||
test_concat();
|
||||
test_connect();
|
||||
test_to_upper();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,4 +23,6 @@ fn main() {
|
|||
test(#fmt("%b", false), "false");
|
||||
test(#fmt("%c", 'A'), "A");
|
||||
test(#fmt("%x", 0xff_u), "ff");
|
||||
test(#fmt("%X", 0x12ab_u), "12AB");
|
||||
test(#fmt("%t", 0b11010101_u), "11010101");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue