[ttssh2-commit] [10805] DEC特殊文字をUnicodeへマッピングできるようにした

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2023年 7月 23日 (日) 16:07:29 JST


Revision: 10805
          https://osdn.net/projects/ttssh2/scm/svn/commits/10805
Author:   zmatsuo
Date:     2023-07-23 16:07:29 +0900 (Sun, 23 Jul 2023)
Log Message:
-----------
DEC特殊文字をUnicodeへマッピングできるようにした

- DEC特殊文字をUnicodeで置き換えるコードを追加
- codingタブにDEC特殊文字に関する設定を追加

Modified Paths:
--------------
    trunk/installer/release/lang_utf8/Japanese.lng
    trunk/teraterm/common/tttypes.h
    trunk/teraterm/teraterm/coding_pp.cpp
    trunk/teraterm/teraterm/coding_pp.rc
    trunk/teraterm/teraterm/coding_pp_res.h
    trunk/teraterm/teraterm/vtterm.c
    trunk/teraterm/ttpset/ttset.c

-------------- next part --------------
Modified: trunk/installer/release/lang_utf8/Japanese.lng
===================================================================
--- trunk/installer/release/lang_utf8/Japanese.lng	2023-07-23 07:07:16 UTC (rev 10804)
+++ trunk/installer/release/lang_utf8/Japanese.lng	2023-07-23 07:07:29 UTC (rev 10805)
@@ -428,6 +428,11 @@
 DLG_TERM_KANASEND=半角カナ(&D)
 DLG_TERM_KIN=漢字イン(&N):
 DLG_TERM_KOUT=漢字アウト(&O):
+DLG_CODING_UNICODE_TO_DEC=UnicodeをDEC特殊文字へマッピングする
+DLG_CODING_DEC_TO_UNICODE=DEC特殊文字をUnicodeへマッピングする
+DLG_CODING_UNICODE_TO_DEC_BOXDRAWING=罫線素片(U+2500-U+257F)
+DLG_CODING_UNICODE_TO_DEC_PUNCTUATION=
+DLG_CODING_UNICODE_TO_DEC_MIDDLEDOT=中点(U+00B7,U+2024,U+2219)
 
 DLG_WIN_TITLE=Tera Term: ウィンドウの設定
 DLG_WIN_TITLELABEL=タイトル(&T):

Modified: trunk/teraterm/common/tttypes.h
===================================================================
--- trunk/teraterm/common/tttypes.h	2023-07-23 07:07:16 UTC (rev 10804)
+++ trunk/teraterm/common/tttypes.h	2023-07-23 07:07:29 UTC (rev 10805)
@@ -610,6 +610,7 @@
 	wchar_t DialogFontNameW[LF_FACESIZE];
 	BOOL NotifySound;
 	wchar_t *LogDefaultNameW;
+	BOOL Dec2Unicode;
 
 	// Experimental
 	BYTE ExperimentalTreeProprtySheetEnable;

Modified: trunk/teraterm/teraterm/coding_pp.cpp
===================================================================
--- trunk/teraterm/teraterm/coding_pp.cpp	2023-07-23 07:07:16 UTC (rev 10804)
+++ trunk/teraterm/teraterm/coding_pp.cpp	2023-07-23 07:07:29 UTC (rev 10805)
@@ -71,6 +71,11 @@
 		{IDC_TERMKANASEND, "DLG_TERM_KANASEND"},
 		{IDC_TERMKINTEXT, "DLG_TERM_KIN"},
 		{IDC_TERMKOUTTEXT, "DLG_TERM_KOUT"},
+		{ IDC_UNICODE2DEC, "DLG_CODING_UNICODE_TO_DEC" },
+		{ IDC_DEC2UNICODE, "DLG_CODING_DEC_TO_UNICODE" },
+		{ IDC_DEC2UNICODE_BOXDRAWING, "DLG_CODING_UNICODE_TO_DEC_BOXDRAWING" },
+		{ IDC_DEC2UNICODE_PUNCTUATION, "DLG_CODING_UNICODE_TO_DEC_PUNCTUATION" },
+		{ IDC_DEC2UNICODE_MIDDLEDOT, "DLG_CODING_UNICODE_TO_DEC_MIDDLEDOT" },
 	};
 	CodingPPData *DlgData = (CodingPPData *)GetWindowLongPtr(hWnd, DWLP_USER);
 
@@ -142,6 +147,16 @@
 			SetDropDownList(hWnd, IDC_EMOJI_WIDTH_COMBO, CellWidthList, ts->UnicodeEmojiWidth == 1 ? 1 : 2);
 			EnableWindow(GetDlgItem(hWnd, IDC_EMOJI_WIDTH_COMBO), ts->UnicodeEmojiOverride);
 
