Skip to content

Commit

Permalink
Enclose selection by typing corresponding punctuation, issue #255.
Browse files Browse the repository at this point in the history
  • Loading branch information
zufuliu committed Nov 28, 2020
1 parent c51be56 commit c0d59eb
Show file tree
Hide file tree
Showing 9 changed files with 112 additions and 159 deletions.
25 changes: 6 additions & 19 deletions locale/de/Notepad2.rc
Expand Up @@ -207,16 +207,9 @@ BEGIN
MENUITEM "&With...\tAlt+Q", IDM_EDIT_ENCLOSESELECTION
MENUITEM "&HTML/XML Tag...\tAlt+X", IDM_EDIT_INSERT_XMLTAG
MENUITEM SEPARATOR
MENUITEM "&( )\tCtrl+4", CMD_EMBRACKETR
MENUITEM "&{ }\tCtrl+5", CMD_EMBRACKETC
MENUITEM "&[ ]\tCtrl+6", CMD_EMBRACKETS
MENUITEM "&< >\tCtrl+7", CMD_EMBRACKETA
MENUITEM SEPARATOR
MENUITEM "&Single Quotes\tCtrl+1", CMD_STRINGIFYS
MENUITEM "&Double Quotes\tCtrl+2", CMD_STRINGIFYD
MENUITEM "&Triple Double Quotes\tCtrl+3", CMD_STRINGIFYT2
MENUITEM "Triple Single &Quotes\tCtrl+9", CMD_STRINGIFYT1
MENUITEM "&Backticks\tCtrl+8", CMD_STRINGIFYB
MENUITEM "Triple &Single Quotes\tCtrl+3", CMD_ENCLOSE_TRIPLE_SQ
MENUITEM "Triple &Double Quotes\tCtrl+6", CMD_ENCLOSE_TRIPLE_DQ
MENUITEM "Triple &Backticks\tCtrl+9", CMD_ENCLOSE_TRIPLE_BT
END
POPUP "&Lines"
BEGIN
Expand Down Expand Up @@ -768,25 +761,19 @@ BEGIN
"0", IDM_FILE_NEWWINDOW2, VIRTKEY, ALT, NOINVERT
"0", IDM_VIEW_WORDWRAPSYMBOLS, VIRTKEY, SHIFT, CONTROL, NOINVERT
"1", IDM_VIEW_FOLD_LEVEL1, VIRTKEY, ALT, NOINVERT
"1", CMD_STRINGIFYS, VIRTKEY, CONTROL, NOINVERT
"1", CMD_CUSTOM_ACTION1, VIRTKEY, SHIFT, CONTROL, NOINVERT
"2", CMD_STRINGIFYD, VIRTKEY, CONTROL, NOINVERT
"2", IDM_VIEW_FOLD_LEVEL2, VIRTKEY, ALT, NOINVERT
"2", CMD_CUSTOM_ACTION2, VIRTKEY, SHIFT, CONTROL, NOINVERT
"3", CMD_STRINGIFYT2, VIRTKEY, CONTROL, NOINVERT
"3", CMD_ENCLOSE_TRIPLE_SQ, VIRTKEY, CONTROL, NOINVERT
"3", IDM_VIEW_FOLD_LEVEL3, VIRTKEY, ALT, NOINVERT
"4", CMD_EMBRACKETR, VIRTKEY, CONTROL, NOINVERT
"4", IDM_VIEW_FOLD_LEVEL4, VIRTKEY, ALT, NOINVERT
"5", CMD_EMBRACKETC, VIRTKEY, CONTROL, NOINVERT
"5", IDM_VIEW_FOLD_LEVEL5, VIRTKEY, ALT, NOINVERT
"6", CMD_EMBRACKETS, VIRTKEY, CONTROL, NOINVERT
"6", CMD_ENCLOSE_TRIPLE_DQ, VIRTKEY, CONTROL, NOINVERT
"6", IDM_VIEW_FOLD_LEVEL6, VIRTKEY, ALT, NOINVERT
"7", CMD_EMBRACKETA, VIRTKEY, CONTROL, NOINVERT
"7", IDM_VIEW_FOLD_LEVEL7, VIRTKEY, ALT, NOINVERT
"8", CMD_STRINGIFYB, VIRTKEY, CONTROL, NOINVERT
"8", IDM_VIEW_FOLD_LEVEL8, VIRTKEY, ALT, NOINVERT
"8", IDM_VIEW_SHOWWHITESPACE, VIRTKEY, SHIFT, CONTROL, NOINVERT
"9", CMD_STRINGIFYT1, VIRTKEY, CONTROL, NOINVERT
"9", CMD_ENCLOSE_TRIPLE_BT, VIRTKEY, CONTROL, NOINVERT
"9", IDM_VIEW_FOLD_LEVEL9, VIRTKEY, ALT, NOINVERT
"9", IDM_VIEW_SHOWEOLS, VIRTKEY, SHIFT, CONTROL, NOINVERT
"A", IDM_EDIT_SELECTALL, VIRTKEY, CONTROL, NOINVERT
Expand Down
25 changes: 6 additions & 19 deletions locale/it/Notepad2.rc
Expand Up @@ -207,16 +207,9 @@ BEGIN
MENUITEM "&With...\tAlt+Q", IDM_EDIT_ENCLOSESELECTION
MENUITEM "&HTML/XML Tag...\tAlt+X", IDM_EDIT_INSERT_XMLTAG
MENUITEM SEPARATOR
MENUITEM "&( )\tCtrl+4", CMD_EMBRACKETR
MENUITEM "&{ }\tCtrl+5", CMD_EMBRACKETC
MENUITEM "&[ ]\tCtrl+6", CMD_EMBRACKETS
MENUITEM "&< >\tCtrl+7", CMD_EMBRACKETA
MENUITEM SEPARATOR
MENUITEM "&Single Quotes\tCtrl+1", CMD_STRINGIFYS
MENUITEM "&Double Quotes\tCtrl+2", CMD_STRINGIFYD
MENUITEM "&Triple Double Quotes\tCtrl+3", CMD_STRINGIFYT2
MENUITEM "Triple Single &Quotes\tCtrl+9", CMD_STRINGIFYT1
MENUITEM "&Backticks\tCtrl+8", CMD_STRINGIFYB
MENUITEM "Triple &Single Quotes\tCtrl+3", CMD_ENCLOSE_TRIPLE_SQ
MENUITEM "Triple &Double Quotes\tCtrl+6", CMD_ENCLOSE_TRIPLE_DQ
MENUITEM "Triple &Backticks\tCtrl+9", CMD_ENCLOSE_TRIPLE_BT
END
POPUP "&Lines"
BEGIN
Expand Down Expand Up @@ -768,25 +761,19 @@ BEGIN
"0", IDM_FILE_NEWWINDOW2, VIRTKEY, ALT, NOINVERT
"0", IDM_VIEW_WORDWRAPSYMBOLS, VIRTKEY, SHIFT, CONTROL, NOINVERT
"1", IDM_VIEW_FOLD_LEVEL1, VIRTKEY, ALT, NOINVERT
"1", CMD_STRINGIFYS, VIRTKEY, CONTROL, NOINVERT
"1", CMD_CUSTOM_ACTION1, VIRTKEY, SHIFT, CONTROL, NOINVERT
"2", CMD_STRINGIFYD, VIRTKEY, CONTROL, NOINVERT
"2", IDM_VIEW_FOLD_LEVEL2, VIRTKEY, ALT, NOINVERT
"2", CMD_CUSTOM_ACTION2, VIRTKEY, SHIFT, CONTROL, NOINVERT
"3", CMD_STRINGIFYT2, VIRTKEY, CONTROL, NOINVERT
"3", CMD_ENCLOSE_TRIPLE_SQ, VIRTKEY, CONTROL, NOINVERT
"3", IDM_VIEW_FOLD_LEVEL3, VIRTKEY, ALT, NOINVERT
"4", CMD_EMBRACKETR, VIRTKEY, CONTROL, NOINVERT
"4", IDM_VIEW_FOLD_LEVEL4, VIRTKEY, ALT, NOINVERT
"5", CMD_EMBRACKETC, VIRTKEY, CONTROL, NOINVERT
"5", IDM_VIEW_FOLD_LEVEL5, VIRTKEY, ALT, NOINVERT
"6", CMD_EMBRACKETS, VIRTKEY, CONTROL, NOINVERT
"6", CMD_ENCLOSE_TRIPLE_DQ, VIRTKEY, CONTROL, NOINVERT
"6", IDM_VIEW_FOLD_LEVEL6, VIRTKEY, ALT, NOINVERT
"7", CMD_EMBRACKETA, VIRTKEY, CONTROL, NOINVERT
"7", IDM_VIEW_FOLD_LEVEL7, VIRTKEY, ALT, NOINVERT
"8", CMD_STRINGIFYB, VIRTKEY, CONTROL, NOINVERT
"8", IDM_VIEW_FOLD_LEVEL8, VIRTKEY, ALT, NOINVERT
"8", IDM_VIEW_SHOWWHITESPACE, VIRTKEY, SHIFT, CONTROL, NOINVERT
"9", CMD_STRINGIFYT1, VIRTKEY, CONTROL, NOINVERT
"9", CMD_ENCLOSE_TRIPLE_BT, VIRTKEY, CONTROL, NOINVERT
"9", IDM_VIEW_FOLD_LEVEL9, VIRTKEY, ALT, NOINVERT
"9", IDM_VIEW_SHOWEOLS, VIRTKEY, SHIFT, CONTROL, NOINVERT
"A", IDM_EDIT_SELECTALL, VIRTKEY, CONTROL, NOINVERT
Expand Down
25 changes: 6 additions & 19 deletions locale/ja/Notepad2.rc
Expand Up @@ -207,16 +207,9 @@ BEGIN
MENUITEM "指定文字で囲む(&W)...\tAlt+Q", IDM_EDIT_ENCLOSESELECTION
MENUITEM "HTML/XMLタグ(&H)...\tAlt+X", IDM_EDIT_INSERT_XMLTAG
MENUITEM SEPARATOR
MENUITEM "&( )\tCtrl+4", CMD_EMBRACKETR
MENUITEM "&{ }\tCtrl+5", CMD_EMBRACKETC
MENUITEM "&[ ]\tCtrl+6", CMD_EMBRACKETS
MENUITEM "&< >\tCtrl+7", CMD_EMBRACKETA
MENUITEM SEPARATOR
MENUITEM "シングルクォート(&S)\tCtrl+1", CMD_STRINGIFYS
MENUITEM "ダブルクォート(&D)\tCtrl+2", CMD_STRINGIFYD
MENUITEM "トリプル ダブルクォート2(&T)\tCtrl+3", CMD_STRINGIFYT2
MENUITEM "トリプル シングルクォート1(&Q)\tCtrl+9", CMD_STRINGIFYT1
MENUITEM "バッククォート(&B)\tCtrl+8", CMD_STRINGIFYB
MENUITEM "トリプル シングルクォート1(&S)\tCtrl+3", CMD_ENCLOSE_TRIPLE_SQ
MENUITEM "トリプル ダブルクォート2(&D)\tCtrl+6", CMD_ENCLOSE_TRIPLE_DQ
MENUITEM "トリプル バッククォート(&B)\tCtrl+9", CMD_ENCLOSE_TRIPLE_BT
END
POPUP "行(&L)"
BEGIN
Expand Down Expand Up @@ -768,25 +761,19 @@ BEGIN
"0", IDM_FILE_NEWWINDOW2, VIRTKEY, ALT, NOINVERT
"0", IDM_VIEW_WORDWRAPSYMBOLS, VIRTKEY, SHIFT, CONTROL, NOINVERT
"1", IDM_VIEW_FOLD_LEVEL1, VIRTKEY, ALT, NOINVERT
"1", CMD_STRINGIFYS, VIRTKEY, CONTROL, NOINVERT
"1", CMD_CUSTOM_ACTION1, VIRTKEY, SHIFT, CONTROL, NOINVERT
"2", CMD_STRINGIFYD, VIRTKEY, CONTROL, NOINVERT
"2", IDM_VIEW_FOLD_LEVEL2, VIRTKEY, ALT, NOINVERT
"2", CMD_CUSTOM_ACTION2, VIRTKEY, SHIFT, CONTROL, NOINVERT
"3", CMD_STRINGIFYT2, VIRTKEY, CONTROL, NOINVERT
"3", CMD_ENCLOSE_TRIPLE_SQ, VIRTKEY, CONTROL, NOINVERT
"3", IDM_VIEW_FOLD_LEVEL3, VIRTKEY, ALT, NOINVERT
"4", CMD_EMBRACKETR, VIRTKEY, CONTROL, NOINVERT
"4", IDM_VIEW_FOLD_LEVEL4, VIRTKEY, ALT, NOINVERT
"5", CMD_EMBRACKETC, VIRTKEY, CONTROL, NOINVERT
"5", IDM_VIEW_FOLD_LEVEL5, VIRTKEY, ALT, NOINVERT
"6", CMD_EMBRACKETS, VIRTKEY, CONTROL, NOINVERT
"6", CMD_ENCLOSE_TRIPLE_DQ, VIRTKEY, CONTROL, NOINVERT
"6", IDM_VIEW_FOLD_LEVEL6, VIRTKEY, ALT, NOINVERT
"7", CMD_EMBRACKETA, VIRTKEY, CONTROL, NOINVERT
"7", IDM_VIEW_FOLD_LEVEL7, VIRTKEY, ALT, NOINVERT
"8", CMD_STRINGIFYB, VIRTKEY, CONTROL, NOINVERT
"8", IDM_VIEW_FOLD_LEVEL8, VIRTKEY, ALT, NOINVERT
"8", IDM_VIEW_SHOWWHITESPACE, VIRTKEY, SHIFT, CONTROL, NOINVERT
"9", CMD_STRINGIFYT1, VIRTKEY, CONTROL, NOINVERT
"9", CMD_ENCLOSE_TRIPLE_BT, VIRTKEY, CONTROL, NOINVERT
"9", IDM_VIEW_FOLD_LEVEL9, VIRTKEY, ALT, NOINVERT
"9", IDM_VIEW_SHOWEOLS, VIRTKEY, SHIFT, CONTROL, NOINVERT
"A", IDM_EDIT_SELECTALL, VIRTKEY, CONTROL, NOINVERT
Expand Down
25 changes: 6 additions & 19 deletions locale/zh-Hans/Notepad2.rc
Expand Up @@ -207,16 +207,9 @@ BEGIN
MENUITEM "自定义(&W)...\tAlt+Q", IDM_EDIT_ENCLOSESELECTION
MENUITEM "HTML/XML 标签(&H)...\tAlt+X", IDM_EDIT_INSERT_XMLTAG
MENUITEM SEPARATOR
MENUITEM "&( )\tCtrl+4", CMD_EMBRACKETR
MENUITEM "&{ }\tCtrl+5", CMD_EMBRACKETC
MENUITEM "&[ ]\tCtrl+6", CMD_EMBRACKETS
MENUITEM "&< >\tCtrl+7", CMD_EMBRACKETA
MENUITEM SEPARATOR
MENUITEM "单引号(&S)\tCtrl+1", CMD_STRINGIFYS
MENUITEM "双引号(&D)\tCtrl+2", CMD_STRINGIFYD
MENUITEM "三重双引号(&T)\tCtrl+3", CMD_STRINGIFYT2
MENUITEM "三重单引号(&Q)\tCtrl+9", CMD_STRINGIFYT1
MENUITEM "反引号(&B)\tCtrl+8", CMD_STRINGIFYB
MENUITEM "三重单引号(&S)\tCtrl+3", CMD_ENCLOSE_TRIPLE_SQ
MENUITEM "三重双引号(&D)\tCtrl+6", CMD_ENCLOSE_TRIPLE_DQ
MENUITEM "三重反引号(&B)\tCtrl+9", CMD_ENCLOSE_TRIPLE_BT
END
POPUP "行(&L)"
BEGIN
Expand Down Expand Up @@ -768,25 +761,19 @@ BEGIN
"0", IDM_FILE_NEWWINDOW2, VIRTKEY, ALT, NOINVERT
"0", IDM_VIEW_WORDWRAPSYMBOLS, VIRTKEY, SHIFT, CONTROL, NOINVERT
"1", IDM_VIEW_FOLD_LEVEL1, VIRTKEY, ALT, NOINVERT
"1", CMD_STRINGIFYS, VIRTKEY, CONTROL, NOINVERT
"1", CMD_CUSTOM_ACTION1, VIRTKEY, SHIFT, CONTROL, NOINVERT
"2", CMD_STRINGIFYD, VIRTKEY, CONTROL, NOINVERT
"2", IDM_VIEW_FOLD_LEVEL2, VIRTKEY, ALT, NOINVERT
"2", CMD_CUSTOM_ACTION2, VIRTKEY, SHIFT, CONTROL, NOINVERT
"3", CMD_STRINGIFYT2, VIRTKEY, CONTROL, NOINVERT
"3", CMD_ENCLOSE_TRIPLE_SQ, VIRTKEY, CONTROL, NOINVERT
"3", IDM_VIEW_FOLD_LEVEL3, VIRTKEY, ALT, NOINVERT
"4", CMD_EMBRACKETR, VIRTKEY, CONTROL, NOINVERT
"4", IDM_VIEW_FOLD_LEVEL4, VIRTKEY, ALT, NOINVERT
"5", CMD_EMBRACKETC, VIRTKEY, CONTROL, NOINVERT
"5", IDM_VIEW_FOLD_LEVEL5, VIRTKEY, ALT, NOINVERT
"6", CMD_EMBRACKETS, VIRTKEY, CONTROL, NOINVERT
"6", CMD_ENCLOSE_TRIPLE_DQ, VIRTKEY, CONTROL, NOINVERT
"6", IDM_VIEW_FOLD_LEVEL6, VIRTKEY, ALT, NOINVERT
"7", CMD_EMBRACKETA, VIRTKEY, CONTROL, NOINVERT
"7", IDM_VIEW_FOLD_LEVEL7, VIRTKEY, ALT, NOINVERT
"8", CMD_STRINGIFYB, VIRTKEY, CONTROL, NOINVERT
"8", IDM_VIEW_FOLD_LEVEL8, VIRTKEY, ALT, NOINVERT
"8", IDM_VIEW_SHOWWHITESPACE, VIRTKEY, SHIFT, CONTROL, NOINVERT
"9", CMD_STRINGIFYT1, VIRTKEY, CONTROL, NOINVERT
"9", CMD_ENCLOSE_TRIPLE_BT, VIRTKEY, CONTROL, NOINVERT
"9", IDM_VIEW_FOLD_LEVEL9, VIRTKEY, ALT, NOINVERT
"9", IDM_VIEW_SHOWEOLS, VIRTKEY, SHIFT, CONTROL, NOINVERT
"A", IDM_EDIT_SELECTALL, VIRTKEY, CONTROL, NOINVERT
Expand Down
25 changes: 6 additions & 19 deletions locale/zh-Hant/Notepad2.rc
Expand Up @@ -207,16 +207,9 @@ BEGIN
MENUITEM "自訂(&W)...\tAlt+Q", IDM_EDIT_ENCLOSESELECTION
MENUITEM "&HTML/XML 標籤...\tAlt+X", IDM_EDIT_INSERT_XMLTAG
MENUITEM SEPARATOR
MENUITEM "&( )\tCtrl+4", CMD_EMBRACKETR
MENUITEM "&{ }\tCtrl+5", CMD_EMBRACKETC
MENUITEM "&[ ]\tCtrl+6", CMD_EMBRACKETS
MENUITEM "&< >\tCtrl+7", CMD_EMBRACKETA
MENUITEM SEPARATOR
MENUITEM "單引號(&S)\tCtrl+1", CMD_STRINGIFYS
MENUITEM "雙引號(&D)\tCtrl+2", CMD_STRINGIFYD
MENUITEM "三重雙引號(&T)\tCtrl+3", CMD_STRINGIFYT2
MENUITEM "三重單引號(&Q)\tCtrl+9", CMD_STRINGIFYT1
MENUITEM "反引號(&B)\tCtrl+8", CMD_STRINGIFYB
MENUITEM "三重單引號(&S)\tCtrl+9", CMD_ENCLOSE_TRIPLE_SQ
MENUITEM "三重雙引號(&D)\tCtrl+3", CMD_ENCLOSE_TRIPLE_DQ
MENUITEM "三重反引號(&B)\tCtrl+8", CMD_ENCLOSE_TRIPLE_BT
END
POPUP "行(&L)"
BEGIN
Expand Down Expand Up @@ -768,25 +761,19 @@ BEGIN
"0", IDM_FILE_NEWWINDOW2, VIRTKEY, ALT, NOINVERT
"0", IDM_VIEW_WORDWRAPSYMBOLS, VIRTKEY, SHIFT, CONTROL, NOINVERT
"1", IDM_VIEW_FOLD_LEVEL1, VIRTKEY, ALT, NOINVERT
"1", CMD_STRINGIFYS, VIRTKEY, CONTROL, NOINVERT
"1", CMD_CUSTOM_ACTION1, VIRTKEY, SHIFT, CONTROL, NOINVERT
"2", CMD_STRINGIFYD, VIRTKEY, CONTROL, NOINVERT
"2", IDM_VIEW_FOLD_LEVEL2, VIRTKEY, ALT, NOINVERT
"2", CMD_CUSTOM_ACTION2, VIRTKEY, SHIFT, CONTROL, NOINVERT
"3", CMD_STRINGIFYT2, VIRTKEY, CONTROL, NOINVERT
"3", CMD_ENCLOSE_TRIPLE_SQ, VIRTKEY, CONTROL, NOINVERT
"3", IDM_VIEW_FOLD_LEVEL3, VIRTKEY, ALT, NOINVERT
"4", CMD_EMBRACKETR, VIRTKEY, CONTROL, NOINVERT
"4", IDM_VIEW_FOLD_LEVEL4, VIRTKEY, ALT, NOINVERT
"5", CMD_EMBRACKETC, VIRTKEY, CONTROL, NOINVERT
"5", IDM_VIEW_FOLD_LEVEL5, VIRTKEY, ALT, NOINVERT
"6", CMD_EMBRACKETS, VIRTKEY, CONTROL, NOINVERT
"6", CMD_ENCLOSE_TRIPLE_DQ, VIRTKEY, CONTROL, NOINVERT
"6", IDM_VIEW_FOLD_LEVEL6, VIRTKEY, ALT, NOINVERT
"7", CMD_EMBRACKETA, VIRTKEY, CONTROL, NOINVERT
"7", IDM_VIEW_FOLD_LEVEL7, VIRTKEY, ALT, NOINVERT
"8", CMD_STRINGIFYB, VIRTKEY, CONTROL, NOINVERT
"8", IDM_VIEW_FOLD_LEVEL8, VIRTKEY, ALT, NOINVERT
"8", IDM_VIEW_SHOWWHITESPACE, VIRTKEY, SHIFT, CONTROL, NOINVERT
"9", CMD_STRINGIFYT1, VIRTKEY, CONTROL, NOINVERT
"9", CMD_ENCLOSE_TRIPLE_BT, VIRTKEY, CONTROL, NOINVERT
"9", IDM_VIEW_FOLD_LEVEL9, VIRTKEY, ALT, NOINVERT
"9", IDM_VIEW_SHOWEOLS, VIRTKEY, SHIFT, CONTROL, NOINVERT
"A", IDM_EDIT_SELECTALL, VIRTKEY, CONTROL, NOINVERT
Expand Down
69 changes: 62 additions & 7 deletions scintilla/src/Editor.cxx
Expand Up @@ -1922,14 +1922,45 @@ void Editor::FilterSelections() {
}
}

