1898184e3Ssthenpackage Pod::Perldoc::BaseTo; 2898184e3Ssthenuse strict; 3898184e3Ssthenuse warnings; 4898184e3Ssthen 5898184e3Ssthenuse vars qw($VERSION); 6*9f11ffb7Safresh1$VERSION = '3.28'; 7898184e3Ssthen 8898184e3Ssthenuse Carp qw(croak carp); 9898184e3Ssthenuse Config qw(%Config); 10898184e3Ssthenuse File::Spec::Functions qw(catfile); 11898184e3Ssthen 12898184e3Ssthensub is_pageable { '' } 13898184e3Ssthensub write_with_binmode { 1 } 14898184e3Ssthen 15898184e3Ssthensub output_extension { 'txt' } # override in subclass! 16898184e3Ssthen 17898184e3Ssthen# sub new { my $self = shift; ... } 18898184e3Ssthen# sub parse_from_file( my($class, $in, $out) = ...; ... } 19898184e3Ssthen 20898184e3Ssthen#sub new { return bless {}, ref($_[0]) || $_[0] } 21898184e3Ssthen 22898184e3Ssthen# this is also in Perldoc.pm, but why look there when you're a 23898184e3Ssthen# subclass of this? 24898184e3Ssthensub TRUE () {1} 25898184e3Ssthensub FALSE () {return} 26898184e3Ssthen 27898184e3SsthenBEGIN { 28898184e3Ssthen *is_vms = $^O eq 'VMS' ? \&TRUE : \&FALSE unless defined &is_vms; 29898184e3Ssthen *is_mswin32 = $^O eq 'MSWin32' ? \&TRUE : \&FALSE unless defined &is_mswin32; 30898184e3Ssthen *is_dos = $^O eq 'dos' ? \&TRUE : \&FALSE unless defined &is_dos; 31898184e3Ssthen *is_os2 = $^O eq 'os2' ? \&TRUE : \&FALSE unless defined &is_os2; 32898184e3Ssthen *is_cygwin = $^O eq 'cygwin' ? \&TRUE : \&FALSE unless defined &is_cygwin; 33898184e3Ssthen *is_linux = $^O eq 'linux' ? \&TRUE : \&FALSE unless defined &is_linux; 34898184e3Ssthen *is_hpux = $^O =~ m/hpux/ ? \&TRUE : \&FALSE unless defined &is_hpux; 35898184e3Ssthen *is_openbsd = $^O =~ m/openbsd/ ? \&TRUE : \&FALSE unless defined &is_openbsd; 36*9f11ffb7Safresh1 *is_freebsd = $^O =~ m/freebsd/ ? \&TRUE : \&FALSE unless defined &is_freebsd; 376fb12b70Safresh1 *is_bitrig = $^O =~ m/bitrig/ ? \&TRUE : \&FALSE unless defined &is_bitrig; 38898184e3Ssthen} 39898184e3Ssthen 40898184e3Ssthensub _perldoc_elem { 41898184e3Ssthen my($self, $name) = splice @_,0,2; 42898184e3Ssthen if(@_) { 43898184e3Ssthen $self->{$name} = $_[0]; 44898184e3Ssthen } else { 45898184e3Ssthen $self->{$name}; 46898184e3Ssthen } 47898184e3Ssthen} 48898184e3Ssthen 49898184e3Ssthensub debugging { 50898184e3Ssthen my( $self, @messages ) = @_; 51898184e3Ssthen 52898184e3Ssthen ( defined(&Pod::Perldoc::DEBUG) and &Pod::Perldoc::DEBUG() ) 53898184e3Ssthen } 54898184e3Ssthen 55898184e3Ssthensub debug { 56898184e3Ssthen my( $self, @messages ) = @_; 57898184e3Ssthen return unless $self->debugging; 58898184e3Ssthen print STDERR map { "DEBUG $_" } @messages; 59898184e3Ssthen } 60898184e3Ssthen 61898184e3Ssthensub warn { 62898184e3Ssthen my( $self, @messages ) = @_; 63898184e3Ssthen carp join "\n", @messages, ''; 64898184e3Ssthen } 65898184e3Ssthen 66898184e3Ssthensub die { 67898184e3Ssthen my( $self, @messages ) = @_; 68898184e3Ssthen croak join "\n", @messages, ''; 69898184e3Ssthen } 70898184e3Ssthen 71898184e3Ssthensub _get_path_components { 72898184e3Ssthen my( $self ) = @_; 73898184e3Ssthen 74898184e3Ssthen my @paths = split /\Q$Config{path_sep}/, $ENV{PATH}; 75898184e3Ssthen 76898184e3Ssthen return @paths; 77898184e3Ssthen } 78898184e3Ssthen 79898184e3Ssthensub _find_executable_in_path { 80898184e3Ssthen my( $self, $program ) = @_; 81898184e3Ssthen 82898184e3Ssthen my @found = (); 83898184e3Ssthen foreach my $dir ( $self->_get_path_components ) { 84898184e3Ssthen my $binary = catfile( $dir, $program ); 85898184e3Ssthen $self->debug( "Looking for $binary\n" ); 86898184e3Ssthen next unless -e $binary; 87898184e3Ssthen unless( -x $binary ) { 88898184e3Ssthen $self->warn( "Found $binary but it's not executable. Skipping.\n" ); 89898184e3Ssthen next; 90898184e3Ssthen } 91898184e3Ssthen $self->debug( "Found $binary\n" ); 92898184e3Ssthen push @found, $binary; 93898184e3Ssthen } 94898184e3Ssthen 95898184e3Ssthen return @found; 96898184e3Ssthen } 97898184e3Ssthen 98898184e3Ssthen1; 99898184e3Ssthen 100898184e3Ssthen__END__ 101898184e3Ssthen 102898184e3Ssthen=head1 NAME 103898184e3Ssthen 104898184e3SsthenPod::Perldoc::BaseTo - Base for Pod::Perldoc formatters 105898184e3Ssthen 106898184e3Ssthen=head1 SYNOPSIS 107898184e3Ssthen 108898184e3Ssthen package Pod::Perldoc::ToMyFormat; 109898184e3Ssthen 110b8851fccSafresh1 use parent qw( Pod::Perldoc::BaseTo ); 111898184e3Ssthen ... 112898184e3Ssthen 113898184e3Ssthen=head1 DESCRIPTION 114898184e3Ssthen 115898184e3SsthenThis package is meant as a base of Pod::Perldoc formatters, 116898184e3Ssthenlike L<Pod::Perldoc::ToText>, L<Pod::Perldoc::ToMan>, etc. 117898184e3Ssthen 118898184e3SsthenIt provides default implementations for the methods 119898184e3Ssthen 120898184e3Ssthen is_pageable 121898184e3Ssthen write_with_binmode 122898184e3Ssthen output_extension 123898184e3Ssthen _perldoc_elem 124898184e3Ssthen 125898184e3SsthenThe concrete formatter must implement 126898184e3Ssthen 127898184e3Ssthen new 128898184e3Ssthen parse_from_file 129898184e3Ssthen 130898184e3Ssthen=head1 SEE ALSO 131898184e3Ssthen 132898184e3SsthenL<perldoc> 133898184e3Ssthen 134898184e3Ssthen=head1 COPYRIGHT AND DISCLAIMERS 135898184e3Ssthen 136898184e3SsthenCopyright (c) 2002-2007 Sean M. Burke. 137898184e3Ssthen 138898184e3SsthenThis library is free software; you can redistribute it and/or modify it 139898184e3Ssthenunder the same terms as Perl itself. 140898184e3Ssthen 141898184e3SsthenThis program is distributed in the hope that it will be useful, but 142898184e3Ssthenwithout any warranty; without even the implied warranty of 143898184e3Ssthenmerchantability or fitness for a particular purpose. 144898184e3Ssthen 145898184e3Ssthen=head1 AUTHOR 146898184e3Ssthen 147898184e3SsthenCurrent maintainer: Mark Allen C<< <mallen@cpan.org> >> 148898184e3Ssthen 149898184e3SsthenPast contributions from: 150898184e3Ssthenbrian d foy C<< <bdfoy@cpan.org> >> 151898184e3SsthenAdriano R. Ferreira C<< <ferreira@cpan.org> >>, 152898184e3SsthenSean M. Burke C<< <sburke@cpan.org> >> 153898184e3Ssthen 154898184e3Ssthen=cut 155