Update texi2pod.pl.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3964 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									5ff9d6a469
								
							
						
					
					
						commit
						3aba3d86f7
					
				
							
								
								
									
										94
									
								
								texi2pod.pl
									
									
									
									
									
								
							
							
						
						
									
										94
									
								
								texi2pod.pl
									
									
									
									
									
								
							| @ -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(); | ||||
| 	$file = postprocess($1); | ||||
| 
 | ||||
| 	# Try cwd and $ibase. | ||||
| 	open($inf, "<" . $1) | ||||
| 	    or open($inf, "<" . $ibase . "/" . $1) | ||||
| 		or die "cannot open $1 or $ibase/$1: $!\n"; | ||||
| 	# 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; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 ths
						ths