SF.net SVN: geany: [1412] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Wed Mar 21 16:27:25 UTC 2007


Revision: 1412
          http://svn.sourceforge.net/geany/?rev=1412&view=rev
Author:   ntrel
Date:     2007-03-21 09:27:25 -0700 (Wed, 21 Mar 2007)

Log Message:
-----------
Separate alternative PHP/LaTeX global tags parser into
tm_tag_init_from_file_alt() (for easier diff with Anjuta).

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/tagmanager/include/tm_tag.h
    trunk/tagmanager/tm_tag.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-03-21 13:26:16 UTC (rev 1411)
+++ trunk/ChangeLog	2007-03-21 16:27:25 UTC (rev 1412)
@@ -5,9 +5,12 @@
  * src/main.c, src/symbols.c, src/symbols.h, tagmanager/tm_workspace.c:
    Add option --generate-tags (-g) to generate a global tags file from
    a list of source files. Currently this is only likely to work
-   correctly for C-like source files. Run 'geany -g' for syntax info.
+   correctly for C source files. Run 'geany -g' for syntax info.
    Remove short option for hidden option --generate-data-files.
    Update tm_workspace_create_global_tags() from Anjuta 1.2.4a.
+ * tagmanager/tm_tag.c, tagmanager/include/tm_tag.h
+   Separate alternative PHP/LaTeX global tags parser into
+   tm_tag_init_from_file_alt() (for easier diff with Anjuta).
 
 
 2007-03-20  Enrico Tröger  <enrico.troeger at uvena.de>

Modified: trunk/tagmanager/include/tm_tag.h
===================================================================
--- trunk/tagmanager/include/tm_tag.h	2007-03-21 13:26:16 UTC (rev 1411)
+++ trunk/tagmanager/include/tm_tag.h	2007-03-21 16:27:25 UTC (rev 1412)
@@ -176,13 +176,17 @@
  \param tag The TMTag structure to populate
  \param file The TMSourceFile struct (assigned to the file member)
  \param fp FILE pointer from where the tag line is read
- \param mode langType - if set to greater than 0, the alternative parser is used and mode represents
-             the langType to use for the tags
  \return TRUE on success, FALSE on FAILURE
 */
-gboolean tm_tag_init_from_file(TMTag *tag, TMSourceFile *file, FILE *fp, gint mode);
+gboolean tm_tag_init_from_file(TMTag *tag, TMSourceFile *file, FILE *fp);
 
 /*!
+ Same as tm_tag_init_from_file(), but using an alternative parser for PHP and
+ LaTeX global tags files.
+*/
+gboolean tm_tag_init_from_file_alt(TMTag *tag, TMSourceFile *file, FILE *fp);
+
+/*!
  Creates a new tag structure from a tagEntryInfo pointer and a TMSOurceFile pointer
  and returns a pointer to it.
  \param file - Pointer to the TMSourceFile structure containing the tag
@@ -192,7 +196,8 @@
 TMTag *tm_tag_new(TMSourceFile *file, const tagEntryInfo *tag_entry);
 
 /*!
- Same as tm_tag_new() except that the tag attributes are read from file
+ Same as tm_tag_new() except that the tag attributes are read from file.
+ \param mode langType to use for the tag.
 */
 TMTag *tm_tag_new_from_file(TMSourceFile *file, FILE *fp, gint mode);
 

Modified: trunk/tagmanager/tm_tag.c
===================================================================
--- trunk/tagmanager/tm_tag.c	2007-03-21 13:26:16 UTC (rev 1411)
+++ trunk/tagmanager/tm_tag.c	2007-03-21 16:27:25 UTC (rev 1412)
@@ -202,7 +202,7 @@
 	return tag;
 }
 
