Revision: 5900 http://geany.svn.sourceforge.net/geany/?rev=5900&view=rev Author: colombanw Date: 2011-08-25 20:12:36 +0000 (Thu, 25 Aug 2011) Log Message: ----------- Cleanup code duplication in editor_start_auto_complete()
Use read_current_word() in editor_start_auto_complete() not to duplicate some code. This also brings non-ASCII characters as part of a word, first step for non-ASCII word completions.
Modified Paths: -------------- trunk/src/editor.c
Modified: trunk/src/editor.c =================================================================== --- trunk/src/editor.c 2011-08-25 20:12:20 UTC (rev 5899) +++ trunk/src/editor.c 2011-08-25 20:12:36 UTC (rev 5900) @@ -2144,18 +2144,19 @@
gboolean editor_start_auto_complete(GeanyEditor *editor, gint pos, gboolean force) { - gint line, line_start, current, rootlen, startword, lexer, style; - gchar *linebuf, *root; + gint rootlen, lexer, style; + gchar *root; + gchar cword[GEANY_MAX_WORD_LENGTH]; ScintillaObject *sci; gboolean ret = FALSE; const gchar *wordchars; GeanyFiletype *ft;
+ g_return_val_if_fail(editor != NULL, FALSE); + if (! editor_prefs.auto_complete_symbols && ! force) return FALSE;
- g_return_val_if_fail(editor != NULL, FALSE); - /* If we are at the beginning of the document, we skip autocompletion as we can't determine the * necessary styling information */ if (G_UNLIKELY(pos < 2)) @@ -2164,10 +2165,6 @@ sci = editor->sci; ft = editor->document->file_type;
- line = sci_get_line_from_position(sci, pos); - line_start = sci_get_position_from_line(sci, line); - current = pos - line_start; - startword = current; lexer = sci_get_lexer(sci); style = sci_get_style_at(sci, pos - 2);
@@ -2177,8 +2174,6 @@
autocomplete_scope(editor);
- linebuf = sci_get_line(sci, line); - if (ft->id == GEANY_FILETYPES_LATEX) wordchars = GEANY_WORDCHARS"\"; /* add \ to word chars if we are in a LaTeX file */ else if (ft->id == GEANY_FILETYPES_HTML || ft->id == GEANY_FILETYPES_PHP) @@ -2186,12 +2181,9 @@ else wordchars = GEANY_WORDCHARS;
- /* find the start of the current word */ - while ((startword > 0) && (strchr(wordchars, linebuf[startword - 1]))) - startword--; - linebuf[current] = '\0'; - root = linebuf + startword; - rootlen = current - startword; + read_current_word(editor, pos, cword, sizeof(cword), wordchars, TRUE); + root = cword; + rootlen = strlen(root);
if (rootlen > 0) { @@ -2209,7 +2201,8 @@ ret = autocomplete_html(sci, root, rootlen); } else if (ft->id == GEANY_FILETYPES_PHP && style == SCE_HPHP_DEFAULT && - startword >= 2 && rootlen == 3 && strcmp(&root[-2], "<?php") == 0) + rootlen == 3 && strcmp(root, "php") == 0 && pos >= 5 && + sci_get_char_at(sci, pos - 5) == '<' && sci_get_char_at(sci, pos - 4) == '?') { /* nothing, don't complete PHP open tags */ } @@ -2232,7 +2225,6 @@ if (!ret && force) utils_beep();
- g_free(linebuf); return ret; }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.