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\x82O\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"