-gboolean tm_tag_init_from_file(TMTag *tag, TMSourceFile *file, FILE *fp, gint mode)
+gboolean tm_tag_init_from_file(TMTag *tag, TMSourceFile *file, FILE *fp)
 {
 	guchar buf[BUFSIZ];
 	guchar *start, *end;
@@ -211,99 +211,110 @@
 
 	if ((NULL == fgets((gchar*)buf, BUFSIZ, fp)) || ('\0' == *buf))
 		return FALSE;
-	if (mode == 0 || mode == 1)
+	for (start = end = buf, status = TRUE; (TRUE == status); start = end, ++ end)
 	{
-		for (start = end = buf, status = TRUE; (TRUE == status); start = end, ++ end)
+		while ((*end < TA_NAME) && (*end != '\0') && (*end != '\n'))
+			++ end;
+		if (('\0' == *end) || ('\n' == *end))
+			status = FALSE;
+		changed_char = *end;
+		*end = '\0';
+		if (NULL == tag->name)
 		{
-			while ((*end < TA_NAME) && (*end != '\0') && (*end != '\n'))
-				++ end;
-			if (('\0' == *end) || ('\n' == *end))
-				status = FALSE;
-			changed_char = *end;
-			*end = '\0';
-			if (NULL == tag->name)
-			{
-				if (!isprint(*start))
-					return FALSE;
-				else
-					tag->name = g_strdup((gchar*)start);
-			}
+			if (!isprint(*start))
+				return FALSE;
 			else
+				tag->name = g_strdup((gchar*)start);
+		}
+		else
+		{
+			switch (*start)
 			{
-				switch (*start)
-				{
-					case TA_LINE:
-						tag->atts.entry.line = atol((gchar*)start + 1);
-						break;
-					case TA_LOCAL:
-						tag->atts.entry.local = atoi((gchar*)start + 1);
-						break;
-					case TA_TYPE:
-						tag->type = (TMTagType) atoi((gchar*)start + 1);
-						break;
-					case TA_ARGLIST:
-						tag->atts.entry.arglist = g_strdup((gchar*)start + 1);
-						break;
-					case TA_SCOPE:
-						tag->atts.entry.scope = g_strdup((gchar*)start + 1);
-						break;
-					case TA_POINTER:
-						tag->atts.entry.pointerOrder = atoi((gchar*)start + 1);
-						break;
-					case TA_VARTYPE:
-						tag->atts.entry.var_type = g_strdup((gchar*)start + 1);
-						break;
-					case TA_INHERITS:
-						tag->atts.entry.inheritance = g_strdup((gchar*)start + 1);
-						break;
-					case TA_TIME:
-						if (tm_tag_file_t != tag->type)
-						{
-							g_warning("Got time attribute for non-file tag %s", tag->name);
-							return FALSE;
-						}
-						else
-							tag->atts.file.timestamp = atol((gchar*)start + 1);
-						break;
-					case TA_LANG:
-						if (tm_tag_file_t != tag->type)
-						{
-							g_warning("Got lang attribute for non-file tag %s", tag->name);
-							return FALSE;
-						}
-						else
-							tag->atts.file.lang = atoi((gchar*)start + 1);
-						break;
-					case TA_INACTIVE:
-						if (tm_tag_file_t != tag->type)
-						{
-							g_warning("Got inactive attribute for non-file tag %s", tag->name);
-							return FALSE;
-						}
-						else
-							tag->atts.file.inactive = (gboolean) atoi((gchar*)start + 1);
-						break;
-					case TA_ACCESS:
-						tag->atts.entry.access = *(start + 1);
-						break;
-					case TA_IMPL:
-						tag->atts.entry.impl = *(start + 1);
-						break;
-					default:
-	#ifdef TM_DEBUG
-						g_warning("Unknown attribute %s", start + 1);
-	#endif
-						break;
-				}
-				tag->atts.file.lang = mode;
+				case TA_LINE:
+					tag->atts.entry.line = atol((gchar*)start + 1);
+					break;
+				case TA_LOCAL:
+					tag->atts.entry.local = atoi((gchar*)start + 1);
+					break;
+				case TA_TYPE:
+					tag->type = (TMTagType) atoi((gchar*)start + 1);
+					break;
+				case TA_ARGLIST:
+					tag->atts.entry.arglist = g_strdup((gchar*)start + 1);
+					break;
+				case TA_SCOPE:
+					tag->atts.entry.scope = g_strdup((gchar*)start + 1);
+					break;
+				case TA_POINTER:
+					tag->atts.entry.pointerOrder = atoi((gchar*)start + 1);
+					break;
+				case TA_VARTYPE:
+					tag->atts.entry.var_type = g_strdup((gchar*)start + 1);
+					break;
+				case TA_INHERITS:
+					tag->atts.entry.inheritance = g_strdup((gchar*)start + 1);
+					break;
+				case TA_TIME:
+					if (tm_tag_file_t != tag->type)
+					{
+						g_warning("Got time attribute for non-file tag %s", tag->name);
+						return FALSE;
+					}
+					else
+						tag->atts.file.timestamp = atol((gchar*)start + 1);
+					break;
+				case TA_LANG:
+					if (tm_tag_file_t != tag->type)
+					{
+						g_warning("Got lang attribute for non-file tag %s", tag->name);
+						return FALSE;
+					}
+					else
+						tag->atts.file.lang = atoi((gchar*)start + 1);
+					break;
+				case TA_INACTIVE:
+					if (tm_tag_file_t != tag->type)
+					{
+						g_warning("Got inactive attribute for non-file tag %s", tag->name);
+						return FALSE;
+					}
+					else
+						tag->atts.file.inactive = (gboolean) atoi((gchar*)start + 1);
+					break;
+				case TA_ACCESS:
+					tag->atts.entry.access = *(start + 1);
+					break;
+				case TA_IMPL:
+					tag->atts.entry.impl = *(start + 1);
+					break;
+				default:
+#ifdef TM_DEBUG
+					g_warning("Unknown attribute %s", start + 1);
+#endif
+					break;
 			}
-			*end = changed_char;
 		}
+		*end = changed_char;
 	}
-	else
+	if (NULL == tag->name)
+		return FALSE;
+	if (tm_tag_file_t != tag->type)
+		tag->atts.entry.file = file;
+	return TRUE;
+}
+
+// alternative parser for PHP and LaTeX global tags files with the following format
+// tagname|return value|arglist|description\n
+gboolean tm_tag_init_from_file_alt(TMTag *tag, TMSourceFile *file, FILE *fp)
+{
+	guchar buf[BUFSIZ];
+	guchar *start, *end;
+	gboolean status;
+	//guchar changed_char = TA_NAME;
+
+	if ((NULL == fgets((gchar*)buf, BUFSIZ, fp)) || ('\0' == *buf))
+		return FALSE;
 	{
-		// alternative parser for PHP and LaTeX global tags files with the following format
-		// tagname|return value|arglist|description\n
 		gchar **fields;
 		guint field_len;
 		for (start = end = buf, status = TRUE; (TRUE == status); start = end, ++ end)
@@ -324,7 +335,6 @@
 			else tag->name = NULL;
 			if (field_len >= 2 && fields[1] != NULL) tag->atts.entry.var_type = g_strdup(fields[1]);
 			if (field_len >= 3 && fields[2] != NULL) tag->atts.entry.arglist = g_strdup(fields[2]);
-			tag->atts.file.lang = mode;
 			tag->type = tm_tag_prototype_t;
 			g_strfreev(fields);
 		}
@@ -340,13 +350,21 @@
 TMTag *tm_tag_new_from_file(TMSourceFile *file, FILE *fp, gint mode)
 {
 	TMTag *tag;
+	gboolean result;
 
 	TAG_NEW(tag);
-	if (FALSE == tm_tag_init_from_file(tag, file, fp, mode))
+
+	if (mode == 0 || mode == 1)
+		result = tm_tag_init_from_file(tag, file, fp);
+	else
+		result = tm_tag_init_from_file_alt(tag, file, fp);
+
+	if (! result)
 	{
 		TAG_FREE(tag);
 		return NULL;
 	}
+	tag->atts.file.lang = mode;
 	return tag;
 }
 


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