SF.net SVN: geany: [1102] trunk
eht16 at users.sourceforge.net
eht16 at xxxxx
Fri Dec 15 17:09:06 UTC 2006
Revision: 1102
http://svn.sourceforge.net/geany/?rev=1102&view=rev
Author: eht16
Date: 2006-12-15 09:09:05 -0800 (Fri, 15 Dec 2006)
Log Message:
-----------
Moved html_entities array to symbols.c.
Fixed some checks for the new D lexer and improved detection of comments when auto completing or showing calltips.
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/main.c
trunk/src/sci_cb.c
trunk/src/sci_cb.h
trunk/src/symbols.c
trunk/src/symbols.h
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2006-12-15 12:52:52 UTC (rev 1101)
+++ trunk/ChangeLog 2006-12-15 17:09:05 UTC (rev 1102)
@@ -1,3 +1,12 @@
+2006-12-15 Enrico Tröger <enrico.troeger at uvena.de>
+
+ * src/main.c, src/sci_cb.c, src/sci_cb.h, src/symbols.c,
+ src/symbols.h:
+ Moved html_entities array to symbols.c.
+ Fixed some checks for the new D lexer and improved detection of
+ comments when auto completing or showing calltips.
+
+
2006-12-15 Nick Treleaven <nick.treleaven at btinternet.com>
* src/sci_cb.c:
@@ -14,7 +23,7 @@
2006-12-14 Frank Lanitz <frank at frank.uvena.de>
- * about.c: Fixed a typo.
+ * src/about.c: Fixed a typo.
2006-12-14 Nick Treleaven <nick.treleaven at btinternet.com>
@@ -31,8 +40,8 @@
2006-12-13 Frank Lanitz <frank at frank.uvena.de>
- * THANKS: Small update of contact data and small fix of translated
- language.
+ * THANKS: Small update of contact data and small fix of translated
+ language.
2006-12-13 Nick Treleaven <nick.treleaven at btinternet.com>
Modified: trunk/src/main.c
===================================================================
--- trunk/src/main.c 2006-12-15 12:52:52 UTC (rev 1101)
+++ trunk/src/main.c 2006-12-15 17:09:05 UTC (rev 1102)
@@ -52,6 +52,7 @@
#include "search.h"
#include "build.h"
#include "highlighting.h"
+#include "symbols.h"
#ifdef HAVE_SOCKET
# include "socket.h"
@@ -239,7 +240,6 @@
app->tm_workspace = tm_get_workspace();
app->recent_queue = g_queue_new();
app->opening_session_files = FALSE;
- html_entities = NULL;
app->window = create_window1();
app->new_file_menu = gtk_menu_new();
@@ -674,9 +674,9 @@
search_finalize();
build_finalize();
document_finalize();
+ symbols_finalize();
tm_workspace_free(TM_WORK_OBJECT(app->tm_workspace));
- g_strfreev(html_entities);
g_free(app->configdir);
g_free(app->datadir);
g_free(app->docdir);
Modified: trunk/src/sci_cb.c
===================================================================
--- trunk/src/sci_cb.c 2006-12-15 12:52:52 UTC (rev 1101)
+++ trunk/src/sci_cb.c 2006-12-15 17:09:05 UTC (rev 1102)
@@ -52,6 +52,7 @@
static gboolean handle_xml(ScintillaObject *sci, gchar ch, gint idx);
static void get_indent(ScintillaObject *sci, gint pos, gboolean use_this_line);
static void auto_multiline(ScintillaObject *sci, gint pos);
+static gboolean is_comment(gint lexer, gint style);
// calls the edit popup menu in the editor
@@ -259,7 +260,6 @@
start = pos;
while (sci_get_char_at(sci, --start) != '&') ;
- geany_debug("%d-%d", start, pos);
SSM(sci, SCI_INSERTTEXT, pos - 1, (sptr_t) nt->text);
}
break;
@@ -433,8 +433,9 @@
sci = doc_list[idx].sci;
lexer = SSM(sci, SCI_GETLEXER, 0, 0);
- if (lexer != SCLEX_CPP && lexer != SCLEX_HTML && lexer != SCLEX_PASCAL && lexer != SCLEX_BASH)
- return;
+ if (lexer != SCLEX_CPP && lexer != SCLEX_HTML && lexer != SCLEX_PASCAL &&
+ lexer != SCLEX_D && lexer != SCLEX_BASH)
+ return;
start_brace = brace_match(sci, pos);
line = sci_get_line_from_position(sci, pos);
@@ -454,13 +455,8 @@
}
g_free(line_buf);
- //geany_debug("line_len: %d eol: %d cnt: %d", line_len, eol_char_len, cnt);
if ((line_len - eol_char_len - 1) != cnt) return;
-/* geany_debug("pos: %d, start: %d char: %c start_line: %d", pos, start_brace,
- sci_get_char_at(sci, pos), sci_get_line_from_position(sci, start_brace));
-*/
-
if (start_brace >= 0)
{
get_indent(sci, start_brace, TRUE);
@@ -509,8 +505,7 @@
{
gchar c;
gint orig_pos = pos;
- // we need something more intelligent than only check for '(' because LaTeX
- // uses {, [ or (
+
c = SSM(sci, SCI_GETCHARAT, pos, 0);
while (pos >= 0 && pos > orig_pos - 300)
{
@@ -568,8 +563,11 @@
}
style = SSM(sci, SCI_GETSTYLEAT, pos, 0);
- if (lexer == SCLEX_CPP && (style == SCE_C_COMMENT ||
- style == SCE_C_COMMENTLINE || style == SCE_C_COMMENTDOC)) return FALSE;
+ if (is_comment(lexer, style))
+ return FALSE;
+ // never show a calltip in a PHP file outside of the <? ?> tags
+ if (lexer == SCLEX_HTML && ! (style >= SCE_HPHP_DEFAULT && style <= SCE_HPHP_OPERATOR))
+ return FALSE;
word[0] = '\0';
sci_cb_find_current_word(sci, pos - 1, word, sizeof word);
@@ -608,20 +606,20 @@
{ // HTML entities auto completion
guint i, j = 0;
GString *words;
+ gchar **entities = symbols_get_html_entities();
- if (*root != '&') return FALSE;
- if (html_entities == NULL) return FALSE;
+ if (*root != '&' || entities == NULL) return FALSE;
words = g_string_sized_new(500);
for (i = 0; ; i++)
{
- if (html_entities[i] == NULL) break;
- else if (html_entities[i][0] == '#') continue;
+ if (entities[i] == NULL) break;
+ else if (entities[i][0] == '#') continue;
- if (! strncmp(html_entities[i], root, rootlen))
+ if (! strncmp(entities[i], root, rootlen))
{
if (j++ > 0) g_string_append_c(words, ' ');
- g_string_append(words, html_entities[i]);
+ g_string_append(words, entities[i]);
}
}
if (words->len > 0) show_autocomplete(sci, rootlen, words->str);
@@ -632,7 +630,7 @@
static gboolean
autocomplete_tags(gint idx, gchar *root, gsize rootlen)
-{ // PHP, LaTeX, C and C++ tag autocompletion
+{ // PHP, LaTeX, C, C++, D and Java tag autocompletion
TMTagAttrType attrs[] = { tm_tag_attr_name_t, 0 };
const GPtrArray *tags;
ScintillaObject *sci;
@@ -653,7 +651,6 @@
g_string_append(words, ((TMTag *) tags->pdata[j])->name);
}
show_autocomplete(sci, rootlen, words->str);
- //geany_debug("string size: %d", words->len);
g_string_free(words, TRUE);
}
return TRUE;
@@ -667,9 +664,11 @@
ScintillaObject *sci;
gboolean ret = FALSE;
gchar *wordchars;
+ filetype *ft;
if (! DOC_IDX_VALID(idx) || doc_list[idx].file_type == NULL) return FALSE;
sci = doc_list[idx].sci;
+ ft = doc_list[idx].file_type;
line = sci_get_line_from_position(sci, pos);
line_start = sci_get_position_from_line(sci, line);
@@ -680,41 +679,16 @@
lexer = SSM(sci, SCI_GETLEXER, 0, 0);
style = SSM(sci, SCI_GETSTYLEAT, pos, 0);
- // don't autocomplete in comments and strings
- if (lexer == SCLEX_HTML && style == SCE_H_DEFAULT) return FALSE;
- else if ((lexer == SCLEX_CPP || lexer == SCLEX_PASCAL) && (style == SCE_C_COMMENT ||
- style == SCE_C_COMMENTLINE ||
- style == SCE_C_COMMENTDOC ||
- style == SCE_C_STRING)) return FALSE;
- else if (lexer == SCLEX_PYTHON && (style == SCE_P_COMMENTLINE ||
- style == SCE_P_COMMENTBLOCK ||
- style == SCE_P_STRING)) return FALSE;
- else if (lexer == SCLEX_F77 && (style == SCE_F_COMMENT ||
- style == SCE_F_STRING1 ||
- style == SCE_F_STRING2)) return FALSE;
- else if (lexer == SCLEX_PERL && (style == SCE_PL_COMMENTLINE ||
- style == SCE_PL_STRING)) return FALSE;
- else if (lexer == SCLEX_PROPERTIES && style == SCE_PROPS_COMMENT) return FALSE;
- else if (lexer == SCLEX_LATEX && style == SCE_L_COMMENT) return FALSE;
- else if (lexer == SCLEX_MAKEFILE && style == SCE_MAKE_COMMENT) return FALSE;
- else if (lexer == SCLEX_RUBY && (style == SCE_RB_COMMENTLINE ||
- style == SCE_RB_STRING)) return FALSE;
- else if (lexer == SCLEX_BASH && (style == SCE_SH_COMMENTLINE ||
- style == SCE_SH_STRING)) return FALSE;
- else if (lexer == SCLEX_SQL && (style == SCE_SQL_COMMENT ||
- style == SCE_SQL_COMMENTLINE ||
- style == SCE_SQL_COMMENTDOC ||
- style == SCE_SQL_STRING)) return FALSE;
- else if (lexer == SCLEX_TCL && (style == SCE_TCL_COMMENT ||
- style == SCE_TCL_COMMENTLINE ||
- style == SCE_TCL_IN_QUOTE)) return FALSE;
- else if (lexer == SCLEX_RUBY && style == SCE_MAKE_COMMENT) return FALSE;
+ // don't autocomplete in comments and strings
+ if (is_comment(lexer, style))
+ return FALSE;
-
linebuf = sci_get_line(sci, line);
- if (doc_list[idx].file_type->id == GEANY_FILETYPES_LATEX)
+ 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)
+ wordchars = GEANY_WORDCHARS"&"; // add & to word chars if we are in a PHP or HTML file
else
wordchars = GEANY_WORDCHARS;
@@ -726,8 +700,8 @@
rootlen = current - startword;
// entity autocompletion always in a HTML file, in a PHP file only when we are outside of <? ?>
- if (doc_list[idx].file_type->id == GEANY_FILETYPES_HTML ||
- (doc_list[idx].file_type->id == GEANY_FILETYPES_PHP && (style < 118 || style > 127)))
+ if (ft->id == GEANY_FILETYPES_HTML ||
+ (ft->id == GEANY_FILETYPES_PHP && (style < SCE_HPHP_DEFAULT || style > SCE_HPHP_OPERATOR)))
ret = autocomplete_html(sci, root, rootlen);
else
{
@@ -833,7 +807,7 @@
lexer = SSM(sci, SCI_GETLEXER, 0, 0);
style = SSM(sci, SCI_GETSTYLEAT, pos - 2, 0);
- // only for C, C++, Java, Perl and PHP
+ // only for C, C++, D, Ferite, Java, Perl and PHP
if (doc_list[idx].file_type->id != GEANY_FILETYPES_PHP &&
doc_list[idx].file_type->id != GEANY_FILETYPES_C &&
doc_list[idx].file_type->id != GEANY_FILETYPES_D &&
@@ -843,23 +817,13 @@
doc_list[idx].file_type->id != GEANY_FILETYPES_FERITE)
return;
- // return, if we are in a comment, or when SCLEX_HTML but not in PHP
- if (lexer == SCLEX_CPP && (
- style == SCE_C_COMMENT ||
- style == SCE_C_COMMENTLINE ||
- style == SCE_C_COMMENTDOC ||
- style == SCE_C_COMMENTLINEDOC ||
- style == SCE_C_STRING ||
- style == SCE_C_CHARACTER ||
- style == SCE_C_PREPROCESSOR)) return;
- //if (lexer == SCLEX_HTML && ! (style >= 118 && style <= 127)) return;
+ // return, if we are in a comment
+ if (is_comment(lexer, style))
+ return;
+ // never auto complete in a PHP file outside of the <? ?> tags
+ if (lexer == SCLEX_HTML && ! (style >= SCE_HPHP_DEFAULT && style <= SCE_HPHP_OPERATOR))
+ return;
- if (doc_list[idx].file_type->id == GEANY_FILETYPES_PHP && (
- style == SCE_HPHP_SIMPLESTRING ||
- style == SCE_HPHP_HSTRING ||
- style == SCE_HPHP_COMMENTLINE ||
- style == SCE_HPHP_COMMENT)) return;
-
// get the indention
if (doc_list[idx].use_auto_indention) get_indent(sci, pos, TRUE);
eol = g_strconcat(utils_get_eol_char(idx), indent, NULL);
@@ -1274,7 +1238,6 @@
line_len = sci_get_line_length(doc_list[idx].sci, i);
x = 0;
- //geany_debug("line: %d line_start: %d len: %d (%d)", i, line_start, MIN(255, (line_len - 1)), line_len);
sci_get_text_range(doc_list[idx].sci, line_start, MIN((line_start + 255), (line_start + line_len - 1)), sel);
sel[MIN(255, (line_len - 1))] = '\0';
@@ -1323,8 +1286,7 @@
case SCLEX_CSS: style_comment = SCE_CSS_COMMENT; break;
case SCLEX_SQL: style_comment = SCE_SQL_COMMENT; break;
case SCLEX_CAML: style_comment = SCE_CAML_COMMENT; break;
- case SCLEX_CPP:
- case SCLEX_PASCAL:
+ case SCLEX_D: style_comment = SCE_D_COMMENT; break;
default: style_comment = SCE_C_COMMENT;
}
if (sci_get_style_at(doc_list[idx].sci, line_start + x) == style_comment)
@@ -1405,7 +1367,6 @@
line_len = sci_get_line_length(doc_list[idx].sci, i);
x = 0;
- //geany_debug("line: %d line_start: %d len: %d (%d)", i, line_start, MIN(255, (line_len - 1)), line_len);
sci_get_text_range(doc_list[idx].sci, line_start, MIN((line_start + 255), (line_start + line_len - 1)), sel);
sel[MIN(255, (line_len - 1))] = '\0';
@@ -1476,8 +1437,7 @@
case SCLEX_CSS: style_comment = SCE_CSS_COMMENT; break;
case SCLEX_SQL: style_comment = SCE_SQL_COMMENT; break;
case SCLEX_CAML: style_comment = SCE_CAML_COMMENT; break;
- case SCLEX_CPP:
- case SCLEX_PASCAL:
+ case SCLEX_D: style_comment = SCE_D_COMMENT; break;
default: style_comment = SCE_C_COMMENT;
}
if (sci_get_style_at(doc_list[idx].sci, line_start + x) == style_comment)
@@ -1593,7 +1553,6 @@
line_len = sci_get_line_length(doc_list[idx].sci, i);
x = 0;
- //geany_debug("line: %d line_start: %d len: %d (%d)", i, line_start, MIN(256, (line_len - 1)), line_len);
sci_get_text_range(doc_list[idx].sci, line_start, MIN((line_start + 256), (line_start + line_len - 1)), sel);
sel[MIN(256, (line_len - 1))] = '\0';
@@ -1633,8 +1592,7 @@
case SCLEX_CSS: style_comment = SCE_CSS_COMMENT; break;
case SCLEX_SQL: style_comment = SCE_SQL_COMMENT; break;
case SCLEX_CAML: style_comment = SCE_CAML_COMMENT; break;
- case SCLEX_CPP:
- case SCLEX_PASCAL:
+ case SCLEX_D: style_comment = SCE_D_COMMENT; break;
default: style_comment = SCE_C_COMMENT;
}
if (sci_get_style_at(doc_list[idx].sci, line_start + x) == style_comment) continue;
@@ -1780,6 +1738,135 @@
}
+/* Checks whether the given style is a comment or string for the given lexer.
+ * It doesn't handle LEX_HTML, this should be done by the caller.
+ * Returns true if the style is a comment, FALSE otherwise.
+ */
+static gboolean is_comment(gint lexer, gint style)
+{
+ gboolean result = FALSE;
+
+ switch (lexer)
+ {
+ case SCLEX_CPP:
+ case SCLEX_PASCAL:
+ {
+ if (style == SCE_C_COMMENT ||
+ style == SCE_C_COMMENTLINE ||
+ style == SCE_C_COMMENTDOC ||
+ style == SCE_D_COMMENTLINEDOC ||
+ style == SCE_C_CHARACTER ||
+ style == SCE_C_PREPROCESSOR ||
+ style == SCE_C_STRING)
+ result = TRUE;
+ break;
+ }
+ case SCLEX_D:
+ {
+ if (style == SCE_D_COMMENT ||
+ style == SCE_D_COMMENTLINE ||
+ style == SCE_D_COMMENTDOC ||
+ style == SCE_D_COMMENTLINEDOC ||
+ style == SCE_D_COMMENTNESTED ||
+ style == SCE_D_CHARACTER ||
+ style == SCE_D_STRING)
+ result = TRUE;
+ break;
+ }
+ case SCLEX_PYTHON:
+ {
+ if (style == SCE_P_COMMENTLINE ||
+ style == SCE_P_COMMENTBLOCK ||
+ style == SCE_P_STRING)
+ result = TRUE;
+ break;
+ }
+ case SCLEX_F77:
+ {
+ if (style == SCE_F_COMMENT ||
+ style == SCE_F_STRING1 ||
+ style == SCE_F_STRING2)
+ result = TRUE;
+ break;
+ }
+ case SCLEX_PERL:
+ {
+ if (style == SCE_PL_COMMENTLINE ||
+ style == SCE_PL_STRING)
+ result = TRUE;
+ break;
+ }
+ case SCLEX_PROPERTIES:
+ {
+ if (style == SCE_PROPS_COMMENT)
+ result = TRUE;
+ break;
+ }
+ case SCLEX_LATEX:
+ {
+ if (style == SCE_L_COMMENT)
+ result = TRUE;
+ break;
+ }
+ case SCLEX_MAKEFILE:
+ {
+ if (style == SCE_MAKE_COMMENT)
+ result = TRUE;
+ break;
+ }
+ case SCLEX_RUBY:
+ {
+ if (style == SCE_RB_COMMENTLINE ||
+ style == SCE_RB_STRING)
+ result = TRUE;
+ break;
+ }
+ case SCLEX_BASH:
+ {
+ if (style == SCE_SH_COMMENTLINE ||
+ style == SCE_SH_STRING)
+ result = TRUE;
+ break;
+ }
+ case SCLEX_SQL:
+ {
+ if (style == SCE_SQL_COMMENT ||
+ style == SCE_SQL_COMMENTLINE ||
+ style == SCE_SQL_COMMENTDOC ||
+ style == SCE_SQL_STRING)
+ result = TRUE;
+ break;
+ }
+ case SCLEX_TCL:
+ {
+ if (style == SCE_TCL_COMMENT ||
+ style == SCE_TCL_COMMENTLINE ||
+ style == SCE_TCL_IN_QUOTE)
+ result = TRUE;
+ break;
+ }
+ case SCLEX_HTML:
+ {
+ if (style == SCE_HPHP_SIMPLESTRING ||
+ style == SCE_HPHP_HSTRING ||
+ style == SCE_HPHP_COMMENTLINE ||
+ style == SCE_HPHP_COMMENT ||
+ style == SCE_H_DOUBLESTRING ||
+ style == SCE_H_SINGLESTRING ||
+ style == SCE_H_CDATA ||
+ style == SCE_H_COMMENT ||
+ style == SCE_H_SGML_DOUBLESTRING ||
+ style == SCE_H_SGML_SIMPLESTRING ||
+ style == SCE_H_SGML_COMMENT)
+ result = TRUE;
+ break;
+ }
+ }
+
+ return result;
+}
+
+
gboolean sci_cb_lexer_is_c_like(gint lexer)
{
switch (lexer)
@@ -1793,4 +1880,3 @@
}
}
-
Modified: trunk/src/sci_cb.h
===================================================================
--- trunk/src/sci_cb.h 2006-12-15 12:52:52 UTC (rev 1101)
+++ trunk/src/sci_cb.h 2006-12-15 17:09:05 UTC (rev 1102)
@@ -41,9 +41,7 @@
extern EditorInfo editor_info;
-gchar **html_entities;
-
gboolean
on_editor_button_press_event (GtkWidget *widget,
GdkEventButton *event,
Modified: trunk/src/symbols.c
===================================================================
--- trunk/src/symbols.c 2006-12-15 12:52:52 UTC (rev 1101)
+++ trunk/src/symbols.c 2006-12-15 17:09:05 UTC (rev 1102)
@@ -28,7 +28,6 @@
#include "symbols.h"
#include "utils.h"
#include "filetypes.h"
-#include "sci_cb.h" // html_entities
#include "encodings.h"
#include "document.h"
@@ -43,6 +42,8 @@
GTF_MAX
};
+static gchar **html_entities = NULL;
+
typedef struct
{
gboolean tags_loaded;
@@ -285,3 +286,16 @@
}
+gchar **symbols_get_html_entities()
+{
+ if (html_entities == NULL)
+ html_tags_loaded(); // if not yet created, force creation of the array but shouldn't occur
+
+ return html_entities;
+}
+
+
+void symbols_finalize()
+{
+ g_strfreev(html_entities);
+}
Modified: trunk/src/symbols.h
===================================================================
--- trunk/src/symbols.h 2006-12-15 12:52:52 UTC (rev 1101)
+++ trunk/src/symbols.h 2006-12-15 17:09:05 UTC (rev 1102)
@@ -35,4 +35,8 @@
TMTag *symbols_find_in_workspace(const gchar *tag_name, gint type);
+gchar **symbols_get_html_entities();
+
+void symbols_finalize();
+
#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list