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