[ttssh2-commit] [9383] ANSI環境でIME制御を行っていないときでも漢字入力できるようにした

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2021年 8月 29日 (日) 00:32:46 JST


Revision: 9383
          https://osdn.net/projects/ttssh2/scm/svn/commits/9383
Author:   zmatsuo
Date:     2021-08-29 00:32:45 +0900 (Sun, 29 Aug 2021)
Log Message:
-----------
ANSI環境でIME制御を行っていないときでも漢字入力できるようにした

Modified Paths:
--------------
    trunk/teraterm/teraterm/vtdisp.c
    trunk/teraterm/teraterm/vtwin.cpp

-------------- next part --------------
Modified: trunk/teraterm/teraterm/vtdisp.c
===================================================================
--- trunk/teraterm/teraterm/vtdisp.c	2021-08-28 15:29:03 UTC (rev 9382)
+++ trunk/teraterm/teraterm/vtdisp.c	2021-08-28 15:32:45 UTC (rev 9383)
@@ -1983,7 +1983,7 @@
 				MB_ICONEXCLAMATION
 			};
 			TTMessageBoxW(0, &info, ts.UILanguageFileW);
-			WritePrivateProfileStringA("Tera Term","IME","off",ts.SetupFName);
+			WritePrivateProfileStringW(L"Tera Term", L"IME", L"off", ts.SetupFNameW);
 			ts.UseIME = 0;
 		}
 

Modified: trunk/teraterm/teraterm/vtwin.cpp
===================================================================
--- trunk/teraterm/teraterm/vtwin.cpp	2021-08-28 15:29:03 UTC (rev 9382)
+++ trunk/teraterm/teraterm/vtwin.cpp	2021-08-28 15:32:45 UTC (rev 9383)
@@ -124,11 +124,12 @@
 
 static int AutoDisconnectedPort = -1;
 
-#ifndef WM_IME_COMPOSITION
-#define WM_IME_COMPOSITION              0x010F
-#endif
+UnicodeDebugParam_t UnicodeDebugParam;
+typedef struct {
+	char dbcs_lead_byte;
+} vtwin_work_t;
+static vtwin_work_t vtwin_work;
 
-UnicodeDebugParam_t UnicodeDebugParam;
 extern "C" PrintFile *PrintFile_;
 
 /////////////////////////////////////////////////////////////////////////////
@@ -1327,14 +1328,38 @@
 		u16 = (wchar_t)nChar;
 	} else {
 		// \x93\xFC\x97͂\xCD ANSI
-		//		ANSI(ACP) -> UTF-32 -> UTF-16
-		const char mb_str[2] = {(char)nChar, 0};
-		unsigned int u32;
-		size_t mb_len = MBCPToUTF32(mb_str, 1, CP_ACP, &u32);
-		if (mb_len == 0) {
+		if (vtwin_work.dbcs_lead_byte == 0 && IsDBCSLeadByte(nChar)) {
+			// ANSI 2\x83o\x83C\x83g\x95\xB6\x8E\x9A\x82\xCC 1byte\x96ڂ\xBE\x82\xC1\x82\xBD
+			//	\x92ʏ\xED\x82\xCD WM_IME_* \x83\x81\x83b\x83Z\x81[\x83W\x82ŏ\x88\x97\x9D\x82\xB3\x82\xEA\x82\xE9
+			//	\x8E\x9F\x82̏ꍇ\x82\xB1\x82\xB1\x82ɓ\xFC\x82\xC1\x82Ă\xAD\x82\xE9
+			//		TERATERM.INI \x82\xC5 IME=off \x82̂Ƃ\xAB
+			//		imm32.dll \x82\xAA\x83\x8D\x81[\x83h\x82ł\xAB\x82Ȃ\xA9\x82\xC1\x82\xBD\x82Ƃ\xAB
+			vtwin_work.dbcs_lead_byte = nChar;
 			return;
 		}
-		u16 = (wchar_t)u32;
+		else {
+			// ANSI(ACP) -> UTF-32 -> UTF-16
+			char mb_str[2];
+			size_t mb_len;
+			if (vtwin_work.dbcs_lead_byte == 0) {
+				// 1\x83o\x83C\x83g\x95\xB6\x8E\x9A
+				mb_str[0] = (char)nChar;
+				mb_len = 1;
+			}
+			else {
+				// 2\x83o\x83C\x83g\x95\xB6\x8E\x9A
+				mb_str[0] = (char)vtwin_work.dbcs_lead_byte;
+				mb_str[1] = (char)nChar;
+				mb_len = 2;
+				vtwin_work.dbcs_lead_byte = 0;
+			}
+			unsigned int u32;
+			mb_len = MBCPToUTF32(mb_str, mb_len, CP_ACP, &u32);
+			if (mb_len == 0) {
+				return;
+			}
+			u16 = (wchar_t)u32;
+		}
 	}
 
 	// \x83o\x83b\x83t\x83@\x82֏o\x97́A\x89\xE6\x96ʂ֏o\x97\xCD


ttssh2-commit メーリングリストの案内
Back to archive index