[apps/code] Autocomplete only at the end of the word

For instance, if the cursor is: "he|llo" and the user adds the letter
'i', there is no autocompletion provided as the cursor is still in the
middle of a word.
This commit is contained in:
Léa Saviot
2020-03-17 16:02:48 +01:00
committed by Émilie Feral
parent 77e34f0446
commit 1e2492c5f4
3 changed files with 11 additions and 4 deletions

View File

@@ -246,9 +246,11 @@ void PythonTextArea::addAutocompletion() {
const char * autocompletionLocation = const_cast<char *>(cursorLocation());
const char * textToInsert = nullptr;
CodePoint prevCodePoint = UTF8Helper::PreviousCodePoint(m_contentView.editedText(), autocompletionLocation);
if (!UTF8Helper::CodePointIsEndOfWord(prevCodePoint)) {
if (!UTF8Helper::CodePointIsEndOfWord(prevCodePoint)
&& UTF8Helper::CodePointIsEndOfWord(UTF8Helper::CodePointAtLocation(autocompletionLocation)))
{
/* The previous code point is neither the beginning of the text, nor a
* space, nor a \n.
* space, nor a \n, and the next code point is the end of the word.
* Compute the text to insert */
// TODO LEA
textToInsert = "test";

View File

@@ -67,6 +67,7 @@ const char * PerformAtCodePoints(
const char * stoppingPosition = nullptr);
CodePoint PreviousCodePoint(const char * buffer, const char * location); // returns 0 if location == buffer
CodePoint CodePointAtLocation(const char * location);
bool PreviousCodePointIs(const char * buffer, const char * location, CodePoint c);
bool CodePointIs(const char * location, CodePoint c);
bool CodePointIsEndOfWord(CodePoint c);

View File

@@ -265,6 +265,11 @@ CodePoint PreviousCodePoint(const char * buffer, const char * location) {
return decoder.previousCodePoint();
}
CodePoint CodePointAtLocation(const char * location) {
UTF8Decoder decoder(location);
return decoder.nextCodePoint();
}
bool PreviousCodePointIs(const char * buffer, const char * location, CodePoint c) {
assert(location > buffer);
if (UTF8Decoder::CharSizeOfCodePoint(c) == 1) {
@@ -277,8 +282,7 @@ bool CodePointIs(const char * location, CodePoint c) {
if (UTF8Decoder::CharSizeOfCodePoint(c) == 1) {
return *(location) == c;
}
UTF8Decoder decoder(location);
return decoder.nextCodePoint() == c;
return CodePointAtLocation(location) == c;
}
bool CodePointIsEndOfWord(CodePoint c) {