mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-11 21:03:05 +08:00
+ review: maboroshin's changes for IME and Auto-Completion cooperation
This commit is contained in:
parent
b85f95791a
commit
cd57dc4a5c
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
|
||||
Loading…
Reference in New Issue
Block a user