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