version 1.1.1.2, 2018/04/24 16:47:34
|
version 1.1.1.3, 2018/04/24 16:50:57
|
Line 1
|
Line 1
|
#! /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, 51 Franklin Street, Fifth Floor, |
# Boston MA 02111-1307, USA. |
# Boston MA 02110-1301, USA. |
|
|
# This does trivial (and I mean _trivial_) conversion of Texinfo |
# This does trivial (and I mean _trivial_) conversion of Texinfo |
# markup to Perl POD format. It's intended to be used to extract |
# markup to Perl POD format. It's intended to be used to extract |
Line 36 $shift = "";
|
Line 36 $shift = "";
|
$fnno = 1; |
$fnno = 1; |
$inf = ""; |
$inf = ""; |
$ibase = ""; |
$ibase = ""; |
|
@ipath = (); |
|
|
while ($_ = shift) { |
while ($_ = shift) { |
if (/^-D(.*)$/) { |
if (/^-D(.*)$/) { |
Line 51 while ($_ = shift) {
|
Line 52 while ($_ = shift) {
|
die "flags may only contain letters, digits, hyphens, dashes 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} = $value; |
$defs{$flag} = $value; |
|
} elsif (/^-I(.*)$/) { |
|
if ($1 ne "") { |
|
$flag = $1; |
|
} else { |
|
$flag = shift; |
|
} |
|
push (@ipath, $flag); |
} elsif (/^-/) { |
} elsif (/^-/) { |
usage(); |
usage(); |
} else { |
} else { |
Line 138 while(<$inf>) {
|
Line 146 while(<$inf>) {
|
# 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|iftex)$/; |
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; |
Line 154 while(<$inf>) {
|
Line 162 while(<$inf>) {
|
} elsif ($ended =~ /^(?:itemize|enumerate|[fv]?table)$/) { |
} elsif ($ended =~ /^(?:itemize|enumerate|[fv]?table)$/) { |
$_ = "\n=back\n"; |
$_ = "\n=back\n"; |
$ic = pop @icstack; |
$ic = pop @icstack; |
|
} elsif ($ended eq "multitable") { |
|
$_ = "\n=back\n"; |
} else { |
} else { |
die "unknown command \@end $ended at line $.\n"; |
die "unknown command \@end $ended at line $.\n"; |
} |
} |
Line 178 while(<$inf>) {
|
Line 188 while(<$inf>) {
|
next; |
next; |
}; |
}; |
|
|
/^\@(ignore|menu|iftex)\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; |
Line 227 while(<$inf>) {
|
Line 237 while(<$inf>) {
|
/^\@include\s+(.+)$/ and do { |
/^\@include\s+(.+)$/ and do { |
push @instack, $inf; |
push @instack, $inf; |
$inf = gensym(); |
$inf = gensym(); |
|
$file = postprocess($1); |
|
|
# Try cwd and $ibase. |
# Try cwd and $ibase, then explicit -I paths. |
open($inf, "<" . $1) |
$done = 0; |
or open($inf, "<" . $ibase . "/" . $1) |
foreach $path ("", $ibase, @ipath) { |
or die "cannot open $1 or $ibase/$1: $!\n"; |
$mypath = $file; |
|
$mypath = $path . "/" . $mypath if ($path ne ""); |
|
open($inf, "<" . $mypath) and ($done = 1, last); |
|
} |
|
die "cannot find $file" if !$done; |
next; |
next; |
}; |
}; |
|
|
Line 239 while(<$inf>) {
|
Line 254 while(<$inf>) {
|
and $_ = "\n=head2 $1\n"; |
and $_ = "\n=head2 $1\n"; |
/^\@subsection\s+(.+)$/ |
/^\@subsection\s+(.+)$/ |
and $_ = "\n=head3 $1\n"; |
and $_ = "\n=head3 $1\n"; |
|
/^\@subsubsection\s+(.+)$/ |
|
and $_ = "\n=head4 $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 = '*'; |
|
} |
$_ = "\n=over 4\n"; |
$_ = "\n=over 4\n"; |
$endw = "itemize"; |
$endw = "itemize"; |
}; |
}; |
Line 261 while(<$inf>) {
|
Line 282 while(<$inf>) {
|
$endw = "enumerate"; |
$endw = "enumerate"; |
}; |
}; |
|
|
|
/^\@multitable\s.*/ and do { |
|
push @endwstack, $endw; |
|
$endw = "multitable"; |
|
$_ = "\n=over 4\n"; |
|
}; |
|
|
/^\@([fv]?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; |
Line 280 while(<$inf>) {
|
Line 307 while(<$inf>) {
|
$_ = ""; # need a paragraph break |
$_ = ""; # need a paragraph break |
}; |
}; |
|
|
|
/^\@item\s+(.*\S)\s*$/ and $endw eq "multitable" and do { |
|
@columns = (); |
|
for $column (split (/\s*\@tab\s*/, $1)) { |
|
# @strong{...} is used a @headitem work-alike |
|
$column =~ s/^\@strong{(.*)}$/$1/; |
|
push @columns, $column; |
|
} |
|
$_ = "\n=item ".join (" : ", @columns)."\n"; |
|
}; |
|
|
/^\@itemx?\s*(.+)?$/ and do { |
/^\@itemx?\s*(.+)?$/ and do { |
if (defined $1) { |
if (defined $1) { |
# Entity escapes prevent munging by the <> processing below. |
# Entity escapes prevent munging by the <> processing below. |
# print "$ic\n"; |
|
$_ = "\n=item $ic\<$1\>\n"; |
$_ = "\n=item $ic\<$1\>\n"; |
} else { |
} else { |
$_ = "\n=item $ic\n"; |
$_ = "\n=item $ic\n"; |
Line 346 sub postprocess
|
Line 382 sub postprocess
|
s/\@w\{([^\}]*)\}/S<$1>/g; |
s/\@w\{([^\}]*)\}/S<$1>/g; |
s/\@(?:dmn|math)\{([^\}]*)\}/$1/g; |
s/\@(?:dmn|math)\{([^\}]*)\}/$1/g; |
|
|
|
# keep references of the form @ref{...}, print them bold |
|
s/\@(?:ref)\{([^\}]*)\}/B<$1>/g; |
|
|
|
# Change double single quotes to double quotes. |
|
s/''/"/g; |
|
s/``/"/g; |
|
|
# 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 |
Line 359 sub postprocess
|
Line 402 sub postprocess
|
s/\@gol//g; |
s/\@gol//g; |
s/\@\*\s*\n?//g; |
s/\@\*\s*\n?//g; |
|
|
|
# Anchors are thrown away |
|
s/\@anchor\{(?:[^\}]*)\}//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. |
Line 366 sub postprocess
|
Line 412 sub postprocess
|
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. Also handle @r |
|
# inside bold. |
|
s/</</g; |
s/</</g; |
s/>/>/g; |
s/>/>/g; |
1 while s/B<((?:[^<>]|I<[^<>]*>)*)R<([^>]*)>/B<$1>${2}B</g; |
|
1 while (s/B<([^<>]*)I<([^>]+)>/B<$1>I<$2>B</g); |
# Now un-nest all B<>, I<>, R<>. Theoretically we could have |
1 while (s/I<([^<>]*)B<([^>]+)>/I<$1>B<$2>I</g); |
# 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; |