summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorJames E Keenan <jkeenan@cpan.org>2021-03-14 00:08:47 +0000
committerJames E Keenan <jkeenan@cpan.org>2021-07-06 01:08:03 +0000
commitd32e5dc4f13e3a8f42c445ab32d50f7aff8d1cd7 (patch)
treeff7112dbcfe220d0d6382fad5728f18136c359fd /ext
parent1906cbf52f374975647233a566ec1c711cfed623 (diff)
downloadperl-d32e5dc4f13e3a8f42c445ab32d50f7aff8d1cd7.tar.gz
Introduce Pod::Html::Auxiliary
This package will hold helper subroutines used within the main package or in tests. They can be placed in a separate module and imported into Pod::Html because they won't depend on having the globals passed as an argument. They will also be potentially independently testable. Start with html_escape(). Move anchorify(), htmlify() to Auxiliary.pm. Also _unixify -- now as unixify(). Move relativize_url() to Auxiliary. Move usage() to Auxiliary. Move trim_leading_whitespace to Auxiliary. Move parse_command_line() to Auxiliary. Keep porting tests happy. Increment $VERSION. Run: ./perl -Ilib regen/lib_cleanup.pl anchorify.t, eol.t: Correct excessive corrections. Standardize setting of $VERSION.
Diffstat (limited to 'ext')
-rw-r--r--ext/Pod-Html/lib/Pod/Html.pm264
-rw-r--r--ext/Pod-Html/lib/Pod/Html/Auxiliary.pm292
-rw-r--r--ext/Pod-Html/t/anchorify.t5
-rw-r--r--ext/Pod-Html/t/cache.t5
-rw-r--r--ext/Pod-Html/t/crossref2.t5
-rw-r--r--ext/Pod-Html/t/eol.t3
-rw-r--r--ext/Pod-Html/t/feature2.t1
-rw-r--r--ext/Pod-Html/t/lib/Testing.pm8
8 files changed, 328 insertions, 255 deletions
diff --git a/ext/Pod-Html/lib/Pod/Html.pm b/ext/Pod-Html/lib/Pod/Html.pm
index 5fad10e086..781122968a 100644
--- a/ext/Pod-Html/lib/Pod/Html.pm
+++ b/ext/Pod-Html/lib/Pod/Html.pm
@@ -2,20 +2,27 @@ package Pod::Html;
use strict;
use Exporter 'import';
-our $VERSION = 1.28;
-our @EXPORT = qw(pod2html htmlify);
-our @EXPORT_OK = qw(anchorify relativize_url);
+our $VERSION = 1.29;
+eval $VERSION;
+our @ISA = qw(Exporter);
+our @EXPORT = qw(pod2html);
-use Carp;
use Config;
use Cwd;
use File::Basename;
use File::Spec;
use File::Spec::Unix;
-use Getopt::Long;
use Pod::Simple::Search;
use Pod::Simple::SimpleTree ();
-use Text::Tabs;
+use Pod::Html::Auxiliary qw(
+ html_escape
+ htmlify
+ parse_command_line
+ relativize_url
+ trim_leading_whitespace
+ unixify
+ usage
+);
use locale; # make \w work right in non-ASCII lands
=head1 NAME
@@ -188,21 +195,6 @@ Display progress messages. By default, they won't be displayed.
=back
-=head2 htmlify
-
- htmlify($heading);
-
-Converts a pod section specification to a suitable section specification
-for HTML. Note that we keep spaces and special characters except
-C<", ?> (Netscape problem) and the hyphen (writer's problem...).
-
-=head2 anchorify
-
- anchorify(@heading);
-
-Similar to C<htmlify()>, but turns non-alphanumerics into underscores. Note
-that C<anchorify()> is not exported by default.
-
=head1 ENVIRONMENT
Uses C<$Config{pod2html}> to setup default options.
@@ -299,7 +291,7 @@ sub pod2html {
# be used throughout.
#$globals->{Htmlfileurl} = "$globals->{Htmldir}/" . substr( $globals->{Htmlfile}, length( $globals->{Htmldir} ) + 1);
# Is the above not just "$globals->{Htmlfileurl} = $globals->{Htmlfile}"?
- $globals->{Htmlfileurl} = Pod::Html::_unixify($globals->{Htmlfile});
+ $globals->{Htmlfileurl} = unixify($globals->{Htmlfile});
}
@@ -460,113 +452,6 @@ HTMLFOOT
chmod 0644, $globals->{Htmlfile} unless $globals->{Htmlfile} eq '-';
}
-##############################################################################
-
-sub usage {
- my $podfile = shift;
- warn "$0: $podfile: @_\n" if @_;
- die <<END_OF_USAGE;
-Usage: $0 --help --htmldir=<name> --htmlroot=<URL>
- --infile=<name> --outfile=<name>
- --podpath=<name>:...:<name> --podroot=<name>
- --cachedir=<name> --flush --recurse --norecurse
- --quiet --noquiet --verbose --noverbose
- --index --noindex --backlink --nobacklink
- --header --noheader --poderrors --nopoderrors
- --css=<URL> --title=<name>
-
- --[no]backlink - turn =head1 directives into links pointing to the top of
- the page (off by default).
- --cachedir - directory for the directory cache files.
- --css - stylesheet URL
- --flush - flushes the directory cache.
- --[no]header - produce block header/footer (default is no headers).
- --help - prints this message.
- --htmldir - directory for resulting HTML files.
- --htmlroot - http-server base directory from which all relative paths
- in podpath stem (default is /).
- --[no]index - generate an index at the top of the resulting html
- (default behaviour).
- --infile - filename for the pod to convert (input taken from stdin
- by default).
- --outfile - filename for the resulting html file (output sent to
- stdout by default).
- --[no]poderrors - include a POD ERRORS section in the output if there were
- any POD errors in the input (default behavior).
- --podpath - colon-separated list of directories containing library
- pods (empty by default).
- --podroot - filesystem base directory from which all relative paths
- in podpath stem (default is .).
- --[no]quiet - suppress some benign warning messages (default is off).
- --[no]recurse - recurse on those subdirectories listed in podpath
- (default behaviour).
- --title - title that will appear in resulting html file.
- --[no]verbose - self-explanatory (off by default).
-
-END_OF_USAGE
-
-}
-
-sub parse_command_line {
- my $globals = shift;
- my ($opt_backlink,$opt_cachedir,$opt_css,$opt_flush,$opt_header,
- $opt_help,$opt_htmldir,$opt_htmlroot,$opt_index,$opt_infile,
- $opt_outfile,$opt_poderrors,$opt_podpath,$opt_podroot,
- $opt_quiet,$opt_recurse,$opt_title,$opt_verbose);
-
- unshift @ARGV, split ' ', $Config{pod2html} if $Config{pod2html};
- my $result = GetOptions(
- 'backlink!' => \$opt_backlink,
- 'cachedir=s' => \$opt_cachedir,
- 'css=s' => \$opt_css,
- 'flush' => \$opt_flush,
- 'help' => \$opt_help,
- 'header!' => \$opt_header,
- 'htmldir=s' => \$opt_htmldir,
- 'htmlroot=s' => \$opt_htmlroot,
- 'index!' => \$opt_index,
- 'infile=s' => \$opt_infile,
- 'outfile=s' => \$opt_outfile,
- 'poderrors!' => \$opt_poderrors,
- 'podpath=s' => \$opt_podpath,
- 'podroot=s' => \$opt_podroot,
- 'quiet!' => \$opt_quiet,
- 'recurse!' => \$opt_recurse,
- 'title=s' => \$opt_title,
- 'verbose!' => \$opt_verbose,
- );
- usage("-", "invalid parameters") if not $result;
-
- usage("-") if defined $opt_help; # see if the user asked for help
- $opt_help = ""; # just to make -w shut-up.
-
- @{$globals->{Podpath}} = split(":", $opt_podpath) if defined $opt_podpath;
-
- $globals->{Backlink} = $opt_backlink if defined $opt_backlink;
- $globals->{Cachedir} = _unixify($opt_cachedir) if defined $opt_cachedir;
- $globals->{Css} = $opt_css if defined $opt_css;
- $globals->{Header} = $opt_header if defined $opt_header;
- $globals->{Htmldir} = _unixify($opt_htmldir) if defined $opt_htmldir;
- $globals->{Htmlroot} = _unixify($opt_htmlroot) if defined $opt_htmlroot;
- $globals->{Doindex} = $opt_index if defined $opt_index;
- $globals->{Podfile} = _unixify($opt_infile) if defined $opt_infile;
- $globals->{Htmlfile} = _unixify($opt_outfile) if defined $opt_outfile;
- $globals->{Poderrors} = $opt_poderrors if defined $opt_poderrors;
- $globals->{Podroot} = _unixify($opt_podroot) if defined $opt_podroot;
- $globals->{Quiet} = $opt_quiet if defined $opt_quiet;
- $globals->{Recurse} = $opt_recurse if defined $opt_recurse;
- $globals->{Title} = $opt_title if defined $opt_title;
- $globals->{Verbose} = $opt_verbose if defined $opt_verbose;
-
- warn "Flushing directory caches\n"
- if $opt_verbose && defined $opt_flush;
- $globals->{Dircache} = "$globals->{Cachedir}/pod2htmd.tmp";
- if (defined $opt_flush) {
- 1 while unlink($globals->{Dircache});
- }
- return $globals;
-}
-
sub get_cache {
my $globals = shift;
@@ -641,38 +526,6 @@ sub load_cache {
}
-#
-# html_escape: make text safe for HTML
-#
-sub html_escape {
- my $rest = $_[0];
- $rest =~ s/&/&amp;/g;
- $rest =~ s/</&lt;/g;
- $rest =~ s/>/&gt;/g;
- $rest =~ s/"/&quot;/g;
- $rest =~ s/([[:^print:]])/sprintf("&#x%x;", ord($1))/aeg;
- return $rest;
-}
-
-#
-# htmlify - converts a pod section specification to a suitable section
-# specification for HTML. We adopt the mechanism used by the formatter
-# that we use.
-#
-sub htmlify {
- my( $heading) = @_;
- return Pod::Simple::XHTML->can("idify")->(undef, $heading, 1);
-}
-
-#
-# similar to htmlify, but turns non-alphanumerics into underscores
-#
-sub anchorify {
- my ($anchor) = @_;
- $anchor = htmlify($anchor);
- $anchor =~ s/\W/_/g;
- return $anchor;
-}
#
# store POD files in %Pages
@@ -687,41 +540,12 @@ sub _save_page {
File::Spec->canonpath($Podroot));
# Convert path to unix style path
- $modspec = Pod::Html::_unixify($modspec);
+ $modspec = unixify($modspec);
my ($file, $dir) = fileparse($modspec, qr/\.[^.]*/); # strip .ext
$Pages{$modname} = $dir.$file;
}
-sub _unixify {
- my $full_path = shift;
- return '' unless $full_path;
- return $full_path if $full_path eq '/';
-
- my ($vol, $dirs, $file) = File::Spec->splitpath($full_path);
- my @dirs = $dirs eq File::Spec->curdir()
- ? (File::Spec::Unix->curdir())
- : File::Spec->splitdir($dirs);
- if (defined($vol) && $vol) {
- $vol =~ s/:$// if $^O eq 'VMS';
- $vol = uc $vol if $^O eq 'MSWin32';
-
- if( $dirs[0] ) {
- unshift @dirs, $vol;
- }
- else {
- $dirs[0] = $vol;
- }
- }
- unshift @dirs, '' if File::Spec->file_name_is_absolute($full_path);
- return $file unless scalar(@dirs);
- $full_path = File::Spec::Unix->catfile(File::Spec::Unix->catdir(@dirs),
- $file);
- $full_path =~ s|^\/|| if $^O eq 'MSWin32'; # C:/foo works, /C:/foo doesn't
- $full_path =~ s/\^\././g if $^O eq 'VMS'; # unescape dots
- return $full_path;
-}
-
package Pod::Simple::XHTML::LocalPodLinks;
use strict;
use warnings;
@@ -789,15 +613,15 @@ sub resolve_pod_page_link {
$path = $self->pages->{$to};
}
- my $url = File::Spec::Unix->catfile(Pod::Html::_unixify($self->htmlroot),
+ my $url = File::Spec::Unix->catfile(Pod::Html::Auxiliary::unixify($self->htmlroot),
$path);
if ($self->htmlfileurl ne '') {
# then $self->htmlroot eq '' (by definition of htmlfileurl) so
# $self->htmldir needs to be prepended to link to get the absolute path
# that will be relativized
- $url = Pod::Html::relativize_url(
- File::Spec::Unix->catdir(Pod::Html::_unixify($self->htmldir), $url),
+ $url = Pod::Html::Auxiliary::relativize_url(
+ File::Spec::Unix->catdir(Pod::Html::Auxiliary::unixify($self->htmldir), $url),
$self->htmlfileurl # already unixified
);
}
@@ -805,56 +629,4 @@ sub resolve_pod_page_link {
return $url . ".html$section";
}
-package Pod::Html;
-
-#
-# relativize_url - convert an absolute URL to one relative to a base URL.
-# Assumes both end in a filename.
-#
-sub relativize_url {
- my ($dest, $source) = @_;
-
- # Remove each file from its path
- my ($dest_volume, $dest_directory, $dest_file) =
- File::Spec::Unix->splitpath( $dest );
- $dest = File::Spec::Unix->catpath( $dest_volume, $dest_directory, '' );
-
- my ($source_volume, $source_directory, $source_file) =
- File::Spec::Unix->splitpath( $source );
- $source = File::Spec::Unix->catpath( $source_volume, $source_directory, '' );
-
- my $rel_path = '';
- if ($dest ne '') {
- $rel_path = File::Spec::Unix->abs2rel( $dest, $source );
- }
-
- if ($rel_path ne '' && substr( $rel_path, -1 ) ne '/') {
- $rel_path .= "/$dest_file";
- } else {
- $rel_path .= "$dest_file";
- }
-
- return $rel_path;
-}
-
-# Remove any level of indentation (spaces or tabs) from each code block consistently
-# Adapted from: https://metacpan.org/source/HAARG/MetaCPAN-Pod-XHTML-0.002001/lib/Pod/Simple/Role/StripVerbatimIndent.pm
-sub trim_leading_whitespace {
- my ($para) = @_;
-
- # Start by converting tabs to spaces
- @$para = Text::Tabs::expand(@$para);
-
- # Find the line with the least amount of indent, as that's our "base"
- my @indent_levels = (sort(map { $_ =~ /^( *)./mg } @$para));
- my $indent = $indent_levels[0] || "";
-
- # Remove the "base" amount of indent from each line
- foreach (@$para) {
- $_ =~ s/^\Q$indent//mg;
- }
-
- return;
-}
-
1;
diff --git a/ext/Pod-Html/lib/Pod/Html/Auxiliary.pm b/ext/Pod-Html/lib/Pod/Html/Auxiliary.pm
new file mode 100644
index 0000000000..86cfafbdef
--- /dev/null
+++ b/ext/Pod-Html/lib/Pod/Html/Auxiliary.pm
@@ -0,0 +1,292 @@
+package Pod::Html::Auxiliary;
+use strict;
+require Exporter;
+
+our $VERSION = 1.27_001; # Please keep in synch with lib/Pod/Html.pm
+$VERSION = eval $VERSION;
+our @ISA = qw(Exporter);
+our @EXPORT_OK = qw(
+ anchorify
+ html_escape
+ htmlify
+ parse_command_line
+ relativize_url
+ trim_leading_whitespace
+ unixify
+ usage
+);
+
+use Config;
+use File::Spec;
+use File::Spec::Unix;
+use Getopt::Long;
+use Pod::Simple::XHTML;
+use Text::Tabs;
+use locale; # make \w work right in non-ASCII lands
+
+=head1 NAME
+
+Pod::Html::Auxiliary - helper functions for Pod-Html
+
+=head1 SUBROUTINES
+
+=head2 C<parse_command_line()>
+
+TK
+
+=cut
+
+sub parse_command_line {
+ my $globals = shift;
+ my ($opt_backlink,$opt_cachedir,$opt_css,$opt_flush,$opt_header,
+ $opt_help,$opt_htmldir,$opt_htmlroot,$opt_index,$opt_infile,
+ $opt_outfile,$opt_poderrors,$opt_podpath,$opt_podroot,
+ $opt_quiet,$opt_recurse,$opt_title,$opt_verbose);
+
+ unshift @ARGV, split ' ', $Config{pod2html} if $Config{pod2html};
+ my $result = GetOptions(
+ 'backlink!' => \$opt_backlink,
+ 'cachedir=s' => \$opt_cachedir,
+ 'css=s' => \$opt_css,
+ 'flush' => \$opt_flush,
+ 'help' => \$opt_help,
+ 'header!' => \$opt_header,
+ 'htmldir=s' => \$opt_htmldir,
+ 'htmlroot=s' => \$opt_htmlroot,
+ 'index!' => \$opt_index,
+ 'infile=s' => \$opt_infile,
+ 'outfile=s' => \$opt_outfile,
+ 'poderrors!' => \$opt_poderrors,
+ 'podpath=s' => \$opt_podpath,
+ 'podroot=s' => \$opt_podroot,
+ 'quiet!' => \$opt_quiet,
+ 'recurse!' => \$opt_recurse,
+ 'title=s' => \$opt_title,
+ 'verbose!' => \$opt_verbose,
+ );
+ usage("-", "invalid parameters") if not $result;
+
+ usage("-") if defined $opt_help; # see if the user asked for help
+ $opt_help = ""; # just to make -w shut-up.
+
+ @{$globals->{Podpath}} = split(":", $opt_podpath) if defined $opt_podpath;
+
+ $globals->{Backlink} = $opt_backlink if defined $opt_backlink;
+ $globals->{Cachedir} = unixify($opt_cachedir) if defined $opt_cachedir;
+ $globals->{Css} = $opt_css if defined $opt_css;
+ $globals->{Header} = $opt_header if defined $opt_header;
+ $globals->{Htmldir} = unixify($opt_htmldir) if defined $opt_htmldir;
+ $globals->{Htmlroot} = unixify($opt_htmlroot) if defined $opt_htmlroot;
+ $globals->{Doindex} = $opt_index if defined $opt_index;
+ $globals->{Podfile} = unixify($opt_infile) if defined $opt_infile;
+ $globals->{Htmlfile} = unixify($opt_outfile) if defined $opt_outfile;
+ $globals->{Poderrors} = $opt_poderrors if defined $opt_poderrors;
+ $globals->{Podroot} = unixify($opt_podroot) if defined $opt_podroot;
+ $globals->{Quiet} = $opt_quiet if defined $opt_quiet;
+ $globals->{Recurse} = $opt_recurse if defined $opt_recurse;
+ $globals->{Title} = $opt_title if defined $opt_title;
+ $globals->{Verbose} = $opt_verbose if defined $opt_verbose;
+
+ warn "Flushing directory caches\n"
+ if $opt_verbose && defined $opt_flush;
+ $globals->{Dircache} = "$globals->{Cachedir}/pod2htmd.tmp";
+ if (defined $opt_flush) {
+ 1 while unlink($globals->{Dircache});
+ }
+ return $globals;
+}
+
+=head2 C<usage()>
+
+TK
+
+=cut
+
+sub usage {
+ my $podfile = shift;
+ warn "$0: $podfile: @_\n" if @_;
+ die <<END_OF_USAGE;
+Usage: $0 --help --htmldir=<name> --htmlroot=<URL>
+ --infile=<name> --outfile=<name>
+ --podpath=<name>:...:<name> --podroot=<name>
+ --cachedir=<name> --flush --recurse --norecurse
+ --quiet --noquiet --verbose --noverbose
+ --index --noindex --backlink --nobacklink
+ --header --noheader --poderrors --nopoderrors
+ --css=<URL> --title=<name>
+
+ --[no]backlink - turn =head1 directives into links pointing to the top of
+ the page (off by default).
+ --cachedir - directory for the directory cache files.
+ --css - stylesheet URL
+ --flush - flushes the directory cache.
+ --[no]header - produce block header/footer (default is no headers).
+ --help - prints this message.
+ --htmldir - directory for resulting HTML files.
+ --htmlroot - http-server base directory from which all relative paths
+ in podpath stem (default is /).
+ --[no]index - generate an index at the top of the resulting html
+ (default behaviour).
+ --infile - filename for the pod to convert (input taken from stdin
+ by default).
+ --outfile - filename for the resulting html file (output sent to
+ stdout by default).
+ --[no]poderrors - include a POD ERRORS section in the output if there were
+ any POD errors in the input (default behavior).
+ --podpath - colon-separated list of directories containing library
+ pods (empty by default).
+ --podroot - filesystem base directory from which all relative paths
+ in podpath stem (default is .).
+ --[no]quiet - suppress some benign warning messages (default is off).
+ --[no]recurse - recurse on those subdirectories listed in podpath
+ (default behaviour).
+ --title - title that will appear in resulting html file.
+ --[no]verbose - self-explanatory (off by default).
+
+END_OF_USAGE
+
+}
+
+=head2 C<unixify()>
+
+TK
+
+=cut
+
+sub unixify {
+ my $full_path = shift;
+ return '' unless $full_path;
+ return $full_path if $full_path eq '/';
+
+ my ($vol, $dirs, $file) = File::Spec->splitpath($full_path);
+ my @dirs = $dirs eq File::Spec->curdir()
+ ? (File::Spec::Unix->curdir())
+ : File::Spec->splitdir($dirs);
+ if (defined($vol) && $vol) {
+ $vol =~ s/:$// if $^O eq 'VMS';
+ $vol = uc $vol if $^O eq 'MSWin32';
+
+ if( $dirs[0] ) {
+ unshift @dirs, $vol;
+ }
+ else {
+ $dirs[0] = $vol;
+ }
+ }
+ unshift @dirs, '' if File::Spec->file_name_is_absolute($full_path);
+ return $file unless scalar(@dirs);
+ $full_path = File::Spec::Unix->catfile(File::Spec::Unix->catdir(@dirs),
+ $file);
+ $full_path =~ s|^\/|| if $^O eq 'MSWin32'; # C:/foo works, /C:/foo doesn't
+ $full_path =~ s/\^\././g if $^O eq 'VMS'; # unescape dots
+ return $full_path;
+}
+
+=head2 C<relativize_url()>
+
+Convert an absolute URL to one relative to a base URL.
+Assumes both end in a filename.
+
+=cut
+
+sub relativize_url {
+ my ($dest, $source) = @_;
+
+ # Remove each file from its path
+ my ($dest_volume, $dest_directory, $dest_file) =
+ File::Spec::Unix->splitpath( $dest );
+ $dest = File::Spec::Unix->catpath( $dest_volume, $dest_directory, '' );
+
+ my ($source_volume, $source_directory, $source_file) =
+ File::Spec::Unix->splitpath( $source );
+ $source = File::Spec::Unix->catpath( $source_volume, $source_directory, '' );
+
+ my $rel_path = '';
+ if ($dest ne '') {
+ $rel_path = File::Spec::Unix->abs2rel( $dest, $source );
+ }
+
+ if ($rel_path ne '' && substr( $rel_path, -1 ) ne '/') {
+ $rel_path .= "/$dest_file";
+ } else {
+ $rel_path .= "$dest_file";
+ }
+
+ return $rel_path;
+}
+
+=head2 C<html_escape()>
+
+Make text safe for HTML.
+
+=cut
+
+sub html_escape {
+ my $rest = $_[0];
+ $rest =~ s/&/&amp;/g;
+ $rest =~ s/</&lt;/g;
+ $rest =~ s/>/&gt;/g;
+ $rest =~ s/"/&quot;/g;
+ $rest =~ s/([[:^print:]])/sprintf("&#x%x;", ord($1))/aeg;
+ return $rest;
+}
+
+=head2 C<htmlify()>
+
+ htmlify($heading);
+
+Converts a pod section specification to a suitable section specification
+for HTML. Note that we keep spaces and special characters except
+C<", ?> (Netscape problem) and the hyphen (writer's problem...).
+
+=cut
+
+sub htmlify {
+ my( $heading) = @_;
+ return Pod::Simple::XHTML->can("idify")->(undef, $heading, 1);
+}
+
+=head2 C<anchorify()>
+
+ anchorify(@heading);
+
+Similar to C<htmlify()>, but turns non-alphanumerics into underscores. Note
+that C<anchorify()> is not exported by default.
+
+=cut
+
+sub anchorify {
+ my ($anchor) = @_;
+ $anchor = htmlify($anchor);
+ $anchor =~ s/\W/_/g;
+ return $anchor;
+}
+
+=head2 C<trim_leading_whitespace()>
+
+Remove any level of indentation (spaces or tabs) from each code block
+consistently. Adapted from:
+https://metacpan.org/source/HAARG/MetaCPAN-Pod-XHTML-0.002001/lib/Pod/Simple/Role/StripVerbatimIndent.pm
+
+=cut
+
+sub trim_leading_whitespace {
+ my ($para) = @_;
+
+ # Start by converting tabs to spaces
+ @$para = Text::Tabs::expand(@$para);
+
+ # Find the line with the least amount of indent, as that's our "base"
+ my @indent_levels = (sort(map { $_ =~ /^( *)./mg } @$para));
+ my $indent = $indent_levels[0] || "";
+
+ # Remove the "base" amount of indent from each line
+ foreach (@$para) {
+ $_ =~ s/^\Q$indent//mg;
+ }
+
+ return;
+}
+
+1;
+
diff --git a/ext/Pod-Html/t/anchorify.t b/ext/Pod-Html/t/anchorify.t
index 0677f9ed30..68bc8834be 100644
--- a/ext/Pod-Html/t/anchorify.t
+++ b/ext/Pod-Html/t/anchorify.t
@@ -1,6 +1,7 @@
# -*- perl -*-
+
use strict;
-use Pod::Html qw( anchorify );
+use Pod::Html::Auxiliary qw( anchorify );
use Test::More tests => 1;
my @filedata;
@@ -45,7 +46,7 @@ is_deeply(
__DATA__
=head1 NAME
-anchorify - Test C<Pod::Html::anchorify()>
+anchorify - Test C<Pod::Html::Auxiliary::anchorify()>
=head1 DESCRIPTION
diff --git a/ext/Pod-Html/t/cache.t b/ext/Pod-Html/t/cache.t
index 425a7b7b00..d2a48ae2f9 100644
--- a/ext/Pod-Html/t/cache.t
+++ b/ext/Pod-Html/t/cache.t
@@ -11,6 +11,9 @@ use warnings;
use Test::More tests => 10;
use Testing qw( setup_testing_dir xconvert );
use Cwd;
+use Pod::Html::Auxiliary qw(
+ unixify
+);
my $debug = 0;
my $startdir = cwd();
@@ -21,7 +24,7 @@ my $tdir = setup_testing_dir( {
debug => $debug,
} );
-my $cwd = Pod::Html::_unixify(Cwd::cwd());
+my $cwd = unixify(Cwd::cwd());
my $infile = catfile('t', 'cache.pod');
my $outfile = "cacheout.html";
my $cachefile = "pod2htmd.tmp";
diff --git a/ext/Pod-Html/t/crossref2.t b/ext/Pod-Html/t/crossref2.t
index 5843330f22..bdc801a724 100644
--- a/ext/Pod-Html/t/crossref2.t
+++ b/ext/Pod-Html/t/crossref2.t
@@ -11,6 +11,9 @@ use warnings;
use Test::More tests => 1;
use Testing qw( setup_testing_dir xconvert );
use Cwd;
+use Pod::Html::Auxiliary qw(
+ unixify
+);
my $debug = 0;
my $startdir = cwd();
@@ -22,7 +25,7 @@ my $tdir = setup_testing_dir( {
debug => $debug,
} );
-my $cwd = Pod::Html::_unixify(cwd());
+my $cwd = unixify(cwd());
$args = {
podstub => "crossref",
diff --git a/ext/Pod-Html/t/eol.t b/ext/Pod-Html/t/eol.t
index a159fb7551..ba04def1af 100644
--- a/ext/Pod-Html/t/eol.t
+++ b/ext/Pod-Html/t/eol.t
@@ -1,5 +1,6 @@
#!./perl -w
+use Pod::Html;
use Test::More tests => 3;
my $podfile = "$$.pod";
@@ -34,8 +35,6 @@ crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf crlf
__EOF__
close $pod or die $!;
-use Pod::Html;
-
my $i = 0;
foreach my $eol ("\r", "\n", "\r\n") {
open $pod, '<', $podfile or die "$podfile: $!";
diff --git a/ext/Pod-Html/t/feature2.t b/ext/Pod-Html/t/feature2.t
index 2a0ba32c27..c8f8025aa3 100644
--- a/ext/Pod-Html/t/feature2.t
+++ b/ext/Pod-Html/t/feature2.t
@@ -38,7 +38,6 @@ $args = {
podroot => $cwd,
norecurse => 1,
verbose => 1,
- quiet => 1,
},
debug => $debug,
};
diff --git a/ext/Pod-Html/t/lib/Testing.pm b/ext/Pod-Html/t/lib/Testing.pm
index 084a84cd90..4b3355456b 100644
--- a/ext/Pod-Html/t/lib/Testing.pm
+++ b/ext/Pod-Html/t/lib/Testing.pm
@@ -2,7 +2,8 @@ package Testing;
use 5.10.0;
use warnings;
require Exporter;
-our $VERSION = 1.26; # Let's keep this same as lib/Pod/Html.pm
+our $VERSION = 1.27_001; # Let's keep this same as lib/Pod/Html.pm
+$VERSION = eval $VERSION;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
setup_testing_dir
@@ -18,6 +19,9 @@ use File::Path ( qw| make_path | );
use File::Spec::Functions ':ALL';
use File::Temp ( qw| tempdir | );
use Data::Dumper;$Data::Dumper::Sortkeys=1;
+use Pod::Html::Auxiliary qw(
+ unixify
+);
*ok = \&Test::More::ok;
*is = \&Test::More::is;
@@ -453,7 +457,7 @@ sub xconvert {
die "Value for 'p2h' must be hashref"
unless ref($args->{p2h}) eq 'HASH'; # TEST ME
}
- my $cwd = Pod::Html::_unixify( Cwd::cwd() );
+ my $cwd = unixify( Cwd::cwd() );
my ($vol, $dir) = splitpath($cwd, 1);
my @dirs = splitdir($dir);
shift @dirs if $dirs[0] eq '';