diff --git a/dll/win32/kernel32/winnls/string/lang.c b/dll/win32/kernel32/winnls/string/lang.c index 4841e7a9d57..c976310596a 100644 --- a/dll/win32/kernel32/winnls/string/lang.c +++ b/dll/win32/kernel32/winnls/string/lang.c @@ -2008,6 +2008,39 @@ INT WINAPI LCMapStringEx(LPCWSTR name, DWORD flags, LPCWSTR src, INT srclen, LPW } } +#ifdef __REACTOS__ + if (flags & LCMAP_KATAKANA) + { + INT convlen = dst_ptr - dst; + for (dst_ptr = dst; convlen; --convlen, ++dst_ptr) + { + /* + * U+3041 ... U+3093: Hiragana + * U+3095: Hiragana Letter Small KA + * U+309D: Hiragana Iteration Mark + */ + WCHAR wch = *dst_ptr; + if ((0x3041 <= wch && wch <= 0x3093) || wch == 0x3095 || wch == 0x309D) + *dst_ptr = wch + 0x60; /* Hiragana to Katanaka */ + } + } + else if (flags & LCMAP_HIRAGANA) + { + INT convlen = dst_ptr - dst; + for (dst_ptr = dst; convlen; --convlen, ++dst_ptr) + { + /* + * U+30A1 ... U+30F3: Katakana + * U+30F5: Katakana Letter Small KA + * U+30FD: Katakana Iteration Mark + */ + WCHAR wch = *dst_ptr; + if ((0x30A1 <= wch && wch <= 0x30F3) || wch == 0x30F5 || wch == 0x30FD) + *dst_ptr = wch - 0x60; /* Katanaka to Hiragana */ + } + } +#endif + if (srclen) { SetLastError(ERROR_INSUFFICIENT_BUFFER);