#!/usr/bin/perl # # helpztags generates tags for Vim helpfiles, for both .txt and .txt.gz files # Author: Jakub Turski # Artur R. Czechowski # 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... =head1 DESCRIPTION F scans given directories for F<*.txt> and F<*.txt.gz> files. Each file is scanned for tags used in F help files. For each directory proper F 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 sources for its C<:helptags command>. =head1 REPORTING BUGS Please use a Debian C command or procedure described at C. =head1 SEE ALSO Read C<:help helptags> in F for detailed information about helptags. =cut use File::Glob ':globally'; use POSIX qw(getcwd); ($#ARGV==-1)&& die "Error: no directories given. Check manpage for details.\n"; $startdir=getcwd(); foreach $dir (@ARGV) { chdir $dir || die "Error: $dir: no such directory\n"; print "Processing ".$dir."\n"; open(TAGSFILE,">tags") || die "Error: Cannot open $dir/tags for writing.\n"; foreach $file (<*.{gz,txt}>) { next unless $file =~ m/^[\w.-]+\.txt(?:.gz)?$/; do { open(GZ, "zcat $file|") if ($file =~ /\.gz$/) } or open(GZ,$file); while () { # From vim61/src/ex_cmds.c, lines 5034-5036 # # Only accept a *tag* when it consists of valid # characters, there is no '-' before it and is followed # by a white character or end-of-line. while (/(?