aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/ExtFmt.rs6
-rw-r--r--src/lib/_str.rs18
2 files changed, 24 insertions, 0 deletions
diff --git a/src/lib/ExtFmt.rs b/src/lib/ExtFmt.rs
index da32568a..e15fa462 100644
--- a/src/lib/ExtFmt.rs
+++ b/src/lib/ExtFmt.rs
@@ -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);
+ }
}
}
diff --git a/src/lib/_str.rs b/src/lib/_str.rs
index 31d0790d..7690fe44 100644
--- a/src/lib/_str.rs
+++ b/src/lib/_str.rs
@@ -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;