+			// DEC Special Graphics
+			CheckDlgButton(hWnd, IDC_UNICODE2DEC, ts->Dec2Unicode ? BST_UNCHECKED : BST_CHECKED);
+			CheckDlgButton(hWnd, IDC_DEC2UNICODE, ts->Dec2Unicode ? BST_CHECKED : BST_UNCHECKED);
+			CheckDlgButton(hWnd, IDC_DEC2UNICODE_BOXDRAWING,
+						   (ts->UnicodeDecSpMapping & 0x01) != 0 ? BST_CHECKED : BST_UNCHECKED);
+			CheckDlgButton(hWnd, IDC_DEC2UNICODE_PUNCTUATION,
+						   (ts->UnicodeDecSpMapping & 0x02) != 0 ? BST_CHECKED : BST_UNCHECKED);
+			CheckDlgButton(hWnd, IDC_DEC2UNICODE_MIDDLEDOT,
+						   (ts->UnicodeDecSpMapping & 0x04) != 0 ? BST_CHECKED : BST_UNCHECKED);
+
 			return TRUE;
 		}
 		case WM_NOTIFY: {
@@ -206,6 +221,12 @@
 					ts->UnicodeEmojiOverride = (BYTE)IsDlgButtonChecked(hWnd, IDC_EMOJI_WIDTH_CHECK);
 					ts->UnicodeEmojiWidth = (BYTE)GetCurSel(hWnd, IDC_EMOJI_WIDTH_COMBO);
 
+					// DEC Special Graphics
+					ts->Dec2Unicode = (BYTE)IsDlgButtonChecked(hWnd, IDC_DEC2UNICODE);
+					ts->UnicodeDecSpMapping =
+						(WORD)((IsDlgButtonChecked(hWnd, IDC_DEC2UNICODE_BOXDRAWING) << 0) |
+							   (IsDlgButtonChecked(hWnd, IDC_DEC2UNICODE_PUNCTUATION) << 1) |
+							   (IsDlgButtonChecked(hWnd, IDC_DEC2UNICODE_MIDDLEDOT) << 2));
 					break;
 				}
 				case PSN_HELP: {

Modified: trunk/teraterm/teraterm/coding_pp.rc
===================================================================
--- trunk/teraterm/teraterm/coding_pp.rc	2023-07-23 07:07:16 UTC (rev 10804)
+++ trunk/teraterm/teraterm/coding_pp.rc	2023-07-23 07:07:29 UTC (rev 10805)
@@ -24,7 +24,7 @@
 // Dialog
 //
 
-IDD_TABSHEET_CODING DIALOGEX 0, 0, 323, 191
+IDD_TABSHEET_CODING DIALOGEX 0, 0, 323, 213
 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_CAPTION | WS_SYSMENU
 CAPTION "Coding"
 FONT 8, "MS Shell Dlg", 400, 0, 0x1
@@ -43,10 +43,21 @@
     LTEXT           "Ambiguous Characters width",IDC_STATIC,10,95,113,8
     COMBOBOX        IDC_AMBIGUOUS_WIDTH_COMBO,22,108,49,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
     CONTROL         "Override Emoji Characters width",IDC_EMOJI_WIDTH_CHECK,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,127,136,10
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,127,131,10
     COMBOBOX        IDC_EMOJI_WIDTH_COMBO,22,143,49,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-    LTEXT           "&Language:",IDC_GENLANGLABEL,10,166,52,10,NOT WS_VISIBLE
-    COMBOBOX        IDC_GENLANG,71,164,93,81,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | NOT WS_VISIBLE | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "&Language:",IDC_GENLANGLABEL,10,188,52,10,NOT WS_VISIBLE
+    COMBOBOX        IDC_GENLANG,71,187,93,81,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | NOT WS_VISIBLE | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "DEC Special Graphics",IDC_STATIC,141,94,110,8
+    CONTROL         "Mapping Unicode to DEC special Graphics",IDC_UNICODE2DEC,
+                    "Button",BS_AUTORADIOBUTTON,153,107,160,10
+    CONTROL         "Mapping DEC special Graphics to Unicode",IDC_DEC2UNICODE,
+                    "Button",BS_AUTORADIOBUTTON,153,162,161,10
+    CONTROL         "Box-drawing character (U+2500-U+257F)",IDC_DEC2UNICODE_BOXDRAWING,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,165,122,151,10
+    CONTROL         "Punctuation, Block Elements, Shade",IDC_DEC2UNICODE_PUNCTUATION,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,165,135,132,10
+    CONTROL         "Middle dots (U+00B7,U+2024,U+2219)",IDC_DEC2UNICODE_MIDDLEDOT,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,165,149,141,10
 END
 
 
@@ -90,8 +101,12 @@
         VERTGUIDE, 22
         VERTGUIDE, 71
         VERTGUIDE, 110
+        VERTGUIDE, 141
+        VERTGUIDE, 153
+        VERTGUIDE, 165
         VERTGUIDE, 198
-        BOTTOMMARGIN, 168
+        BOTTOMMARGIN, 205
+        HORZGUIDE, 193
     END
 END
 #endif    // APSTUDIO_INVOKED

Modified: trunk/teraterm/teraterm/coding_pp_res.h
===================================================================
--- trunk/teraterm/teraterm/coding_pp_res.h	2023-07-23 07:07:16 UTC (rev 10804)
+++ trunk/teraterm/teraterm/coding_pp_res.h	2023-07-23 07:07:29 UTC (rev 10805)
@@ -19,6 +19,11 @@
 #define IDC_AMBIGUOUS_WIDTH_COMBO       2607
 #define IDC_EMOJI_WIDTH_CHECK           2608
 #define IDC_EMOJI_WIDTH_COMBO           2609
+#define IDC_UNICODE2DEC                 2612
+#define IDC_DEC2UNICODE                 2613
+#define IDC_DEC2UNICODE_BOXDRAWING      2614
+#define IDC_DEC2UNICODE_PUNCTUATION     2615
+#define IDC_DEC2UNICODE_MIDDLEDOT       2616
 
 // Next default values for new objects
 // 
@@ -27,7 +32,7 @@
 #define _APS_NO_MFC                     1
 #define _APS_NEXT_RESOURCE_VALUE        115
 #define _APS_NEXT_COMMAND_VALUE         52031
-#define _APS_NEXT_CONTROL_VALUE         2609
+#define _APS_NEXT_CONTROL_VALUE         2615
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif

Modified: trunk/teraterm/teraterm/vtterm.c
===================================================================
--- trunk/teraterm/teraterm/vtterm.c	2023-07-23 07:07:16 UTC (rev 10804)
+++ trunk/teraterm/teraterm/vtterm.c	2023-07-23 07:07:29 UTC (rev 10805)
@@ -737,26 +737,53 @@
 {
 	int LineEnd;
 	TCharAttr CharAttrTmp;
-	BOOL dec_special = FALSE;
+	BOOL dec_special;
 	int r;
 
-	CharAttrTmp = CharAttr;
 	LastPutCharacter = code;
 
+	dec_special = FALSE;
 	if (code <= 0xff) {
 		dec_special = CharSetIsSpecial(charset_data, code);
 	}
 
-	// Unicode\x82\xA9\x82\xE7DEC\x93\xC1\x8Eꕶ\x8E\x9A\x82ւ̃}\x83b\x83s\x83\x93\x83O
-	if (dec_special == FALSE && ts.UnicodeDecSpMapping) {
-		unsigned short cset;
-		cset = UTF32ToDecSp(code);
-		if (((cset >> 8) & ts.UnicodeDecSpMapping) != 0) {
-			dec_special = TRUE;
-			code = cset & 0xff;
+	if (ts.Dec2Unicode) {
+		if (dec_special) {
+			// DEC\x93\xC1\x8Eꕶ\x8E\x9A\x82\xA9\x82\xE7Unicode\x82ւ̃}\x83b\x83s\x83\x93\x83O
+			if (ts.Dec2Unicode) {
+				// 0x60\x82\xA9\x82\xE70x7e \x82\xF0 Unicode \x82Ɋ\x84\x82\xE8\x90U\x82\xE9
+				static const char16_t dec2unicode[] = {
+					0x25c6, 0x2592, 0x2409,	0x240c,		// 0x60 -
+					0x240d, 0x240a, 0x00b0, 0x00b1,
+					0x2424, 0x240b, 0x2518, 0x2510,
+					0x250c, 0x2514, 0x253c, 0x23ba,		// 0x6c - 0x6f
+
+					0x23bb, 0x2500, 0x23bc, 0x23bd,		// 0x70 -
+					0x251c, 0x2524, 0x2534, 0x252c,
+					0x2502, 0x2264, 0x2265, 0x03c0,
+					0x2260, 0x00a3, 0x00b7,				// 0x7c - 0x7e
+				};
+				code = code & 0x7F;
+				if (0x60 <= code && code <= 0x7e) {
+					code = dec2unicode[code - 0x60];
+					dec_special = FALSE;
+				}
+			}
 		}
 	}
+	else {
+		// Unicode\x82\xA9\x82\xE7DEC\x93\xC1\x8Eꕶ\x8E\x9A\x82ւ̃}\x83b\x83s\x83\x93\x83O
+		if (dec_special == FALSE && ts.UnicodeDecSpMapping) {
+			unsigned short cset;
+			cset = UTF32ToDecSp(code);
+			if (((cset >> 8) & ts.UnicodeDecSpMapping) != 0) {
+				dec_special = TRUE;
+				code = cset & 0xff;
+			}
+		}
+	}
 
+	CharAttrTmp = CharAttr;
 	if (dec_special) {
 		CharAttrTmp.Attr |= AttrSpecial;
 	}

Modified: trunk/teraterm/ttpset/ttset.c
===================================================================
--- trunk/teraterm/ttpset/ttset.c	2023-07-23 07:07:16 UTC (rev 10804)
+++ trunk/teraterm/ttpset/ttset.c	2023-07-23 07:07:29 UTC (rev 10805)
@@ -2076,6 +2076,8 @@
 	// \x92ʒm\x89\xB9
 	ts->NotifySound = GetOnOff(Section, "NotifySound", FName, TRUE);
 
+	ts->Dec2Unicode = FALSE;
+
 	// Experimental
 	ts->ExperimentalTreeProprtySheetEnable = GetOnOff("Experimental", "TreeProprtySheet", FName, FALSE);
 	ts->ExperimentalDontUseFontDialog = GetOnOff("Experimental", "DontUseFontDialog", FName, FALSE);


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