SF.net SVN: geany: [1105] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Sat Dec 16 17:18:53 UTC 2006


Revision: 1105
          http://svn.sourceforge.net/geany/?rev=1105&view=rev
Author:   ntrel
Date:     2006-12-16 09:18:53 -0800 (Sat, 16 Dec 2006)

Log Message:
-----------
Colourise C enum, union and D/Java interface typenames.
Add sci_cb_lexer_get_type_keyword_idx() for use when finding if a lexer
supports typename colouring.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/document.c
    trunk/src/highlighting.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-16 17:00:41 UTC (rev 1104)
+++ trunk/ChangeLog	2006-12-16 17:18:53 UTC (rev 1105)
@@ -2,6 +2,11 @@
 
  * src/utils.c:
    Fix memory leak in utils_check_disk_status().
+ * src/highlighting.c, src/sci_cb.c, src/sci_cb.h, src/document.c,
+   src/symbols.c, src/symbols.h:
+   Colourise C enum, union and D/Java interface typenames.
+   Add sci_cb_lexer_get_type_keyword_idx() for use when finding if a lexer
+   supports typename colouring.
 
 
 2006-12-15  Enrico Tröger  <enrico.troeger at uvena.de>

Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c	2006-12-16 17:00:41 UTC (rev 1104)
+++ trunk/src/document.c	2006-12-16 17:18:53 UTC (rev 1105)
@@ -20,7 +20,6 @@
  * $Id$
  */
 
-#include "SciLexer.h"
 #include "geany.h"
 
 #ifdef TIME_WITH_SYS_TIME
@@ -1295,8 +1294,7 @@
 
 		if (tags_array)
 		{
-			s = symbols_find_tags_as_string(tags_array,
-				tm_tag_typedef_t | tm_tag_struct_t | tm_tag_class_t);
+			s = symbols_find_tags_as_string(tags_array, TM_GLOBAL_TYPE_MASK);
 		}
 	}
 	return s;
@@ -1308,28 +1306,31 @@
 {
 	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)))
+	if (sci_cb_lexer_get_type_keyword_idx(sci_get_lexer(sci)) != -1)
 	{
+		guint n;
 		GString *s = get_project_typenames();
 
-		if (s != NULL)
+		if (s == NULL) return FALSE;
+
+		for (n = 0; n < doc_array->len; n++)
 		{
-			guint n;
+			ScintillaObject *wid = doc_list[n].sci;
 
-			for (n = 0; n < doc_array->len; n++)
+			if (wid)
 			{
-				ScintillaObject *wid = doc_list[n].sci;
+				gint keyword_idx = sci_cb_lexer_get_type_keyword_idx(sci_get_lexer(wid));
 
-				if (wid && sci_cb_lexer_is_c_like(sci_get_lexer(wid)))
+				if (keyword_idx > 0)
 				{
-					sci_set_keywords(wid, 3, s->str);
+					sci_set_keywords(wid, keyword_idx, s->str);
 					sci_colourise(wid, 0, -1);
+					if (sci == wid)
+						ret = TRUE;
 				}
 			}
-			g_string_free(s, TRUE);
-			ret = TRUE;
 		}
+		g_string_free(s, TRUE);
 	}
 	return ret;
 }

Modified: trunk/src/highlighting.c
===================================================================
--- trunk/src/highlighting.c	2006-12-16 17:00:41 UTC (rev 1104)
+++ trunk/src/highlighting.c	2006-12-16 17:18:53 UTC (rev 1105)
@@ -355,8 +355,7 @@
 
 		if (tags_array)
 		{
-			s = symbols_find_tags_as_string(tags_array,
-				tm_tag_typedef_t | tm_tag_struct_t | tm_tag_class_t);
+			s = symbols_find_tags_as_string(tags_array, TM_GLOBAL_TYPE_MASK);
 		}
 	}
 	return s;

Modified: trunk/src/sci_cb.c
===================================================================
--- trunk/src/sci_cb.c	2006-12-16 17:00:41 UTC (rev 1104)
+++ trunk/src/sci_cb.c	2006-12-16 17:18:53 UTC (rev 1105)
@@ -1754,7 +1754,7 @@
 			if (style == SCE_C_COMMENT ||
 				style == SCE_C_COMMENTLINE ||
 				style == SCE_C_COMMENTDOC ||
-				style == SCE_D_COMMENTLINEDOC ||
+				style == SCE_C_COMMENTLINEDOC ||
 				style == SCE_C_CHARACTER ||
 				style == SCE_C_PREPROCESSOR ||
 				style == SCE_C_STRING)
@@ -1867,6 +1867,7 @@
 }
 
 
+#if 0
 gboolean sci_cb_lexer_is_c_like(gint lexer)
 {
 	switch (lexer)
@@ -1879,4 +1880,19 @@
 		return FALSE;
 	}
 }
+#endif
 
+
+// Returns: -1 if lexer doesn't support type keywords
+gint sci_cb_lexer_get_type_keyword_idx(gint lexer)
+{
+	switch (lexer)
+	{
+		case SCLEX_CPP:
+		case SCLEX_D:
+		return 3;
+
+		default:
+		return -1;
+	}
+}

Modified: trunk/src/sci_cb.h
===================================================================
--- trunk/src/sci_cb.h	2006-12-16 17:00:41 UTC (rev 1104)
+++ trunk/src/sci_cb.h	2006-12-16 17:18:53 UTC (rev 1105)
@@ -81,4 +81,6 @@
 
 gboolean sci_cb_lexer_is_c_like(gint lexer);
 
+gint sci_cb_lexer_get_type_keyword_idx(gint lexer);
+
 #endif

Modified: trunk/src/symbols.c
===================================================================
--- trunk/src/symbols.c	2006-12-16 17:00:41 UTC (rev 1104)
+++ trunk/src/symbols.c	2006-12-16 17:18:53 UTC (rev 1105)
@@ -32,6 +32,11 @@
 #include "document.h"
 
 
+const guint TM_GLOBAL_TYPE_MASK =
+	tm_tag_class_t | tm_tag_enum_t | tm_tag_interface_t |
+	tm_tag_struct_t | tm_tag_typedef_t | tm_tag_union_t;
+
+
 enum	// Geany tag files
 {
 	GTF_C,
@@ -133,8 +138,9 @@
 			{
 				if (TM_TAG(typedefs->pdata[j])->name)
 				{
+					if (j != 0)
+						g_string_append_c(s, ' ');
 					g_string_append(s, TM_TAG(typedefs->pdata[j])->name);
-					g_string_append_c(s, ' ');
 				}
 			}
 		}

Modified: trunk/src/symbols.h
===================================================================
--- trunk/src/symbols.h	2006-12-16 17:00:41 UTC (rev 1104)
+++ trunk/src/symbols.h	2006-12-16 17:18:53 UTC (rev 1105)
@@ -25,6 +25,9 @@
 #ifndef GEANY_SYMBOLS_H
 #define GEANY_SYMBOLS_H 1
 
+extern const guint TM_GLOBAL_TYPE_MASK;
+
+
 void symbols_global_tags_loaded(gint file_type_idx);
 
 GString *symbols_find_tags_as_string(GPtrArray *tags_array, guint tag_types);


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