1898184e3Ssthenpackage Pod::Perldoc::ToTerm;
2898184e3Ssthenuse strict;
3898184e3Ssthenuse warnings;
4898184e3Ssthen
5898184e3Ssthenuse vars qw($VERSION);
6*9f11ffb7Safresh1$VERSION = '3.28';
7898184e3Ssthen
8898184e3Ssthenuse parent qw(Pod::Perldoc::BaseTo);
9898184e3Ssthen
10898184e3Ssthensub is_pageable        { 1 }
11898184e3Ssthensub write_with_binmode { 0 }
12898184e3Ssthensub output_extension   { 'txt' }
13898184e3Ssthen
14898184e3Ssthenuse Pod::Text::Termcap ();
15898184e3Ssthen
16898184e3Ssthensub alt       { shift->_perldoc_elem('alt'     , @_) }
17898184e3Ssthensub indent    { shift->_perldoc_elem('indent'  , @_) }
18898184e3Ssthensub loose     { shift->_perldoc_elem('loose'   , @_) }
19898184e3Ssthensub quotes    { shift->_perldoc_elem('quotes'  , @_) }
20898184e3Ssthensub sentence  { shift->_perldoc_elem('sentence', @_) }
216fb12b70Safresh1sub width     {
226fb12b70Safresh1    my $self = shift;
236fb12b70Safresh1    $self->_perldoc_elem('width' , @_) ||
246fb12b70Safresh1    $self->_get_columns_from_manwidth  ||
256fb12b70Safresh1	$self->_get_columns_from_stty      ||
266fb12b70Safresh1	$self->_get_default_width;
276fb12b70Safresh1}
286fb12b70Safresh1
29*9f11ffb7Safresh1sub pager_configuration {
30*9f11ffb7Safresh1  my($self, $pager, $perldoc) = @_;
31*9f11ffb7Safresh1
32*9f11ffb7Safresh1  # do not modify anything on Windows or DOS
33*9f11ffb7Safresh1  return if ( $perldoc->is_mswin32 || $perldoc->is_dos );
34*9f11ffb7Safresh1
35*9f11ffb7Safresh1  if ( $pager =~ /less/ ) {
36*9f11ffb7Safresh1    $self->_maybe_modify_environment('LESS');
37*9f11ffb7Safresh1  }
38*9f11ffb7Safresh1  elsif ( $pager =~ /more/ ) {
39*9f11ffb7Safresh1    $self->_maybe_modify_environment('MORE');
40*9f11ffb7Safresh1  }
41*9f11ffb7Safresh1
42*9f11ffb7Safresh1  return;
43*9f11ffb7Safresh1}
44*9f11ffb7Safresh1
45*9f11ffb7Safresh1sub _maybe_modify_environment {
46*9f11ffb7Safresh1  my($self, $name) = @_;
47*9f11ffb7Safresh1
48*9f11ffb7Safresh1  if ( ! defined $ENV{$name} ) {
49*9f11ffb7Safresh1    $ENV{$name} = "-R";
50*9f11ffb7Safresh1  }
51*9f11ffb7Safresh1
52*9f11ffb7Safresh1  # if the environment is set, don't modify
53*9f11ffb7Safresh1  # anything
54*9f11ffb7Safresh1
55*9f11ffb7Safresh1}
56*9f11ffb7Safresh1
576fb12b70Safresh1sub _get_stty { `stty -a` }
586fb12b70Safresh1
596fb12b70Safresh1sub _get_columns_from_stty {
606fb12b70Safresh1	my $output = $_[0]->_get_stty;
616fb12b70Safresh1
626fb12b70Safresh1	if(    $output =~ /\bcolumns\s+(\d+)/ )    { return $1; }
636fb12b70Safresh1	elsif( $output =~ /;\s*(\d+)\s+columns;/ ) { return $1; }
646fb12b70Safresh1	else                                       { return  0 }
656fb12b70Safresh1	}
666fb12b70Safresh1
676fb12b70Safresh1sub _get_columns_from_manwidth {
686fb12b70Safresh1	my( $self ) = @_;
696fb12b70Safresh1
706fb12b70Safresh1	return 0 unless defined $ENV{MANWIDTH};
716fb12b70Safresh1
726fb12b70Safresh1	unless( $ENV{MANWIDTH} =~ m/\A\d+\z/ ) {
736fb12b70Safresh1		$self->warn( "Ignoring non-numeric MANWIDTH ($ENV{MANWIDTH})\n" );
746fb12b70Safresh1		return 0;
756fb12b70Safresh1		}
766fb12b70Safresh1
776fb12b70Safresh1	if( $ENV{MANWIDTH} == 0 ) {
786fb12b70Safresh1		$self->warn( "Ignoring MANWIDTH of 0. Really? Why even run the program? :)\n" );
796fb12b70Safresh1		return 0;
806fb12b70Safresh1		}
816fb12b70Safresh1
826fb12b70Safresh1	if( $ENV{MANWIDTH} =~ m/\A(\d+)\z/ ) { return $1 }
836fb12b70Safresh1
846fb12b70Safresh1	return 0;
856fb12b70Safresh1	}
866fb12b70Safresh1
876fb12b70Safresh1sub _get_default_width {
886fb12b70Safresh1	76
896fb12b70Safresh1	}
906fb12b70Safresh1
91898184e3Ssthen
92898184e3Ssthensub new { return bless {}, ref($_[0]) || $_[0] }
93898184e3Ssthen
94898184e3Ssthensub parse_from_file {
95898184e3Ssthen  my $self = shift;
96898184e3Ssthen
976fb12b70Safresh1  $self->{width} = $self->width();
986fb12b70Safresh1
99898184e3Ssthen  my @options =
100898184e3Ssthen    map {; $_, $self->{$_} }
101898184e3Ssthen      grep !m/^_/s,
102898184e3Ssthen        keys %$self
103898184e3Ssthen  ;
104898184e3Ssthen
105898184e3Ssthen  defined(&Pod::Perldoc::DEBUG)
106898184e3Ssthen   and Pod::Perldoc::DEBUG()
107898184e3Ssthen   and print "About to call new Pod::Text::Termcap ",
1086fb12b70Safresh1    $Pod::Text::VERSION ? "(v$Pod::Text::Termcap::VERSION) " : '',
109898184e3Ssthen    "with options: ",
110898184e3Ssthen    @options ? "[@options]" : "(nil)", "\n";
111898184e3Ssthen  ;
112898184e3Ssthen
113898184e3Ssthen  Pod::Text::Termcap->new(@options)->parse_from_file(@_);
114898184e3Ssthen}
115898184e3Ssthen
116898184e3Ssthen1;
117898184e3Ssthen
118898184e3Ssthen=head1 NAME
119898184e3Ssthen
120898184e3SsthenPod::Perldoc::ToTerm - render Pod with terminal escapes
121898184e3Ssthen
122898184e3Ssthen=head1 SYNOPSIS
123898184e3Ssthen
124898184e3Ssthen  perldoc -o term Some::Modulename
125898184e3Ssthen
126898184e3Ssthen=head1 DESCRIPTION
127898184e3Ssthen
128898184e3SsthenThis is a "plug-in" class that allows Perldoc to use
129898184e3SsthenPod::Text as a formatter class.
130898184e3Ssthen
131898184e3SsthenIt supports the following options, which are explained in
132898184e3SsthenL<Pod::Text>: alt, indent, loose, quotes, sentence, width
133898184e3Ssthen
134898184e3SsthenFor example:
135898184e3Ssthen
136898184e3Ssthen  perldoc -o term -w indent:5 Some::Modulename
137898184e3Ssthen
138*9f11ffb7Safresh1=head1 PAGER FORMATTING
139*9f11ffb7Safresh1
140*9f11ffb7Safresh1Depending on the platform, and because this class emits terminal escapes it
141*9f11ffb7Safresh1will attempt to set the C<-R> flag on your pager by injecting the flag into
142*9f11ffb7Safresh1your environment variable for C<less> or C<more>.
143*9f11ffb7Safresh1
144*9f11ffb7Safresh1On Windows and DOS, this class will not modify any environment variables.
145*9f11ffb7Safresh1
146898184e3Ssthen=head1 CAVEAT
147898184e3Ssthen
148898184e3SsthenThis module may change to use a different text formatter class in the
149898184e3Ssthenfuture, and this may change what options are supported.
150898184e3Ssthen
151898184e3Ssthen=head1 SEE ALSO
152898184e3Ssthen
153898184e3SsthenL<Pod::Text>, L<Pod::Text::Termcap>, L<Pod::Perldoc>
154898184e3Ssthen
155898184e3Ssthen=head1 COPYRIGHT AND DISCLAIMERS
156898184e3Ssthen
157*9f11ffb7Safresh1Copyright (c) 2017 Mark Allen.
158898184e3Ssthen
159898184e3SsthenThis program is free software; you can redistribute it and/or modify it
160898184e3Ssthenunder the terms of either: the GNU General Public License as published
161898184e3Ssthenby the Free Software Foundation; or the Artistic License.
162898184e3Ssthen
163898184e3SsthenSee http://dev.perl.org/licenses/ for more information.
164898184e3Ssthen
165898184e3Ssthen=head1 AUTHOR
166898184e3Ssthen
167898184e3SsthenMark Allen C<< <mallen@cpan.org> >>
168898184e3Ssthen
169898184e3Ssthen=cut
170