[Ttssh2-commit] [8798] コーディングプロパティページに文字幅の設定を追加

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2020年 6月 15日 (月) 11:07:17 JST


Revision: 8798
          https://osdn.net/projects/ttssh2/scm/svn/commits/8798
Author:   zmatsuo
Date:     2020-06-15 11:07:17 +0900 (Mon, 15 Jun 2020)
Log Message:
-----------
コーディングプロパティページに文字幅の設定を追加

- East Asian Width Ambiguous 文字幅の設定をできるようにした
- 絵文字文字幅を設定できるようにした
- teraterm.ini の内容を変更
  - 追加
    - UnicodeAmbiguousWidth
    - UnicodeEmojiOverride
    - UnicodeEmojiWidth
  - 削除
    - UnicodeAmbiguousWide

Modified Paths:
--------------
    trunk/teraterm/common/tttypes.h
    trunk/teraterm/teraterm/buffer.c
    trunk/teraterm/teraterm/coding_pp.cpp
    trunk/teraterm/teraterm/coding_pp.rc
    trunk/teraterm/teraterm/coding_pp_res.h
    trunk/teraterm/ttpset/ttset.c

-------------- next part --------------
Modified: trunk/teraterm/common/tttypes.h
===================================================================
--- trunk/teraterm/common/tttypes.h	2020-06-15 02:07:06 UTC (rev 8797)
+++ trunk/teraterm/common/tttypes.h	2020-06-15 02:07:17 UTC (rev 8798)
@@ -679,7 +679,9 @@
 	int ConfigVersion;
 	int RunningVersion;
 	DWORD SelectStartDelay;
-	WORD UnicodeAmbiguousAsWide;
+	BYTE UnicodeAmbiguousWidth;
+	BYTE UnicodeEmojiOverride;
+	BYTE UnicodeEmojiWidth;
 };
 
 typedef struct tttset TTTSet, *PTTSet;

Modified: trunk/teraterm/teraterm/buffer.c
===================================================================
--- trunk/teraterm/teraterm/buffer.c	2020-06-15 02:07:06 UTC (rev 8797)
+++ trunk/teraterm/teraterm/buffer.c	2020-06-15 02:07:17 UTC (rev 8798)
@@ -2213,7 +2213,7 @@
 	return url_char[u32] == 0 ? FALSE : TRUE;
 }
 
