Revision: 1101 http://svn.sourceforge.net/geany/?rev=1101&view=rev Author: ntrel Date: 2006-12-15 04:52:52 -0800 (Fri, 15 Dec 2006)
Log Message: ----------- Fix setting project typenames for the new D lexer. Add sci_cb_lexer_is_c_like() which returns TRUE for C++/D lexers. Only recolourise C-like files when updating project typename keywords.
Modified Paths: -------------- trunk/ChangeLog trunk/src/document.c trunk/src/sci_cb.c trunk/src/sci_cb.h
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2006-12-15 12:40:18 UTC (rev 1100) +++ trunk/ChangeLog 2006-12-15 12:52:52 UTC (rev 1101) @@ -5,6 +5,11 @@ indent contains one too many spaces. * src/highlighting.c, data/filetypes.d: Show D typedefs in bold. + * src/sci_cb.c, src/sci_cb.h, src/document.c: + Fix setting project typenames for the new D lexer. + Add sci_cb_lexer_is_c_like() which returns TRUE for C++/D lexers. + Only recolourise C-like files when updating project typename + keywords.
2006-12-14 Frank Lanitz frank@frank.uvena.de
Modified: trunk/src/document.c =================================================================== --- trunk/src/document.c 2006-12-15 12:40:18 UTC (rev 1100) +++ trunk/src/document.c 2006-12-15 12:52:52 UTC (rev 1101) @@ -1303,9 +1303,43 @@ }
+/* Returns: whether sci_colourise has been called for sci */ +static gboolean update_type_keywords(ScintillaObject *sci) +{ + gboolean ret = FALSE; + + // For C/C++/Java files, get list of typedefs for colourising + if (sci_cb_lexer_is_c_like(sci_get_lexer(sci))) + { + GString *s = get_project_typenames(); + + if (s != NULL) + { + guint n; + + for (n = 0; n < doc_array->len; n++) + { + ScintillaObject *wid = doc_list[n].sci; + + if (wid && sci_cb_lexer_is_c_like(sci_get_lexer(wid))) + { + sci_set_keywords(wid, 3, s->str); + sci_colourise(wid, 0, -1); + } + } + g_string_free(s, TRUE); + ret = TRUE; + } + } + return ret; +} + + /* sets the filetype of the document (sets syntax highlighting and tagging) */ void document_set_filetype(gint idx, filetype *type) { + gboolean colourise = FALSE; + if (type == NULL || ! DOC_IDX_VALID(idx)) return;
@@ -1323,32 +1357,13 @@ } build_menu_update(idx); type->style_func_ptr(doc_list[idx].sci); // set new styles + colourise = TRUE; }
document_update_tag_list(idx, TRUE); - - // For C/C++/Java files, get list of typedefs for colourising - if (sci_get_lexer(doc_list[idx].sci) == SCLEX_CPP) - { - GString *s = get_project_typenames(); - - if (s != NULL) - { - guint n; - - for (n = 0; n < doc_array->len; n++) - { - if (doc_list[n].sci) - { - sci_set_keywords(doc_list[n].sci, 3, s->str); - sci_colourise(doc_list[n].sci, 0, -1); - } - } - //SSM(doc_list[idx].sci, SCI_SETKEYWORDS, 3, (sptr_t) s->str); - g_string_free(s, TRUE); - } - } - sci_colourise(doc_list[idx].sci, 0, -1); + colourise &= ! update_type_keywords(doc_list[idx].sci); + if (colourise) + sci_colourise(doc_list[idx].sci, 0, -1); }
Modified: trunk/src/sci_cb.c =================================================================== --- trunk/src/sci_cb.c 2006-12-15 12:40:18 UTC (rev 1100) +++ trunk/src/sci_cb.c 2006-12-15 12:52:52 UTC (rev 1101) @@ -1778,3 +1778,19 @@ g_free(previous_line); } } + + +gboolean sci_cb_lexer_is_c_like(gint lexer) +{ + switch (lexer) + { + case SCLEX_CPP: + case SCLEX_D: + return TRUE; + + default: + return FALSE; + } +} + +
Modified: trunk/src/sci_cb.h =================================================================== --- trunk/src/sci_cb.h 2006-12-15 12:40:18 UTC (rev 1100) +++ trunk/src/sci_cb.h 2006-12-15 12:52:52 UTC (rev 1101) @@ -81,4 +81,6 @@
void sci_cb_auto_close_bracket(ScintillaObject *sci, gint pos, gchar c);
+gboolean sci_cb_lexer_is_c_like(gint lexer); + #endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.