#!/usr/bin/env perl # $Id$ # Make index file of all HTML and PDF documentation (printed on stdout). # Originally written 2009, Manuel P\'egouri\'e-Gonnard. WTFPL v2. BEGIN { $0 =~ m#(.*)/(.*)#; ($progdir, $progname) = ($1, $2); unshift @INC, "$progdir/.."; } use warnings FATAL => 'all'; use Fatal qw(:void open close opendir closedir chdir mkdir); use TeXLive::TLPDB; use File::Basename; exit(main()); sub main { my $tlpdb = TeXLive::TLPDB->new('root' => "$progdir/../.."); die "$progname: unable to load TLPDB\n" unless defined $tlpdb; print < TeX Live documentation

TeX Live documentation

This document lists links to all HTML and PDF files for packages and guides contained in TeX Live, sorted by package name.

END_HEADER print_all_pkg($tlpdb); # print footer chomp (my $date = `LC_ALL=C date`); print < Generated $date by $progname. END_TRAILER return 0; } # print the links for letters, then packages sub print_all_pkg { my ($tlpdb) = @_; # @lines is the big list, @letters the list of initials of package names local (@lines, @letters, $current_letter, $n); $current_letter = "\0"; # first build the output and the list of initials for my $tlpn (sort {lc $a cmp lc $b} $tlpdb->list_packages) { my $tlpkg = $tlpdb->get_package($tlpn); push_pkg_list($tlpkg); } push @lines, "\n\n\n"; # then actually print them my $access = "\n

" . join(" - ", @letters) . "

\n"; print $access; print @lines; print $access; } # push the content for a package to the list of lines sub push_pkg_list { my ($tlpkg) = @_; my $name = $tlpkg->name; my @docfiles = $tlpkg->docfiles; # if no adequate documentation is found, print nothing @docfiles = grep { m/\.(html|pdf)/ } @docfiles; return if @docfiles == 0; $n++; # list counter # check initial my $init = uc substr $name, 0, 1; unless ($init eq $current_letter) { $current_letter = $init; # put header in the big list... push @lines, "\n\n" unless $n == 1; push @lines, qq#\n

$init

\n#; push @lines, qq#\n
    \n#; # ... and a reference in quick access list push @letters, qq!$init!; } # if there is an index.html file, drop the rest # currently (2009-10-07) catches: FAQ-en bosisio epspdf fontname jadetex # metapost ppower4 sttools tds tex4ht my @index = grep /\/index\.html/, @docfiles; if (@index == 1) { #warn "Using index.html for $name\n"; @docfiles = @index; } # print package name with shortdesc my $dir = dirname($docfiles[0]); push @lines, qq#\n
  1. $name\n#; push @lines, qq#(CTAN):\n#; my $shortdesc = $tlpkg->shortdesc; push @lines, "$shortdesc\n" if defined $shortdesc; #warn "$name\n" if not defined $shortdesc; # now the list of docfiles my $list; for my $file (@docfiles) { my $name = basename($file); $list .= qq#$name#; my $dflanguage = $tlpkg->{'docfiledata'}{$file}{'language'}; $list .= " ($dflanguage) " if (defined $dflanguage && $dflanguage ne "en"); $list .= "\n"; } $list =~ s/( )?\n$/./; push @lines, "$list\n
  2. \n"; }