+ review: maboroshin's changes for IME and Auto-Completion cooperation

This commit is contained in:
Rainer Kottenhoff 2018-09-19 02:07:15 +02:00
parent b85f95791a
commit cd57dc4a5c
9 changed files with 41 additions and 88 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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:

View File

@ -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.

View File

@ -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

View File

@ -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)
//=============================================================================
//