diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Document.cxx | 4 | ||||
| -rw-r--r-- | src/Document.h | 1 | ||||
| -rw-r--r-- | src/ScintillaBase.cxx | 18 | ||||
| -rw-r--r-- | src/ScintillaBase.h | 2 | 
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);  | 
