• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..29-Jan-2019-

Base.pmH A D29-Jan-20191.1 KiB8452

Can.pmH A D29-Jan-20193.3 KiB164115

Fetch.pmH A D29-Jan-20192.4 KiB9475

Makefile.pmH A D29-Jan-201911.8 KiB419318

Metadata.pmH A D29-Jan-201917.7 KiB723589

ReadmeFromPod.pmH A D29-Jan-20194.1 KiB185136

Win32.pmH A D29-Jan-20191.8 KiB6547

WriteAll.pmH A D29-Jan-20191.2 KiB6445

ReadmeFromPod.pm

1#line 1
2package Module::Install::ReadmeFromPod;
3
4use 5.006;
5use strict;
6use warnings;
7use base qw(Module::Install::Base);
8use vars qw($VERSION);
9
10$VERSION = '0.30';
11
12{
13
14    # these aren't defined until after _require_admin is run, so
15    # define them so prototypes are available during compilation.
16    sub io;
17    sub capture(&;@);
18
19#line 28
20
21    my $done = 0;
22
23    sub _require_admin {
24
25	# do this once to avoid redefinition warnings from IO::All
26	return if $done;
27
28	require IO::All;
29	IO::All->import( '-binary' );
30
31	require Capture::Tiny;
32	Capture::Tiny->import ( 'capture' );
33
34	return;
35    }
36
37}
38
39sub readme_from {
40  my $self = shift;
41  return unless $self->is_admin;
42
43  _require_admin;
44
45  # Input file
46  my $in_file  = shift || $self->_all_from
47    or die "Can't determine file to make readme_from";
48
49  # Get optional arguments
50  my ($clean, $format, $out_file, $options);
51  my $args = shift;
52  if ( ref $args ) {
53    # Arguments are in a hashref
54    if ( ref($args) ne 'HASH' ) {
55      die "Expected a hashref but got a ".ref($args)."\n";
56    } else {
57      $clean    = $args->{'clean'};
58      $format   = $args->{'format'};
59      $out_file = $args->{'output_file'};
60      $options  = $args->{'options'};
61    }
62  } else {
63    # Arguments are in a list
64    $clean    = $args;
65    $format   = shift;
66    $out_file = shift;
67    $options  = \@_;
68  }
69
70  # Default values;
71  $clean  ||= 0;
72  $format ||= 'txt';
73
74  # Generate README
75  print "readme_from $in_file to $format\n";
76  if ($format =~ m/te?xt/) {
77    $out_file = $self->_readme_txt($in_file, $out_file, $options);
78  } elsif ($format =~ m/html?/) {
79    $out_file = $self->_readme_htm($in_file, $out_file, $options);
80  } elsif ($format eq 'man') {
81    $out_file = $self->_readme_man($in_file, $out_file, $options);
82  } elsif ($format eq 'md') {
83    $out_file = $self->_readme_md($in_file, $out_file, $options);
84  } elsif ($format eq 'pdf') {
85    $out_file = $self->_readme_pdf($in_file, $out_file, $options);
86  }
87
88  if ($clean) {
89    $self->clean_files($out_file);
90  }
91
92  return 1;
93}
94
95
96sub _readme_txt {
97  my ($self, $in_file, $out_file, $options) = @_;
98  $out_file ||= 'README';
99  require Pod::Text;
100  my $parser = Pod::Text->new( @$options );
101  my $io = io->file($out_file)->open(">");
102  my $out_fh = $io->io_handle;
103  $parser->output_fh( *$out_fh );
104  $parser->parse_file( $in_file );
105  return $out_file;
106}
107
108
109sub _readme_htm {
110  my ($self, $in_file, $out_file, $options) = @_;
111  $out_file ||= 'README.htm';
112  require Pod::Html;
113  my ($o) = capture {
114    Pod::Html::pod2html(
115      "--infile=$in_file",
116      "--outfile=-",
117      @$options,
118    );
119  };
120  io->file($out_file)->print($o);
121  # Remove temporary files if needed
122  for my $file ('pod2htmd.tmp', 'pod2htmi.tmp') {
123    if (-e $file) {
124      unlink $file or warn "Warning: Could not remove file '$file'.\n$!\n";
125    }
126  }
127  return $out_file;
128}
129
130
131sub _readme_man {
132  my ($self, $in_file, $out_file, $options) = @_;
133  $out_file ||= 'README.1';
134  require Pod::Man;
135  my $parser = Pod::Man->new( @$options );
136  my $io = io->file($out_file)->open(">");
137  my $out_fh = $io->io_handle;
138  $parser->output_fh( *$out_fh );
139  $parser->parse_file( $in_file );
140  return $out_file;
141}
142
143
144sub _readme_pdf {
145  my ($self, $in_file, $out_file, $options) = @_;
146  $out_file ||= 'README.pdf';
147  eval { require App::pod2pdf; }
148    or die "Could not generate $out_file because pod2pdf could not be found\n";
149  my $parser = App::pod2pdf->new( @$options );
150  $parser->parse_from_file($in_file);
151  my ($o) = capture { $parser->output };
152  io->file($out_file)->print($o);
153  return $out_file;
154}
155
156sub _readme_md {
157  my ($self, $in_file, $out_file, $options) = @_;
158  $out_file ||= 'README.md';
159  require Pod::Markdown;
160  my $parser = Pod::Markdown->new( @$options );
161  my $io = io->file($out_file)->open(">");
162  my $out_fh = $io->io_handle;
163  $parser->output_fh( *$out_fh );
164  $parser->parse_file( $in_file );
165  return $out_file;
166}
167
168
169sub _all_from {
170  my $self = shift;
171  return unless $self->admin->{extensions};
172  my ($metadata) = grep {
173    ref($_) eq 'Module::Install::Metadata';
174  } @{$self->admin->{extensions}};
175  return unless $metadata;
176  return $metadata->{values}{all_from} || '';
177}
178
179'Readme!';
180
181__END__
182
183#line 316
184
185