/usr/bin/helpztags is in vim-common 2:7.4.488-7+deb8u3.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | #!/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 || die "Error: $dir: no such directory\n";
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";
}
do { open(GZ, "zcat $file|") if ($file =~ /\.gz$/) } or open(GZ,$file);
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;
}
|