summaryrefslogtreecommitdiffstats
path: root/debian/helpztags
diff options
context:
space:
mode:
Diffstat (limited to 'debian/helpztags')
-rwxr-xr-xdebian/helpztags92
1 files changed, 92 insertions, 0 deletions
diff --git a/debian/helpztags b/debian/helpztags
new file mode 100755
index 0000000..425d37e
--- /dev/null
+++ b/debian/helpztags
@@ -0,0 +1,92 @@
+#!/usr/bin/perl
+#
+# helpztags generates tags for Vim helpfiles, for both .txt and .txt.gz files
+# Author: Jakub Turski <yacoob@chruptak.plukwa.net>
+# Artur R. Czechowski <arturcz@hell.pl>
+# Version: 0.4
+
+# Please use following command for generate a manual file:
+# pod2man -c "User Commands" -s 1 -q none -r "vim 6.2" -d "September 2003" helpztags helpztags.1
+
+=head1 NAME
+
+helpztags - generate the help tags file for directory
+
+=head1 SYNOPSIS
+
+helpztags F<DIRS>...
+
+=head1 DESCRIPTION
+
+F<helpztags> scans given directories for F<*.txt> and F<*.txt.gz> files.
+Each file is scanned for tags used in F<vim> help files. For each directory
+proper F<tags> file is generated.
+
+There should be at least one directory given. In other case program exits
+with error.
+
+=head1 AUTHORS
+
+Written by Jakub Turski and Artur R. Czechowski based on idea
+contained in C<vim> sources for its C<:helptags command>.
+
+=head1 REPORTING BUGS
+
+Please use a Debian C<reportbug> command or procedure described at
+C<http://bugs.debian.org/>.
+
+=head1 SEE ALSO
+
+Read C<:help helptags> in F<vim> for detailed information about helptags.
+
+=cut
+
+use strict;
+use warnings;
+use File::Glob ':globally';
+use POSIX qw(getcwd);
+
+die "Error: no directories given. Check manpage for details.\n" unless @ARGV;
+
+my $startdir=getcwd();
+my %tags;
+
+foreach my $dir (@ARGV) {
+ chdir $dir or next;
+ print "Processing ".$dir."\n";
+ foreach my $file (<*.{gz,txt,??x}>) {
+ next unless $file =~ m/^[\w.-]+\.(?:txt|([[:alpha:]]{2})x)(?:.gz)?$/;
+ my $suffix = '';
+ if ($1) {
+ $suffix = "-$1";
+ }
+ my $open = ($file =~ /\.gz$/) ? open(GZ, '-|', 'zcat', $file) : open(GZ, $file);
+ if (!$open) {
+ chdir $startdir;
+ next;
+ }
+ while (<GZ>) {
+ # From vim73/src/ex_cmds.c, helptags_one, lines 6443-6445
+ #
+ # Only accept a *tag* when it consists of valid
+ # characters, there is white space before it and is
+ # followed by a white character or end-of-line.
+ while (/(?:(?<=^)|(?<=\s))\*([^*\s|]+?)\*(?:(?=\s)|(?=$))/g) {
+ $tags{"tags$suffix"}{$1}=$file;
+ }
+ }
+ close(GZ);
+ }
+ while (my ($tagfile, $tags) = each %tags) {
+ next unless %{$tags};
+ open(TAGSFILE, '>', $tagfile) || die "Error: Cannot open $dir/$tagfile for writing.\n";
+ foreach my $tag (sort keys %{$tags}) {
+ print TAGSFILE "$tag\t$tags->{$tag}\t/*";
+ $tag =~ s/\\/\\\\/g;
+ $tag =~ s@/@\/@g;
+ print TAGSFILE "$tag*\n";
+ }
+ close TAGSFILE;
+ }
+ chdir $startdir;
+}