From f623b97413ab8147083dc03b2e4140f25ef544b5 Mon Sep 17 00:00:00 2001 From: nyamatongwe Date: Fri, 1 Sep 2000 08:50:55 +0000 Subject: Fix from Ferda to make the binary search work for autocompletion and calltips. --- src/PropSet.cxx | 64 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 50 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/PropSet.cxx b/src/PropSet.cxx index 66018544a..27cd51baa 100644 --- a/src/PropSet.cxx +++ b/src/PropSet.cxx @@ -572,9 +572,18 @@ char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, b do { // browse sequentially the rest after the hit brace = strchr(word, '('); if (brace) - wordlen = brace - word; - else - wordlen = strlen(word); + do + if (--brace < word) + break; + while (isspace(*brace)); + else { + brace = word + strlen(word); + do + if (--brace < word) + break; + while (isspace(*brace)); + } + wordlen = brace - word + 1; newlength = length + wordlen; // stretch the buffer if (length) newlength++; @@ -589,7 +598,7 @@ char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, b memcpy(buffer + length, word, wordlen); length = newlength; buffer[length] = '\0'; - if (++pivot >= end) + if (++pivot > end) break; word = wordsNoCase[pivot]; } while (!strncasecmp(wordStart, word, searchLen)); @@ -603,9 +612,18 @@ char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, b break; brace = strchr(word, '('); if (brace) - wordlen = brace - word; - else - wordlen = strlen(word); + do + if (--brace < word) + break; + while (isspace(*brace)); + else { + brace = word + strlen(word); + do + if (--brace < word) + break; + while (isspace(*brace)); + } + wordlen = brace - word + 1; newlength = length + wordlen; // stretch the buffer if (length) newlength++; @@ -639,9 +657,18 @@ char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, b do { // browse sequentially the rest after the hit brace = strchr(word, '('); if (brace) - wordlen = brace - word; - else - wordlen = strlen(word); + do + if (--brace < word) + break; + while (isspace(*brace)); + else { + brace = word + strlen(word); + do + if (--brace < word) + break; + while (isspace(*brace)); + } + wordlen = brace - word + 1; newlength = length + wordlen; // stretch the buffer if (length) newlength++; @@ -657,7 +684,7 @@ char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, b memcpy(buffer + length, word, wordlen); length = newlength; buffer[length] = '\0'; - if (++pivot >= end) + if (++pivot > end) break; word = words[pivot]; } while (!strncmp(wordStart, word, searchLen)); @@ -671,9 +698,18 @@ char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, b break; brace = strchr(word, '('); if (brace) - wordlen = brace - word; - else - wordlen = strlen(word); + do + if (--brace < word) + break; + while (isspace(*brace)); + else { + brace = word + strlen(word); + do + if (--brace < word) + break; + while (isspace(*brace)); + } + wordlen = brace - word + 1; newlength = length + wordlen; // stretch the buffer if (length) newlength++; -- cgit v1.2.3