SF.net SVN: geany: [889] trunk/tagmanager

ntrel at users.sourceforge.net ntrel at xxxxx
Thu Oct 12 16:25:59 UTC 2006


Revision: 889
          http://svn.sourceforge.net/geany/?rev=889&view=rev
Author:   ntrel
Date:     2006-10-12 09:25:53 -0700 (Thu, 12 Oct 2006)

Log Message:
-----------
Backported tm_get_current_function() from Anjuta

Modified Paths:
--------------
    trunk/tagmanager/include/tm_workspace.h
    trunk/tagmanager/tm_workspace.c

Modified: trunk/tagmanager/include/tm_workspace.h
===================================================================
--- trunk/tagmanager/include/tm_workspace.h	2006-10-12 16:25:11 UTC (rev 888)
+++ trunk/tagmanager/include/tm_workspace.h	2006-10-12 16:25:53 UTC (rev 889)
@@ -138,6 +138,12 @@
 const GPtrArray *tm_workspace_find(const char *name, int type, TMTagAttrType *attrs
  , gboolean partial, langType lang);
 
+/*! Returns TMTag to function which "own" given line
+ \param line Current line in edited file.
+ \param file_tags A GPtrArray of edited file TMTag pointers.
+ \return TMTag pointers to owner function. */
+const TMTag *tm_get_current_function(GPtrArray *file_tags, const gulong line);
+
 /*! Returns a list of parent classes for the given class name
  \param name Name of the class
  \return A GPtrArray of TMTag pointers (includes the TMTag for the class) */

Modified: trunk/tagmanager/tm_workspace.c
===================================================================
--- trunk/tagmanager/tm_workspace.c	2006-10-12 16:25:11 UTC (rev 888)
+++ trunk/tagmanager/tm_workspace.c	2006-10-12 16:25:53 UTC (rev 889)
@@ -526,6 +526,34 @@
 }
 
 
+const TMTag *
+tm_get_current_function (GPtrArray * file_tags, const gulong line)
+{
+	GPtrArray *const local = tm_tags_extract (file_tags, tm_tag_function_t);
+	if (local && local->len)
+	{
+		guint i;
+		TMTag *tag, *function_tag = NULL;
+		gulong function_line = 0;
+		glong delta;
+
+		for (i = 0; (i < local->len); ++i)
+		{
+			tag = TM_TAG (local->pdata[i]);
+			delta = line - tag->atts.entry.line;
+			if (delta >= 0 && (gulong)delta < line - function_line)
+			{
+				function_tag = tag;
+				function_line = tag->atts.entry.line;
+			}
+		}
+		g_ptr_array_free (local, TRUE);
+		return function_tag;
+	}
+	return NULL;
+};
+
+
 const GPtrArray *tm_workspace_get_parents(const gchar *name)
 {
 	static TMTagAttrType type[] = { tm_tag_attr_name_t, tm_tag_attr_none_t };


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