From 3da33af300c4717e3a93359153a49339d2852d59 Mon Sep 17 00:00:00 2001 From: Matthias Klose Date: Fri, 14 Dec 2001 22:46:31 +0000 Subject: [PATCH] texi2pod.pl: Merge changes from binutils' texi2pod.pl. 2001-12-12 Matthias Klose * texi2pod.pl: Merge changes from binutils' texi2pod.pl. Allows generation of more than one man page from one source. Add '-' to set of valid chars for an identifier. Let -D option accept flags of the form =. Use \s+ for whitespace detection in '@c man' lines. Handle @set and @clear independent of $output. Substitute all @value{}'s in a line. From-SVN: r48015 --- contrib/ChangeLog | 16 +++++++++++++--- contrib/texi2pod.pl | 46 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 49 insertions(+), 13 deletions(-) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index c61d1e371fd..14ce2080fe0 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,13 @@ +2001-12-12 Matthias Klose + + * texi2pod.pl: Merge changes from binutils' texi2pod.pl. Allows + generation of more than one man page from one source. + Add '-' to set of valid chars for an identifier. + Let -D option accept flags of the form =. + Use \s+ for whitespace detection in '@c man' lines. + Handle @set and @clear independent of $output. + Substitute all @value{}'s in a line. + 2001-11-14 Joseph S. Myers * texi2pod.pl: Handle @ifnottex, @iftex and @display. Handle @var @@ -16,13 +26,13 @@ 2001-09-07 Richard Sandiford Revert: - * gcc_update: (files_and_dependencies) Add gcc/java/parse.c + * gcc_update: (files_and_dependencies) Add gcc/java/parse.c gcc/java/parse-scan.c and gcc/java/keyword.h to list of files to touch. 2001-09-04 David.Billinghurst - * gcc_update: (files_and_dependencies) Add gcc/java/parse.c + * gcc_update: (files_and_dependencies) Add gcc/java/parse.c gcc/java/parse-scan.c and gcc/java/keyword.h to list of files to touch. @@ -46,7 +56,7 @@ Fri Jul 27 18:01:21 CEST 2001 Jan Hubicka * gcc_update: Dump timestamp in LAST_UPDATED. -2001-07-26 Andreas Jaeger , +2001-07-26 Andreas Jaeger , Hans-Peter Nilsson * analyze_brprob: Fix documentation. diff --git a/contrib/texi2pod.pl b/contrib/texi2pod.pl index 8c8b4f98593..770671a17b5 100755 --- a/contrib/texi2pod.pl +++ b/contrib/texi2pod.pl @@ -41,11 +41,13 @@ while ($_ = shift) { } else { $flag = shift; } + $value = ""; + ($flag, $value) = ($flag =~ /^([^=]+)(?:=(.+))?/); die "no flag specified for -D\n" 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_-]+$/; - $defs{$flag} = ""; + $defs{$flag} = $value; } elsif (/^-/) { usage(); } else { @@ -73,24 +75,43 @@ while() |node # @node: useful only in .info file |(?:end\s+)?ifnottex # @ifnottex .. @end ifnottex: use contents )\b/x and next; - + chomp; # Look for filename and title markers. /^\@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. # This really oughta be @ifman ... @end ifman and the like, but such # would require rev'ing all other Texinfo translators. - /^\@c man begin ([A-Z]+)/ and $sect = $1, $output = 1, next; - /^\@c man end/ and do { + /^\@c\s+man\s+begin\s+([A-Z]+)\s+([A-Za-z0-9-]+)/ 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} .= postprocess($section); $section = ""; $output = 0; next; }; + + # handle variables + /^\@set\s+([a-zA-Z0-9_-]+)\s*(.*)$/ and $defs{$1} = $2, next; + /^\@clear\s+([a-zA-Z0-9_-]+)/ and delete $defs{$1}, next; + next unless $output; # Discard comments. (Can't do it above, because then we'd never see @@ -188,8 +209,6 @@ while() } # 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|unnumbered|unnumberedsec|center)\s+(.+)$/ and $_ = "\n=head2 $1\n"; /^\@subsection\s+(.+)$/ and $_ = "\n=head3 $1\n"; @@ -274,7 +293,15 @@ sub postprocess local $_ = $_[0]; # @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. # Temporary escape for @r. @@ -355,4 +382,3 @@ sub add_footnote $sects{FOOTNOTES} .= $_[0]; $sects{FOOTNOTES} .= "\n\n"; } -