mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-14 21:09:05 +08:00
Merge branch 'Dev_0919' into Dev_AccelKeys
This commit is contained in:
commit
d2fdd973ec
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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,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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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 ®exp, 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 ®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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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:
|
||||
|
||||
35
src/Edit.c
35
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();
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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)) {
|
||||
|
||||
@ -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_
|
||||
|
||||
@ -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); }
|
||||
}
|
||||
|
||||
@ -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