From 7cb8740e1ca2de36671fea81a6191258d9b0cb1d Mon Sep 17 00:00:00 2001 From: maboroshin Date: Wed, 19 Sep 2018 01:10:01 +0900 Subject: [PATCH 1/8] Translation >JP :Transpose,inc/dec,dup,posi,tgl --- language/np3_ja_jp/menu_ja_jp.rc | Bin 42846 -> 42740 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/language/np3_ja_jp/menu_ja_jp.rc b/language/np3_ja_jp/menu_ja_jp.rc index aee8aeb250129b1769a884208216231321f8f918..28ab21638f6783a8bf6105ee43ba2704eca0e789 100644 GIT binary patch delta 194 zcmcb2j_J!;rVSlNEcy&S9h2jnn^R&|pww2w~9NY;Vji zz{lSCw?m(yV#2(nBh{b6Hpe-qNbnS-ssv0jFl3k>u^?#jgXjXdfOMW<3{XI7b4ScJ zMQ+(3`E;>hU;n)Nipkz}g(3)khC#SNnt?>uw#3bE>WUQPgAIZW@(gAqbs5A1VZFg5 X1NNXUgj*&jD#}kPli0j#{t|WoA;UxB delta 331 zcmexzmg(L(rVSlN>KY7c3@!|s4EhYg45R*-A+z`ERkvN;SXlM6*eHyg}9!VUnJ`cz{8 From 83e51bc8fda9f55e1a16f4395c3e8d2f5b216a3b Mon Sep 17 00:00:00 2001 From: maboroshin Date: Wed, 19 Sep 2018 01:35:13 +0900 Subject: [PATCH 2/8] fix:scintilla use WM_IME_NOTIFY --- scintilla/include/Scintilla.h | 9 ++++-- scintilla/include/Scintilla.iface | 7 +++-- scintilla/src/EditModel.cxx | 3 +- scintilla/src/EditModel.h | 3 +- scintilla/src/Editor.cxx | 48 ++++++++++++++--------------- scintilla/win32/ScintillaWin.cxx | 50 ++++++++++++++++++++++++------- 6 files changed, 78 insertions(+), 42 deletions(-) diff --git a/scintilla/include/Scintilla.h b/scintilla/include/Scintilla.h index 396f4120b..fd8a9b947 100644 --- a/scintilla/include/Scintilla.h +++ b/scintilla/include/Scintilla.h @@ -1047,9 +1047,12 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, #define SC_MOD_CHANGETABSTOPS 0x200000 #define SC_MODEVENTMASKALL 0x3FFFFF // >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> -#define SC_CHARADDED_NORMAL 0 -#define SC_CHARADDED_TENTATIVE 1 -#define SC_CHARADDED_IME 2 +#define SC_IME_CLOSE 0 +#define SC_IME_OPEN 1 +#define SCI_GETIMEOPEN 3860 // to Neil: I do not know how to allocate number. Change it. +#define SC_IME_MODE_NATIVE 0 // = IME_CMODE_ALPHANUMERIC +#define SC_IME_MODE_CJK 1 // Other than IME_CMODE_ALPHANUMERIC +#define SCI_GETIMEMODEACTIVE 3861 // to Neil: I do not know how to allocate number. Change it. // <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< #define SC_UPDATE_CONTENT 0x1 #define SC_UPDATE_SELECTION 0x2 diff --git a/scintilla/include/Scintilla.iface b/scintilla/include/Scintilla.iface index 6eb3ea2ef..fdaff201f 100644 --- a/scintilla/include/Scintilla.iface +++ b/scintilla/include/Scintilla.iface @@ -2768,9 +2768,10 @@ val SC_MODEVENTMASKALL=0x3FFFFF // >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> # modifiers for SCN_CHARADDED: normal input, inline IME tentative, IME full composited -val SC_CHARADDED_NORMAL=0 -val SC_CHARADDED_TENTATIVE=1 -val SC_CHARADDED_IME=2 +val SC_IME_CLOSE=0 +val SC_IME_OPEN=1 +val SC_IME_MODE_NATIVE=0 +val SC_IME_MODE_CJK=1 // <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< enu Update=SC_UPDATE_ diff --git a/scintilla/src/EditModel.cxx b/scintilla/src/EditModel.cxx index ef0be3681..d6308778e 100644 --- a/scintilla/src/EditModel.cxx +++ b/scintilla/src/EditModel.cxx @@ -63,7 +63,8 @@ EditModel::EditModel() : braces{} { primarySelection = true; imeInteraction = imeWindowed; // >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> - charAddedSource = SC_CHARADDED_NORMAL; + isIMEOpen = SC_IME_CLOSE; + isIMEModeCJK = 0; // <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< bidirectional = Bidirectional::bidiDisabled; foldFlags = 0; diff --git a/scintilla/src/EditModel.h b/scintilla/src/EditModel.h index e87b0ee15..55b615494 100644 --- a/scintilla/src/EditModel.h +++ b/scintilla/src/EditModel.h @@ -38,7 +38,8 @@ public: enum IMEInteraction { imeWindowed, imeInline } imeInteraction; // >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> - int charAddedSource; + bool isIMEOpen; + bool isIMEModeCJK; // <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< enum class Bidirectional { bidiDisabled, bidiL2R, bidiR2L } bidirectional; diff --git a/scintilla/src/Editor.cxx b/scintilla/src/Editor.cxx index af3b87068..164dbe0c0 100644 --- a/scintilla/src/Editor.cxx +++ b/scintilla/src/Editor.cxx @@ -1959,28 +1959,23 @@ void Editor::AddCharUTF(const char *s, unsigned int len, bool treatAsDBCS) { SetLastXChosen(); } - // >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> - // We don't handle inline IME tentative characters - if (charAddedSource != SC_CHARADDED_TENTATIVE) { - // <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< - if (treatAsDBCS) { - NotifyChar((static_cast(s[0]) << 8) | - static_cast(s[1])); - } else if (len > 0) { - int byte = static_cast(s[0]); - if ((byte < 0xC0) || (1 == len)) { - // Handles UTF-8 characters between 0x01 and 0x7F and single byte - // characters when not in UTF-8 mode. - // Also treats \0 and naked trail bytes 0x80 to 0xBF as valid - // characters representing themselves. - } else { - unsigned int utf32[1] = { 0 }; - UTF32FromUTF8(std::string_view(s, len), utf32, std::size(utf32)); - byte = utf32[0]; - } - NotifyChar(byte); + if (treatAsDBCS) { + NotifyChar((static_cast(s[0]) << 8) | + static_cast(s[1])); + } else if (len > 0) { + int byte = static_cast(s[0]); + if ((byte < 0xC0) || (1 == len)) { + // Handles UTF-8 characters between 0x01 and 0x7F and single byte + // characters when not in UTF-8 mode. + // Also treats \0 and naked trail bytes 0x80 to 0xBF as valid + // characters representing themselves. + } else { + unsigned int utf32[1] = { 0 }; + UTF32FromUTF8(std::string_view(s, len), utf32, std::size(utf32)); + byte = utf32[0]; } - } // >>> NON STD SCI PATCH <<< + NotifyChar(byte); + } if (recordingMacro) { NotifyMacroRecord(SCI_REPLACESEL, 0, reinterpret_cast(s)); @@ -2331,9 +2326,6 @@ void Editor::NotifyChar(int ch) { SCNotification scn = {}; scn.nmhdr.code = SCN_CHARADDED; scn.ch = ch; - // >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> - scn.modifiers = charAddedSource; - // <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< NotifyParent(scn); } @@ -6795,6 +6787,14 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { case SCI_GETIMEINTERACTION: return imeInteraction; + +// >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> + case SCI_GETIMEOPEN: + return isIMEOpen; + + case SCI_GETIMEMODEACTIVE: + return isIMEModeCJK; +// <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< case SCI_SETBIDIRECTIONAL: // SCI_SETBIDIRECTIONAL is implemented on platform subclasses if they support bidirectional text. diff --git a/scintilla/win32/ScintillaWin.cxx b/scintilla/win32/ScintillaWin.cxx index caa36fd19..50e87674b 100644 --- a/scintilla/win32/ScintillaWin.cxx +++ b/scintilla/win32/ScintillaWin.cxx @@ -401,6 +401,10 @@ class ScintillaWin : sptr_t HandleCompositionWindowed(uptr_t wParam, sptr_t lParam); sptr_t HandleCompositionInline(uptr_t wParam, sptr_t lParam); static bool KoreanIME() noexcept; +// >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> + bool IsIMEOpen(); + DWORD GetIMEInputMode(); +// <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< void MoveImeCarets(Sci::Position offset); void DrawImeIndicator(int indicator, int len); void SetCandidateWindowPos(); @@ -1007,9 +1011,7 @@ sptr_t ScintillaWin::HandleCompositionWindowed(uptr_t wParam, sptr_t lParam) { if (lParam & GCS_RESULTSTR) { IMContext imc(MainHWND()); if (imc.hIMC) { - charAddedSource = SC_CHARADDED_IME; AddWString(imc.GetCompositionString(GCS_RESULTSTR)); - charAddedSource = SC_CHARADDED_NORMAL; // Set new position after converted const Point pos = PointMainCaret(); @@ -1027,7 +1029,26 @@ bool ScintillaWin::KoreanIME() noexcept { const int codePage = InputCodePage(); return codePage == 949 || codePage == 1361; } +// >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> +bool ScintillaWin::IsIMEOpen() { + IMContext imc(MainHWND()); + if (imc.hIMC) { + if (ImmGetOpenStatus(imc.hIMC)) + return true; + } + return false; +} +DWORD ScintillaWin::GetIMEInputMode() { + DWORD dwConversion, dwSentence; + IMContext imc(MainHWND()); + if (imc.hIMC && ImmGetOpenStatus(imc.hIMC)) { + if (ImmGetConversionStatus(imc.hIMC, &dwConversion, &dwSentence)) + return dwConversion; + } + return 0; +} +// <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< void ScintillaWin::MoveImeCarets(Sci::Position offset) { // Move carets relatively by bytes. for (size_t r = 0; r < sel.Count(); r++) { @@ -1215,7 +1236,6 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) { const bool tmpRecordingMacro = recordingMacro; recordingMacro = false; - charAddedSource = SC_CHARADDED_TENTATIVE; const int codePage = CodePageOfDocument(); for (size_t i = 0; i < wcs.size(); ) { const size_t ucWidth = UTF16CharLength(wcs[i]); @@ -1227,7 +1247,6 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) { DrawImeIndicator(imeIndicator[i], static_cast(docChar.size())); i += ucWidth; } - charAddedSource = SC_CHARADDED_NORMAL; recordingMacro = tmpRecordingMacro; // Move IME caret from current last position to imeCaretPos. @@ -1240,9 +1259,7 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) { view.imeCaretBlockOverride = true; } } else if (lParam & GCS_RESULTSTR) { - charAddedSource = SC_CHARADDED_IME; AddWString(imc.GetCompositionString(GCS_RESULTSTR)); - charAddedSource = SC_CHARADDED_NORMAL; } EnsureCaretVisible(); SetCandidateWindowPos(); @@ -1724,13 +1741,27 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam case WM_IME_SETCONTEXT: if (imeInteraction == imeInline) { if (wParam) { - LPARAM NoImeWin = lParam; - NoImeWin = NoImeWin & (~ISC_SHOWUICOMPOSITIONWINDOW); - return ::DefWindowProc(MainHWND(), iMessage, wParam, NoImeWin); + LPARAM noImeCompositeWindow = lParam; + noImeCompositeWindow = noImeCompositeWindow & (~ISC_SHOWUICOMPOSITIONWINDOW); + return ::DefWindowProc(MainHWND(), iMessage, wParam, noImeCompositeWindow); } } return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam); +// >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> + case WM_IME_NOTIFY: { + if (wParam == IMN_SETOPENSTATUS) { + isIMEOpen = (IsIMEOpen() ? SC_IME_OPEN : SC_IME_CLOSE); + } + if (wParam == IMN_SETOPENSTATUS || wParam == IMN_SETCONVERSIONMODE) { + DWORD dwIMEInputMode = GetIMEInputMode(); + isIMEModeCJK = (dwIMEInputMode != IME_CMODE_ALPHANUMERIC ? + SC_IME_MODE_CJK : SC_IME_MODE_NATIVE); + } + return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam); + } +// <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< + // These are not handled in Scintilla and its faster to dispatch them here. // Also moves time out to here so profile doesn't count lots of empty message calls. @@ -1741,7 +1772,6 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam case WM_NCPAINT: case WM_NCMOUSEMOVE: case WM_NCLBUTTONDOWN: - case WM_IME_NOTIFY: case WM_SYSCOMMAND: case WM_WINDOWPOSCHANGING: case WM_WINDOWPOSCHANGED: From c72de70dff1d93134d71a3b8a07b82661065d71c Mon Sep 17 00:00:00 2001 From: maboroshin Date: Wed, 19 Sep 2018 01:38:33 +0900 Subject: [PATCH 3/8] fix:Notepad3.c IME AutoComp --- src/Notepad3.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Notepad3.c b/src/Notepad3.c index 30fbf97a8..c72e2c9f3 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -6150,9 +6150,9 @@ static void __fastcall _HandleTinyExpr() #if 0 //============================================================================= // -// _IsIMEOpenInNativeMode() +// _IsIMEOpenInNoNativeMode() // -static bool __fastcall _IsIMEOpenInNativeMode() +static bool __fastcall _IsIMEOpenInNoNativeMode() { bool result = false; HIMC const himc = ImmGetContext(g_hwndEdit); @@ -6365,10 +6365,17 @@ LRESULT MsgNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) } if ((g_bAutoCompleteWords || g_bAutoCLexerKeyWords)) { - if (g_bAutoCinASCIIModeOnly && ((ich > 0x7F) || (scn->modifiers != SC_CHARADDED_NORMAL))) { - SciCall_AutoCCancel(); - return 0LL; - } + //if (g_bAutoCinASCIIModeOnly && (ich > 0x7F) ) { + bool isIMEModeActive, + bIMEOpen = (bool)SendMessage(g_hwndEdit, SCI_GETIMEOPEN, 0, 0); + if (bIMEOpen) { // || (scn->modifiers != SC_CHARADDED_NORMAL) + isIMEModeActive = (bool)SendMessage(g_hwndEdit, SCI_GETIMEMODEACTIVE, 0, 0); + if (isIMEModeActive ) { + SciCall_AutoCCancel(); + return 0LL; + } + } + //} //g_bAutoCinASCIIModeOnly section if (!SciCall_AutoCActive()) { EditCompleteWord(g_hwndEdit, false); } } } From a611d955e8625f7b7b49957577a85808437dec80 Mon Sep 17 00:00:00 2001 From: Pairi Daiza <34211772+hpwamr@users.noreply.github.com> Date: Tue, 18 Sep 2018 22:50:48 +0200 Subject: [PATCH 4/8] Minor translation of items in menu fr and nl - MENUITEM "Save as Default Position", CMD_SAVEASDEFWINPOS --- language/np3_fr_fr/menu_fr_fr.rc | Bin 46866 -> 46892 bytes language/np3_nl_nl/menu_nl_nl.rc | Bin 45918 -> 45928 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/language/np3_fr_fr/menu_fr_fr.rc b/language/np3_fr_fr/menu_fr_fr.rc index 4361ba10230dd195613b5517200e1f7f1fe10dd8..094bfb2516cd083b438583ee23d89613e24b5a55 100644 GIT binary patch delta 110 zcmbRAj%m$1rVTQki~*A$c8O1Rl8~7EPLOYMRAl8pui9SWEV4J rGL!&uK0_W*q<|rjp$JI3FuY_)1F}mQN+#d#%oWB|>A5+&Yr75re`6oI delta 94 zcmZ4Uj%m_6rVTQklOHV-nQYL>!kWVHk|Aw!zMHxj>VI7&AAQc5T-I0HJpsbpQYW diff --git a/language/np3_nl_nl/menu_nl_nl.rc b/language/np3_nl_nl/menu_nl_nl.rc index c9086801922697394d8ecbdf53a6475e61fb6c8c..464c146ddf6763a8c76b3b897bcc53d8e2b2c7f8 100644 GIT binary patch delta 112 zcmccjjOoQQrVSNsqQML$42cYR3@Jb|k)a4kD=-91?rp1_yg;30a*%+KvH}BEH4OO- m#SEE1-I)xjlTF*Jg*}0$K=_FaISi>_bD}#WH{WS*(gpwn9v*-I delta 98 zcmaFyjOpGprVSNslbK|MCMR`>OrF=4p&!hU$WX?R%Af$Gi-DvIkevo(monrqlmPhw m4EaFuOdvZG$jX~+-(Jn1$&d#XNd&4&ot)SqyZKprlQsapjvQP7 From cd57dc4a5c44df589ee47618c437fae07a00ecfa Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 19 Sep 2018 02:07:15 +0200 Subject: [PATCH 5/8] + review: maboroshin's changes for IME and Auto-Completion cooperation --- scintilla/include/SciLexer.h | 21 ----------------- scintilla/include/Scintilla.h | 14 ++--------- scintilla/include/Scintilla.iface | 39 +++++++------------------------ scintilla/src/EditModel.cxx | 4 ++-- scintilla/src/EditModel.h | 4 ++-- scintilla/src/Editor.cxx | 8 +++---- scintilla/win32/ScintillaWin.cxx | 21 +++++++++-------- src/Notepad3.c | 9 +++---- src/SciCall.h | 9 +++++++ 9 files changed, 41 insertions(+), 88 deletions(-) diff --git a/scintilla/include/SciLexer.h b/scintilla/include/SciLexer.h index 0950a72f8..a030d65a4 100644 --- a/scintilla/include/SciLexer.h +++ b/scintilla/include/SciLexer.h @@ -1541,27 +1541,6 @@ #define SCE_TXT2TAGS_OPTION 23 #define SCE_TXT2TAGS_PREPROC 24 #define SCE_TXT2TAGS_POSTPROC 25 -#define SCE_AHK_DEFAULT 0 -#define SCE_AHK_COMMENTLINE 1 -#define SCE_AHK_COMMENTBLOCK 2 -#define SCE_AHK_ESCAPE 3 -#define SCE_AHK_SYNOPERATOR 4 -#define SCE_AHK_EXPOPERATOR 5 -#define SCE_AHK_STRING 6 -#define SCE_AHK_NUMBER 7 -#define SCE_AHK_IDENTIFIER 8 -#define SCE_AHK_VARREF 9 -#define SCE_AHK_LABEL 10 -#define SCE_AHK_WORD_CF 11 -#define SCE_AHK_WORD_CMD 12 -#define SCE_AHK_WORD_FN 13 -#define SCE_AHK_WORD_DIR 14 -#define SCE_AHK_WORD_KB 15 -#define SCE_AHK_WORD_VAR 16 -#define SCE_AHK_WORD_SP 17 -#define SCE_AHK_WORD_UD 18 -#define SCE_AHK_VARREFKW 19 -#define SCE_AHK_ERROR 20 #define SCE_A68K_DEFAULT 0 #define SCE_A68K_COMMENT 1 #define SCE_A68K_NUMBER_DEC 2 diff --git a/scintilla/include/Scintilla.h b/scintilla/include/Scintilla.h index fd8a9b947..9b452c70a 100644 --- a/scintilla/include/Scintilla.h +++ b/scintilla/include/Scintilla.h @@ -103,6 +103,8 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, #define SC_IME_INLINE 1 #define SCI_GETIMEINTERACTION 2678 #define SCI_SETIMEINTERACTION 2679 +#define SCI_ISIMEOPEN 2717 +#define SCI_ISIMEMODECJK 2718 #define MARKER_MAX 31 #define SC_MARK_CIRCLE 0 #define SC_MARK_ROUNDRECT 1 @@ -399,9 +401,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, #define SCI_GETPRINTCOLOURMODE 2149 #define SCFIND_WHOLEWORD 0x2 #define SCFIND_MATCHCASE 0x4 -// >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> #define SCFIND_DOT_MATCH_ALL 0x1000 -// <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< #define SCFIND_WORDSTART 0x00100000 #define SCFIND_REGEXP 0x00200000 #define SCFIND_POSIX 0x00400000 @@ -691,10 +691,8 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, #define SC_POPUP_TEXT 2 #define SCI_USEPOPUP 2371 #define SCI_SELECTIONISRECTANGLE 2372 -// >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> #define SC_MIN_ZOOM_LEVEL 10 #define SC_MAX_ZOOM_LEVEL 500 -// <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< #define SCI_SETZOOM 2373 #define SCI_GETZOOM 2374 #define SC_DOCUMENTOPTION_DEFAULT 0 @@ -1046,14 +1044,6 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, #define SC_MOD_INSERTCHECK 0x100000 #define SC_MOD_CHANGETABSTOPS 0x200000 #define SC_MODEVENTMASKALL 0x3FFFFF -// >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> -#define SC_IME_CLOSE 0 -#define SC_IME_OPEN 1 -#define SCI_GETIMEOPEN 3860 // to Neil: I do not know how to allocate number. Change it. -#define SC_IME_MODE_NATIVE 0 // = IME_CMODE_ALPHANUMERIC -#define SC_IME_MODE_CJK 1 // Other than IME_CMODE_ALPHANUMERIC -#define SCI_GETIMEMODEACTIVE 3861 // to Neil: I do not know how to allocate number. Change it. -// <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< #define SC_UPDATE_CONTENT 0x1 #define SC_UPDATE_SELECTION 0x2 #define SC_UPDATE_V_SCROLL 0x4 diff --git a/scintilla/include/Scintilla.iface b/scintilla/include/Scintilla.iface index fdaff201f..e96e5a6a6 100644 --- a/scintilla/include/Scintilla.iface +++ b/scintilla/include/Scintilla.iface @@ -266,6 +266,11 @@ get int GetIMEInteraction=2678(,) # Choose to display the the IME in a winow or inline. set void SetIMEInteraction=2679(int imeInteraction,) +# >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> +get bool IsIMEOpen=2717(,) +get bool IsIMEModeCJK=2718(,) +# <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< + enu MarkerSymbol=SC_MARK_ val MARKER_MAX=31 val SC_MARK_CIRCLE=0 @@ -949,6 +954,9 @@ get int GetPrintColourMode=2149(,) enu FindOption=SCFIND_ val SCFIND_WHOLEWORD=0x2 val SCFIND_MATCHCASE=0x4 +# >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> +val SCFIND_DOT_MATCH_ALL=0x1000 +# <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< val SCFIND_WORDSTART=0x00100000 val SCFIND_REGEXP=0x00200000 val SCFIND_POSIX=0x00400000 @@ -2766,14 +2774,6 @@ val SC_MOD_INSERTCHECK=0x100000 val SC_MOD_CHANGETABSTOPS=0x200000 val SC_MODEVENTMASKALL=0x3FFFFF -// >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> -# modifiers for SCN_CHARADDED: normal input, inline IME tentative, IME full composited -val SC_IME_CLOSE=0 -val SC_IME_OPEN=1 -val SC_IME_MODE_NATIVE=0 -val SC_IME_MODE_CJK=1 -// <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< - enu Update=SC_UPDATE_ val SC_UPDATE_CONTENT=0x1 val SC_UPDATE_SELECTION=0x2 @@ -4910,29 +4910,6 @@ val SCE_SAS_MACRO_KEYWORD=12 val SCE_SAS_BLOCK_KEYWORD=13 val SCE_SAS_MACRO_FUNCTION=14 val SCE_SAS_STATEMENT=15 -# Lexical states for SCLEX_AHK -lex AHK=SCLEX_AHK SCE_AHK_ -val SCE_AHK_DEFAULT=0 -val SCE_AHK_COMMENTLINE=1 -val SCE_AHK_COMMENTBLOCK=2 -val SCE_AHK_ESCAPE=3 -val SCE_AHK_SYNOPERATOR=4 -val SCE_AHK_EXPOPERATOR=5 -val SCE_AHK_STRING=6 -val SCE_AHK_NUMBER=7 -val SCE_AHK_IDENTIFIER=8 -val SCE_AHK_VARREF=9 -val SCE_AHK_LABEL=10 -val SCE_AHK_WORD_CF=11 -val SCE_AHK_WORD_CMD=12 -val SCE_AHK_WORD_FN=13 -val SCE_AHK_WORD_DIR=14 -val SCE_AHK_WORD_KB=15 -val SCE_AHK_WORD_VAR=16 -val SCE_AHK_WORD_SP=17 -val SCE_AHK_WORD_UD=18 -val SCE_AHK_VARREFKW=19 -val SCE_AHK_ERROR=20 # Events diff --git a/scintilla/src/EditModel.cxx b/scintilla/src/EditModel.cxx index d6308778e..70704e63d 100644 --- a/scintilla/src/EditModel.cxx +++ b/scintilla/src/EditModel.cxx @@ -63,8 +63,8 @@ EditModel::EditModel() : braces{} { primarySelection = true; imeInteraction = imeWindowed; // >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> - isIMEOpen = SC_IME_CLOSE; - isIMEModeCJK = 0; + imeIsOpen = false; + imeIsInModeCJK = false; // <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< bidirectional = Bidirectional::bidiDisabled; foldFlags = 0; diff --git a/scintilla/src/EditModel.h b/scintilla/src/EditModel.h index 55b615494..7230cbfd3 100644 --- a/scintilla/src/EditModel.h +++ b/scintilla/src/EditModel.h @@ -38,8 +38,8 @@ public: enum IMEInteraction { imeWindowed, imeInline } imeInteraction; // >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> - bool isIMEOpen; - bool isIMEModeCJK; + bool imeIsOpen; + bool imeIsInModeCJK; // <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< enum class Bidirectional { bidiDisabled, bidiL2R, bidiR2L } bidirectional; diff --git a/scintilla/src/Editor.cxx b/scintilla/src/Editor.cxx index 164dbe0c0..60b51ba68 100644 --- a/scintilla/src/Editor.cxx +++ b/scintilla/src/Editor.cxx @@ -6789,11 +6789,11 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { return imeInteraction; // >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> - case SCI_GETIMEOPEN: - return isIMEOpen; + case SCI_ISIMEOPEN: + return imeIsOpen; - case SCI_GETIMEMODEACTIVE: - return isIMEModeCJK; + case SCI_ISIMEMODECJK: + return imeIsInModeCJK; // <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< case SCI_SETBIDIRECTIONAL: diff --git a/scintilla/win32/ScintillaWin.cxx b/scintilla/win32/ScintillaWin.cxx index 50e87674b..cecd7c7af 100644 --- a/scintilla/win32/ScintillaWin.cxx +++ b/scintilla/win32/ScintillaWin.cxx @@ -1029,26 +1029,30 @@ bool ScintillaWin::KoreanIME() noexcept { const int codePage = InputCodePage(); return codePage == 949 || codePage == 1361; } + // >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> bool ScintillaWin::IsIMEOpen() { IMContext imc(MainHWND()); if (imc.hIMC) { - if (ImmGetOpenStatus(imc.hIMC)) - return true; + if (ImmGetOpenStatus(imc.hIMC)) { + return true; + } } return false; } DWORD ScintillaWin::GetIMEInputMode() { - DWORD dwConversion, dwSentence; IMContext imc(MainHWND()); if (imc.hIMC && ImmGetOpenStatus(imc.hIMC)) { - if (ImmGetConversionStatus(imc.hIMC, &dwConversion, &dwSentence)) + DWORD dwConversion, dwSentence; + if (ImmGetConversionStatus(imc.hIMC, &dwConversion, &dwSentence)) { return dwConversion; + } } return 0; } // <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< + void ScintillaWin::MoveImeCarets(Sci::Position offset) { // Move carets relatively by bytes. for (size_t r = 0; r < sel.Count(); r++) { @@ -1749,17 +1753,14 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam); // >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>> - case WM_IME_NOTIFY: { + case WM_IME_NOTIFY: if (wParam == IMN_SETOPENSTATUS) { - isIMEOpen = (IsIMEOpen() ? SC_IME_OPEN : SC_IME_CLOSE); + imeIsOpen = IsIMEOpen(); } if (wParam == IMN_SETOPENSTATUS || wParam == IMN_SETCONVERSIONMODE) { - DWORD dwIMEInputMode = GetIMEInputMode(); - isIMEModeCJK = (dwIMEInputMode != IME_CMODE_ALPHANUMERIC ? - SC_IME_MODE_CJK : SC_IME_MODE_NATIVE); + imeIsInModeCJK = (GetIMEInputMode() != IME_CMODE_ALPHANUMERIC); } return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam); - } // <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<< // These are not handled in Scintilla and its faster to dispatch them here. diff --git a/src/Notepad3.c b/src/Notepad3.c index ce467c118..c5d6878ed 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -6361,13 +6361,10 @@ LRESULT MsgNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) if ((g_bAutoCompleteWords || g_bAutoCLexerKeyWords)) { //if (g_bAutoCinASCIIModeOnly && (ich > 0x7F) ) { - bool isIMEModeActive, - bIMEOpen = (bool)SendMessage(g_hwndEdit, SCI_GETIMEOPEN, 0, 0); - if (bIMEOpen) { // || (scn->modifiers != SC_CHARADDED_NORMAL) - isIMEModeActive = (bool)SendMessage(g_hwndEdit, SCI_GETIMEMODEACTIVE, 0, 0); - if (isIMEModeActive ) { + if (SciCall_IsIMEOpen()) { + if (SciCall_IsIMEModeCJK()) { SciCall_AutoCCancel(); - return 0LL; + return 0; } } //} //g_bAutoCinASCIIModeOnly section diff --git a/src/SciCall.h b/src/SciCall.h index 3bd2a6f7c..2578610e2 100644 --- a/src/SciCall.h +++ b/src/SciCall.h @@ -439,7 +439,16 @@ DeclareSciCallV1(SetUndoCollection, SETUNDOCOLLECTION, bool, bCollectUndo) DeclareSciCallV1(SetBufferedDraw, SETBUFFEREDDRAW, bool, value) DeclareSciCallV1(SetTechnology, SETTECHNOLOGY, int, technology) DeclareSciCallV1(SetBidirectional, SETBIDIRECTIONAL, int, direction) + + +//============================================================================= +// +// IME +// DeclareSciCallV1(SetIMEInteraction, SETIMEINTERACTION, int, interact) +DeclareSciCallR0(IsIMEOpen, ISIMEOPEN, bool) +DeclareSciCallR0(IsIMEModeCJK, ISIMEMODECJK, bool) + //============================================================================= // From 4c09e0bd2520e77f7f5891ada2df3f3c834fe803 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 19 Sep 2018 02:34:11 +0200 Subject: [PATCH 6/8] + fix: in/out variable initialization --- scintilla/win32/ScintillaWin.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scintilla/win32/ScintillaWin.cxx b/scintilla/win32/ScintillaWin.cxx index cecd7c7af..08bfdddf9 100644 --- a/scintilla/win32/ScintillaWin.cxx +++ b/scintilla/win32/ScintillaWin.cxx @@ -1044,7 +1044,7 @@ bool ScintillaWin::IsIMEOpen() { DWORD ScintillaWin::GetIMEInputMode() { IMContext imc(MainHWND()); if (imc.hIMC && ImmGetOpenStatus(imc.hIMC)) { - DWORD dwConversion, dwSentence; + DWORD dwConversion = IME_CMODE_ALPHANUMERIC, dwSentence = IME_SMODE_NONE; if (ImmGetConversionStatus(imc.hIMC, &dwConversion, &dwSentence)) { return dwConversion; } From 4c77b1dad55a206841ec7f8f1c0c3f76ce3538c7 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 19 Sep 2018 08:56:26 +0200 Subject: [PATCH 7/8] sync Scintilla development --- scintilla/src/Document.cxx | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/scintilla/src/Document.cxx b/scintilla/src/Document.cxx index 3d5ae2d49..44f301e90 100644 --- a/scintilla/src/Document.cxx +++ b/scintilla/src/Document.cxx @@ -296,7 +296,7 @@ Sci::Line Document::MarkerNext(Sci::Line lineStart, int mask) const { int Document::AddMark(Sci::Line line, int markerNum) { if (line >= 0 && line <= LinesTotal()) { const int prev = Markers()->AddMark(line, markerNum, LinesTotal()); - const DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line); + const DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, nullptr, line); NotifyModified(mh); return prev; } else { @@ -313,19 +313,19 @@ void Document::AddMarkSet(Sci::Line line, int valueSet) { if (m & 1) Markers()->AddMark(line, i, LinesTotal()); } - const DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line); + const DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, nullptr, line); NotifyModified(mh); } void Document::DeleteMark(Sci::Line line, int markerNum) { Markers()->DeleteMark(line, markerNum, false); - const DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line); + const DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, nullptr, line); NotifyModified(mh); } void Document::DeleteMarkFromHandle(int markerHandle) { Markers()->DeleteMarkFromHandle(markerHandle); - DocModification mh(SC_MOD_CHANGEMARKER, 0, 0, 0, 0); + DocModification mh(SC_MOD_CHANGEMARKER); mh.line = -1; NotifyModified(mh); } @@ -337,7 +337,7 @@ void Document::DeleteAllMarks(int markerNum) { someChanges = true; } if (someChanges) { - DocModification mh(SC_MOD_CHANGEMARKER, 0, 0, 0, 0); + DocModification mh(SC_MOD_CHANGEMARKER); mh.line = -1; NotifyModified(mh); } @@ -435,7 +435,7 @@ int SCI_METHOD Document::SetLevel(Sci_Position line, int level) { const int prev = Levels()->SetLevel(static_cast(line), level, LinesTotal()); if (prev != level) { DocModification mh(SC_MOD_CHANGEFOLD | SC_MOD_CHANGEMARKER, - LineStart(line), 0, 0, 0, static_cast(line)); + LineStart(line), 0, 0, nullptr, static_cast(line)); mh.foldLevelNow = level; mh.foldLevelPrev = prev; NotifyModified(mh); @@ -2113,7 +2113,7 @@ const char *Document::SubstituteByPosition(const char *text, Sci::Position *leng if (regex) return regex->SubstituteByPosition(this, text, length); else - return 0; + return nullptr; } int Document::LineCharacterIndex() const { @@ -2255,7 +2255,7 @@ void Document::SetLexInterface(LexInterface *pLexInterface) { int SCI_METHOD Document::SetLineState(Sci_Position line, int state) { const int statePrevious = States()->SetLineState(static_cast(line), state); if (state != statePrevious) { - const DocModification mh(SC_MOD_CHANGELINESTATE, LineStart(line), 0, 0, 0, + const DocModification mh(SC_MOD_CHANGELINESTATE, LineStart(line), 0, 0, nullptr, static_cast(line)); NotifyModified(mh); } @@ -2304,7 +2304,7 @@ void Document::MarginSetStyles(Sci::Line line, const unsigned char *styles) { void Document::MarginClearAll() { const Sci::Line maxEditorLine = LinesTotal(); for (Sci::Line l=0; lClearAll(); } @@ -2347,7 +2347,7 @@ int Document::AnnotationLines(Sci::Line line) const { void Document::AnnotationClearAll() { const Sci::Line maxEditorLine = LinesTotal(); for (Sci::Line l=0; lClearAll(); } @@ -2980,7 +2980,6 @@ std::regex_constants::match_flag_type MatchFlags(const Document *doc, Sci::Posit template bool MatchOnLines(const Document *doc, const Regex ®exp, const RESearchRange &resr, RESearch &search) { - bool matched = false; std::match_results match; // MSVC and libc++ have problems with ^ and $ matching line ends inside a range. @@ -2994,9 +2993,10 @@ bool MatchOnLines(const Document *doc, const Regex ®exp, const RESearchRange Iterator itStart(doc, resr.startPos); Iterator itEnd(doc, resr.endPos); const std::regex_constants::match_flag_type flagsMatch = MatchFlags(doc, resr.startPos, resr.endPos); - matched = std::regex_search(itStart, itEnd, match, regexp, flagsMatch); + const bool matched = std::regex_search(itStart, itEnd, match, regexp, flagsMatch); #else // Line by line. + bool matched = false; for (Sci::Line line = resr.lineRangeStart; line != resr.lineRangeBreak; line += resr.increment) { const Range lineRange = resr.LineRange(line); Iterator itStart(doc, lineRange.start); From 3d1b3771fa6192f31b967810767e991a240bcd78 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 19 Sep 2018 16:33:12 +0200 Subject: [PATCH 8/8] + chg: Auto-Completion: use limited char-set for CJK input codepage on --- Build/Notepad3.ini | Bin 5914 -> 5918 bytes .../App/DefaultData/settings/Notepad3.ini | Bin 5914 -> 5918 bytes src/Edit.c | 35 ++++++++---------- src/Edit.h | 1 + src/Encoding.c | 9 ++++- src/Encoding.h | 5 +++ src/Notepad3.c | 23 +++++------- 7 files changed, 38 insertions(+), 35 deletions(-) diff --git a/Build/Notepad3.ini b/Build/Notepad3.ini index 18d6e3d0a34c702feaf543ab49a6dca3e789bf4e..48a3639644ab8ddc0d12fee9fab41c414b5361d8 100644 GIT binary patch delta 32 ocmbQGH&1Uv4hO$8Lk2@4LlHwTLn=cFgYD$q9I~6IaJ2CO0F~JZ1poj5 delta 28 icmbQIH%o6r4hOd*LokCggC`K$PTtQUyLkpj8y^62D+kB` diff --git a/np3portableapp/Notepad3Portable/App/DefaultData/settings/Notepad3.ini b/np3portableapp/Notepad3Portable/App/DefaultData/settings/Notepad3.ini index 18d6e3d0a34c702feaf543ab49a6dca3e789bf4e..48a3639644ab8ddc0d12fee9fab41c414b5361d8 100644 GIT binary patch delta 32 ocmbQGH&1Uv4hO$8Lk2@4LlHwTLn=cFgYD$q9I~6IaJ2CO0F~JZ1poj5 delta 28 icmbQIH%o6r4hOd*LokCggC`K$PTtQUyLkpj8y^62D+kB` diff --git a/src/Edit.c b/src/Edit.c index 3c1f11249..62ca8e3ad 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -90,12 +90,13 @@ extern bool bFixLineEndings; extern bool bAutoStripBlanks; // Default Codepage and Character Set -extern int g_iDefaultNewFileEncoding; -extern int g_iDefaultCharSet; +extern int g_iDefaultNewFileEncoding; +extern int g_iDefaultCharSet; extern bool bLoadASCIIasUTF8; extern bool bForceLoadASCIIasUTF8; extern bool bLoadNFOasOEM; extern bool bNoEncodingTags; +extern bool g_bUseLimitedAutoCCharSet; extern bool g_bAutoCompleteWords; extern bool g_bAutoCLexerKeyWords; @@ -120,7 +121,6 @@ extern bool g_bZeroBasedColumnIndex; extern CALLTIPTYPE g_CallTipType; extern FR_STATES g_FindReplaceMatchFoundState; -extern bool g_bAutoCinASCIIModeOnly; #define ANSI_CAHR_BUFFER 258 static char DelimChars[ANSI_CAHR_BUFFER] = { '\0' }; @@ -132,7 +132,8 @@ static char WordCharsAccelerated[ANSI_CAHR_BUFFER] = { '\0' }; static char WhiteSpaceCharsAccelerated[ANSI_CAHR_BUFFER] = { '\0' }; static char PunctuationCharsAccelerated[1] = { '\0' }; // empty! -static char AutoCompleteWordASCII[ANSI_CAHR_BUFFER] = { '\0' }; +#define W_AUTOC_WORD_ANSI1252 L"#$%&@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyzÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ" +static char AutoCompleteWordCharSet[ANSI_CAHR_BUFFER] = { L'\0' }; //static WCHAR W_DelimChars[ANSI_CAHR_BUFFER] = { L'\0' }; //static WCHAR W_DelimCharsAccel[ANSI_CAHR_BUFFER] = { L'\0' }; @@ -330,7 +331,7 @@ void EditInitWordDelimiter(HWND hwnd) IniGetString(L"Settings2", L"ExtendedWhiteSpaceChars", L"", buffer, COUNTOF(buffer)); char whitesp[ANSI_CAHR_BUFFER] = { '\0' }; if (StringCchLen(buffer, COUNTOF(buffer)) > 0) { - WideCharToMultiByteStrg(CP_ACP, buffer, whitesp); + WideCharToMultiByteStrg(Encoding_SciCP, buffer, whitesp); } // 3rd set accelerated arrays @@ -360,21 +361,14 @@ void EditInitWordDelimiter(HWND hwnd) StringCchCopyA(DelimCharsAccel, COUNTOF(DelimCharsAccel), WhiteSpaceCharsDefault); StringCchCatA(DelimCharsAccel, COUNTOF(DelimCharsAccel), lineEnds); - - IniGetString(L"Settings2", L"AutoCompleteWordASCII", L"", buffer, COUNTOF(buffer)); - char autocompl[ANSI_CAHR_BUFFER] = { '\0' }; - if (StringCchLen(buffer, COUNTOF(buffer)) > 0) { - WideCharToMultiByteStrg(CP_ACP, buffer, autocompl); + IniGetString(L"Settings2", L"AutoCompleteWordCharSet", L"", buffer, COUNTOF(buffer)); + if (StringCchLen(buffer, COUNTOF(buffer)) > 0) + { + g_bUseLimitedAutoCCharSet = true; + WideCharToMultiByteStrg(Encoding_SciCP, buffer, AutoCompleteWordCharSet); + } else { + WideCharToMultiByteStrg(Encoding_SciCP, W_AUTOC_WORD_ANSI1252, AutoCompleteWordCharSet); } - // add only 7-bit-ASCII chars to accelerated whitespace list - for (size_t i = 0; i < StringCchLenA(autocompl, ANSI_CAHR_BUFFER); i++) { - if (autocompl[i] & 0x7F) { - if (!StrChrA(AutoCompleteWordASCII, autocompl[i])) { - StringCchCatNA(AutoCompleteWordASCII, COUNTOF(AutoCompleteWordASCII), &(autocompl[i]), 1); - } - } - } - g_bAutoCinASCIIModeOnly = (AutoCompleteWordASCII[0] != '\0'); // construct wide char arrays //MultiByteToWideChar(Encoding_SciCP, 0, DelimChars, -1, W_DelimChars, COUNTOF(W_DelimChars)); @@ -6569,7 +6563,8 @@ static const char* __fastcall _strNextLexKeyWord(const char* strg, const char* c void EditCompleteWord(HWND hwnd, bool autoInsert) { UNUSED(hwnd); - char const* const pchAllowdWordChars = (g_bAutoCinASCIIModeOnly ? AutoCompleteWordASCII : + + char const* const pchAllowdWordChars = (g_bUseLimitedAutoCCharSet ? AutoCompleteWordCharSet : (g_bAccelWordNavigation ? WordCharsAccelerated : WordCharsDefault)); DocPos const iCurrentPos = SciCall_GetCurrentPos(); diff --git a/src/Edit.h b/src/Edit.h index b27660822..62b9a5499 100644 --- a/src/Edit.h +++ b/src/Edit.h @@ -23,6 +23,7 @@ int Scintilla_RegisterClasses(void*); int Scintilla_ReleaseResources(); +void EditInitializeSciCtrl(HWND); void EditInitWordDelimiter(HWND); void EditSetNewText(HWND,char*,DWORD); bool EditConvertText(HWND,int,int,bool); diff --git a/src/Encoding.c b/src/Encoding.c index 123c17702..9736445ad 100644 --- a/src/Encoding.c +++ b/src/Encoding.c @@ -31,6 +31,7 @@ #include #include #include +#include #include "../uthash/utarray.h" @@ -49,6 +50,7 @@ extern HMODULE g_hLngResContainer; int g_DOSEncoding = CPI_NONE; bool g_bForceCompEncDetection = false; +bool g_bUseLimitedAutoCCharSet = false; // Supported Encodings WCHAR wchANSI[16] = { L'\0' }; @@ -129,8 +131,11 @@ void Encoding_InitDefaults() 65001 // (UTF-8) }; - ChangeEncodingCodePage(CPI_ANSI_DEFAULT, GetACP()); // set ANSI system CP - StringCchPrintf(wchANSI, COUNTOF(wchANSI), L" (CP-%u)", g_Encodings[CPI_ANSI_DEFAULT].uCodePage); + UINT const ansiInputCP = GetACP(); + ChangeEncodingCodePage(CPI_ANSI_DEFAULT, ansiInputCP); // set ANSI system CP () + assert(g_Encodings[CPI_ANSI_DEFAULT].uCodePage == ansiInputCP); + StringCchPrintf(wchANSI, COUNTOF(wchANSI), L" (CP-%u)", ansiInputCP); + g_bUseLimitedAutoCCharSet = IsDBCSCodePage(ansiInputCP); for (int i = CPI_UTF7 + 1; i < Encoding_CountOf(); ++i) { if (Encoding_IsValid(i) && (g_Encodings[i].uCodePage == g_Encodings[CPI_ANSI_DEFAULT].uCodePage)) { diff --git a/src/Encoding.h b/src/Encoding.h index 655c691f9..fe8d27f6f 100644 --- a/src/Encoding.h +++ b/src/Encoding.h @@ -140,6 +140,11 @@ int Encoding_CountOf(); void ChangeEncodingCodePage(int cpi, UINT newCP); int Encoding_Analyze(const char* const text, const size_t len, const int encodingHint, bool* isReliable); +// 932 Shift-JIS, 936 GBK, 949 UHC, 950 Big5, 1361 Johab +inline bool IsDBCSCodePage(UINT cp) { + return ((cp == 932) || (cp == 936) || (cp == 949) || (cp == 950) || (cp == 1361)); +} + // -------------------------------------------------------------------------------------------------------------------------------- #endif //_NP3_ENCODING_H_ diff --git a/src/Notepad3.c b/src/Notepad3.c index c5d6878ed..f07862a02 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -252,7 +252,6 @@ int iUpdateDelayMarkAllCoccurrences; int iCurrentLineHorizontalSlop = 0; int iCurrentLineVerticalSlop = 0; bool g_bChasingDocTail = false; -bool g_bAutoCinASCIIModeOnly = false; CALLTIPTYPE g_CallTipType = CT_NONE; @@ -319,9 +318,9 @@ LPMRULIST g_pMRUreplace; DWORD dwLastIOError; -int g_iDefaultNewFileEncoding; -int g_iDefaultCharSet; -int g_IMEInteraction; +int g_iDefaultNewFileEncoding = 0; +int g_iDefaultCharSet = 0; +int g_IMEInteraction = 0; int g_iEOLMode; int g_iDefaultEOLMode; @@ -6359,15 +6358,13 @@ LRESULT MsgNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) break; } - if ((g_bAutoCompleteWords || g_bAutoCLexerKeyWords)) { - //if (g_bAutoCinASCIIModeOnly && (ich > 0x7F) ) { - if (SciCall_IsIMEOpen()) { - if (SciCall_IsIMEModeCJK()) { - SciCall_AutoCCancel(); - return 0; - } - } - //} //g_bAutoCinASCIIModeOnly section + if ((g_bAutoCompleteWords || g_bAutoCLexerKeyWords)) + { + if (SciCall_IsIMEModeCJK()) + { + SciCall_AutoCCancel(); + return 0; + } if (!SciCall_AutoCActive()) { EditCompleteWord(g_hwndEdit, false); } } }