Revision: 4376 http://geany.svn.sourceforge.net/geany/?rev=4376&view=rev Author: ntrel Date: 2009-10-27 13:06:04 +0000 (Tue, 27 Oct 2009)
Log Message: ----------- Sort document word completion list.
Modified Paths: -------------- trunk/ChangeLog trunk/src/editor.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2009-10-26 22:23:14 UTC (rev 4375) +++ trunk/ChangeLog 2009-10-27 13:06:04 UTC (rev 4376) @@ -1,3 +1,9 @@ +2009-10-27 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> + + * src/editor.c: + Sort document word completion list. + + 2009-10-26 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* src/build.c:
Modified: trunk/src/editor.c =================================================================== --- trunk/src/editor.c 2009-10-26 22:23:14 UTC (rev 4375) +++ trunk/src/editor.c 2009-10-27 13:06:04 UTC (rev 4376) @@ -1776,15 +1776,13 @@
/* Algorithm based on based on Scite's StartAutoCompleteWord() */ -static gboolean autocomplete_doc_word(GeanyEditor *editor, gchar *root, gsize rootlen) +static GString *get_doc_words(ScintillaObject *sci, gchar *root, gsize rootlen) { - ScintillaObject *sci = editor->sci; gchar *word; gint len, current, word_end; gint pos_find, flags; guint word_length; gsize nmatches = 0; - gboolean ret = FALSE; GString *words; struct Sci_TextToFind ttf;
@@ -1841,14 +1839,54 @@ { g_strdelimit(words->str, " ", '\n'); words->str[words->len - 1] = '\0'; /* remove the trailing '\n' */ - show_autocomplete(sci, rootlen, words->str + 1); - ret = TRUE; + return words; } - else + g_string_free(words, TRUE); + return NULL; +} + + +static gboolean autocomplete_doc_word(GeanyEditor *editor, gchar *root, gsize rootlen) +{ + ScintillaObject *sci = editor->sci; + GString *words; + GString *str; + gchar *ptr; + GSList *node, *list = NULL; + + words = get_doc_words(sci, root, rootlen); + if (!words) + { scintilla_send_message(sci, SCI_AUTOCCANCEL, 0, 0); + return FALSE; + }
+ /* words are unsorted, make list of words */ + foreach_str(ptr, words->str) + { + if (*ptr == '\n') + { + list = g_slist_prepend(list, ptr + 1); + /* terminate previous string in list */ + ptr[0] = 0x0; + ptr++; + } + } + list = g_slist_sort(list, (GCompareFunc)utils_str_casecmp); + + str = g_string_sized_new(256); + foreach_slist(node, list) + { + g_string_append(str, node->data); + if (node->next) + g_string_append_c(str, '\n'); + } + g_slist_free(list); g_string_free(words, TRUE); - return ret; + + show_autocomplete(sci, rootlen, str->str); + g_string_free(str, TRUE); + return TRUE; }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.