ok now I am moving things around for no good reason...
[catagits/HTML-Zoom.git] / maint / synopsis-extractor
CommitLineData
d80786d0 1#!/usr/bin/env perl
2
3use strict;
2f9614a0 4use warnings;
d80786d0 5
2f9614a0 6use FindBin qw($Bin);
7use File::Find;
8use File::Spec;
d80786d0 9
2f9614a0 10sub slurp_file {
11 undef $/;
8d36d8cb 12 open(my $fh, '<', shift) || return;
2f9614a0 13 if(my $whole_file = <$fh>) {
14 return $whole_file;
15 } else {
16 return;
17 }
18}
d80786d0 19
2f9614a0 20sub extract_synopsis {
21 my $string = shift || return;
22 my $head_or_cut = qr[head|cut]x;
23 if($string=~m/^=head1 SYNOPSIS\n(.*?)^=$head_or_cut/sm) {
8d36d8cb 24 my $extracted = $1;
25 $extracted=~s/^\S.+?$//m; # wipe out non code lines in pod
26 my $begin_end = qr[begin|end]x;
77198646 27 $extracted=~s/\n^=$begin_end testinfo\n\n//smg; # remove test block
8d36d8cb 28
29 return $extracted;
2f9614a0 30 } else {
31 return;
32 }
33}
d80786d0 34
2f9614a0 35sub normalize_indent {
36 my $extracted = shift || return;
8d36d8cb 37 if($extracted=~m/([ \t]+)(\S+)/) {
2f9614a0 38 $extracted=~s/^$1//gsm;
39 return $extracted;
40 } else {
41 return;
42 }
43}
d80786d0 44
2f9614a0 45sub create_test_string {
46 my $extracted = shift || return;
47 return <<TEST
48use strict;
d80786d0 49use warnings FATAL => 'all';
50use Test::More qw(no_plan);
2f9614a0 51$extracted
52TEST
53}
54
55sub create_test_path_from_lib {
56 my $module_name = shift;
57 $module_name =~s/\.pm$//;
58 return File::Spec->catfile($Bin, '..', 't', 'synopsis', lc($module_name).'.t');
59}
60
8d36d8cb 61sub create_or_update_test_file {
62 my ($target, $synopsis_string) = @_;
63 return unless $synopsis_string && $target;
2f9614a0 64 print "Writing $target\n";
65 open my $syn_test, '>', $target
66 or die "Couldn't open $target - you screwed something up. Go fix it.\n";
8d36d8cb 67 print $syn_test $synopsis_string;
2f9614a0 68}
69
4c8ee496 70sub wanted {
8d36d8cb 71 my $target_path =
72 create_test_path_from_lib $_;
73 my $synopsis_string =
74 create_test_string
2f9614a0 75 normalize_indent
76 extract_synopsis
8d36d8cb 77 slurp_file $File::Find::name;
8d36d8cb 78 create_or_update_test_file
79 $target_path,
80 $synopsis_string,
4c8ee496 81}
8d36d8cb 82
4c8ee496 83find(\&wanted, File::Spec->catfile($Bin, '..', 'lib'));
d80786d0 84