From 711ef275e7ffddfdf7c89fa86408fbf663bbac1f Mon Sep 17 00:00:00 2001 From: Mitch Jackson Date: Tue, 19 Feb 2019 20:17:29 -0500 Subject: [PATCH] RT# 81961 Pod2Html can use installed libs, or Freeside source --- FS/FS/Misc/Pod2Html.pm | 91 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 83 insertions(+), 8 deletions(-) diff --git a/FS/FS/Misc/Pod2Html.pm b/FS/FS/Misc/Pod2Html.pm index 08358aa77..1dfca048c 100644 --- a/FS/FS/Misc/Pod2Html.pm +++ b/FS/FS/Misc/Pod2Html.pm @@ -2,6 +2,7 @@ package FS::Misc::Pod2Html; use strict; use warnings; use Carp qw( croak ); +use File::Copy; use Pod::Simple::HTML; use Pod::Simple::HTMLBatch; use Pod::Simple::Search; @@ -9,12 +10,15 @@ use Pod::Simple::Search; use base 'Exporter'; our @EXPORT_OK = qw( fs_pod2html + fs_pod2html_from_src + fs_pod2html_from_dirs $include_system_perl_modules $quiet_mode ); our $include_system_perl_modules = 1; our $quiet_mode = 0; +our $DEBUG = 0; =head1 NAME @@ -31,9 +35,9 @@ Usage: use FS::Misc::Pod2Html 'fs_pod2html'; fs_pod2html( '/output/directory' ); -=head2 fs_pod2html /output/directory/ +Also: -Generates Freeside-themed HTML docuemtnation from installed perl modules + perl -MFS::Misc::Pod2Html -e "FS::Misc::Pod2Html::fs_pod2html('/tmp/pod2html');" =cut @@ -52,14 +56,15 @@ our $html_after_title = q{}; our $html_footer = q{<% include ('/elements/footer.html' ) %>}; -sub fs_pod2html { - my $html_dir = shift - or croak 'Please specify an output directory'; +=head2 fs_pod2html output_dir - croak "Directory $html_dir: No write access" - unless -w $html_dir; +Generates Freeside-themed HTML docuemtnation from installed perl modules - my @search_dirs = ( +=cut + +sub fs_pod2html { + fs_pod2html_from_dirs( + shift, '/usr/local/share/perl/5.24.1', '/usr/local/bin', $include_system_perl_modules ? ( @@ -68,12 +73,79 @@ sub fs_pod2html { '/usr/share/perl/5.24.1', ) : (), ); +} + +=head2 fs_pod2html_from_src output_dir + +Generate Freeside-themed HTML documentation from a Freeside source tree + +Will fail, unless run with CWD at the root of the Freesidse source tree + +=cut + +sub fs_pod2html_from_src { + my $html_dir = shift; + + fs_pod2html_from_dirs( + $html_dir, + 'FS/bin', + 'bin', + 'FS', + 'fs_selfservice/FS-SelfService', + # '/usr/local/share/perl/5.24.1', + # '/usr/local/bin', + $include_system_perl_modules ? ( + '/usr/share/perl5', + '/usr/share/perl/5.24', + '/usr/share/perl/5.24.1', + ) : (), + ); + + # FS-SelfService is loosely packaged: + # perl modules are not stored in lib/FS, scripts not stored in /bin, so + # batch_convert() places these .html in the wrong locations + # + # Copy to correct locations, and correct relative links + copy( "$html_dir/SelfService.html", "$html_dir/FS/SelfService.html" ); + mkdir( "$html_dir/FS/SelfService" ); + copy( "$html_dir/SelfService/XMLRPC.html", "$html_dir/FS/SelfService/XMLRPC.html" ); + for my $sed_cmd ( + 'sed -i "s/href=\"\.\//href=\"\.\.\//g" "'.$html_dir.'/FS/SelfService.html"', + 'sed -i "s/href=\"\\..\//href=\"\.\.\/\.\.\//g" "'.$html_dir.'/FS/SelfService/XMLRPC.html"', + ) { + `$sed_cmd` + } +} + +=head2 fs_pod2html output_dir @source_scan_dirs + +Generate Freeside-themed HTML documentation, scanning the provided directories + +=cut + +sub fs_pod2html_from_dirs { + my $html_dir = shift + or croak 'Please specify an output directory'; + + croak "Directory $html_dir: No write access" + unless -w $html_dir; + + my @search_dirs = @_; + + for my $dir ( @search_dirs ) { + unless ( -d $dir ) { + croak "Cannot continue - source directory ($dir) not found! "; + } + } my $parser = Pod::Simple::HTMLBatch->new; $parser->verbose(0) if $quiet_mode; + $parser->verbose(2) + if $DEBUG; + $parser->search_class('Inline::Pod::Simple::Search'); $parser->html_render_class('Inline::Pod::Simple::HTML'); $parser->contents_page_start( @@ -105,8 +177,11 @@ sub new { my $class = shift; my $self = Pod::Simple::Search->new( @_ ); $self->laborious(1); + $self->verbose(2) + if $DEBUG; $self; } + 1; =head1 NAME -- 2.11.0