Skip to content
Snippets Groups Projects
Commit ec6243bc authored by David CARLIER's avatar David CARLIER
Browse files

wctrans/towctrans implementation proposal.

close #32
parent 2c3561e8
No related branches found
No related tags found
1 merge request!356wctrans/towctrans implementation proposal.
......@@ -8,6 +8,7 @@ mod casecmp;
mod punct;
pub type wctype_t = u32;
pub type wctrans_t = *const i32;
pub const WEOF: wint_t = 0xFFFF_FFFFu32;
......@@ -24,6 +25,9 @@ pub const WCTYPE_SPACE: wctype_t = 10;
pub const WCTYPE_UPPER: wctype_t = 11;
pub const WCTYPE_XDIGIT: wctype_t = 12;
const WCTRANSUP: wctrans_t = 1 as wctrans_t;
const WCTRANSLW: wctrans_t = 2 as wctrans_t;
#[no_mangle]
pub extern "C" fn iswctype(wc: wint_t, desc: wctype_t) -> c_int {
match desc {
......@@ -173,3 +177,22 @@ pub extern "C" fn towlower(wc: wint_t) -> wint_t {
pub extern "C" fn towupper(wc: wint_t) -> wint_t {
casemap(wc, 1)
}
#[no_mangle]
pub extern "C" fn wctrans(class: *const c_char) -> wctrans_t {
let class_cstr = unsafe { CStr::from_ptr(class) };
match class_cstr.to_bytes() {
b"toupper" => WCTRANSUP,
b"tolower" => WCTRANSLW,
_ => 0 as wctrans_t,
}
}
#[no_mangle]
pub extern "C" fn towctrans(wc: wint_t, trans: wctrans_t) -> wint_t {
match trans {
WCTRANSUP => towupper(wc),
WCTRANSLW => towlower(wc),
_ => wc,
}
}
......@@ -6,7 +6,7 @@ int main() {
wchar_t *str = L"HaLf WiDe ChAr StRiNg!\n";
fputws(str, stdout);
for (int i = 0; i < wcslen(str); i++) {
putwchar(towlower(str[i]));
putwchar(towctrans(str[i], wctrans("tolower")));
}
return 0;
}
\ No newline at end of file
}
......@@ -6,7 +6,7 @@ int main() {
wchar_t *str = L"HaLf WiDe ChAr StRiNg!\n";
fputws(str, stdout);
for (int i = 0; i < wcslen(str); i++) {
putwchar(towupper(str[i]));
putwchar(towctrans(str[i], wctrans("toupper")));
}
return 0;
}
\ No newline at end of file
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment