]> granicus.if.org Git - mutt/commitdiff
Add a little tool to help with building tags files my editor groks.
authorThomas Roessler <roessler@does-not-exist.org>
Wed, 17 May 2000 12:26:56 +0000 (12:26 +0000)
committerThomas Roessler <roessler@does-not-exist.org>
Wed, 17 May 2000 12:26:56 +0000 (12:26 +0000)
Makefile.am
mkjtags.c [new file with mode: 0644]

index 18662afbcba70e65b0e226272e720ace4ac9dc96..2be8e6044a91ce7d6a5bdc5a49439edf8f38e2ac 100644 (file)
@@ -194,3 +194,8 @@ stamp-doc-rc: $(srcdir)/init.h makedoc Muttrc.head
                $(srcdir)/init.h | ./makedoc -c | cat Muttrc.head - > Muttrc
        touch stamp-doc-rc
 
+
+jtags: TAGS mkjtags
+       ( ./mkjtags TAGS > tags.$$$$ && mv tags.$$$$ tags )
+
+.PHONY: jtags
diff --git a/mkjtags.c b/mkjtags.c
new file mode 100644 (file)
index 0000000..da74a44
--- /dev/null
+++ b/mkjtags.c
@@ -0,0 +1,73 @@
+/* 
+ * convert multi-file etags files to something
+ * which can be used by jed.
+ * 
+ * Thomas Roessler <roessler@guug.de>
+ * 
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+void doit (const char *fname, const char *prefix, int crlf_pending);
+
+  
+int main (int argc, char *argv[])
+{
+  if (argc < 2)
+  {
+    fprintf (stderr, "usage: %s filename\n", argv[0]);
+    exit (1);
+  }
+  
+  doit (argv[1], NULL, 0);
+  return 0;
+}
+
+void doit (const char *fname, const char *prefix, int crlf_pending)
+{
+  char buffer[2048];
+  char tmpf[2048];
+  FILE *fp;
+  char *cp;
+  
+  size_t l;
+  
+  if (!(fp = fopen (fname, "r")))
+  {
+    perror (fname);
+    exit (1);
+  }
+  
+  while (fgets (buffer, sizeof (buffer), fp))
+  {
+    l = strlen (buffer);
+    if (*buffer == '\f')
+    {
+      if (!crlf_pending) 
+       fputs (buffer, stdout);
+    }
+    else if (crlf_pending && l > 9 && !strcmp (buffer + l - 9, ",include\n"))
+    {
+      if ((cp = strrchr (buffer, ',')))
+       *cp = 0;
+      strcpy (tmpf, buffer);
+      
+      if ((cp = strrchr (buffer, '/')))
+       *cp = 0;
+       
+      doit (tmpf, buffer, crlf_pending);
+    }
+    else if (crlf_pending && prefix)
+      printf ("%s/%s", prefix, buffer);
+    else
+      fputs (buffer, stdout);
+
+    crlf_pending = (*buffer == '\f');
+  }
+  
+  fclose (fp);
+}
+
+