Merge branch 'Dev_0919' into Dev_AccelKeys

This commit is contained in:
Rainer Kottenhoff 2018-09-19 16:55:39 +02:00
commit d2fdd973ec
19 changed files with 139 additions and 140 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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,11 +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_CHARADDED_NORMAL 0
#define SC_CHARADDED_TENTATIVE 1
#define SC_CHARADDED_IME 2
// <<<<<<<<<<<<<<< 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,13 +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_CHARADDED_NORMAL=0
val SC_CHARADDED_TENTATIVE=1
val SC_CHARADDED_IME=2
// <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<<
enu Update=SC_UPDATE_
val SC_UPDATE_CONTENT=0x1
val SC_UPDATE_SELECTION=0x2
@ -4909,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

@ -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<Sci::Line>(line), level, LinesTotal());
if (prev != level) {
DocModification mh(SC_MOD_CHANGEFOLD | SC_MOD_CHANGEMARKER,
LineStart(line), 0, 0, 0, static_cast<Sci::Line>(line));
LineStart(line), 0, 0, nullptr, static_cast<Sci::Line>(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<Sci::Line>(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<Sci::Line>(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; l<maxEditorLine; l++)
MarginSetText(l, 0);
MarginSetText(l, nullptr);
// Free remaining data
Margins()->ClearAll();
}
@ -2347,7 +2347,7 @@ int Document::AnnotationLines(Sci::Line line) const {
void Document::AnnotationClearAll() {
const Sci::Line maxEditorLine = LinesTotal();
for (Sci::Line l=0; l<maxEditorLine; l++)
AnnotationSetText(l, 0);
AnnotationSetText(l, nullptr);
// Free remaining data
Annotations()->ClearAll();
}
@ -2980,7 +2980,6 @@ std::regex_constants::match_flag_type MatchFlags(const Document *doc, Sci::Posit
template<typename Iterator, typename Regex>
bool MatchOnLines(const Document *doc, const Regex &regexp, const RESearchRange &resr, RESearch &search) {
bool matched = false;
std::match_results<Iterator> 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 &regexp, 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);

View File

@ -63,7 +63,8 @@ EditModel::EditModel() : braces{} {
primarySelection = true;
imeInteraction = imeWindowed;
// >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>>
charAddedSource = SC_CHARADDED_NORMAL;
imeIsOpen = false;
imeIsInModeCJK = false;
// <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<<
bidirectional = Bidirectional::bidiDisabled;
foldFlags = 0;

View File

@ -38,7 +38,8 @@ public:
enum IMEInteraction { imeWindowed, imeInline } imeInteraction;
// >>>>>>>>>>>>>>> BEG NON STD SCI PATCH >>>>>>>>>>>>>>>
int charAddedSource;
bool imeIsOpen;
bool imeIsInModeCJK;
// <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<<
enum class Bidirectional { bidiDisabled, bidiL2R, bidiR2L } bidirectional;

View File

@ -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<unsigned char>(s[0]) << 8) |
static_cast<unsigned char>(s[1]));
} else if (len > 0) {
int byte = static_cast<unsigned char>(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<unsigned char>(s[0]) << 8) |
static_cast<unsigned char>(s[1]));
} else if (len > 0) {
int byte = static_cast<unsigned char>(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<sptr_t>(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_ISIMEOPEN:
return imeIsOpen;
case SCI_ISIMEMODECJK:
return imeIsInModeCJK;
// <<<<<<<<<<<<<<< END NON STD SCI PATCH <<<<<<<<<<<<<<<
case SCI_SETBIDIRECTIONAL:
// SCI_SETBIDIRECTIONAL is implemented on platform subclasses if they support bidirectional text.

View File

@ -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();
@ -1028,6 +1030,29 @@ bool ScintillaWin::KoreanIME() noexcept {
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() {
IMContext imc(MainHWND());
if (imc.hIMC && ImmGetOpenStatus(imc.hIMC)) {
DWORD dwConversion = IME_CMODE_ALPHANUMERIC, dwSentence = IME_SMODE_NONE;
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 +1240,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 +1251,6 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) {
DrawImeIndicator(imeIndicator[i], static_cast<unsigned int>(docChar.size()));
i += ucWidth;
}
charAddedSource = SC_CHARADDED_NORMAL;
recordingMacro = tmpRecordingMacro;
// Move IME caret from current last position to imeCaretPos.
@ -1240,9 +1263,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 +1745,24 @@ 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) {
imeIsOpen = IsIMEOpen();
}
if (wParam == IMN_SETOPENSTATUS || wParam == IMN_SETCONVERSIONMODE) {
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.
// Also moves time out to here so profile doesn't count lots of empty message calls.
@ -1741,7 +1773,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:

View File

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

View File

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

View File

@ -31,6 +31,7 @@
#include <shellapi.h>
#include <commctrl.h>
#include <stdlib.h>
#include <assert.h>
#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)) {

View File

@ -125,6 +125,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_

View File

@ -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;
@ -6145,9 +6144,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);
@ -6359,10 +6358,12 @@ LRESULT MsgNotify(HWND hwnd, WPARAM wParam, LPARAM lParam)
break;
}
if ((g_bAutoCompleteWords || g_bAutoCLexerKeyWords)) {
if (g_bAutoCinASCIIModeOnly && ((ich > 0x7F) || (scn->modifiers != SC_CHARADDED_NORMAL))) {
SciCall_AutoCCancel();
return 0LL;
if ((g_bAutoCompleteWords || g_bAutoCLexerKeyWords))
{
if (SciCall_IsIMEModeCJK())
{
SciCall_AutoCCancel();
return 0;
}
if (!SciCall_AutoCActive()) { EditCompleteWord(g_hwndEdit, false); }
}

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