1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372
|
#!/usr/bin/perl
###############################################################################
#
# Simple utility to convert the example programs listed in the README file into
# a Pod doc for easier access via CPAN.
#
# reverse ('(c)'), November 2009, John McNamara, jmcnamara@cpan.org
#
use strict;
use warnings;
my %images;
main();
###############################################################################
#
# main()
#
# Convert the example programs listed in the README file into a Pod doc for
# easier access via CPAN.
#
sub main {
my @examples;
my $examples_dir = $ARGV[0] || '.';
# Get the version from the local Excel::Writer::XLSX.
require "$examples_dir/../lib/Excel/Writer/XLSX.pm";
my $version = Excel::Writer::XLSX->VERSION();
# Read the filenames and descriptions from the examples README file.
open my $readme, '<', $examples_dir . '/README'
or die "Couldn't open $examples_dir/README file: $!\n";
while ( my $line = <$readme> ) {
if ( $line =~ /^\w+.pl\s/ ) {
chomp $line;
my ( $filename, $description ) = split " ", $line, 2;
push @examples, [ $filename, $description ];
}
}
die "Didn't find example programs in $examples_dir/README\n"
unless @examples;
read_images();
print_header( $version );
print_index( @examples );
for my $example ( @examples ) {
my $filename = $example->[0];
print_example( $examples_dir, $filename, $version );
}
print_footer();
}
###############################################################################
#
# print_header()
#
# Print the header section of the Pod documentation.
#
sub print_header {
my $version = shift;
# I just don't like here docs.
print "package Excel::Writer::XLSX::Examples;\n\n";
print '#' x 79, "\n";
print "#\n";
print "# Examples - Excel::Writer::XLSX examples.\n";
print "#\n";
print "# A documentation only module showing the examples that are\n";
print "# included in the Excel::Writer::XLSX distribution. This\n";
print "# file was generated automatically via the gen_examples_pod.pl\n";
print "# program that is also included in the examples directory.\n";
print "#\n";
print "# Copyright 2000-2012, John McNamara, jmcnamara\@cpan.org\n";
print "#\n";
print "# Documentation after __END__\n";
print "#\n\n";
print "use strict;\n";
print "use warnings;\n";
print "\n";
print "our \$VERSION = '$version';\n\n";
print "1;\n";
print "\n";
print "__END__\n\n";
print "=pod\n\n";
print "=encoding ISO8859-1\n\n";
print "=head1 NAME\n\n";
print "Examples - Excel::Writer::XLSX example programs.\n\n";
print "=head1 DESCRIPTION\n\n";
print "This is a documentation only module showing the examples that are\n";
print "included in the L<Excel::Writer::XLSX> distribution.\n\n";
print "This file was auto-generated via the gen_examples_pod.pl\n";
print "program that is also included in the examples directory.\n";
print "\n";
}
###############################################################################
#
# print_index()
#
# Print an index to the example programs with the short descriptions from the
# README file and a link to the appropriate section.
#
sub print_index {
my @examples = @_;
my $count = scalar @examples;
print "=head1 Example programs\n\n";
print "The following is a list of the $count example programs that are ";
print "included in the Excel::Writer::XLSX distribution.\n\n";
print "=over\n\n";
for my $example ( @examples ) {
print "=item * L<Example: ";
print $example->[0];
print "> ";
print $example->[1];
print "\n\n";
}
print "=back\n\n";
}
###############################################################################
#
# print_example()
#
# Print each example program in its own =head1 section with a short description
# extracted from the first comment section of at the start and the code
# in a Pod verbatim section.
#
sub print_example {
my $examples_dir = shift;
my $example = shift;
my $version = shift;
my $verbatim = '';
my $in_header = 0;
open my $example_fh, '<', $examples_dir . '/' . $example;
if ( !defined $example_fh ) {
warn "Couldn't open $examples_dir/$example: $!\n";
return undef;
}
print "=head2 Example: $example\n\n";
while ( my $line = <$example_fh> ) {
$line =~ s/\r//;
$verbatim .= ' ' . $line;
# Ignore the most common copyright line.
next if $line =~ m/jmcnamara/;
# Look for the first comment section but ignore the #!perl shebang line.
if ( $in_header == 0 && $line !~ m/perl/ && $line =~ m/^#/ ) {
$in_header = 1;
}
# In the first comment section.
if ( $in_header == 1 ) {
# Unset flag when leaving the first comment section.
$in_header++ if $line !~ m/^#/;
# Remove the comment char and the first leading space. This maintain
# any embedded verbatim like sections.
$line =~ s/^#+[ ]{0,1}//;
print $line;
}
}
print_image_html( $example );
print $verbatim, "\n\n";
print 'Download this example: L<http://cpansearch.perl.org/src/JMCNAMARA/';
print "Excel-Writer-XLSX-$version/examples/$example>\n\n";
}
###############################################################################
#
# print_footer()
#
# Print the footer section of the Pod documentation
#
sub print_footer {
print "=head1 AUTHOR\n\n";
print "John McNamara jmcnamara\@cpan.org\n\n";
print "Contributed examples contain the original author's name.\n\n";
print "=head1 COPYRIGHT\n\n";
print "Copyright MM-MMXII, John McNamara.\n\n";
print "All Rights Reserved. This module is free software. It may be used, ";
print "redistributed and/or modified under the same terms as Perl itself.";
print "\n\n";
print "=cut\n";
}
###############################################################################
#
# read_images()
#
# Read the images associated with examples from the end of this file.
#
sub read_images {
while ( <DATA> ) {
next unless /\S/;
next if /^#/;
chomp;
$images{$_} = 1;
}
}
###############################################################################
#
# print_image_html()
#
# Print an embedded html image in the Pod doc if one exists for the example.
#
sub print_image_html {
my $example = shift;
my $image = $example;
$image =~ s/pl$/jpg/;
return unless exists $images{$image};
my $url = 'http://jmcnamara.github.io/excel-writer-xlsx/images/examples';
my $width = 640;
my $height = 420;
print "=begin html\n\n";
print '<p><center>';
print qq{<img src="$url/$image" };
print qq{width="$width" };
print qq{height="$height" };
print qq{alt="Output from $example" />};
print qq{</center></p>\n\n};
print "=end html\n\n";
print "Source code for this example:\n\n";
}
__END__
# Image files used in the documentation.
a_simple.jpg
array_formula.jpg
autofilter.jpg
autofit.jpg
bigfile.jpg
chart_area.jpg
chart_bar.jpg
chart_column.jpg
chart_line.jpg
chart_pie.jpg
chart_doughnut.jpg
chart_radar.jpg
chart_scatter.jpg
chart_secondary_axis.jpg
chart_stock.jpg
chart_data_table.jpg
chart_data_tools.jpg
chess.jpg
colors.jpg
comments1.jpg
comments2.jpg
copyformat.jpg
conditional_format.jpg
data_validate.jpg
date_time.jpg
defined_name.jpg
demo.jpg
diag_border.jpg
filehandle.jpg
formats.jpg
formula_result.jpg
headers.jpg
hide_row_col.jpg
hide_sheet.jpg
hyperlink1.jpg
images.jpg
indent.jpg
macros.jpg
merge1.jpg
merge2.jpg
merge3.jpg
merge4.jpg
merge5.jpg
merge6.jpg
outline.jpg
outline_collapsed.jpg
panes.jpg
properties.jpg
protection.jpg
regions.jpg
repeat.jpg
rich_strings.jpg
right_to_left.jpg
row_wrap.jpg
sales.jpg
shape1.jpg
shape2.jpg
shape3.jpg
shape4.jpg
shape5.jpg
shape6.jpg
shape7.jpg
shape8.jpg
shape_all.jpg
sparklines1.jpg
sparklines2.jpg
stats.jpg
stats_ext.jpg
stocks.jpg
tab_colors.jpg
tables.jpg
textwrap.jpg
unicode_2022_jp.jpg
unicode_8859_11.jpg
unicode_8859_7.jpg
unicode_big5.jpg
unicode_cp1251.jpg
unicode_cp1256.jpg
unicode_cyrillic.jpg
unicode_koi8r.jpg
unicode_list.jpg
unicode_polish_utf8.jpg
unicode_shift_jis.jpg
unicode_utf16.jpg
unicode_utf16_japan.jpg
write_arrays.jpg
write_handler1.jpg
write_handler2.jpg
write_handler3.jpg
write_handler4.jpg
|