aboutsummaryrefslogtreecommitdiffhomepage
path: root/win32/HanjaDic.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'win32/HanjaDic.cxx')
-rw-r--r--win32/HanjaDic.cxx40
1 files changed, 22 insertions, 18 deletions
diff --git a/win32/HanjaDic.cxx b/win32/HanjaDic.cxx
index 94fc10b06..3a86ad313 100644
--- a/win32/HanjaDic.cxx
+++ b/win32/HanjaDic.cxx
@@ -97,26 +97,30 @@ public:
}
};
-int GetHangulOfHanja(int hanjaChar) {
- // Convert hanja character to hangul one.
- int hangulChar = -1; // If fails, return -1.
+int GetHangulOfHanja(wchar_t *inout) {
+ // Convert every hanja to hangul.
+ // Return the number of characters converted.
+ int changed = 0;
HanjaDic dict;
- if (!dict.HJdictAvailable() || !dict.IsHanja(hanjaChar)) {
- return hangulChar;
- }
- wchar_t convHnja[UTF8MaxBytes] = {0};
- convHnja[0] = static_cast<wchar_t>(hanjaChar);
-
- BSTR bstrHangul = SysAllocString(NULL);
- BSTR bstrHanja = SysAllocString(convHnja);
- HRESULT hr = dict.HJinterface->HanjaToHangul(bstrHanja, &bstrHangul);
- if (SUCCEEDED(hr)) {
- wchar_t wHangul = static_cast<wchar_t *>(bstrHangul)[0];
- hangulChar = static_cast<int>(wHangul);
+ if (dict.HJdictAvailable()) {
+ const size_t len = wcslen(inout);
+ wchar_t conv[UTF8MaxBytes] = {0};
+ BSTR bstrHangul = SysAllocString(conv);
+ for (size_t i=0; i<len; i++) {
+ if (dict.IsHanja(static_cast<int>(inout[i]))) { // Pass hanja only!
+ conv[0] = inout[i];
+ BSTR bstrHanja = SysAllocString(conv);
+ HRESULT hr = dict.HJinterface->HanjaToHangul(bstrHanja, &bstrHangul);
+ if (SUCCEEDED(hr)) {
+ inout[i] = static_cast<wchar_t>(bstrHangul[0]);
+ changed += 1;
+ }
+ SysFreeString(bstrHanja);
+ }
+ }
+ SysFreeString(bstrHangul);
}
- SysFreeString(bstrHangul);
- SysFreeString(bstrHanja);
- return hangulChar;
+ return changed;
}
}