aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorjohnsonj <unknown>2016-02-01 15:33:27 +1100
committerjohnsonj <unknown>2016-02-01 15:33:27 +1100
commitbf2fd3949326088bf10f9ae347c54d7c388c75c8 (patch)
tree02ccb0d43df438f3f76fc73cb40c5d9a36ed0e78
parent70ca690c1b1b68ce5029c0e16b15410aa2ea1ab3 (diff)
downloadscintilla-mirror-bf2fd3949326088bf10f9ae347c54d7c388c75c8.tar.gz
Simplified inline IME by using StringEncode.
-rw-r--r--win32/ScintillaWin.cxx32
1 files changed, 6 insertions, 26 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index 9f868e5a1..67d61b834 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -1086,26 +1086,15 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) {
for (size_t i = 0; i < wcs.size(); ) {
const size_t ucWidth = UTF16CharLength(wcs[i]);
const std::wstring uniChar(wcs, i, ucWidth);
- char oneChar[UTF8MaxBytes + 1] = "\0\0\0\0"; // Maximum 4 bytes in utf8
- unsigned int oneCharLen = 0;
+ std::string docChar = StringEncode(uniChar, CodePageOfDocument());
- if (IsUnicodeMode()) {
- oneCharLen = UTF8Length(uniChar.c_str(), static_cast<unsigned int>(uniChar.length()));
- UTF8FromUTF16(uniChar.c_str(), static_cast<unsigned int>(uniChar.length()), oneChar, oneCharLen);
- } else {
- oneCharLen = ::WideCharToMultiByte(InputCodePage(), 0,
- uniChar.c_str(), static_cast<unsigned int>(uniChar.length()), oneChar, sizeof(oneChar)-1, 0, 0);
- }
- oneChar[oneCharLen] = '\0';
-
- // Display a character.
- AddCharUTF(oneChar, oneCharLen);
+ AddCharUTF(docChar.c_str(), static_cast<unsigned int>(docChar.size()));
// Record compstr character positions for moving IME carets.
- numBytes += oneCharLen;
+ numBytes += static_cast<unsigned int>(docChar.size());
imeCharPos[i + ucWidth] = numBytes;
- DrawImeIndicator(imeIndicator[i], oneCharLen);
+ DrawImeIndicator(imeIndicator[i], static_cast<unsigned int>(docChar.size()));
i += ucWidth;
}
recordingMacro = tmpRecordingMacro;
@@ -1121,18 +1110,9 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) {
for (size_t i = 0; i < wcs.size();) {
const size_t ucWidth = UTF16CharLength(wcs[i]);
const std::wstring uniChar(wcs, i, ucWidth);
- char oneChar[UTF8MaxBytes+1] = "\0\0\0\0"; // Maximum 4 bytes in UTF-8.
- unsigned int oneCharLen = 0;
+ std::string docChar = StringEncode(uniChar, CodePageOfDocument());
- if (IsUnicodeMode()) {
- oneCharLen = UTF8Length(uniChar.c_str(), static_cast<unsigned int>(uniChar.length()));
- UTF8FromUTF16(uniChar.c_str(), static_cast<unsigned int>(uniChar.length()), oneChar, oneCharLen);
- } else {
- oneCharLen = ::WideCharToMultiByte(InputCodePage(), 0,
- uniChar.c_str(), static_cast<unsigned int>(uniChar.length()), oneChar, sizeof(oneChar)-1, 0, 0);
- }
- oneChar[oneCharLen] = '\0';
- AddCharUTF(oneChar, oneCharLen);
+ AddCharUTF(docChar.c_str(), static_cast<unsigned int>(docChar.size()));
i += ucWidth;
}
}