This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Removed unnecessary pointers checks
[perl5.git] / pod / pod2text.PL
CommitLineData
cb1a09d0
AD
1#!/usr/local/bin/perl
2
c07a80fd 3use Config;
4use File::Basename qw(&basename &dirname);
3b5ca523 5use Cwd;
cb1a09d0 6
c07a80fd 7# List explicitly here the variables you want Configure to
8# generate. Metaconfig only looks for shell variables, so you
9# have to mention them as if they were shell variables, not
10# %Config entries. Thus you write
11# $startperl
12# to ensure Configure will look for $Config{startperl}.
cb1a09d0 13
3b5ca523
GS
14# This forces PL files to create target in same directory as PL file.
15# This is so that make depend always knows where to find PL derivatives.
16$origdir = cwd;
17chdir dirname($0);
44a8e56a 18$file = basename($0, '.PL');
774d564b 19$file .= '.com' if $^O eq 'VMS';
cb1a09d0 20
c07a80fd 21open OUT,">$file" or die "Can't create $file: $!";
cb1a09d0 22
c07a80fd 23print "Extracting $file (with variable substitutions)\n";
cb1a09d0 24
c07a80fd 25# In this section, perl variables will be expanded during extraction.
26# You can use $Config{...} to use Configure variables.
cb1a09d0 27
c07a80fd 28print OUT <<"!GROK!THIS!";
5f05dabc 29$Config{startperl}
30 eval 'exec $Config{perlpath} -S \$0 \${1+"\$@"}'
9741dab0 31 if \$running_under_some_shell;
c07a80fd 32!GROK!THIS!
cb1a09d0 33
c07a80fd 34# In the following, perl variables are not expanded during extraction.
cb1a09d0 35
c07a80fd 36print OUT <<'!NO!SUBS!';
cb1a09d0 37
6055f9d4 38# pod2text -- Convert POD data to formatted ASCII text.
9741dab0 39#
8f202758 40# Copyright 1999, 2000, 2001, 2004, 2006 by Russ Allbery <rra@stanford.edu>
6055f9d4 41#
3c014959 42# This program is free software; you may redistribute it and/or modify it
6055f9d4
GS
43# under the same terms as Perl itself.
44#
9741dab0
GS
45# The driver script for Pod::Text, Pod::Text::Termcap, and Pod::Text::Color,
46# invoked by perldoc -t among other things.
6055f9d4
GS
47
48require 5.004;
49
50use Getopt::Long qw(GetOptions);
51use Pod::Text ();
52use Pod::Usage qw(pod2usage);
53
54use strict;
6055f9d4 55
59548eca
JH
56# Silence -w warnings.
57use vars qw($running_under_some_shell);
58
6055f9d4
GS
59# Take an initial pass through our options, looking for one of the form
60# -<number>. We turn that into -w <number> for compatibility with the
61# original pod2text script.
62for (my $i = 0; $i < @ARGV; $i++) {
63 last if $ARGV[$i] =~ /^--$/;
64 if ($ARGV[$i] =~ /^-(\d+)$/) {
65 splice (@ARGV, $i++, 1, '-w', $1);
66 }
67}
68
46bce7d0 69# Insert -- into @ARGV before any single dash argument to hide it from
b7ae008f 70# Getopt::Long; we want to interpret it as meaning stdin (which Pod::Simple
46bce7d0
GS
71# does correctly).
72my $stdin;
73@ARGV = map { $_ eq '-' && !$stdin++ ? ('--', $_) : $_ } @ARGV;
74
9741dab0
GS
75# Parse our options. Use the same names as Pod::Text for simplicity, and
76# default to sentence boundaries turned off for compatibility.
6055f9d4 77my %options;
6055f9d4
GS
78$options{sentence} = 0;
79Getopt::Long::config ('bundling');
59548eca 80GetOptions (\%options, 'alt|a', 'code', 'color|c', 'help|h', 'indent|i=i',
11f72409
RA
81 'loose|l', 'margin|left-margin|m=i', 'overstrike|o',
82 'quotes|q=s', 'sentence|s', 'termcap|t', 'width|w=i') or exit 1;
6055f9d4
GS
83pod2usage (1) if $options{help};
84
85# Figure out what formatter we're going to use. -c overrides -t.
86my $formatter = 'Pod::Text';
87if ($options{color}) {
88 $formatter = 'Pod::Text::Color';
9741dab0
GS
89 eval { require Term::ANSIColor };
90 if ($@) { die "-c (--color) requires Term::ANSIColor be installed\n" }
6055f9d4
GS
91 require Pod::Text::Color;
92} elsif ($options{termcap}) {
93 $formatter = 'Pod::Text::Termcap';
94 require Pod::Text::Termcap;
73849855
RA
95} elsif ($options{overstrike}) {
96 $formatter = 'Pod::Text::Overstrike';
97 require Pod::Text::Overstrike;
cb1a09d0 98}
73849855 99delete @options{'color', 'termcap', 'overstrike'};
6055f9d4
GS
100
101# Initialize and run the formatter.
8f202758 102my $parser = $formatter->new (%options);
b7ae008f 103do {
b7ae008f 104 my ($input, $output) = splice (@ARGV, 0, 2);
8f202758 105 $parser->parse_from_file ($input, $output);
b7ae008f 106} while (@ARGV);
6055f9d4
GS
107
108__END__
109
110=head1 NAME
111
112pod2text - Convert POD data to formatted ASCII text
113
114=head1 SYNOPSIS
115
59548eca 116pod2text [B<-aclost>] [B<--code>] [B<-i> I<indent>] S<[B<-q> I<quotes>]>
b7ae008f 117S<[B<-w> I<width>]> [I<input> [I<output> ...]]
6055f9d4
GS
118
119pod2text B<-h>
120
121=head1 DESCRIPTION
122
9741dab0
GS
123B<pod2text> is a front-end for Pod::Text and its subclasses. It uses them
124to generate formatted ASCII text from POD source. It can optionally use
125either termcap sequences or ANSI color escape sequences to format the text.
6055f9d4
GS
126
127I<input> is the file to read for POD source (the POD can be embedded in
128code). If I<input> isn't given, it defaults to STDIN. I<output>, if given,
129is the file to which to write the formatted output. If I<output> isn't
b7ae008f
SP
130given, the formatted output is written to STDOUT. Several POD files can be
131processed in the same B<pod2text> invocation (saving module load and compile
132times) by providing multiple pairs of I<input> and I<output> files on the
133command line.
6055f9d4
GS
134
135=head1 OPTIONS
136
137=over 4
138
139=item B<-a>, B<--alt>
140
141Use an alternate output format that, among other things, uses a different
142heading style and marks C<=item> entries with a colon in the left margin.
143
59548eca
JH
144=item B<--code>
145
146Include any non-POD text from the input file in the output as well. Useful
147for viewing code documented with POD blocks with the POD rendered and the
148code left intact.
149
6055f9d4
GS
150=item B<-c>, B<--color>
151
152Format the output with ANSI color escape sequences. Using this option
153requires that Term::ANSIColor be installed on your system.
154
155=item B<-i> I<indent>, B<--indent=>I<indent>
156
157Set the number of spaces to indent regular text, and the default indentation
158for C<=over> blocks. Defaults to 4 spaces if this option isn't given.
159
9741dab0
GS
160=item B<-h>, B<--help>
161
162Print out usage information and exit.
163
6055f9d4
GS
164=item B<-l>, B<--loose>
165
166Print a blank line after a C<=head1> heading. Normally, no blank line is
9741dab0
GS
167printed after C<=head1>, although one is still printed after C<=head2>,
168because this is the expected formatting for manual pages; if you're
169formatting arbitrary text documents, using this option is recommended.
6055f9d4 170
11f72409
RA
171=item B<-m> I<width>, B<--left-margin>=I<width>, B<--margin>=I<width>
172
173The width of the left margin in spaces. Defaults to 0. This is the margin
174for all text, including headings, not the amount by which regular text is
175indented; for the latter, see B<-i> option.
176
73849855
RA
177=item B<-o>, B<--overstrike>
178
179Format the output with overstruck printing. Bold text is rendered as
180character, backspace, character. Italics and file names are rendered as
181underscore, backspace, character. Many pagers, such as B<less>, know how
182to convert this to bold or underlined text.
183
ab1f1d91
JH
184=item B<-q> I<quotes>, B<--quotes>=I<quotes>
185
186Sets the quote marks used to surround CE<lt>> text to I<quotes>. If
187I<quotes> is a single character, it is used as both the left and right
188quote; if I<quotes> is two characters, the first character is used as the
189left quote and the second as the right quoted; and if I<quotes> is four
190characters, the first two are used as the left quote and the second two as
191the right quote.
192
193I<quotes> may also be set to the special value C<none>, in which case no
194quote marks are added around CE<lt>> text.
195
6055f9d4
GS
196=item B<-s>, B<--sentence>
197
9741dab0 198Assume each sentence ends with two spaces and try to preserve that spacing.
6055f9d4
GS
199Without this option, all consecutive whitespace in non-verbatim paragraphs
200is compressed into a single space.
201
202=item B<-t>, B<--termcap>
203
204Try to determine the width of the screen and the bold and underline
205sequences for the terminal from termcap, and use that information in
206formatting the output. Output will be wrapped at two columns less than the
207width of your terminal device. Using this option requires that your system
46bce7d0
GS
208have a termcap file somewhere where Term::Cap can find it and requires that
209your system support termios. With this option, the output of B<pod2text>
210will contain terminal control sequences for your current terminal type.
6055f9d4
GS
211
212=item B<-w>, B<--width=>I<width>, B<->I<width>
213
214The column at which to wrap text on the right-hand side. Defaults to 76,
215unless B<-t> is given, in which case it's two columns less than the width of
216your terminal device.
217
218=back
219
9741dab0
GS
220=head1 DIAGNOSTICS
221
b7ae008f 222If B<pod2text> fails with errors, see L<Pod::Text> and L<Pod::Simple> for
9741dab0
GS
223information about what those errors might mean. Internally, it can also
224produce the following diagnostics:
225
226=over 4
227
228=item -c (--color) requires Term::ANSIColor be installed
229
230(F) B<-c> or B<--color> were given, but Term::ANSIColor could not be
231loaded.
232
233=item Unknown option: %s
234
235(F) An unknown command line option was given.
236
237=back
238
b7ae008f
SP
239In addition, other L<Getopt::Long> error messages may result from invalid
240command-line options.
9741dab0 241
6055f9d4
GS
242=head1 ENVIRONMENT
243
244=over 4
245
246=item COLUMNS
247
248If B<-t> is given, B<pod2text> will take the current width of your screen
249from this environment variable, if available. It overrides terminal width
250information in TERMCAP.
251
252=item TERMCAP
253
254If B<-t> is given, B<pod2text> will use the contents of this environment
255variable if available to determine the correct formatting sequences for your
256current terminal device.
257
258=back
259
6055f9d4
GS
260=head1 SEE ALSO
261
fd20da51 262L<Pod::Text>, L<Pod::Text::Color>, L<Pod::Text::Overstrike>,
b7ae008f 263L<Pod::Text::Termcap>, L<Pod::Simple>
fd20da51
JH
264
265The current version of this script is always available from its web site at
266L<http://www.eyrie.org/~eagle/software/podlators/>. It is also part of the
267Perl core distribution as of 5.6.0.
6055f9d4
GS
268
269=head1 AUTHOR
270
3c014959
JH
271Russ Allbery <rra@stanford.edu>.
272
273=head1 COPYRIGHT AND LICENSE
274
8f202758 275Copyright 1999, 2000, 2001, 2004, 2006 by Russ Allbery <rra@stanford.edu>.
3c014959
JH
276
277This program is free software; you may redistribute it and/or modify it
278under the same terms as Perl itself.
cb1a09d0 279
6055f9d4 280=cut
c07a80fd 281!NO!SUBS!
cb1a09d0 282
c07a80fd 283close OUT or die "Can't close $file: $!";
284chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
285exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
3b5ca523 286chdir $origdir;