SF.net SVN: geany: [883] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Wed Oct 11 19:45:53 UTC 2006


Revision: 883
          http://svn.sourceforge.net/geany/?rev=883&view=rev
Author:   eht16
Date:     2006-10-11 12:45:40 -0700 (Wed, 11 Oct 2006)

Log Message:
-----------
Added simple parser for filetype Diff to create tags for each patched file in a diff file.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/filetypes.c
    trunk/src/treeviews.c
    trunk/tagmanager/Makefile.am
    trunk/tagmanager/makefile.win32
    trunk/tagmanager/parsers.h

Added Paths:
-----------
    trunk/tagmanager/diff.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2006-10-11 16:42:46 UTC (rev 882)
+++ trunk/ChangeLog	2006-10-11 19:45:40 UTC (rev 883)
@@ -2,8 +2,13 @@
 
  * src/keyfile.c, src/geany.h: Removed hard limit of session files.
  * doc/geany.docbook: Updated section about session files limit.
+ * tagmanager/makefile.win32, tagmanager/Makefile.am,
+   tagmanager/parsers.h, tagmanager/diff.c, src/filetypes.c,
+   src/treeviews.c: Added simple parser for filetype Diff to create
+                    tags for each patched file in a diff file.
 
 
+
 2006-10-10  Enrico Tröger  <enrico.troeger at uvena.de>
 
  * src/document.c: Connect only once to the "sci-notify" signal.

Modified: trunk/src/filetypes.c
===================================================================
--- trunk/src/filetypes.c	2006-10-11 16:42:46 UTC (rev 882)
+++ trunk/src/filetypes.c	2006-10-11 19:45:40 UTC (rev 883)
@@ -610,7 +610,7 @@
 	filetypes[GEANY_FILETYPES_DIFF]->item = NULL;
 	filetypes[GEANY_FILETYPES_DIFF]->lang = -2;
 	filetypes[GEANY_FILETYPES_DIFF]->name = g_strdup("Diff");
-	filetypes[GEANY_FILETYPES_DIFF]->has_tags = FALSE;
+	filetypes[GEANY_FILETYPES_DIFF]->has_tags = TRUE;
 	filetypes[GEANY_FILETYPES_DIFF]->title = g_strdup(_("Diff file"));
 	filetypes[GEANY_FILETYPES_DIFF]->extension = g_strdup("diff");
 	filetypes[GEANY_FILETYPES_DIFF]->pattern = g_new0(gchar*, 3);