-static BOOL BuffIsHalfWidthFromPropery(char width_property)
+static BOOL BuffIsHalfWidthFromPropery(const TTTSet *ts_, char width_property)
 {
 	switch (width_property) {
 	case 'H':	// Halfwidth
@@ -2222,7 +2222,7 @@
 	default:
 		return TRUE;
 	case 'A':	// Ambiguous \x9EB\x96\x86
-		if (ts.Language == IdJapanese) {
+		if (ts_->UnicodeAmbiguousWidth == 2) {
 			// \x91S\x8Ap\x82Ƃ\xB5\x82Ĉ\xB5\x82\xA4
 			return FALSE;
 		}
@@ -2236,22 +2236,22 @@
 static BOOL BuffIsHalfWidthFromCode(const TTTSet *ts_, unsigned int u32, char *width_property, char *emoji)
 {
 	*width_property = UnicodeGetWidthProperty(u32);
-#if 1
 	*emoji = (char)UnicodeIsEmoji(u32);
-	if (*emoji) {
-		//if (ts_->Language == IdJapanese) {
-		if (ts_->UnicodeAmbiguousAsWide) {
-			// \x91S\x8Ap
-			return FALSE;
-		} else {
-			if (u32 >= 0x1f000) {
+	if (ts_->UnicodeEmojiOverride) {
+		if (*emoji) {
+			// \x8AG\x95\xB6\x8E\x9A\x82\xBE\x82\xC1\x82\xBD\x8Fꍇ
+			if (ts_->UnicodeEmojiWidth == 2) {
+				// \x91S\x8Ap
 				return FALSE;
+			} else {
+				if (u32 >= 0x1f000) {
+					return FALSE;
+				}
+				return TRUE;
 			}
-			return TRUE;
 		}
 	}
-#endif
-	return BuffIsHalfWidthFromPropery(*width_property);
+	return BuffIsHalfWidthFromPropery(ts_, *width_property);
 }
 
 /**
@@ -2819,7 +2819,7 @@
 			}
 			else {
 				// \x83J\x81[\x83\\x83\x8B\x82\xAA1\x83Z\x83\x8B\x96\x94\x82́A2\x83Z\x83\x8B\x82̍\xB6\x91\xA4
-				if (!BuffIsHalfWidthFromPropery(p->WidthProperty)) {
+				if (!BuffIsHalfWidthFromPropery(&ts, p->WidthProperty)) {
 					// 1\x82‘O\x82̕\xB6\x8E\x9A\x82\xAA2\x83Z\x83\x8B
 					StrChangeCount = 2;
 				}

Modified: trunk/teraterm/teraterm/coding_pp.cpp
===================================================================
--- trunk/teraterm/teraterm/coding_pp.cpp	2020-06-15 02:07:06 UTC (rev 8797)
+++ trunk/teraterm/teraterm/coding_pp.cpp	2020-06-15 02:07:17 UTC (rev 8798)
@@ -49,6 +49,7 @@
 static const char *KanjiInList[] = {"^[$@","^[$B",NULL};
 static const char *KanjiOutList[] = {"^[(B","^[(J",NULL};
 static const char *KanjiOutList2[] = {"^[(B","^[(J","^[(H",NULL};
+static const char *CellWidthList[] = { "1 Cell", "2 Cell", NULL };
 
 static const struct {
 	int lang;
@@ -88,7 +89,7 @@
 		{IDC_TERMKANA, "DLG_TERM_KANA"},
 		{IDC_TERMKANJISENDLABEL, "DLG_TERMK_KANJISEND"},
 		//		{ IDC_TERMKANASEND, "DLG_TERM_KANASEND" },
-		{IDC_TERMKANASEND, "DLG_TERMK_KANASEND"},
+		{IDC_TERMKANASEND, "DLG_TERM_KANASEND"},
 		{IDC_TERMKINTEXT, "DLG_TERM_KIN"},
 		{IDC_TERMKOUTTEXT, "DLG_TERM_KOUT"},
 	};
@@ -147,8 +148,11 @@
 				SetDropDownList(hWnd, IDC_TERMKOUT, KanjiOutList, ts->KanjiOut);
 			}
 
-			// ambiguous characters as wide
-			CheckDlgButton(hWnd, IDC_AMBIGUOUS_AS_WIDE, ts->UnicodeAmbiguousAsWide ? BST_CHECKED : BST_UNCHECKED);
+			// characters as wide
+			SetDropDownList(hWnd, IDC_AMBIGUOUS_WIDTH_COMBO, CellWidthList, ts->UnicodeAmbiguousWidth == 1 ? 1 : 2);
+			CheckDlgButton(hWnd, IDC_EMOJI_WIDTH_CHECK, ts->UnicodeEmojiOverride ? BST_CHECKED : BST_UNCHECKED);
+			SetDropDownList(hWnd, IDC_EMOJI_WIDTH_COMBO, CellWidthList, ts->UnicodeEmojiWidth == 1 ? 1 : 2);
+			EnableWindow(GetDlgItem(hWnd, IDC_EMOJI_WIDTH_COMBO), ts->UnicodeEmojiOverride);
 
 			return TRUE;
 		}
@@ -213,8 +217,10 @@
 					coding = id % 100;
 					ts->KanjiCodeSend = coding;
 
-					// ambiguous characters as wide
-					ts->UnicodeAmbiguousAsWide = IsDlgButtonChecked(hWnd, IDC_AMBIGUOUS_AS_WIDE);
+					// characters as wide
+					ts->UnicodeAmbiguousWidth = (BYTE)GetCurSel(hWnd, IDC_AMBIGUOUS_WIDTH_COMBO);
+					ts->UnicodeEmojiOverride = (BYTE)IsDlgButtonChecked(hWnd, IDC_EMOJI_WIDTH_CHECK);
+					ts->UnicodeEmojiWidth = (BYTE)GetCurSel(hWnd, IDC_EMOJI_WIDTH_COMBO);
 
 					break;
 				}
@@ -239,9 +245,18 @@
 					else {
 						DisableDlgItem(hWnd, IDC_TERMKANA, IDC_TERMKANA);
 					}
-					if (id / 100 == IdJapanese) {
-						CheckDlgButton(hWnd, IDC_AMBIGUOUS_AS_WIDE, BST_CHECKED);
+					if ((id / 100) == IdChinese || (id / 100) == IdJapanese || (id / 100) == IdKorean) {
+						// CJK
+						SendDlgItemMessage(hWnd, IDC_AMBIGUOUS_WIDTH_COMBO, CB_SETCURSEL, 1, 0);
+						CheckDlgButton(hWnd, IDC_EMOJI_WIDTH_CHECK, BST_CHECKED);
+						EnableWindow(GetDlgItem(hWnd, IDC_EMOJI_WIDTH_COMBO), TRUE);
+						SendDlgItemMessage(hWnd, IDC_EMOJI_WIDTH_COMBO, CB_SETCURSEL, 1, 0);
 					}
+					else {
+						CheckDlgButton(hWnd, IDC_EMOJI_WIDTH_CHECK, BST_UNCHECKED);
+						SendDlgItemMessage(hWnd, IDC_AMBIGUOUS_WIDTH_COMBO, CB_SETCURSEL, 0, 0);
+						EnableWindow(GetDlgItem(hWnd, IDC_EMOJI_WIDTH_COMBO), FALSE);
+					}
 
 					if (IsDlgButtonChecked(hWnd, IDC_USE_SAME_CODE) == BST_CHECKED) {
 						// \x91\x97\x90M\x83R\x81[\x83h\x82𓯂\xB6\x92l\x82ɂ\xB7\x82\xE9
@@ -266,7 +281,13 @@
 				case IDC_USE_SAME_CODE | (BN_CLICKED << 16): {
 					BOOL enable = (IsDlgButtonChecked(hWnd, IDC_USE_SAME_CODE) == BST_CHECKED) ? FALSE : TRUE;
 					EnableWindow(GetDlgItem(hWnd, IDC_TERMKANJISEND), enable);
+					break;
 				}
+				case IDC_EMOJI_WIDTH_CHECK | (BN_CLICKED << 16): {
+					BOOL enable = (IsDlgButtonChecked(hWnd, IDC_EMOJI_WIDTH_CHECK) == BST_CHECKED) ? TRUE : FALSE;
+					EnableWindow(GetDlgItem(hWnd, IDC_EMOJI_WIDTH_COMBO), enable);
+					break;
+				}
 				default:
 					break;
 			}

Modified: trunk/teraterm/teraterm/coding_pp.rc
===================================================================
--- trunk/teraterm/teraterm/coding_pp.rc	2020-06-15 02:07:06 UTC (rev 8797)
+++ trunk/teraterm/teraterm/coding_pp.rc	2020-06-15 02:07:17 UTC (rev 8798)
@@ -24,26 +24,29 @@
 // Dialog
 //
 
-IDD_TABSHEET_CODING DIALOGEX 0, 0, 323, 144
-STYLE DS_SETFONT | DS_CONTROL | WS_CHILD | WS_SYSMENU
+IDD_TABSHEET_CODING DIALOGEX 0, 0, 323, 191
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_CAPTION | WS_SYSMENU
 CAPTION "Coding"
 FONT 8, "MS Shell Dlg", 400, 0, 0x1
 BEGIN
-    LTEXT           "&Language:",IDC_GENLANGLABEL,10,116,52,10,NOT WS_VISIBLE
+    CONTROL         "&Use same code",IDC_USE_SAME_CODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,7,254,17
     GROUPBOX        "Coding (r&eceive)",IDC_TERMKANJILABEL,5,31,95,55
-    COMBOBOX        IDC_TERMKANJI,10,47,80,58,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+    COMBOBOX        IDC_TERMKANJI,10,47,80,121,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
     CONTROL         "Hal&f-width kana",IDC_TERMKANA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,64,87,17
     GROUPBOX        "Coding (tra&nsmit)",IDC_TERMKANJISENDLABEL,103,31,211,55
-    COMBOBOX        IDC_TERMKANJISEND,110,47,75,58,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+    COMBOBOX        IDC_TERMKANJISEND,110,47,75,111,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
     CONTROL         "Half-wi&dth kana",IDC_TERMKANASEND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,64,76,17
     CONTROL         "Kanji-i&n:",IDC_TERMKINTEXT,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,198,49,64,15
+    CONTROL         "Kanji-&out:",IDC_TERMKOUTTEXT,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,198,67,64,12
     COMBOBOX        IDC_TERMKIN,267,47,43,58,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
     COMBOBOX        IDC_TERMKOUT,267,66,43,58,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_GENLANG,69,115,93,81,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | NOT WS_VISIBLE | WS_VSCROLL | WS_TABSTOP
-    CONTROL         "Kanji-&out:",IDC_TERMKOUTTEXT,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,198,67,64,12
-    CONTROL         "&Treat ambiguous characters as wide",IDC_AMBIGUOUS_AS_WIDE,
-                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,90,254,17
-    CONTROL         "&Use same code",IDC_USE_SAME_CODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,8,254,17
+    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
+    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
 END
 
 
@@ -84,8 +87,11 @@
     IDD_TABSHEET_CODING, DIALOG
     BEGIN
         VERTGUIDE, 10
+        VERTGUIDE, 22
+        VERTGUIDE, 71
         VERTGUIDE, 110
         VERTGUIDE, 198
+        BOTTOMMARGIN, 168
     END
 END
 #endif    // APSTUDIO_INVOKED

Modified: trunk/teraterm/teraterm/coding_pp_res.h
===================================================================
--- trunk/teraterm/teraterm/coding_pp_res.h	2020-06-15 02:07:06 UTC (rev 8797)
+++ trunk/teraterm/teraterm/coding_pp_res.h	2020-06-15 02:07:17 UTC (rev 8798)
@@ -10,7 +10,6 @@
 #define IDC_TERMKIN                     105
 #define IDC_TERMKOUTTEXT                106
 #define IDC_TERMKOUT                    107
-#define IDC_AMBIGUOUS_AS_WIDE           108
 #define IDC_USE_SAME_CODE               109
 #define IDC_GENLANGLABEL                110
 #define IDC_GENLANG                     111
@@ -17,6 +16,9 @@
 #define IDC_TERMKANJILABEL              112
 #define IDC_TERMKANJISENDLABEL          113
 #define IDD_TABSHEET_CODING             128
+#define IDC_AMBIGUOUS_WIDTH_COMBO       2607
+#define IDC_EMOJI_WIDTH_CHECK           2608
+#define IDC_EMOJI_WIDTH_COMBO           2609
 
 // Next default values for new objects
 // 
@@ -25,7 +27,7 @@
 #define _APS_NO_MFC                     1
 #define _APS_NEXT_RESOURCE_VALUE        115
 #define _APS_NEXT_COMMAND_VALUE         52031
-#define _APS_NEXT_CONTROL_VALUE         2607
+#define _APS_NEXT_CONTROL_VALUE         2609
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif

Modified: trunk/teraterm/ttpset/ttset.c
===================================================================
--- trunk/teraterm/ttpset/ttset.c	2020-06-15 02:07:06 UTC (rev 8797)
+++ trunk/teraterm/ttpset/ttset.c	2020-06-15 02:07:17 UTC (rev 8798)
@@ -2243,7 +2243,15 @@
 			  &ts->DialogFontPoint, &ts->DialogFontCharSet);
 
 	// Unicode\x90ݒ\xE8
-	ts->UnicodeAmbiguousAsWide = GetOnOff(Section, "UnicodeAmbiguousWide", FName, TRUE);
+	ts->UnicodeAmbiguousWidth = GetPrivateProfileInt(Section, "UnicodeAmbiguousWidth", 1, FName);
+	if (ts->UnicodeAmbiguousWidth < 1 || 2 < ts->UnicodeAmbiguousWidth) {
+		ts->UnicodeAmbiguousWidth = 1;
+	}
+	ts->UnicodeEmojiOverride = GetOnOff(Section, "UnicodeEmojiOverride", FName, FALSE);
+	ts->UnicodeEmojiWidth = GetPrivateProfileInt(Section, "UnicodeEmojiWidth", 1, FName);
+	if (ts->UnicodeEmojiWidth < 1 || 2 < ts->UnicodeEmojiWidth) {
+		ts->UnicodeEmojiWidth = 1;
+	}
 }
 
 void PASCAL WriteIniFile(PCHAR FName, PTTSet ts)
@@ -3568,7 +3576,9 @@
 	WritePrivateProfileStringA("Tera Term", "DlgFont", Temp, FName);
 
 	// Unicode\x90ݒ\xE8
-	WriteOnOff(Section, "UnicodeAmbiguousWide", FName, ts->UnicodeAmbiguousAsWide);
+	WriteInt(Section, "UnicodeAmbiguousWidth", FName, ts->UnicodeAmbiguousWidth);
+	WriteOnOff(Section, "UnicodeEmojiOverride", FName, ts->UnicodeEmojiOverride);
+	WriteInt(Section, "UnicodeEmojiWidth", FName, ts->UnicodeEmojiWidth);
 }
 
 #define VTEditor "VT editor keypad"


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