|
|
|
@ -1,23 +1,23 @@ |
|
|
|
#! /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 |
|
|
|
# the Free Software Foundation; either version 2, or (at your option) |
|
|
|
# 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 |
|
|
|
# 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 CC; see the file COPYING. If not, write to |
|
|
|
# the Free Software Foundation, 59 Temple Place - Suite 330, |
|
|
|
# Boston MA 02111-1307, USA. |
|
|
|
# along with GCC; see the file COPYING. If not, write to |
|
|
|
# the Free Software Foundation, 51 Franklin Street, Fifth Floor, |
|
|
|
# Boston MA 02110-1301, USA. |
|
|
|
|
|
|
|
# This does trivial (and I mean _trivial_) conversion of Texinfo |
|
|
|
# markup to Perl POD format. It's intended to be used to extract |
|
|
|
@ -36,6 +36,7 @@ $shift = ""; |
|
|
|
$fnno = 1; |
|
|
|
$inf = ""; |
|
|
|
$ibase = ""; |
|
|
|
@ipath = (); |
|
|
|
|
|
|
|
while ($_ = shift) { |
|
|
|
if (/^-D(.*)$/) { |
|
|
|
@ -51,6 +52,13 @@ while ($_ = shift) { |
|
|
|
die "flags may only contain letters, digits, hyphens, dashes and underscores\n" |
|
|
|
unless $flag =~ /^[a-zA-Z0-9_-]+$/; |
|
|
|
$defs{$flag} = $value; |
|
|
|
} elsif (/^-I(.*)$/) { |
|
|
|
if ($1 ne "") { |
|
|
|
$flag = $1; |
|
|
|
} else { |
|
|
|
$flag = shift; |
|
|
|
} |
|
|
|
push (@ipath, $flag); |
|
|
|
} elsif (/^-/) { |
|
|
|
usage(); |
|
|
|
} else { |
|
|
|
@ -138,7 +146,7 @@ while(<$inf>) { |
|
|
|
# Ignore @end foo, where foo is not an operation which may |
|
|
|
# cause us to skip, if we are presently skipping. |
|
|
|
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 "\@$endw ended by \@end $ended at line $.\n" unless $ended eq $endw; |
|
|
|
@ -154,6 +162,8 @@ while(<$inf>) { |
|
|
|
} elsif ($ended =~ /^(?:itemize|enumerate|[fv]?table)$/) { |
|
|
|
$_ = "\n=back\n"; |
|
|
|
$ic = pop @icstack; |
|
|
|
} elsif ($ended eq "multitable") { |
|
|
|
$_ = "\n=back\n"; |
|
|
|
} else { |
|
|
|
die "unknown command \@end $ended at line $.\n"; |
|
|
|
} |
|
|
|
@ -178,7 +188,7 @@ while(<$inf>) { |
|
|
|
next; |
|
|
|
}; |
|
|
|
|
|
|
|
/^\@(ignore|menu|iftex)\b/ and do { |
|
|
|
/^\@(ignore|menu|iftex|copying)\b/ and do { |
|
|
|
push @endwstack, $endw; |
|
|
|
push @skstack, $skipping; |
|
|
|
$endw = $1; |
|
|
|
@ -227,11 +237,16 @@ while(<$inf>) { |
|
|
|
/^\@include\s+(.+)$/ and do { |
|
|
|
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"; |
|
|
|
$file = postprocess($1); |
|
|
|
|
|
|
|
# Try cwd and $ibase, then explicit -I paths. |
|
|
|
$done = 0; |
|
|
|
foreach $path ("", $ibase, @ipath) { |
|
|
|
$mypath = $file; |
|
|
|
$mypath = $path . "/" . $mypath if ($path ne ""); |
|
|
|
open($inf, "<" . $mypath) and ($done = 1, last); |
|
|
|
} |
|
|
|
die "cannot find $file" if !$done; |
|
|
|
next; |
|
|
|
}; |
|
|
|
|
|
|
|
@ -239,12 +254,18 @@ while(<$inf>) { |
|
|
|
and $_ = "\n=head2 $1\n"; |
|
|
|
/^\@subsection\s+(.+)$/ |
|
|
|
and $_ = "\n=head3 $1\n"; |
|
|
|
/^\@subsubsection\s+(.+)$/ |
|
|
|
and $_ = "\n=head4 $1\n"; |
|
|
|
|
|
|
|
# Block command handlers: |
|
|
|
/^\@itemize\s+(\@[a-z]+|\*|-)/ and do { |
|
|
|
/^\@itemize(?:\s+(\@[a-z]+|\*|-))?/ and do { |
|
|
|
push @endwstack, $endw; |
|
|
|
push @icstack, $ic; |
|
|
|
$ic = $1; |
|
|
|
if (defined $1) { |
|
|
|
$ic = $1; |
|
|
|
} else { |
|
|
|
$ic = '*'; |
|
|
|
} |
|
|
|
$_ = "\n=over 4\n"; |
|
|
|
$endw = "itemize"; |
|
|
|
}; |
|
|
|
@ -261,6 +282,12 @@ while(<$inf>) { |
|
|
|
$endw = "enumerate"; |
|
|
|
}; |
|
|
|
|
|
|
|
/^\@multitable\s.*/ and do { |
|
|
|
push @endwstack, $endw; |
|
|
|
$endw = "multitable"; |
|
|
|
$_ = "\n=over 4\n"; |
|
|
|
}; |
|
|
|
|
|
|
|
/^\@([fv]?table)\s+(\@[a-z]+)/ and do { |
|
|
|
push @endwstack, $endw; |
|
|
|
push @icstack, $ic; |
|
|
|
@ -280,10 +307,19 @@ while(<$inf>) { |
|
|
|
$_ = ""; # 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 { |
|
|
|
if (defined $1) { |
|
|
|
# Entity escapes prevent munging by the <> processing below. |
|
|
|
# print "$ic\n"; |
|
|
|
$_ = "\n=item $ic\<$1\>\n"; |
|
|
|
} else { |
|
|
|
$_ = "\n=item $ic\n"; |
|
|
|
@ -346,6 +382,13 @@ sub postprocess |
|
|
|
s/\@w\{([^\}]*)\}/S<$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. |
|
|
|
# (@noindent is impossible in .pod, and @refill is unnecessary.) |
|
|
|
# @* is also impossible in .pod; we discard it and any newline that |
|
|
|
@ -359,6 +402,9 @@ sub postprocess |
|
|
|
s/\@gol//g; |
|
|
|
s/\@\*\s*\n?//g; |
|
|
|
|
|
|
|
# Anchors are thrown away |
|
|
|
s/\@anchor\{(?:[^\}]*)\}//g; |
|
|
|
|
|
|
|
# @uref can take one, two, or three arguments, with different |
|
|
|
# semantics each time. @url and @email are just like @uref with |
|
|
|
# one argument, for our purposes. |
|
|
|
@ -366,14 +412,18 @@ sub postprocess |
|
|
|
s/\@uref\{([^\},]*),([^\},]*)\}/$2 (C<$1>)/g; |
|
|
|
s/\@uref\{([^\},]*),([^\},]*),([^\},]*)\}/$3/g; |
|
|
|
|
|
|
|
# Turn B<blah I<blah> blah> into B<blah> I<blah> B<blah> to |
|
|
|
# match Texinfo semantics of @emph inside @samp. Also handle @r |
|
|
|
# inside bold. |
|
|
|
# Un-escape <> at this point. |
|
|
|
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); |
|
|
|
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])<(\s+)([^>]+)>/$2$1<$3>/g; |
|
|
|
s/([BI])<([^>]+?)(\s+)>/$1<$2>$3/g; |
|
|
|
|