Modified: trunk/src/treeviews.c
===================================================================
--- trunk/src/treeviews.c	2006-10-11 16:42:46 UTC (rev 882)
+++ trunk/src/treeviews.c	2006-10-11 19:45:40 UTC (rev 883)
@@ -70,6 +70,12 @@
 
 	switch (doc_list[idx].file_type->id)
 	{
+		case GEANY_FILETYPES_DIFF:
+		{
+			gtk_tree_store_append(doc_list[idx].tag_store, &(tv.tag_function), NULL);
+			gtk_tree_store_set(doc_list[idx].tag_store, &(tv.tag_function), 0, _("Files"), -1);
+			break;
+		}
 		case GEANY_FILETYPES_DOCBOOK:
 		{
 			gtk_tree_store_append(doc_list[idx].tag_store, &(tv.tag_function), NULL);

Modified: trunk/tagmanager/Makefile.am
===================================================================
--- trunk/tagmanager/Makefile.am	2006-10-11 16:42:46 UTC (rev 882)
+++ trunk/tagmanager/Makefile.am	2006-10-11 19:45:40 UTC (rev 883)
@@ -29,6 +29,7 @@
 	c.c\
 	conf.c\
 	css.c\
+	diff.c\
 	docbook.c\
 	fortran.c\
 	make.c\

Added: trunk/tagmanager/diff.c
===================================================================
--- trunk/tagmanager/diff.c	                        (rev 0)
+++ trunk/tagmanager/diff.c	2006-10-11 19:45:40 UTC (rev 883)
@@ -0,0 +1,96 @@
+/*
+*
+*   Copyright (c) 2000-2001, Darren Hiebert
+*
+*   This source code is released for free distribution under the terms of the
+*   GNU General Public License.
+*
+*   This module contains functions for generating tags for diff files (based on Sh parser).
+*/
+
+/*
+*   INCLUDE FILES
+*/
+#include "general.h"	/* must always come first */
+
+#include <ctype.h>
+#include <string.h>
+
+#include "parse.h"
+#include "read.h"
+#include "vstring.h"
+
+/*
+*   DATA DEFINITIONS
+*/
+typedef enum {
+    K_FUNCTION
+} diffKind;
+
+static kindOption DiffKinds [] = {
+    { TRUE, 'f', "function", "functions"}
+};
+
+/*
+*   FUNCTION DEFINITIONS
+*/
+
+static void findDiffTags (void)
+{
+    vString *filename = vStringNew ();
+    const unsigned char *line, *tmp;
+
+    while ((line = fileReadLine ()) != NULL)
+    {
+		const unsigned char* cp = line;
+		boolean skipSlash = TRUE;
+
+		if (strncmp((const char*) cp, "--- ", (size_t) 4) == 0)
+		{
+			cp += 4;
+			if (isspace ((int) *cp)) continue;
+
+			tmp = strrchr(cp, '/');
+			if (tmp == NULL)
+			{	// if no / is contained try \ in case of a Windows filename
+				tmp = strrchr(cp, '\\');
+				if (tmp == NULL)
+				{	// last fallback, probably the filename doesn't contain a path, so take it
+					if (strlen(cp) > 0)
+					{
+						tmp = cp;
+						skipSlash = FALSE;
+					}
+				}
+			}
+			if (tmp != NULL)
+			{
+				if (skipSlash) tmp++; // skip the leading slash or backslash
+				while (! isspace(*tmp) && *tmp != '\0')
+				{
+					vStringPut(filename, *tmp);
+					tmp++;
+				}
+				vStringTerminate(filename);
+				makeSimpleTag (filename, DiffKinds, K_FUNCTION);
+				vStringClear (filename);
+			}
+		}
+	}
+    vStringDelete (filename);
+}
+
+extern parserDefinition* DiffParser (void)
+{
+    static const char *const patterns [] = { "*.diff", "*.patch", NULL };
+    static const char *const extensions [] = { "diff", NULL };
+    parserDefinition* const def = parserNew ("Diff");
+    def->kinds      = DiffKinds;
+    def->kindCount  = KIND_COUNT (DiffKinds);
+    def->patterns   = patterns;
+    def->extensions = extensions;
+    def->parser     = findDiffTags;
+    return def;
+}
+
+/* vi:set tabstop=8 shiftwidth=4: */

Modified: trunk/tagmanager/makefile.win32
===================================================================
--- trunk/tagmanager/makefile.win32	2006-10-11 16:42:46 UTC (rev 882)
+++ trunk/tagmanager/makefile.win32	2006-10-11 19:45:40 UTC (rev 883)
@@ -32,7 +32,7 @@
 clean:
 	-$(RM) deps.mak *.o $(COMPLIB)
 
-$(COMPLIB): args.o c.o fortran.o make.o conf.o pascal.o perl.o php.o \
+$(COMPLIB): args.o c.o fortran.o make.o conf.o pascal.o perl.o php.o diff.o \
 python.o regex.o sh.o ctags.o entry.o get.o keyword.o options.o parse.o \
 read.o sort.o strlist.o latex.o docbook.o tcl.o ruby.o asm.o sql.o css.o vstring.o tm_workspace.o tm_work_object.o \
 tm_source_file.o tm_project.o tm_tag.o tm_symbol.o tm_file_entry.o \

Modified: trunk/tagmanager/parsers.h
===================================================================
--- trunk/tagmanager/parsers.h	2006-10-11 16:42:46 UTC (rev 882)
+++ trunk/tagmanager/parsers.h	2006-10-11 19:45:40 UTC (rev 883)
@@ -34,7 +34,8 @@
     ShParser, \
     DParser, \
     FortranParser, \
-    FeriteParser
+    FeriteParser, \
+    DiffParser
 
 /*
 langType of each parser
@@ -58,6 +59,7 @@
 17	DParser
 18	FortranParser
 19	FeriteParser
+20	DiffParser
 */
 #endif	/* _PARSERS_H */
 


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