aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2022-10-20 09:08:28 +1100
committerNeil <nyamatongwe@gmail.com>2022-10-20 09:08:28 +1100
commitbb1cd6ce1a5f0a8ea1a31d37c0500c6a4edb1372 (patch)
tree06a8202bd09a744844a60a1a1e71f7d2db69d655 /src
parentb8ba34f03cb1808aa47dce0fe06e81d372a9702c (diff)
downloadscintilla-mirror-bb1cd6ce1a5f0a8ea1a31d37c0500c6a4edb1372.tar.gz
Change ScintillaBase::AutoCompleteInsert to take a string_view and add
Document::InsertString overload taking a string_view. These changes simplify callers.
Diffstat (limited to 'src')
-rw-r--r--src/Document.cxx4
-rw-r--r--src/Document.h1
-rw-r--r--src/ScintillaBase.cxx18
-rw-r--r--src/ScintillaBase.h2
4 files changed, 15 insertions, 10 deletions
diff --git a/src/Document.cxx b/src/Document.cxx
index ada7f4436..10c8e9ce5 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -1336,6 +1336,10 @@ Sci::Position Document::InsertString(Sci::Position position, const char *s, Sci:
return insertLength;
}
+Sci::Position Document::InsertString(Sci::Position position, std::string_view sv) {
+ return InsertString(position, sv.data(), sv.length());
+}
+
void Document::ChangeInsertion(const char *s, Sci::Position length) {
insertionSet = true;
insertion.assign(s, length);
diff --git a/src/Document.h b/src/Document.h
index 114316d37..1cda253e1 100644
--- a/src/Document.h
+++ b/src/Document.h
@@ -360,6 +360,7 @@ public:
void CheckReadOnly();
bool DeleteChars(Sci::Position pos, Sci::Position len);
Sci::Position InsertString(Sci::Position position, const char *s, Sci::Position insertLength);
+ Sci::Position InsertString(Sci::Position position, std::string_view sv);
void ChangeInsertion(const char *s, Sci::Position length);
int SCI_METHOD AddData(const char *data, Sci_Position length) override;
void * SCI_METHOD ConvertToDocument() override;
diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx
index e72f1b1d6..d47d289dd 100644
--- a/src/ScintillaBase.cxx
+++ b/src/ScintillaBase.cxx
@@ -211,11 +211,11 @@ void ScintillaBase::ListNotify(ListBoxEvent *plbe) {
}
}
-void ScintillaBase::AutoCompleteInsert(Sci::Position startPos, Sci::Position removeLen, const char *text, Sci::Position textLen) {
+void ScintillaBase::AutoCompleteInsert(Sci::Position startPos, Sci::Position removeLen, std::string_view text) {
UndoGroup ug(pdoc);
if (multiAutoCMode == MultiAutoComplete::Once) {
pdoc->DeleteChars(startPos, removeLen);
- const Sci::Position lengthInserted = pdoc->InsertString(startPos, text, textLen);
+ const Sci::Position lengthInserted = pdoc->InsertString(startPos, text);
SetEmptySelection(startPos + lengthInserted);
} else {
// MultiAutoComplete::Each
@@ -228,7 +228,7 @@ void ScintillaBase::AutoCompleteInsert(Sci::Position startPos, Sci::Position rem
positionInsert -= removeLen;
pdoc->DeleteChars(positionInsert, removeLen);
}
- const Sci::Position lengthInserted = pdoc->InsertString(positionInsert, text, textLen);
+ const Sci::Position lengthInserted = pdoc->InsertString(positionInsert, text);
if (lengthInserted > 0) {
sel.Range(r).caret.SetPosition(positionInsert + lengthInserted);
sel.Range(r).anchor.SetPosition(positionInsert + lengthInserted);
@@ -245,14 +245,14 @@ void ScintillaBase::AutoCompleteStart(Sci::Position lenEntered, const char *list
if (ac.chooseSingle && (listType == 0)) {
if (list && !strchr(list, ac.GetSeparator())) {
- const char *typeSep = strchr(list, ac.GetTypesep());
- const Sci::Position lenInsert = typeSep ?
- (typeSep-list) : strlen(list);
+ // list contains just one item so choose it
+ const std::string_view item(list);
+ const std::string_view choice = item.substr(0, item.find_first_of(ac.GetTypesep()));
if (ac.ignoreCase) {
// May need to convert the case before invocation, so remove lenEntered characters
- AutoCompleteInsert(sel.MainCaret() - lenEntered, lenEntered, list, lenInsert);
+ AutoCompleteInsert(sel.MainCaret() - lenEntered, lenEntered, choice);
} else {
- AutoCompleteInsert(sel.MainCaret(), 0, list + lenEntered, lenInsert - lenEntered);
+ AutoCompleteInsert(sel.MainCaret(), 0, choice.substr(lenEntered));
}
ac.Cancel();
return;
@@ -430,7 +430,7 @@ void ScintillaBase::AutoCompleteCompleted(char ch, CompletionMethods completionM
endPos = pdoc->ExtendWordSelect(endPos, 1, true);
if (endPos < firstPos)
return;
- AutoCompleteInsert(firstPos, endPos - firstPos, selected.c_str(), selected.length());
+ AutoCompleteInsert(firstPos, endPos - firstPos, selected);
SetLastXChosen();
scn.nmhdr.code = Notification::AutoCCompleted;
diff --git a/src/ScintillaBase.h b/src/ScintillaBase.h
index 3cfad8684..820f88daa 100644
--- a/src/ScintillaBase.h
+++ b/src/ScintillaBase.h
@@ -57,7 +57,7 @@ protected:
void CancelModes() override;
int KeyCommand(Scintilla::Message iMessage) override;
- void AutoCompleteInsert(Sci::Position startPos, Sci::Position removeLen, const char *text, Sci::Position textLen);
+ void AutoCompleteInsert(Sci::Position startPos, Sci::Position removeLen, std::string_view text);
void AutoCompleteStart(Sci::Position lenEntered, const char *list);
void AutoCompleteCancel();
void AutoCompleteMove(int delta);