summaryrefslogtreecommitdiff
path: root/Master/tlpkg/bin/tl-update-docindex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/bin/tl-update-docindex')
-rwxr-xr-xMaster/tlpkg/bin/tl-update-docindex167
1 files changed, 167 insertions, 0 deletions
diff --git a/Master/tlpkg/bin/tl-update-docindex b/Master/tlpkg/bin/tl-update-docindex
new file mode 100755
index 00000000000..4e7630686f4
--- /dev/null
+++ b/Master/tlpkg/bin/tl-update-docindex
@@ -0,0 +1,167 @@
+#!/usr/local/bin/perl
+# $Id: //depot/Master/Tools/mkdocindex#2 $
+# Make index file of all HTML and PDF documentation.
+# Originally written 2004, Karl Berry. Public domain.
+
+exit (&main ());
+
+sub main
+{
+ (my $progname = $0) =~ s,^.*/,,;
+ umask (0);
+
+ chomp (my $mydir = `dirname $0`); # Tools
+ chdir ("$mydir/../../Master") || exit 1; # Master
+
+ # shell fragment we use to find doc files in a directory.
+ $ENV{"_POSIX2_VERSION"} = 0; # POSIX likes to be backward-incompatible
+ $FIND_POST = " \\( -name \\*.html -o -name \\*.pdf \\) "
+ . " | tee /tmp/doclist"
+ . " | sort -f -t/ +2 |";
+
+ print <<END_HEADER;
+<html>
+<body>
+<h1>TeX Live documentation</h2>
+
+<a name="packagedoc"></a>
+<h2>1. Package documentation</h2>
+
+<p>This section lists links to all HTML and PDF files for packages (in
+the <a href="texmf/">texmf</a> and <a href="texmf-dist/">texmf-dist</a>
+directories), sorted by package name.
+
+<p><a href="#guidedoc">Jump to guide documentation</a>.
+END_HEADER
+
+ &do_package_list ();
+
+ print <<END_BETWEEN;
+<a name="guidedoc"></a>
+<h2>2. Guide documentation</h2>
+
+<p>This section lists links to all guides, that is, packages consisting
+only of documentation (in the <a href="texmf-doc/">texmf-doc</a>
+directory), sorted by language.
+
+<p><a href="#packagedoc">Jump to package documentation</a>.
+END_BETWEEN
+
+ &do_guide_list ();
+
+ chomp (my $date = `date`);
+ print <<END_TRAILER;
+<hr>
+<small>Generated $date by $progname.</small>
+</body></html>
+END_TRAILER
+
+ return 0;
+}
+
+
+
+# Package doc (texmf and texmf-dist), by package.
+#
+sub do_package_list
+{
+ &do_filelist ("find texmf/doc texmf-dist/doc $FIND_POST");
+}
+
+
+
+# Guide doc (texmf-doc), by language. In order to generate a list of
+# all the languages at the beginning, we generate everything before
+# writing anything.
+#
+sub do_guide_list
+{
+ # each subdir in texmf-doc is a language, except general.
+ my @langs = map { s,.*/,,; $_ } glob ("texmf-doc/doc/*");
+ my @langs = grep { $_ ne "general" } @langs;
+
+ print "\n<p>Languages:\n<ul>\n";
+ print map { qq!<li><a href="#$_">$_</a>\n! } @langs;
+ print "</ul>\n";
+
+ $count = 0; # for subsection numbers
+ for my $lang (@langs) {
+ $count++;
+ print qq!<a name="#$lang"></a>\n!;
+ print qq!<h3>2.$count <a href="texmf-doc/doc/$lang/">$lang</a></h3>\n!;
+
+ &do_filelist ("find texmf-doc/doc/$lang $FIND_POST");
+ }
+}
+
+
+
+# Process all files resulting from OPENCMD.
+#
+sub do_filelist
+{
+ my ($opencmd) = @_;
+
+ print "\n<ol>\n";
+ my $prevdir = "";
+ my @entries = ();
+
+ $FILELIST = $opencmd;
+ open (FILELIST) || die "open($FILELIST) failed: $!";
+ while (<FILELIST>) {
+ chomp;
+ # collect all files for a given directory
+ (my $thisdir = $_) =~ s,/[^/]*$,,;
+
+ if ($thisdir eq $prevdir) {
+ push (@entries, $_);
+ } else {
+ &do_directory ($prevdir, @entries) if $prevdir; # avoid first empty
+ $prevdir = $thisdir;
+ @entries = ($_);
+ }
+ }
+ close (FILELIST) || warn "close($FILELIST) failed: $!";
+
+ &do_directory ($prevdir, @entries); # include last
+
+ print "\n</ol>\n";
+}
+
+
+
+# Print doc ENTRIES in DIR.
+#
+sub do_directory
+{
+ my ($dir,@entries) = @_;
+
+ # $dir includes the texmf tree, e.g.,
+ # texmf-dist/doc/allrunes
+ # This is too ugly. We just want to show allrunes, especially since
+ # that's what we sorted by.
+ my (undef,undef,$nicename) = split (/\//, $dir, 3);
+
+ print qq!<li><b><a href="$dir">$nicename</a>!;
+
+ # if we have an index.html or a live.html, make things nicer.
+ if (grep { m,/(index|live)\.html$, } @entries) {
+ # first remove all .html's.
+ @entries = grep { $_ !~ /\.html$/
+ || $_ =~ m,/(index|live)\.html, } @entries;
+
+ # if only one entry left, remove it, the directory link suffices.
+ @entries = () if $entries[0] =~ m,/index\.html$, && @entries == 1;
+ }
+
+ # if we're going to print anything, insert punctuation.
+ print ":" if @entries;
+ print "</b><small>\n";
+
+ for my $e (@entries) {
+ (my $basename = $e) =~ s,.*/,,;
+ print qq! <a href="$e">$basename</a>\n!;
+ }
+
+ print " </small>\n\n";
+}