1
0
mirror of https://github.com/moparisthebest/wget synced 2024-07-03 16:38:41 -04:00

[svn] Update texi2pod.pl.in from the Gcc distribution.

This commit is contained in:
hniksic 2003-09-16 03:20:38 -07:00
parent 0fa384769d
commit 93ff8fcd98
3 changed files with 142 additions and 52 deletions

View File

@ -1,3 +1,9 @@
2003-09-16 Hrvoje Niksic <hniksic@xemacs.org>
* Makefile.in ($(TEXI2POD)): Update only the #! line.
* texi2pod.pl: New version from Gcc.
2003-09-16 Noel Kothe <noel@debian.org> 2003-09-16 Noel Kothe <noel@debian.org>
* wget.texi (Download Options): Fix misspelling. * wget.texi (Download Options): Fix misspelling.

View File

@ -69,7 +69,7 @@ wget.info: $(SAMPLERCTEXI) $(srcdir)/wget.texi
$(MAKEINFO) -I$(srcdir) $(MAKEINFO) -I$(srcdir)
$(TEXI2POD): $(TEXI2POD).in $(TEXI2POD): $(TEXI2POD).in
sed s,/usr/bin/perl,@PERL@, $? > $@ sed 's,^#! /usr/bin/perl,#! @PERL@,' $? > $@
chmod u+x $@ chmod u+x $@
wget.pod: $(srcdir)/wget.texi $(TEXI2POD) wget.pod: $(srcdir)/wget.texi $(TEXI2POD)

View File