static constexpr char EncloseSelectionCharacter(char ch) noexcept {
switch (ch) {
case '(':
return ')';
case '[':
return ']';
case '{':
return '}';
case '<':
return '>';
case '\"':
case '\'':
case '`':
// see https://github.com/zufuliu/notepad2/issues/255
case '*': // Markdown Italic, reStructuredText Italic, AsciiDoc Bold, QuickBook Bold
case '/': // JavaScript Regex, QuickBook Italic
case ':': // Markdown Emoji, reStructuredText Field List, AsciiDoc Attribute
case '_': // Markdown Italic, AsciiDoc Italic, QuickBook Underline
case '|': // reStructuredText Substitution
case '~': // Markdown Strikethrough
case '=': // QuickBook Teletype
return ch;
default:
return '\0';
}
}

// InsertCharacter inserts a character encoded in document code page.
void Editor::InsertCharacter(std::string_view sv, CharacterSource charSource) {
if (sv.empty()) {
return;
}
FilterSelections();
bool handled = false;
{
UndoGroup ug(pdoc, (sel.Count() > 1) || !sel.Empty() || inOverstrike);
// enclose selection on typing punctuation, empty selection will be handled in SCN_CHARADDED.
const char encloseCh = (charSource != CharacterSource::directInput || sv.length() != 1
|| sel.IsRectangular() || sel.Empty()) ? '\0' : EncloseSelectionCharacter(sv[0]);

// Vector elements point into selection in order to change selection.
std::vector<SelectionRange *> selPtrs;
Expand All @@ -1947,9 +1978,19 @@ void Editor::InsertCharacter(std::string_view sv, CharacterSource charSource) {
if (!RangeContainsProtected(currentSel->Start().Position(),
currentSel->End().Position())) {
Sci::Position positionInsert = currentSel->Start().Position();
std::string text;
bool forward = false;
if (!currentSel->Empty()) {
if (currentSel->Length()) {
pdoc->DeleteChars(positionInsert, currentSel->Length());
const Sci::Position selectionLength = currentSel->Length();
if (selectionLength) {
if (encloseCh) {
forward = currentSel->anchor < currentSel->caret;
text.resize(selectionLength + 2);
text[0] = sv[0];
pdoc->GetCharRange(text.data() + 1, positionInsert, selectionLength);
text[selectionLength + 1] = encloseCh;
}
pdoc->DeleteChars(positionInsert, selectionLength);
currentSel->ClearVirtualSpace();
} else {
// Range is all virtual so collapse to start of virtual space
Expand All @@ -1964,10 +2005,24 @@ void Editor::InsertCharacter(std::string_view sv, CharacterSource charSource) {
}
}
positionInsert = RealizeVirtualSpace(positionInsert, currentSel->caret.VirtualSpace());
const Sci::Position lengthInserted = pdoc->InsertString(positionInsert, sv.data(), sv.length());
if (lengthInserted > 0) {
currentSel->caret.SetPosition(positionInsert + lengthInserted);
currentSel->anchor.SetPosition(positionInsert + lengthInserted);
if (text.empty()) {
const Sci::Position lengthInserted = pdoc->InsertString(positionInsert, sv.data(), sv.length());
if (lengthInserted > 0) {
currentSel->caret.SetPosition(positionInsert + lengthInserted);
currentSel->anchor.SetPosition(positionInsert + lengthInserted);
}
} else {
const Sci::Position lengthInserted = pdoc->InsertString(positionInsert, text.data(), text.length());
if (lengthInserted > 0) {
handled = true;
if (forward) {
currentSel->caret.SetPosition(positionInsert + lengthInserted - 1);
currentSel->anchor.SetPosition(positionInsert + 1);
} else {
currentSel->caret.SetPosition(positionInsert + 1);
currentSel->anchor.SetPosition(positionInsert + lengthInserted - 1);
}
}
}
currentSel->ClearVirtualSpace();
// If in wrap mode rewrap current line so EnsureCaretVisible has accurate information
Expand Down Expand Up @@ -1998,7 +2053,7 @@ void Editor::InsertCharacter(std::string_view sv, CharacterSource charSource) {
}

// We don't handle inline IME tentative input characters
if (charSource != CharacterSource::tentativeInput) {
if (!handled && charSource != CharacterSource::tentativeInput) {
int ch = static_cast<unsigned char>(sv[0]);
if (pdoc->dbcsCodePage != SC_CP_UTF8) {
if (sv.length() > 1) {
Expand Down

0 comments on commit c0d59eb

Please sign in to comment.