SF.net SVN: geany: [1885] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Mon Sep 17 15:28:28 UTC 2007


Revision: 1885
          http://geany.svn.sourceforge.net/geany/?rev=1885&view=rev
Author:   ntrel
Date:     2007-09-17 08:28:27 -0700 (Mon, 17 Sep 2007)

Log Message:
-----------
Apply code from blackdog to parse Haxe typedef tags (thanks).
Show Haxe typedefs in the symbol list.
Add tag_type treeview iter.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/symbols.c
    trunk/tagmanager/haxe.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-09-17 11:16:48 UTC (rev 1884)
+++ trunk/ChangeLog	2007-09-17 15:28:27 UTC (rev 1885)
@@ -3,6 +3,10 @@
  * src/build.h, src/plugindata.h, src/plugins.c:
    Apply patch from blackdog to add build_info and
    msgwindow->compiler_add() to the plugin API (thanks).
+ * src/symbols.c, tagmanager/haxe.c:
+   Apply code from blackdog to parse Haxe typedef tags (thanks).
+   Show Haxe typedefs in the symbol list.
+   Add tag_type treeview iter.
 
 
 2007-09-13  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>

Modified: trunk/src/symbols.c
===================================================================
--- trunk/src/symbols.c	2007-09-17 11:16:48 UTC (rev 1884)
+++ trunk/src/symbols.c	2007-09-17 15:28:27 UTC (rev 1885)
@@ -45,8 +45,6 @@
 #include "main.h"
 
 
-#define MAX_SYMBOL_TYPES 8 // amount of types in the symbol list (currently max. 8 are used)
-
 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;
@@ -406,6 +404,9 @@
 }
 
 
+// amount of types in the symbol list (currently max. 8 are used)
+#define MAX_SYMBOL_TYPES	(sizeof(tv_iters) / sizeof(GtkTreeIter))
+
 struct TreeviewSymbols
 {
 	GtkTreeIter		 tag_function;
@@ -415,6 +416,7 @@
 	GtkTreeIter		 tag_variable;
 	GtkTreeIter		 tag_namespace;
 	GtkTreeIter		 tag_struct;
+	GtkTreeIter		 tag_type;
 	GtkTreeIter		 tag_other;
 } tv_iters;
 
@@ -430,6 +432,7 @@
 	tv_iters.tag_variable.stamp = -1;
 	tv_iters.tag_namespace.stamp = -1;
 	tv_iters.tag_struct.stamp = -1;
+	tv_iters.tag_type.stamp = -1;
 	tv_iters.tag_other.stamp = -1;
 }
 
@@ -637,12 +640,13 @@
 		case GEANY_FILETYPES_HAXE:
 		{
 			tag_list_add_groups(tag_store,
-				&(tv_iters.tag_struct), _("Interfaces"), NULL,
+				&(tv_iters.tag_struct), _("Interfaces"), "classviewer-struct",
 				&(tv_iters.tag_class), _("Classes"), "classviewer-class",
 				&(tv_iters.tag_function), _("Methods"), "classviewer-method",
+				&(tv_iters.tag_type), _("Types"), NULL,
 				&(tv_iters.tag_variable), _("Variables"), "classviewer-var",
+				&(tv_iters.tag_other), _("Other"), "classviewer-other",
 				NULL);
-
 			break;
 		}
 		case GEANY_FILETYPES_D:
@@ -681,7 +685,7 @@
 static void hide_empty_rows(GtkTreeModel *model, GtkTreeStore *store)
 {
 	GtkTreeIter iter, *iters[MAX_SYMBOL_TYPES] = { NULL };
-	gint i = 0;
+	guint i = 0;
 
 	if (! gtk_tree_model_get_iter_first(model, &iter))
 		return; // stop when first iter is invalid, i.e. no elements
@@ -709,6 +713,7 @@
 	const GList *tags;
 	GtkTreeIter iter;
 	GtkTreeModel *model;
+	filetype_id ft_id = FILETYPE_ID(doc_list[idx].file_type);
 
 	g_return_val_if_fail(DOC_IDX_VALID(idx), FALSE);
 
@@ -764,6 +769,15 @@
 			}
 			case tm_tag_typedef_t:
 			case tm_tag_enum_t:
+			{
+				// TODO: separate C-like types here also
+				if (ft_id == GEANY_FILETYPES_HAXE)
+				{
+					if (tv_iters.tag_type.stamp == -1) break;
+					parent = &(tv_iters.tag_type);
+					break;
+				}
+			}
 			case tm_tag_union_t:
 			case tm_tag_struct_t:
 			case tm_tag_interface_t:

Modified: trunk/tagmanager/haxe.c
===================================================================
--- trunk/tagmanager/haxe.c	2007-09-17 11:16:48 UTC (rev 1884)
+++ trunk/tagmanager/haxe.c	2007-09-17 15:28:27 UTC (rev 1885)
@@ -42,6 +42,7 @@
 	HXTAG_ENUM,
 	HXTAG_VARIABLE,
 	HXTAG_INTERFACE,
+	HXTAG_TYPEDEF,
 	HXTAG_COUNT
 } hxKind;
 
@@ -50,7 +51,8 @@
 	{ TRUE,  'c', "class",		  "classes"			   },
 	{ TRUE,  'e', "enums",		  "enumerations"			   },
 	{ TRUE,  'v', "variable",	  "variables"	   },
-	{ TRUE,  'i', "interface",	  "interfaces"	   }
+	{ TRUE,  'i', "interface",	  "interfaces"	   },
+	{ TRUE,  't', "typedef",	  "typedefs"	   },
 
 };
 
@@ -186,12 +188,25 @@
 	    vStringTerminate (name);
 	    makeSimpleTag (name, HxKinds, HXTAG_INTERFACE);
 	    vStringClear (name);
-	 }
+	} else if (strncmp ((const char *) cp,"typedef",(size_t) 7) == 0 && isspace(((int) cp[7]))) {
+	 	cp += 7;
 
+	    while (isspace ((int) *cp))
+			++cp;
+	    vStringClear (name);
+	    while (isalnum ((int) *cp)  ||  *cp == '_') {
+			vStringPut (name, (int) *cp);
+			++cp;
+	    }
+	    vStringTerminate (name);
+	    makeSimpleTag (name, HxKinds, HXTAG_TYPEDEF);
+	    vStringClear (name);
+	}
 
+
     }
 
-    vStringDelete (name);
+    vStringDelete(name);
     vStringDelete(clsName);
     vStringDelete(scope2);
     vStringDelete(laccess);
@@ -216,3 +231,4 @@
 }
 
 
+


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