@ -1,21 +1,21 @@
#!/usr/bin/perl -w #! /usr/bin/perl -w
# Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. # Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
# This file is part of GNU CC. # This file is part of GCC.
# GNU CC is free software; you can redistribute it and/or modify # GCC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option) # the Free Software Foundation; either version 2, or (at your option)
# any later version. # any later version.
# GNU CC is distributed in the hope that it will be useful, # GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # GNU General Public License for more details.
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with GNU CC; see the file COPYING. If not, write to # along with GCC; see the file COPYING. If not, write to
# the Free Software Foundation, 59 Temple Place - Suite 330, # the Free Software Foundation, 59 Temple Place - Suite 330,
# Boston MA 02111-1307, USA. # Boston MA 02111-1307, USA.
@ -30,9 +30,12 @@ $section = "";
@icstack = (); @icstack = ();
@endwstack = (); @endwstack = ();
@skstack = (); @skstack = ();
@instack = ();
$shift = ""; $shift = "";
%defs = (); %defs = ();
$fnno = 1; $fnno = 1;
$inf = "";
$ibase = "";
while ($_ = shift) { while ($_ = shift) {
if (/^-D(.*)$/) { if (/^-D(.*)$/) {
@ -41,11 +44,13 @@ while ($_ = shift) {
} else { } else {
$flag = shift; $flag = shift;
} }
$value = "";
($flag, $value) = ($flag =~ /^([^=]+)(?:=(.+))?/);
die "no flag specified for -D\n" die "no flag specified for -D\n"
unless $flag ne ""; unless $flag ne "";
die "flags may only contain letters, digits, hyphens, and underscores\n" die "flags may only contain letters, digits, hyphens, dashes and underscores\n"
unless $flag =~ /^[a-zA-Z0-9_-]+$/; unless $flag =~ /^[a-zA-Z0-9_-]+$/;
$defs{$flag} = ""; $defs{$flag} = $value;
} elsif (/^-/) { } elsif (/^-/) {
usage(); usage();
} else { } else {
@ -56,14 +61,19 @@ while ($_ = shift) {
} }
if (defined $in) { if (defined $in) {
open(STDIN, $in) or die "opening \"$in\": $!\n"; $inf = gensym();
open($inf, "<$in") or die "opening \"$in\": $!\n";
$ibase = $1 if $in =~ m|^(.+)/[^/]+$|;
} else {
$inf = \*STDIN;
} }
if (defined $out) { if (defined $out) {
open(STDOUT, ">$out") or die "opening \"$out\": $!\n"; open(STDOUT, ">$out") or die "opening \"$out\": $!\n";
} }
while(<STDIN>) while(defined $inf) {
{ while(<$inf>) {
# Certain commands are discarded without further processing. # Certain commands are discarded without further processing.
/^\@(?: /^\@(?:
[a-z]+index # @*index: useful only in complete manual [a-z]+index # @*index: useful only in complete manual
@ -71,25 +81,51 @@ while(<STDIN>)
|(?:end\s+)?group # @group .. @end group: ditto |(?:end\s+)?group # @group .. @end group: ditto
|page # @page: ditto |page # @page: ditto
|node # @node: useful only in .info file |node # @node: useful only in .info file
|(?:end\s+)?ifnottex # @ifnottex .. @end ifnottex: use contents
)\b/x and next; )\b/x and next;
chomp; chomp;
# Look for filename and title markers. # Look for filename and title markers.
/^\@setfilename\s+([^.]+)/ and $fn = $1, next; /^\@setfilename\s+([^.]+)/ and $fn = $1, next;
/^\@settitle\s+([^.]+)/ and $tl = $1, next; /^\@settitle\s+([^.]+)/ and $tl = postprocess($1), next;
# Identify a man title but keep only the one we are interested in.
/^\@c\s+man\s+title\s+([A-Za-z0-9-]+)\s+(.+)/ and do {
if (exists $defs{$1}) {
$fn = $1;
$tl = postprocess($2);
}
next;
};
# Look for blocks surrounded by @c man begin SECTION ... @c man end. # Look for blocks surrounded by @c man begin SECTION ... @c man end.
# This really oughta be @ifman ... @end ifman and the like, but such # This really oughta be @ifman ... @end ifman and the like, but such
# would require rev'ing all other Texinfo translators. # would require rev'ing all other Texinfo translators.
/^\@c man begin ([A-Z]+)/ and $sect = $1, $output = 1, next; /^\@c\s+man\s+begin\s+([A-Z]+)\s+([A-Za-z0-9-]+)/ and do {
/^\@c man end/ and do { $output = 1 if exists $defs{$2};
$sect = $1;
next;
};
/^\@c\s+man\s+begin\s+([A-Z]+)/ and $sect = $1, $output = 1, next;
/^\@c\s+man\s+end/ and do {
$sects{$sect} = "" unless exists $sects{$sect}; $sects{$sect} = "" unless exists $sects{$sect};
$sects{$sect} .= postprocess($section); $sects{$sect} .= postprocess($section);
$section = ""; $section = "";
$output = 0; $output = 0;
next; next;
}; };
# handle variables
/^\@set\s+([a-zA-Z0-9_-]+)\s*(.*)$/ and do {
$defs{$1} = $2;
next;
};
/^\@clear\s+([a-zA-Z0-9_-]+)/ and do {
delete $defs{$1};
next;
};
next unless $output; next unless $output;
# Discard comments. (Can't do it above, because then we'd never see # Discard comments. (Can't do it above, because then we'd never see
@ -102,20 +138,20 @@ while(<STDIN>)
# Ignore @end foo, where foo is not an operation which may # Ignore @end foo, where foo is not an operation which may
# cause us to skip, if we are presently skipping. # cause us to skip, if we are presently skipping.
my $ended = $1; my $ended = $1;
next if $skipping && $ended !~ /^(?:ifset|ifclear|ignore|menu)$/; next if $skipping && $ended !~ /^(?:ifset|ifclear|ignore|menu|iftex|copying)$/;
die "\@end $ended without \@$ended at line $.\n" unless defined $endw; die "\@end $ended without \@$ended at line $.\n" unless defined $endw;
die "\@$endw ended by \@end $ended at line $.\n" unless $ended eq $endw; die "\@$endw ended by \@end $ended at line $.\n" unless $ended eq $endw;
$endw = pop @endwstack; $endw = pop @endwstack;
if ($ended =~ /^(?:ifset|ifclear|ignore|menu)$/) { if ($ended =~ /^(?:ifset|ifclear|ignore|menu|iftex)$/) {
$skipping = pop @skstack; $skipping = pop @skstack;
next; next;
} elsif ($ended =~ /^(?:example|smallexample)$/) { } elsif ($ended =~ /^(?:example|smallexample|display)$/) {
$shift = ""; $shift = "";
$_ = ""; # need a paragraph break $_ = ""; # need a paragraph break
} elsif ($ended =~ /^(?:itemize|enumerate|table)$/) { } elsif ($ended =~ /^(?:itemize|enumerate|[fv]?table)$/) {
$_ = "\n=back\n"; $_ = "\n=back\n";
$ic = pop @icstack; $ic = pop @icstack;
} else { } else {
@ -142,7 +178,7 @@ while(<STDIN>)
next; next;
}; };
/^\@(ignore|menu)\b/ and do { /^\@(ignore|menu|iftex|copying)\b/ and do {
push @endwstack, $endw; push @endwstack, $endw;
push @skstack, $skipping; push @skstack, $skipping;
$endw = $1; $endw = $1;
@ -163,6 +199,7 @@ while(<STDIN>)
s/\@TeX\{\}/TeX/g; s/\@TeX\{\}/TeX/g;
s/\@pounds\{\}/\#/g; s/\@pounds\{\}/\#/g;
s/\@minus(?:\{\})?/-/g; s/\@minus(?:\{\})?/-/g;
s/\\,/,/g;
# Now the ones that have to be replaced by special escapes # Now the ones that have to be replaced by special escapes
# (which will be turned back into text by unmunge()) # (which will be turned back into text by unmunge())
@ -170,6 +207,12 @@ while(<STDIN>)
s/\@\{/&lbrace;/g; s/\@\{/&lbrace;/g;
s/\@\}/&rbrace;/g; s/\@\}/&rbrace;/g;
s/\@\@/&at;/g; s/\@\@/&at;/g;
# Inside a verbatim block, handle @var specially.
if ($shift ne "") {
s/\@var\{([^\}]*)\}/<$1>/g;
}
# POD doesn't interpret E<> inside a verbatim block. # POD doesn't interpret E<> inside a verbatim block.
if ($shift eq "") { if ($shift eq "") {
s/</&lt;/g; s/</&lt;/g;
@ -180,22 +223,37 @@ while(<STDIN>)
} }
# Single line command handlers. # Single line command handlers.
/^\@set\s+([a-zA-Z0-9_-]+)\s*(.*)$/ and $defs{$1} = $2, next;
/^\@clear\s+([a-zA-Z0-9_-]+)/ and delete $defs{$1}, next;
/^\@section\s+(.+)$/ and $_ = "\n=head2 $1\n"; /^\@include\s+(.+)$/ and do {
/^\@subsection\s+(.+)$/ and $_ = "\n=head3 $1\n"; push @instack, $inf;
$inf = gensym();
# Try cwd and $ibase.
open($inf, "<" . $1)
or open($inf, "<" . $ibase . "/" . $1)
or die "cannot open $1 or $ibase/$1: $!\n";
next;
};
/^\@(?:section|unnumbered|unnumberedsec|center)\s+(.+)$/
and $_ = "\n=head2 $1\n";
/^\@subsection\s+(.+)$/
and $_ = "\n=head3 $1\n";
# Block command handlers: # Block command handlers:
/^\@itemize\s+(\@[a-z]+|\*|-)/ and do { /^\@itemize(?:\s+(\@[a-z]+|\*|-))?/ and do {
push @endwstack, $endw; push @endwstack, $endw;
push @icstack, $ic; push @icstack, $ic;
$ic = $1; if (defined $1) {
$ic = $1;
} else {
$ic = '@bullet';
}
$_ = "\n=over 4\n"; $_ = "\n=over 4\n";
$endw = "itemize"; $endw = "itemize";
}; };
/^\@enumerate(?:\s+([A-Z0-9]+))?/ and do { /^\@enumerate(?:\s+([a-zA-Z0-9]+))?/ and do {
push @endwstack, $endw; push @endwstack, $endw;
push @icstack, $ic; push @icstack, $ic;
if (defined $1) { if (defined $1) {
@ -207,20 +265,19 @@ while(<STDIN>)
$endw = "enumerate"; $endw = "enumerate";
}; };
/^\@table\s+(\@[a-z]+)/ and do { /^\@([fv]?table)\s+(\@[a-z]+)/ and do {
push @endwstack, $endw; push @endwstack, $endw;
push @icstack, $ic; push @icstack, $ic;
$ic = $1; $endw = $1;
$ic =~ s/\@(?:samp|strong|key)/B/; $ic = $2;
$ic =~ s/\@(?:samp|strong|key|gcctabopt|env)/B/;
$ic =~ s/\@(?:code|kbd)/C/; $ic =~ s/\@(?:code|kbd)/C/;
$ic =~ s/\@(?:dfn|var|emph|cite|i)/I/; $ic =~ s/\@(?:dfn|var|emph|cite|i)/I/;
$ic =~ s/\@(?:file)/F/; $ic =~ s/\@(?:file)/F/;
$ic =~ s/\@(?:asis)/S/; # punt
$_ = "\n=over 4\n"; $_ = "\n=over 4\n";
$endw = "table";
}; };
/^\@((?:small)?example)/ and do { /^\@((?:small)?example|display)/ and do {
push @endwstack, $endw; push @endwstack, $endw;
$endw = $1; $endw = $1;
$shift = "\t"; $shift = "\t";
@ -233,19 +290,24 @@ while(<STDIN>)
$_ = "\n=item $ic\&LT;$1\&GT;\n"; $_ = "\n=item $ic\&LT;$1\&GT;\n";
} else { } else {
$_ = "\n=item $ic\n"; $_ = "\n=item $ic\n";
$ic =~ y/A-Ya-y1-8/B-Zb-z2-9/; $ic =~ y/A-Ya-y/B-Zb-z/;
$ic =~ s/(\d+)/$1 + 1/eg;
} }
}; };
$section .= $shift.$_."\n"; $section .= $shift.$_."\n";
} }
# End of current file.
close($inf);
$inf = pop @instack;
}
die "No filename or title\n" unless defined $fn && defined $tl; die "No filename or title\n" unless defined $fn && defined $tl;
$sects{NAME} = "$fn \- $tl\n"; $sects{NAME} = "$fn \- $tl\n";
$sects{FOOTNOTES} .= "=back\n" if exists $sects{FOOTNOTES}; $sects{FOOTNOTES} .= "=back\n" if exists $sects{FOOTNOTES};
for $sect (qw(NAME SYNOPSIS DESCRIPTION OPTIONS EXAMPLES ENVIRONMENT FILES for $sect (qw(NAME SYNOPSIS DESCRIPTION OPTIONS ENVIRONMENT FILES
BUGS NOTES FOOTNOTES SEEALSO AUTHOR COPYRIGHT)) { BUGS NOTES FOOTNOTES SEEALSO AUTHOR COPYRIGHT)) {
if(exists $sects{$sect}) { if(exists $sects{$sect}) {
$head = $sect; $head = $sect;
@ -266,12 +328,22 @@ sub postprocess
local $_ = $_[0]; local $_ = $_[0];
# @value{foo} is replaced by whatever 'foo' is defined as. # @value{foo} is replaced by whatever 'foo' is defined as.
s/\@value\{([a-zA-Z0-9_-]+)\}/$defs{$1}/g; while (m/(\@value\{([a-zA-Z0-9_-]+)\})/g) {
if (! exists $defs{$2}) {
print STDERR "Option $2 not defined\n";
s/\Q$1\E//;
} else {
$value = $defs{$2};
s/\Q$1\E/$value/;
}
}
# Formatting commands. # Formatting commands.
# Temporary escape for @r.
s/\@r\{([^\}]*)\}/R<$1>/g;
s/\@(?:dfn|var|emph|cite|i)\{([^\}]*)\}/I<$1>/g; s/\@(?:dfn|var|emph|cite|i)\{([^\}]*)\}/I<$1>/g;
s/\@(?:code|kbd)\{([^\}]*)\}/C<$1>/g; s/\@(?:code|kbd)\{([^\}]*)\}/C<$1>/g;
s/\@(?:samp|strong|key|option|env|b)\{([^\}]*)\}/B<$1>/g; s/\@(?:gccoptlist|samp|strong|key|option|env|command|b)\{([^\}]*)\}/B<$1>/g;
s/\@sc\{([^\}]*)\}/\U$1/g; s/\@sc\{([^\}]*)\}/\U$1/g;
s/\@file\{([^\}]*)\}/F<$1>/g; s/\@file\{([^\}]*)\}/F<$1>/g;
s/\@w\{([^\}]*)\}/S<$1>/g; s/\@w\{([^\}]*)\}/S<$1>/g;
@ -280,33 +352,35 @@ sub postprocess
# Cross references are thrown away, as are @noindent and @refill. # Cross references are thrown away, as are @noindent and @refill.
# (@noindent is impossible in .pod, and @refill is unnecessary.) # (@noindent is impossible in .pod, and @refill is unnecessary.)
# @* is also impossible in .pod; we discard it and any newline that # @* is also impossible in .pod; we discard it and any newline that
# follows it. # follows it. Similarly, our macro @gol must be discarded.
s/\@xref\{(?:[^\}]*)\}[^.]*.//g;
# Originally "s/\s+\(\@pxref\{(?:[^\}]*)\}\)//g;", would not
# process cross-references like '(@pxref{some section} for more
# details)"
s/\s+\(\@pxref\{(?:[^\}]*)\}[^\)]*\)//g;
s/\(?\@xref\{(?:[^\}]*)\}(?:[^.<]|(?:<[^<>]*>))*\.\)?//g;
s/\s+\(\@pxref\{(?:[^\}]*)\}\)//g;
s/;\s+\@pxref\{(?:[^\}]*)\}//g; s/;\s+\@pxref\{(?:[^\}]*)\}//g;
s/\@noindent\s*//g; s/\@noindent\s*//g;
s/\@refill//g; s/\@refill//g;
s/\@gol//g;
s/\@\*\s*\n?//g; s/\@\*\s*\n?//g;
# @uref can take one, two, or three arguments, with different # @uref can take one, two, or three arguments, with different
# semantics each time. @url and @email are just like @uref with # semantics each time. @url and @email are just like @uref with
# one argument, for our purposes. # one argument, for our purposes.
s/\@(?:uref|url|email)\{([^\},]*)\}/&lt;C<$1>&gt;/g; s/\@(?:uref|url|email)\{([^\},]*)\}/&lt;B<$1>&gt;/g;
s/\@uref\{([^\},]*),([^\},]*)\}/$2 (C<$1>)/g; s/\@uref\{([^\},]*),([^\},]*)\}/$2 (C<$1>)/g;
s/\@uref\{([^\},]*),([^\},]*),([^\},]*)\}/$3/g; s/\@uref\{([^\},]*),([^\},]*),([^\},]*)\}/$3/g;
# Turn B<blah I<blah> blah> into B<blah> I<blah> B<blah> to # Un-escape <> at this point.
# match Texinfo semantics of @emph inside @samp.
s/&LT;/</g; s/&LT;/</g;
s/&GT;/>/g; s/&GT;/>/g;
1 while (s/B<([^<>]*)I<([^>]+)>/B<$1>I<$2>B</g);
1 while (s/I<([^<>]*)B<([^>]+)>/I<$1>B<$2>I</g); # Now un-nest all B<>, I<>, R<>. Theoretically we could have
# indefinitely deep nesting; in practice, one level suffices.
1 while s/([BIR])<([^<>]*)([BIR])<([^<>]*)>/$1<$2>$3<$4>$1</g;
# Replace R<...> with bare ...; eliminate empty markup, B<>;
# shift white space at the ends of [BI]<...> expressions outside
# the expression.
s/R<([^<>]*)>/$1/g;
s/[BI]<>//g; s/[BI]<>//g;
s/([BI])<(\s+)([^>]+)>/$2$1<$3>/g; s/([BI])<(\s+)([^>]+)>/$2$1<$3>/g;
s/([BI])<([^>]+?)(\s+)>/$1<$2>$3/g; s/([BI])<([^>]+?)(\s+)>/$1<$2>$3/g;
@ -347,5 +421,15 @@ sub add_footnote
$sects{FOOTNOTES} .= $_[0]; $sects{FOOTNOTES} .= $_[0];
$sects{FOOTNOTES} .= "\n\n"; $sects{FOOTNOTES} .= "\n\n";
} }
# stolen from Symbol.pm
{
my $genseq = 0;
sub gensym
{
my $name = "GEN" . $genseq++;
my $ref = \*{$name};
delete $::{$name};
return $ref;
}
}