aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2020-12-09 12:30:52 +0200
committerSergey Poznyakoff <gray@gnu.org>2020-12-09 12:30:52 +0200
commit9d7397382a66464d281611aa35da765b1a28ca81 (patch)
tree459687a313f0f84ad66514beed37b2a94a5590e1
parent0a676ac900bd7f03a9a056d2b8be64b154f8647a (diff)
downloadpies-9d7397382a66464d281611aa35da765b1a28ca81.tar.gz
pies-9d7397382a66464d281611aa35da765b1a28ca81.tar.bz2
Rework generation of the web docs
-rw-r--r--doc/.gitignore1
-rw-r--r--doc/Makefile.am13
-rw-r--r--doc/gendocs.pl480
-rwxr-xr-xdoc/gendocs.sh490
-rw-r--r--doc/html.init164
-rw-r--r--doc/otherdoc.texi.in9
-rw-r--r--doc/pies.texi13
-rw-r--r--doc/webdoc.init8
8 files changed, 516 insertions, 662 deletions
diff --git a/doc/.gitignore b/doc/.gitignore
index 94d867b..70f58bc 100644
--- a/doc/.gitignore
+++ b/doc/.gitignore
@@ -3,6 +3,7 @@ Makefile.in
pies.info*
stamp-vti
version.texi
+otherdoc.texi
pies.aux
pies.cp
pies.cps
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 5283a88..a3b0563 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -75,8 +75,8 @@ master-menu: imprimatur-master-menu
untabify: imprimatur-untabify
final: imprimatur-final
-GENDOCS=$(srcdir)/gendocs.sh --no-copy-images --html --init-file='$(abs_srcdir)/html.init'
-EXTRA_DIST += gendocs.sh
+GENDOCS = perl gendocs.pl
+EXTRA_DIST += gendocs.pl
TEXI2DVI=texi2dvi -t '@set $(RENDITION)' -I $(top_srcdir)/imprimatur
@@ -88,9 +88,6 @@ manual:
TEXINPUTS=$(srcdir):$(top_srcdir)/build-aux:$(TEXINPUTS) \
MAKEINFO="$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS)" \
TEXI2DVI="$(TEXI2DVI) -t @finalout" \
- $(GENDOCS) $(PACKAGE) '$(PACKAGE_NAME) manual'
-
-manual.tar.bz2: manual
- tar cfj manual.tar.bz2 manual
-
-man-tar: manual.tar.bz2
+ $(GENDOCS) -C manual -o otherdoc.texi $(PACKAGE) otherdoc.texi.in
+ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -DWEBDOC \
+ --html --init-file=webdoc.init $(info_TEXINFOS) -o manual
diff --git a/doc/gendocs.pl b/doc/gendocs.pl
new file mode 100644
index 0000000..8c9c197
--- /dev/null
+++ b/doc/gendocs.pl
@@ -0,0 +1,480 @@
+# This file is part of GNU Pies.
+# Copyright (C) 2020 Sergey Poznyakoff
+#
+# GNU Pies is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Pies is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Pies. If not, see <http://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+use Getopt::Long qw(:config gnu_getopt no_ignore_case);
+use File::Basename;
+use File::Spec;
+use File::Path qw(make_path);
+use Pod::Usage;
+
+my $dirname = '.';
+my $pkgname;
+my $srcname;
+my $output_name;
+my @includes;
+
+GetOptions("h" => sub {
+ pod2usage(-message => "$0: generate docs",
+ -exitstatus => 0);
+ },
+ "help" => sub {
+ pod2usage(-exitstatus => 0, -verbose => 2);
+ },
+ "usage" => sub {
+ pod2usage(-exitstatus => 0, -verbose => 0);
+ },
+ 'source|s=s' => \$srcname,
+ 'directory|C=s' => \$dirname,
+ 'output|o=s' => \$output_name,
+ 'include|I=s@' => \@includes
+ ) or exit(1);
+
+$pkgname = shift @ARGV or pod2usage(-exitstatus => 1, -verbose => 0);
+$srcname //= "${pkgname}.texi";
+my $template_name = shift @ARGV or pod2usage(-exitstatus => 1, -verbose => 0);
+
+unless (-d $dirname) {
+ make_path($dirname);
+}
+
+unless ($output_name) {
+ $output_name = File::Spec->catfile($dirname, (fileparse($template_name, qr/\.[^.]*/))[0]);
+}
+
+if (@includes) {
+ @includes = map { '-I '.$_} @includes;
+ # FIXME: Not used yet
+}
+
+sub template_scan {
+ my $file = shift;
+ open(FH, '<', $file) or die "can't open $file: $!\n";
+ my $line = 0;
+ while (<FH>) {
+ chomp;
+ ++$line;
+ s{ \$ ((?:BASE)?FILE|SIZE) \( ([a-z_]+) \) }{
+ eval { Gendocs->instance($2, $pkgname, $srcname) };
+ if ($@) {
+ if ($@ =~ m{Can't locate object method "new"}) {
+ die "$file:$line: unknown format: $2\n";
+ } else {
+ die $@;
+ }
+ }
+ }gex;
+ }
+ close FH
+}
+
+sub template_expand {
+ my ($infile, $outfile) = @_;
+ open(IFH, '<', $infile) or die "can't open $infile: $!\n";
+ open(OFH, '>', $outfile) or die "can't open $outfile: $!\n";
+ while (<IFH>) {
+ chomp;
+ s{ \$ ((?:BASE)?FILE|SIZE) \( ([a-z_]+) \) }{
+ if ($1 eq 'FILE') {
+ Gendocs->instance($2)->output;
+ } elsif ($1 eq 'BASEFILE') {
+ basename(Gendocs->instance($2)->output);
+ } else {
+ Gendocs->instance($2)->size;
+ }
+ }gex;
+ print OFH "$_\n";
+ }
+}
+
+template_scan $template_name;
+Gendocs->generate();
+template_expand($template_name, $output_name);
+Gendocs->sweep();
+
+package Gendocs;
+use strict;
+use warnings;
+
+my %registry;
+
+sub generate {
+ my ($class) = @_;
+ my @keys = keys %registry;
+ foreach my $k (@keys) {
+ $registry{$k}->build();
+ $registry{$k}->mark();
+ }
+}
+
+sub sweep {
+ my ($class) = @_;
+ my @keys = keys %registry;
+ foreach my $k (@keys) {
+ unless ($registry{$k}->has_mark) {
+ $registry{$k}->remove;
+ delete $registry{$k};
+ }
+ }
+}
+
+sub new {
+ my ($class, $pkgname, $name) = @_;
+ unless (exists($registry{$class})){
+ $registry{$class} = bless { pkgname => $pkgname, input => $name }, $class;
+ }
+ return $registry{$class}
+}
+sub instance {
+ my ($class, $fmt, @args) = @_;
+ my $subclass = "Gendocs::".ucfirst($fmt);
+ unless (exists($registry{$subclass})) {
+ $registry{$subclass} = $subclass->new(@args);
+ }
+ return $registry{$subclass};
+}
+
+sub runcom {
+ my $self = shift;
+ system @_;
+ if ($? == -1) {
+ die "failed to execute $_[0]: $!";
+ } elsif ($? & 127) {
+ die sprintf("$_[0] died with signal %d\n", $? & 127);
+ } elsif ($? >> 8) {
+ warn sprintf("$_[0] exited with value %d\n", $? >> 8);
+ }
+}
+
+sub mark { shift->{mark} = 1 }
+sub has_mark { shift->{mark} }
+sub remove {
+ my ($self) = @_;
+ if ($self->{output}) {
+ unlink $self->{output};
+ delete $self->{output};
+ }
+}
+sub size {
+ my ($self) = @_;
+ my $s = (stat($self->output))[7];
+ if ($s > 1048576) {
+ $s = int($s / 1048576) . 'M';
+ } elsif ($s > 1024) {
+ $s = int($s / 1024) . 'K';
+ }
+ return $s;
+}
+
+sub pkgname { shift->{pkgname} }
+sub input { shift->{input} }
+sub output { shift->{output} }
+
+package Gendocs::Makeinfo;
+use strict;
+use warnings;
+use base 'Gendocs';
+
+sub new {
+ my $class = shift;
+ my $self = $class->SUPER::new(@_);
+ $self->{makeinfo} = $ENV{'MAKEINFO'} || 'makeinfo';
+ return $self;
+}
+
+package Gendocs::Info;
+use strict;
+use warnings;
+use base 'Gendocs::Makeinfo';
+
+sub build {
+ my ($self) = @_;
+ unless ($self->{output}) {
+ my $output = File::Spec->catfile($dirname, $self->pkgname . '.info');
+ print "Generating info file: " . $self->input . " -> $output\n";
+ $self->runcom("$self->{makeinfo} -o $output " . $self->input);
+ $self->{output} = $output;
+ }
+ return $self->{output};
+}
+
+package Gendocs::Info_gz;
+use strict;
+use warnings;
+use base 'Gendocs';
+
+sub build {
+ my ($self) = @_;
+ unless ($self->{output}) {
+ my $input = Gendocs->instance('info', $self->pkgname, $self->input)->build();
+ my $output = "$input.gz";
+ print "Compressing info file: $input -> $output\n";
+ $self->runcom("gzip -f -9 -c $input > $output");
+ $self->{output} = $output;
+ }
+ return $self->{output};
+}
+
+package Gendocs::Ascii;
+use strict;
+use warnings;
+use base 'Gendocs::Makeinfo';
+
+sub build {
+ my ($self) = @_;
+ unless ($self->{output}) {
+ my $output = File::Spec->catfile($dirname, $self->pkgname . '.txt');
+ print "Generating ascii file: " . $self->input . " -> $output\n";
+ $self->runcom("$self->{makeinfo} -o $output --no-split --no-headers " . $self->input);
+ $self->{output} = $output;
+ }
+ return $self->{output};
+}
+
+package Gendocs::Ascii_gz;
+use strict;
+use warnings;
+use base 'Gendocs';
+
+sub build {
+ my ($self) = @_;
+ unless ($self->{output}) {
+ my $input = Gendocs->instance('ascii', $self->pkgname, $self->input)->build();
+ my $output = "$input.gz";
+ print "Compressing ascii file: $input -> $output\n";
+ $self->runcom("gzip -f -9 -c $input > $output");
+ $self->{output} = $output;
+ }
+ return $self->{output};
+}
+
+package Gendocs::Texinfo_gz;
+use strict;
+use warnings;
+use base 'Gendocs';
+
+sub build {
+ my ($self) = @_;
+ unless ($self->{output}) {
+ my $output = File::Spec->catfile($dirname, $self->pkgname . '.tar.gz');
+ print "Creating compressed sources: $output\n";
+ $self->runcom("tar czfh $output *.texinfo *.texi *.txi *.eps 2>/dev/null || /bin/true");
+ $self->{output} = $output;
+ }
+ return $self->{output};
+}
+
+package Gendocs::Dvi;
+use strict;
+use warnings;
+use base 'Gendocs';
+
+sub new {
+ my $class = shift;
+ my $self = $class->SUPER::new(@_);
+ $self->{texi2dvi} = $ENV{'TEXI2DVI'} || 'texi2dvi --build=tidy -t @finalout';
+ return $self;
+}
+
+sub build {
+ my ($self) = @_;
+ unless ($self->{output}) {
+ my $output = File::Spec->catfile($dirname, $self->pkgname . '.dvi');
+ my $cmd = "$self->{texi2dvi} -o $output $self->{input}";
+ print "Creating dvi: $cmd\n";
+ $self->runcom($cmd);
+ $self->{output} = $output;
+ }
+ return $self->{output};
+}
+
+package Gendocs::Dvi_gz;
+use strict;
+use warnings;
+use base 'Gendocs';
+
+sub build {
+ my ($self) = @_;
+ unless ($self->{output}) {
+ my $input = Gendocs->instance('dvi', $self->pkgname, $self->input)->build();
+ my $output = "$input.gz";
+ print "Compressing dvi file: $input -> $output\n";
+ $self->runcom("gzip -f -9 -c $input > $output");
+ $self->{output} = $output;
+ }
+ return $self->{output};
+}
+
+package Gendocs::Pdf;
+use strict;
+use warnings;
+use base 'Gendocs::Dvi';
+
+sub build {
+ my ($self) = @_;
+ unless ($self->{output}) {
+ my $output = File::Spec->catfile($dirname, $self->pkgname . '.pdf');
+ my $cmd = "$self->{texi2dvi} -o $output --pdf $self->{input}";
+ print "Creating pdf: $cmd\n";
+ $self->runcom($cmd);
+ $self->{output} = $output;
+ }
+ return $self->{output};
+}
+__END__
+=head1 NAME
+
+gendocs.pl - generate documentation in various formats
+
+=head1 SYNOPSIS
+
+B<gendocs.pl>
+[B<-C> I<DIR>]
+[B<-s> I<SOURCE>]
+[B<-o> I<OUTPUT-FILE>]
+[B<-I> I<INCLUDE-DIR>]
+[B<--directory=>I<DIR>]
+[B<--include=>I<INCLUDE-DIR>]
+[B<--output=>I<OUTPUT-FILE>]
+[B<--source=>I<SOURCE>]
+I<PACKAGE> I<TEMPLATE>
+
+B<gendocs.pl> B<-h> | B<--help> | B<--usage>
+
+=head1 DESCRIPTION
+
+Generates documentation for the I<PACKAGE> in various formats. I<TEMPLATE>
+is a template file for the index page. When processing I<TEMPLATE> the
+following I<macros> inform B<gendocs.pl> about the desired documentation
+formats and are expanded on output:
+
+=over 4
+
+=item B<$FILE(I<FORMAT>)>
+
+Full pathname of the documentation file in format I<FORMAT>.
+
+=item B<$BASEFILE(I<FORMAT>)>
+
+Base name of the documentation file for format I<FORMAT>.
+
+=item B<$SIZE(I<FORMAT>)>
+
+Size of the documentation file in format I<FORMAT>. Proper size suffix
+(B<K> or B<M>) is appended, as needed.
+
+=back
+
+The file is processed twice. On the first pass, the program collects the
+mentioned I<FORMAT>s. Then the requested files are generated. On the
+second pass, the macros are replaced with the actual values and the output
+index file is generated. The name of the index file can be supplied using
+the B<-o> (B<--output>) option. If it is not given, the name is obtained
+by removing last suffix (a substring beginning with a dot and containing
+one or more characters, excepting dots) from the I<TEMPLATE> argument.
+
+Unless the B<-C> (B<--directory>) option is given, the output will be
+generated in the current working directory. If the B<-C> option is
+given, all output files, including index file, will be generated in
+the supplied directory.
+
+The following output formats are supported:
+
+=over 4
+
+=item B<info>
+
+Monolithic info file.
+
+=item B<info_gz>
+
+Monolithic info file, compressed with B<gzip>
+
+=item B<ascii>
+
+Monolithic ASCII file.
+
+=item B<ascii_gz>
+
+Monolithic ASCII file, compressed with B<gzip>
+
+=item B<texinfo_gz>
+
+A tar archive with the Texinfo documentation sources, compressed with B<gzip>.
+
+=item B<dvi>
+
+TeX B<dvi> file.
+
+=item B<dvi_gz>
+
+TeX B<dvi> file, compressed with B<gzip>
+
+=item B<pdf>
+
+A B<PDF> file.
+
+=back
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-C>, B<--directory=>I<DIR>
+
+Create all output files in the directory I<DIR>.
+
+=item B<-s>, B<--source=>I<SOURCE>
+
+Name of the main Texinfo source file. By default F<I<PACKAGE>.texi> is
+used.
+
+=item B<-o>, B<--output=>I<OUTPUT-FILE>
+
+Name of the output index file. By default it is constructed by removing
+the last filename suffix from I<TEMPLATE>. E.g. F<index.texi.in> produces
+F<index.texi>.
+
+=item B<-I>, B<--include=>I<INCLUDE-DIR>
+
+Name of the directory with Texinfo include files. This option is not
+actually used. It is reserved for future use.
+
+=back
+
+=head1 ENVIRONMENT
+
+The following environment variables affect the behavior of B<gendocs.pl>:
+
+=over 4
+
+=item B<MAKEINFO>
+
+Name and initial options of the B<makeinfo> program.
+
+=item B<TEXI2DVI>
+
+Name and initial options of the B<texi2dvi> program. The default is
+F<texi2dvi --build=tidy -t @finalout>.
+
+=item B<TEXINPUTS>
+
+Used by F<texi2dvi>. Colon-separated list of Texinfo input directories.
+
+=back
+
+=cut
diff --git a/doc/gendocs.sh b/doc/gendocs.sh
deleted file mode 100755
index 8ac3a06..0000000
--- a/doc/gendocs.sh
+++ /dev/null
@@ -1,490 +0,0 @@
-#!/bin/sh -e
-# gendocs.sh -- generate a GNU manual in many formats. This script is
-# mentioned in maintain.texi. See the help message below for usage details.
-
-scriptversion=2015-02-28.17
-
-# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
-# Free Software Foundation, Inc.
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Original author: Mohit Agarwal.
-# Send bug reports and any other correspondence to bug-texinfo@gnu.org.
-#
-# The latest version of this script, and the companion template, is
-# available from Texinfo CVS:
-# http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs.sh
-# http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs_template
-#
-# An up-to-date copy is also maintained in Gnulib (gnu.org/software/gnulib).
-
-# TODO:
-# - image importation was only implemented for HTML generated by
-# makeinfo. But it should be simple enough to adjust.
-# - images are not imported in the source tarball. All the needed
-# formats (PDF, PNG, etc.) should be included.
-
-prog=`basename "$0"`
-srcdir=`pwd`
-
-scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh"
-templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template"
-
-: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
-: ${MAKEINFO="makeinfo"}
-: ${TEXI2DVI="texi2dvi -t @finalout"}
-: ${DOCBOOK2HTML="docbook2html"}
-: ${DOCBOOK2PDF="docbook2pdf"}
-: ${DOCBOOK2TXT="docbook2txt"}
-: ${GENDOCS_TEMPLATE_DIR="."}
-: ${PERL='perl'}
-: ${TEXI2HTML="texi2html"}
-unset CDPATH
-unset use_texi2html
-
-version="gendocs.sh $scriptversion
-
-Copyright 2013 Free Software Foundation, Inc.
-There is NO warranty. You may redistribute this software
-under the terms of the GNU General Public License.
-For more information about these matters, see the files named COPYING."
-
-usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
-
-Generate output in various formats from PACKAGE.texinfo (or .texi or
-.txi) source. See the GNU Maintainers document for a more extensive
-discussion:
- http://www.gnu.org/prep/maintain_toc.html
-
-Options:
- --email ADR use ADR as contact in generated web pages; always give this.
-
- -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi}
- -o OUTDIR write files into OUTDIR, instead of manual/.
- -I DIR append DIR to the Texinfo search path.
- --common ARG pass ARG in all invocations.
- --html ARG pass ARG to makeinfo or texi2html for HTML targets.
- --info ARG pass ARG to makeinfo for Info, instead of --no-split.
- --no-ascii skip generating the plain text output.
- --no-copy-images
- don't try to copy images referenced by img HTML tags,
- --source ARG include ARG in tar archive of sources.
- --split HOW make split HTML by node, section, chapter; default node.
-
- --texi2html use texi2html to make HTML target, with all split versions.
- --docbook convert through DocBook too (xml, txt, html, pdf).
-
- --help display this help and exit successfully.
- --version display version information and exit successfully.
-
-Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\"
-
-Typical sequence:
- cd PACKAGESOURCE/doc
- wget \"$scripturl\"
- wget \"$templateurl\"
- $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\"
-
-Output will be in a new subdirectory \"manual\" (by default;
-use -o OUTDIR to override). Move all the new files into your web CVS
-tree, as explained in the Web Pages node of maintain.texi.
-
-Please use the --email ADDRESS option so your own bug-reporting
-address will be used in the generated HTML pages.
-
-MANUAL-TITLE is included as part of the HTML <title> of the overall
-manual/index.html file. It should include the name of the package being
-documented. manual/index.html is created by substitution from the file
-$GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the
-generic template for your own purposes.)
-
-If you have several manuals, you'll need to run this script several
-times with different MANUAL values, specifying a different output
-directory with -o each time. Then write (by hand) an overall index.html
-with links to them all.
-
-If a manual's Texinfo sources are spread across several directories,
-first copy or symlink all Texinfo sources into a single directory.
-(Part of the script's work is to make a tar.gz of the sources.)
-
-As implied above, by default monolithic Info files are generated.
-If you want split Info, or other Info options, use --info to override.
-
-You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML,
-and PERL to control the programs that get executed, and
-GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is
-looked for. With --docbook, the environment variables DOCBOOK2HTML,
-DOCBOOK2PDF, and DOCBOOK2TXT are also consulted.
-
-By default, makeinfo and texi2dvi are run in the default (English)
-locale, since that's the language of most Texinfo manuals. If you
-happen to have a non-English manual and non-English web site, see the
-SETLANG setting in the source.
-
-Email bug reports or enhancement requests to bug-texinfo@gnu.org.
-"
-
-MANUAL_TITLE=
-PACKAGE=
-EMAIL=webmasters@gnu.org # please override with --email
-commonarg= # passed to all makeinfo/texi2html invcations.
-dirargs= # passed to all tools (-I dir).
-dirs= # -I's directories.
-htmlarg=
-infoarg=--no-split
-generate_ascii=true
-outdir=manual
-source_extra=
-split=default
-srcfile=
-no_copy_images=
-
-while test $# -gt 0; do
- case $1 in
- -s) shift; srcfile=$1;;
- -o) shift; outdir=$1;;
- -I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";;
- --common) shift; commonarg=$1;;
- --docbook) docbook=yes;;
- --email) shift; EMAIL=$1;;
- --html) shift; htmlarg=$1;;
- --info) shift; infoarg=$1;;
- --no-ascii) generate_ascii=false;;
- --source) shift; source_extra=$1;;
- --split) shift; split=$1;;
- --texi2html) use_texi2html=1;;
- --no-copy-images) no_copy_images=1;;
- --help) echo "$usage"; exit 0;;
- --version) echo "$version"; exit 0;;
- -*)
- echo "$0: Unknown option \`$1'." >&2
- echo "$0: Try \`--help' for more information." >&2
- exit 1;;
- *)
- if test -z "$PACKAGE"; then
- PACKAGE=$1
- elif test -z "$MANUAL_TITLE"; then
- MANUAL_TITLE=$1
- else
- echo "$0: extra non-option argument \`$1'." >&2
- exit 1
- fi;;
- esac
- shift
-done
-
-# makeinfo uses the dirargs, but texi2dvi doesn't.
-commonarg=" $dirargs $commonarg"
-
-# For most of the following, the base name is just $PACKAGE
-base=$PACKAGE
-
-if test -n "$srcfile"; then
- # but here, we use the basename of $srcfile
- base=`basename "$srcfile"`
- case $base in
- *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;;
- esac
- PACKAGE=$base
-elif test -s "$srcdir/$PACKAGE.texinfo"; then
- srcfile=$srcdir/$PACKAGE.texinfo
-elif test -s "$srcdir/$PACKAGE.texi"; then
- srcfile=$srcdir/$PACKAGE.texi
-elif test -s "$srcdir/$PACKAGE.txi"; then
- srcfile=$srcdir/$PACKAGE.txi
-else
- echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
- exit 1
-fi
-
-if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
- echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2
- echo "$0: it is available from $templateurl." >&2
- exit 1
-fi
-
-# Function to return size of $1 in something resembling kilobytes.
-calcsize()
-{
- size=`ls -ksl $1 | awk '{print $1}'`
- echo $size
-}
-
-# copy_images OUTDIR HTML-FILE...
-# -------------------------------
-# Copy all the images needed by the HTML-FILEs into OUTDIR. Look
-# for them in the -I directories.
-copy_images()
-{
- test -n "$no_copy_images" && return
- local odir
- odir=$1
- shift
- $PERL -n -e "
-BEGIN {
- \$me = '$prog';
- \$odir = '$odir';
- @dirs = qw($dirs);
-}
-" -e '
-/<img src="(.*?)"/g && ++$need{$1};
-
-END {
- #print "$me: @{[keys %need]}\n"; # for debugging, show images found.
- FILE: for my $f (keys %need) {
- for my $d (@dirs) {
- if (-f "$d/$f") {
- use File::Basename;
- my $dest = dirname ("$odir/$f");
- #
- use File::Path;
- -d $dest || mkpath ($dest)
- || die "$me: cannot mkdir $dest: $!\n";
- #
- use File::Copy;
- copy ("$d/$f", $dest)
- || die "$me: cannot copy $d/$f to $dest: $!\n";
- next FILE;
- }
- }
- die "$me: $ARGV: cannot find image $f\n";
- }
-}
-' -- "$@" || exit 1
-}
-
-case $outdir in
- /*) abs_outdir=$outdir;;
- *) abs_outdir=$srcdir/$outdir;;
-esac
-
-echo "Making output for $srcfile"
-echo " in `pwd`"
-mkdir -p "$outdir/"
-
-cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\""
-echo "Generating info... ($cmd)"
-rm -f $PACKAGE.info* # get rid of any strays
-eval "$cmd"
-tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info*
-ls -l "$outdir/$PACKAGE.info.tar.gz"
-info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"`
-# do not mv the info files, there's no point in having them available
-# separately on the web.
-
-cmd="$SETLANG $TEXI2DVI $dirargs \"$srcfile\""
-printf "\nGenerating dvi... ($cmd)\n"
-eval "$cmd"
-# compress/finish dvi:
-gzip -f -9 $PACKAGE.dvi
-dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
-mv $PACKAGE.dvi.gz "$outdir/"
-ls -l "$outdir/$PACKAGE.dvi.gz"
-
-cmd="$SETLANG $TEXI2DVI --pdf $dirargs \"$srcfile\""
-printf "\nGenerating pdf... ($cmd)\n"
-eval "$cmd"
-pdf_size=`calcsize $PACKAGE.pdf`
-mv $PACKAGE.pdf "$outdir/"
-ls -l "$outdir/$PACKAGE.pdf"
-
-if $generate_ascii; then
- opt="-o $PACKAGE.txt --no-split --no-headers $commonarg"
- cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
- printf "\nGenerating ascii... ($cmd)\n"
- eval "$cmd"
- ascii_size=`calcsize $PACKAGE.txt`
- gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz"
- ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"`
- mv $PACKAGE.txt "$outdir/"
- ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz"
-fi
-
-# Split HTML at level $2 using program $1. Used for texi2html.
-html_split()
-{
- opt="--split=$2 --node-files $commonarg $htmlarg"
- cmd="$SETLANG $1 --output $PACKAGE.html $opt \"$srcfile\""
- printf "\nGenerating html by $2... ($cmd)\n"
- eval "$cmd"
- split_html_dir=$PACKAGE.html
- (
- cd ${split_html_dir} || exit 1
- if test ! -e index.html; then
- if test -f ${PACKAGE}.html; then
- ln -sf ${PACKAGE}.html index.html
- else
- echo >&2 "$0: ${split_html_dir}/${PACKAGE}.html does not exist"
- fi
- fi
- tar -czf "$abs_outdir/${PACKAGE}.html_$2.tar.gz" -- *.html
- )
- eval html_$2_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$2.tar.gz"`
- rm -f "$outdir"/html_$2/*.html
- mkdir -p "$outdir/html_$2/"
- mv ${split_html_dir}/*.html "$outdir/html_$2/"
- rmdir ${split_html_dir}
-}
-
-if test -z "$use_texi2html"; then
- opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg"
- cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
- printf "\nGenerating monolithic html... ($cmd)\n"
- rm -rf $PACKAGE.html # in case a directory is left over
- eval "$cmd"
- html_mono_size=`calcsize $PACKAGE.html`
- gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
- html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
- copy_images "$outdir/" $PACKAGE.html
- mv $PACKAGE.html "$outdir/"
- ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz"
-
- version=`makeinfo --version|sed -n '1s/.* \([0-9][0-9]*\)\.[0-9.]*/\1/p'`
- case $version in
- [0-9]*) ;;
- *) version=4;;
- esac
- # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option,
- # it just always split by node. So if we're splitting by node anyway,
- # leave it out.
- if test $version -lt 5 -o "x$split" != xdefault; then
- split_arg=--split=$split
- opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg"
- cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
- printf "\nGenerating html by $split... ($cmd)\n"
- eval "$cmd"
- split_html_dir=$PACKAGE.html
- copy_images $split_html_dir/ $split_html_dir/*.html
- (
- cd $split_html_dir || exit 1
- tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- *
- )
- eval \
- html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"`
- rm -rf "$outdir/html_$split/"
- mv $split_html_dir "$outdir/html_$split/"
- du -s "$outdir/html_$split/"
- ls -l "$outdir/$PACKAGE.html_$split.tar.gz"
- CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\
- /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d"
- else
- html_split "$MAKEINFO --html" node
- html_split "$MAKEINFO --html" chapter
- html_split "$MAKEINFO --html" section
- # should take account of --split here.
- CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d"
- fi
-else # use texi2html:
- opt="--output $PACKAGE.html $commonarg $htmlarg"
- cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\""
- printf "\nGenerating monolithic html with texi2html... ($cmd)\n"
- rm -rf $PACKAGE.html # in case a directory is left over
- eval "$cmd"
- html_mono_size=`calcsize $PACKAGE.html`
- gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
- html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
- mv $PACKAGE.html "$outdir/"
-
- html_split "$TEXI2HTML" node
- html_split "$TEXI2HTML" chapter
- html_split "$TEXI2HTML" section
- CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d"
-fi
-
-printf "\nMaking .tar.gz for sources...\n"
-d=`dirname $srcfile`
-(
- cd "$d"
- srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true
- tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles
- ls -l "$abs_outdir/$PACKAGE.texi.tar.gz"
-)
-texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"`
-
-if test -n "$docbook"; then
- opt="-o - --docbook $commonarg"
- cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml"
- printf "\nGenerating docbook XML... ($cmd)\n"
- eval "$cmd"
- docbook_xml_size=`calcsize $PACKAGE-db.xml`
- gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz"
- docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"`
- mv $PACKAGE-db.xml "$outdir/"
-
- split_html_db_dir=html_node_db
- opt="$commonarg -o $split_html_db_dir"
- cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\""
- printf "\nGenerating docbook HTML... ($cmd)\n"
- eval "$cmd"
- (
- cd ${split_html_db_dir} || exit 1
- tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html
- )
- html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"`
- rm -f "$outdir"/html_node_db/*.html
- mkdir -p "$outdir/html_node_db"
- mv ${split_html_db_dir}/*.html "$outdir/html_node_db/"
- rmdir ${split_html_db_dir}
-
- cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\""
- printf "\nGenerating docbook ASCII... ($cmd)\n"
- eval "$cmd"
- docbook_ascii_size=`calcsize $PACKAGE-db.txt`
- mv $PACKAGE-db.txt "$outdir/"
-
- cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\""
- printf "\nGenerating docbook PDF... ($cmd)\n"
- eval "$cmd"
- docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
- mv $PACKAGE-db.pdf "$outdir/"
-fi
-
-printf "\nMaking index file...\n"
-
-curdate=`$SETLANG date '+%B %d, %Y'`
-sed \
- -e "s!%%TITLE%%!$MANUAL_TITLE!g" \
- -e "s!%%EMAIL%%!$EMAIL!g" \
- -e "s!%%PACKAGE%%!$PACKAGE!g" \
- -e "s!%%DATE%%!$curdate!g" \
- -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \
- -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \
- -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \
- -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \
- -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \
- -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
- -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
- -e "s!%%PDF_SIZE%%!$pdf_size!g" \
- -e "s!%%ASCII_SIZE%%!$ascii_size!g" \
- -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
- -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
- -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
- -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
- -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
- -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
- -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \
- -e "s,%%SCRIPTURL%%,$scripturl,g" \
- -e "s!%%SCRIPTNAME%%!$prog!g" \
- -e "$CONDS" \
-$GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html"
-
-echo "Done, see $outdir/ subdirectory for new files."
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/doc/html.init b/doc/html.init
deleted file mode 100644
index a61082e..0000000
--- a/doc/html.init
+++ /dev/null
@@ -1,164 +0,0 @@
-# Texi2any configuration for pies documentation. -*- perl -*-
-# Copyright (C) 2009-2020 Sergey Poznyakoff
-#
-# GNU Pies is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Pies is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Pies. If not, see <http://www.gnu.org/licenses/>.
-use strict;
-
-my $top_html_dir="/software/pies";
-my $graphics_dir="$top_html_dir/graphics";
-
-# Show TOC in place of the @contents directive.
-set_from_init_file('INLINE_CONTENTS', 1);
-# Do not show Texinfo menus.
-set_from_init_file('SHOW_MENU', 0);
-# Inhibit output of CSS lines in page headers.
-set_from_init_file('CSS_LINES', '');
-
-set_from_init_file('BODYTEXT', "");
-
-set_from_init_file('EXTRA_HEAD', qq{
- <link rev="made" href="mailto:gray\@gnu.org.ua">
- <link rel="stylesheet" type="text/css" href="${top_html_dir}/gray.css">
- <link rel="stylesheet" type="text/css" href="${top_html_dir}/texi.css">
- <link rel="icon" type="image/png" href="/graphics/gnu-head-icon.png">});
-
-set_from_init_file('AFTER_BODY_OPEN', qq{
-<!--#include virtual="${top_html_dir}/inc/header.html" -->
-<ul class="tabs">
- <li><a href="${top_html_dir}/pies.html">Main</a></li>
- <li><a href="${top_html_dir}/example.html">Examples</a></li>
- <li><a href="${top_html_dir}/download.html">Downloads</a></li>
- <li><a class="active" href="${top_html_dir}/manual.html">Documentation</a></li>
-</ul>});
-
-sub gray_end_file($)
-{
- my $self = shift;
- my $program_text = '';
- if ($self->get_conf('PROGRAM_NAME_IN_FOOTER')) {
- my $program_string = &{$self->{'format_program_string'}}($self);
- $program_text = "<p>
- $program_string
-</p>";
- }
- my $pre_body_close = $self->get_conf('PRE_BODY_CLOSE');
- $pre_body_close = '' if (!defined($pre_body_close));
- return "</div>
-<div class=\"copyright\">
-$program_text
-
-$pre_body_close
-</div>
-</div>
-</body>
-</html>
-";
-}
-
-texinfo_register_formatting_function('end_file', \&gray_end_file);
-
-set_from_init_file('PRE_BODY_CLOSE',
- 'Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.');
-
-# Print generating program name at the bottom of a page.
-set_from_init_file('PROGRAM_NAME_IN_FOOTER',1);
-
-# Disable horizontal bars
-set_from_init_file('DEFAULT_RULE', '');
-set_from_init_file('BIG_RULE', '');
-
-# Turn off navigation bars at the bottom of each section in chapter split mode,
-# or subsection in section split mode.
-set_from_init_file('HEADERS', undef)
- if ((get_conf('SPLIT') eq 'chapter') or (get_conf('SPLIT') eq 'section'));
-# Use navigation icons
-
-set_from_init_file('ICONS', 1);
-
-set_from_init_file('ACTIVE_ICONS',
- {
- 'Top' => "$graphics_dir/top.png",
- 'Contents' => "$graphics_dir/ctx.png",
- 'Overview' => '',
- 'Index' => "$graphics_dir/idx.png",
- 'This' => '',
- 'Back' => "$graphics_dir/left.png",
- 'FastBack' => "$graphics_dir/bwd.png",
- 'Prev' => "",
- 'Up' => "$graphics_dir/up.png",
- 'Next' => "$graphics_dir/right.png",
- 'NodeUp' => "$graphics_dir/left.png",
- 'NodeNext' => "$graphics_dir/up.png",
- 'NodePrev' => "$graphics_dir/right.png",
- 'Following' => "$graphics_dir/right.png",
- 'Forward' => "$graphics_dir/right.png",
- 'FastForward' => "$graphics_dir/fwd.png",
- 'About' => '',
- 'First' => '',
- 'Last' => '',
- ' ' => ''
- });
-
-sub gray_split_status()
-{
- my $split = get_conf('SPLIT');
- if ($split eq '') {
- return '';
- } elsif ($split eq 'node') {
- return ' <span class="splitstatus">(split by node)</span>';
- } elsif ($split eq 'section') {
- return ' <span class="splitstatus">(split by section)</span>';
- } elsif ($split eq 'chapter') {
- return ' <span class="splitstatus">(split by chapter)</span>';
- }
-}
-
-sub gray_document_title($$)
-{
- my $self = shift;
- my $direction = shift;
- my $status = gray_split_status();
-
- return q{<span class="title">} . $self->{title_string} . '</span>' .$status . q{<span class="title">:</span>};
-}
-
-sub gray_sec_ref($$)
-{
- return q{<span class="navtext">Section:</span>};
-}
-
-sub gray_chap_ref($$)
-{
- return q{<span class="navtext">Chapter:</span>};
-}
-
-
-my @gray_buttons = (\&gray_document_title, ' ',
- \&gray_sec_ref, 'Back', 'Forward', ' ',
- \&gray_chap_ref,
- 'FastBack', ' ', 'Up', ' ', 'FastForward', ' ',
- 'Contents', 'Index' );
-
-set_from_init_file('TOP_BUTTONS', undef);
-set_from_init_file('SECTION_BUTTONS', \@gray_buttons);
-set_from_init_file('CHAPTER_BUTTONS', \@gray_buttons);
-set_from_init_file('NODE_FOOTER_BUTTONS', \@gray_buttons);
-set_from_init_file('SECTION_FOOTER_BUTTONS', \@gray_buttons);
-set_from_init_file('MISC_BUTTONS',
- [\&gray_document_title,
- 'Contents',
- 'Index',
- ' ',
- 'About'
- ]);
diff --git a/doc/otherdoc.texi.in b/doc/otherdoc.texi.in
new file mode 100644
index 0000000..fc6ed08
--- /dev/null
+++ b/doc/otherdoc.texi.in
@@ -0,0 +1,9 @@
+@multitable @columnfractions 0.30 .5
+@item @uref{../$FILE(info_gz),$BASEFILE(info_gz)} @tab Info document compressed ($SIZE(info_gz) characters gzipped tar file)
+@item @uref{../$FILE(ascii),$BASEFILE(ascii)} @tab ASCII text ($SIZE(ascii) characters)
+@item @uref{../$FILE(ascii_gz),$BASEFILE(ascii_gz)} @tab ASCII text, compressed ($SIZE(ascii_gz) characters)
+@item @uref{../$FILE(dvi_gz),$BASEFILE(dvi_gz)} @tab TeX dvi file ($SIZE(dvi_gz) characters gzipped)
+@item @uref{../$FILE(pdf),$BASEFILE(pdf)} @tab PDF file ($SIZE(pdf) characters gzipped)
+@item @uref{../$FILE(texinfo_gz),$BASEFILE(texinfo_gz)} @tab Texinfo source ($SIZE(texinfo_gz) characters gzipped tar file)
+@end multitable
+
diff --git a/doc/pies.texi b/doc/pies.texi
index 110c257..731453a 100644
--- a/doc/pies.texi
+++ b/doc/pies.texi
@@ -96,6 +96,11 @@ Appendices
* Control API::
* Copying This Manual:: The GNU Free Documentation License.
* Concept Index:: Index of Concepts.
+@ifset WEBDOC
+@ifhtml
+* This Manual in Other Formats::
+@end ifhtml
+@end ifset
@detailmenu
--- The Detailed Node Listing ---
@@ -4550,4 +4555,12 @@ This is a general index of all issues discussed in this manual
@printindex cp
+@ifset WEBDOC
+@ifhtml
+@node This Manual in Other Formats
+@unnumbered This Manual in Other Formats
+@include otherdoc.texi
+@end ifhtml
+@end ifset
+
@bye
diff --git a/doc/webdoc.init b/doc/webdoc.init
new file mode 100644
index 0000000..4f7b4fd
--- /dev/null
+++ b/doc/webdoc.init
@@ -0,0 +1,8 @@
+use strict;
+use warnings;
+set_from_init_file('EXTRA_HEAD', qq{
+<link rel="stylesheet" type="text/css" href="css/info.css"/>
+<link rel="stylesheet" type="text/css" href="css/pies.css"/>
+<script src="js/modernizr.js" type="text/javascript"></script>
+<script src="js/info.js" type="text/javascript"></script>
+});

Return to:

Send suggestions and report system problems to the System administrator.