Commit 3aba3d86f757e96f8ff503fa3f85c771b3a5f533
1 parent
5ff9d6a4
Update texi2pod.pl.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3964 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
73 additions
and
23 deletions
texi2pod.pl
1 | 1 | #! /usr/bin/perl -w |
2 | 2 | |
3 | -# Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. | |
3 | +# Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc. | |
4 | 4 | |
5 | -# This file is part of GNU CC. | |
5 | +# This file is part of GCC. | |
6 | 6 | |
7 | -# GNU CC is free software; you can redistribute it and/or modify | |
7 | +# GCC is free software; you can redistribute it and/or modify | |
8 | 8 | # it under the terms of the GNU General Public License as published by |
9 | 9 | # the Free Software Foundation; either version 2, or (at your option) |
10 | 10 | # any later version. |
11 | 11 | |
12 | -# GNU CC is distributed in the hope that it will be useful, | |
12 | +# GCC is distributed in the hope that it will be useful, | |
13 | 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 | 15 | # GNU General Public License for more details. |
16 | 16 | |
17 | 17 | # You should have received a copy of the GNU General Public License |
18 | -# along with GNU CC; see the file COPYING. If not, write to | |
19 | -# the Free Software Foundation, 59 Temple Place - Suite 330, | |
20 | -# Boston MA 02111-1307, USA. | |
18 | +# along with GCC; see the file COPYING. If not, write to | |
19 | +# the Free Software Foundation, 51 Franklin Street, Fifth Floor, | |
20 | +# Boston MA 02110-1301, USA. | |
21 | 21 | |
22 | 22 | # This does trivial (and I mean _trivial_) conversion of Texinfo |
23 | 23 | # markup to Perl POD format. It's intended to be used to extract |
... | ... | @@ -36,6 +36,7 @@ $shift = ""; |
36 | 36 | $fnno = 1; |
37 | 37 | $inf = ""; |
38 | 38 | $ibase = ""; |
39 | +@ipath = (); | |
39 | 40 | |
40 | 41 | while ($_ = shift) { |
41 | 42 | if (/^-D(.*)$/) { |
... | ... | @@ -51,6 +52,13 @@ while ($_ = shift) { |
51 | 52 | die "flags may only contain letters, digits, hyphens, dashes and underscores\n" |
52 | 53 | unless $flag =~ /^[a-zA-Z0-9_-]+$/; |
53 | 54 | $defs{$flag} = $value; |
55 | + } elsif (/^-I(.*)$/) { | |
56 | + if ($1 ne "") { | |
57 | + $flag = $1; | |
58 | + } else { | |
59 | + $flag = shift; | |
60 | + } | |
61 | + push (@ipath, $flag); | |
54 | 62 | } elsif (/^-/) { |
55 | 63 | usage(); |
56 | 64 | } else { |
... | ... | @@ -138,7 +146,7 @@ while(<$inf>) { |
138 | 146 | # Ignore @end foo, where foo is not an operation which may |
139 | 147 | # cause us to skip, if we are presently skipping. |
140 | 148 | my $ended = $1; |
141 | - next if $skipping && $ended !~ /^(?:ifset|ifclear|ignore|menu|iftex)$/; | |
149 | + next if $skipping && $ended !~ /^(?:ifset|ifclear|ignore|menu|iftex|copying)$/; | |
142 | 150 | |
143 | 151 | die "\@end $ended without \@$ended at line $.\n" unless defined $endw; |
144 | 152 | die "\@$endw ended by \@end $ended at line $.\n" unless $ended eq $endw; |
... | ... | @@ -154,6 +162,8 @@ while(<$inf>) { |
154 | 162 | } elsif ($ended =~ /^(?:itemize|enumerate|[fv]?table)$/) { |
155 | 163 | $_ = "\n=back\n"; |
156 | 164 | $ic = pop @icstack; |
165 | + } elsif ($ended eq "multitable") { | |
166 | + $_ = "\n=back\n"; | |
157 | 167 | } else { |
158 | 168 | die "unknown command \@end $ended at line $.\n"; |
159 | 169 | } |
... | ... | @@ -178,7 +188,7 @@ while(<$inf>) { |
178 | 188 | next; |
179 | 189 | }; |
180 | 190 | |
181 | - /^\@(ignore|menu|iftex)\b/ and do { | |
191 | + /^\@(ignore|menu|iftex|copying)\b/ and do { | |
182 | 192 | push @endwstack, $endw; |
183 | 193 | push @skstack, $skipping; |
184 | 194 | $endw = $1; |
... | ... | @@ -227,11 +237,16 @@ while(<$inf>) { |
227 | 237 | /^\@include\s+(.+)$/ and do { |
228 | 238 | push @instack, $inf; |
229 | 239 | $inf = gensym(); |
230 | - | |
231 | - # Try cwd and $ibase. | |
232 | - open($inf, "<" . $1) | |
233 | - or open($inf, "<" . $ibase . "/" . $1) | |
234 | - or die "cannot open $1 or $ibase/$1: $!\n"; | |
240 | + $file = postprocess($1); | |
241 | + | |
242 | + # Try cwd and $ibase, then explicit -I paths. | |
243 | + $done = 0; | |
244 | + foreach $path ("", $ibase, @ipath) { | |
245 | + $mypath = $file; | |
246 | + $mypath = $path . "/" . $mypath if ($path ne ""); | |
247 | + open($inf, "<" . $mypath) and ($done = 1, last); | |
248 | + } | |
249 | + die "cannot find $file" if !$done; | |
235 | 250 | next; |
236 | 251 | }; |
237 | 252 | |
... | ... | @@ -239,12 +254,18 @@ while(<$inf>) { |
239 | 254 | and $_ = "\n=head2 $1\n"; |
240 | 255 | /^\@subsection\s+(.+)$/ |
241 | 256 | and $_ = "\n=head3 $1\n"; |
257 | + /^\@subsubsection\s+(.+)$/ | |
258 | + and $_ = "\n=head4 $1\n"; | |
242 | 259 | |
243 | 260 | # Block command handlers: |
244 | - /^\@itemize\s+(\@[a-z]+|\*|-)/ and do { | |
261 | + /^\@itemize(?:\s+(\@[a-z]+|\*|-))?/ and do { | |
245 | 262 | push @endwstack, $endw; |
246 | 263 | push @icstack, $ic; |
247 | - $ic = $1; | |
264 | + if (defined $1) { | |
265 | + $ic = $1; | |
266 | + } else { | |
267 | + $ic = '*'; | |
268 | + } | |
248 | 269 | $_ = "\n=over 4\n"; |
249 | 270 | $endw = "itemize"; |
250 | 271 | }; |
... | ... | @@ -261,6 +282,12 @@ while(<$inf>) { |
261 | 282 | $endw = "enumerate"; |
262 | 283 | }; |
263 | 284 | |
285 | + /^\@multitable\s.*/ and do { | |
286 | + push @endwstack, $endw; | |
287 | + $endw = "multitable"; | |
288 | + $_ = "\n=over 4\n"; | |
289 | + }; | |
290 | + | |
264 | 291 | /^\@([fv]?table)\s+(\@[a-z]+)/ and do { |
265 | 292 | push @endwstack, $endw; |
266 | 293 | push @icstack, $ic; |
... | ... | @@ -280,10 +307,19 @@ while(<$inf>) { |
280 | 307 | $_ = ""; # need a paragraph break |
281 | 308 | }; |
282 | 309 | |
310 | + /^\@item\s+(.*\S)\s*$/ and $endw eq "multitable" and do { | |
311 | + @columns = (); | |
312 | + for $column (split (/\s*\@tab\s*/, $1)) { | |
313 | + # @strong{...} is used a @headitem work-alike | |
314 | + $column =~ s/^\@strong{(.*)}$/$1/; | |
315 | + push @columns, $column; | |
316 | + } | |
317 | + $_ = "\n=item ".join (" : ", @columns)."\n"; | |
318 | + }; | |
319 | + | |
283 | 320 | /^\@itemx?\s*(.+)?$/ and do { |
284 | 321 | if (defined $1) { |
285 | 322 | # Entity escapes prevent munging by the <> processing below. |
286 | -# print "$ic\n"; | |
287 | 323 | $_ = "\n=item $ic\<$1\>\n"; |
288 | 324 | } else { |
289 | 325 | $_ = "\n=item $ic\n"; |
... | ... | @@ -346,6 +382,13 @@ sub postprocess |
346 | 382 | s/\@w\{([^\}]*)\}/S<$1>/g; |
347 | 383 | s/\@(?:dmn|math)\{([^\}]*)\}/$1/g; |
348 | 384 | |
385 | + # keep references of the form @ref{...}, print them bold | |
386 | + s/\@(?:ref)\{([^\}]*)\}/B<$1>/g; | |
387 | + | |
388 | + # Change double single quotes to double quotes. | |
389 | + s/''/"/g; | |
390 | + s/``/"/g; | |
391 | + | |
349 | 392 | # Cross references are thrown away, as are @noindent and @refill. |
350 | 393 | # (@noindent is impossible in .pod, and @refill is unnecessary.) |
351 | 394 | # @* is also impossible in .pod; we discard it and any newline that |
... | ... | @@ -359,6 +402,9 @@ sub postprocess |
359 | 402 | s/\@gol//g; |
360 | 403 | s/\@\*\s*\n?//g; |
361 | 404 | |
405 | + # Anchors are thrown away | |
406 | + s/\@anchor\{(?:[^\}]*)\}//g; | |
407 | + | |
362 | 408 | # @uref can take one, two, or three arguments, with different |
363 | 409 | # semantics each time. @url and @email are just like @uref with |
364 | 410 | # one argument, for our purposes. |
... | ... | @@ -366,14 +412,18 @@ sub postprocess |
366 | 412 | s/\@uref\{([^\},]*),([^\},]*)\}/$2 (C<$1>)/g; |
367 | 413 | s/\@uref\{([^\},]*),([^\},]*),([^\},]*)\}/$3/g; |
368 | 414 | |
369 | - # Turn B<blah I<blah> blah> into B<blah> I<blah> B<blah> to | |
370 | - # match Texinfo semantics of @emph inside @samp. Also handle @r | |
371 | - # inside bold. | |
415 | + # Un-escape <> at this point. | |
372 | 416 | s/</</g; |
373 | 417 | s/>/>/g; |
374 | - 1 while s/B<((?:[^<>]|I<[^<>]*>)*)R<([^>]*)>/B<$1>${2}B</g; | |
375 | - 1 while (s/B<([^<>]*)I<([^>]+)>/B<$1>I<$2>B</g); | |
376 | - 1 while (s/I<([^<>]*)B<([^>]+)>/I<$1>B<$2>I</g); | |
418 | + | |
419 | + # Now un-nest all B<>, I<>, R<>. Theoretically we could have | |
420 | + # indefinitely deep nesting; in practice, one level suffices. | |
421 | + 1 while s/([BIR])<([^<>]*)([BIR])<([^<>]*)>/$1<$2>$3<$4>$1</g; | |
422 | + | |
423 | + # Replace R<...> with bare ...; eliminate empty markup, B<>; | |
424 | + # shift white space at the ends of [BI]<...> expressions outside | |
425 | + # the expression. | |
426 | + s/R<([^<>]*)>/$1/g; | |
377 | 427 | s/[BI]<>//g; |
378 | 428 | s/([BI])<(\s+)([^>]+)>/$2$1<$3>/g; |
379 | 429 | s/([BI])<([^>]+?)(\s+)>/$1<$2>$3/g; | ... | ... |