Correction to the component order of the generated file name
This commit is contained in:
parent
e0c4545295
commit
2f350dd1db
@ -1,654 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
#===============================================================================
|
||||
#
|
||||
# FILE: extract_images
|
||||
#
|
||||
# USAGE: ./extract_images [--help] [--documentation|man]
|
||||
# [--prefix=STRING] [--[no-]backup] [--force] [--[no]silent]
|
||||
# HTML_file [ [HTML_file_2] [HTML_file_3] ... ]
|
||||
#
|
||||
# DESCRIPTION: Processes HTML files which may have 'data' URIs containing
|
||||
# images, and extracts these images into files in the same
|
||||
# directory. The 'data' scheme links are converted to 'https'
|
||||
# and reference the extracted files. The modified HTML is
|
||||
# output, and the original will be saved as a backup if
|
||||
# requested.
|
||||
#
|
||||
# OPTIONS: ---
|
||||
# REQUIREMENTS: ---
|
||||
# BUGS: ---
|
||||
# NOTES: ---
|
||||
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
|
||||
# VERSION: 0.0.1
|
||||
# CREATED: 2024-12-25 10:53:15
|
||||
# REVISION: 2024-12-29 15:19:35
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
use v5.36;
|
||||
use strict;
|
||||
use warnings;
|
||||
use feature qw{ postderef say signatures state try };
|
||||
no warnings
|
||||
qw{ experimental::postderef experimental::signatures experimental::try };
|
||||
|
||||
use open ':std', ':encoding(UTF-8)'; # Make all IO UTF-8
|
||||
|
||||
use Getopt::Long;
|
||||
use Pod::Usage;
|
||||
|
||||
use HTML::TreeBuilder 5 -weak;
|
||||
use URI;
|
||||
use MIME::Types;
|
||||
|
||||
#use File::Slurper;
|
||||
use Path::Tiny;
|
||||
use File::Copy;
|
||||
|
||||
use Data::Dumper;
|
||||
|
||||
#
|
||||
# Version number (Incremented by Vim)
|
||||
#
|
||||
our $VERSION = '0.0.1';
|
||||
|
||||
#
|
||||
# Script and directory names
|
||||
#
|
||||
( my $PROG = $0 ) =~ s|.*/||mx;
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Declarations
|
||||
#-------------------------------------------------------------------------------
|
||||
my ( $notes, $typename, $tree, $uri );
|
||||
my ( $fcount, $basename, $filename, $suffix, $fh );
|
||||
my ( $updates, $bsuffix, $new_basename, $newURL );
|
||||
|
||||
my $backupcount = 5;
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Options and arguments
|
||||
#-------------------------------------------------------------------------------
|
||||
# {{{
|
||||
#
|
||||
# Option defaults
|
||||
#
|
||||
my $DEFDEBUG = 0;
|
||||
my $DEFPREFIX = 'image';
|
||||
|
||||
my %options;
|
||||
Options( \%options );
|
||||
|
||||
#
|
||||
# Default help shows minimal information
|
||||
#
|
||||
pod2usage( -msg => "$PROG version $VERSION\n", -exitval => 1, -verbose => 0 )
|
||||
if ( $options{'help'} );
|
||||
|
||||
#
|
||||
# The -documentation or -man option shows the full POD documentation through
|
||||
# a pager for convenience
|
||||
#
|
||||
pod2usage( -msg => "$PROG version $VERSION\n", -exitval => 1, -verbose => 2 )
|
||||
if ( $options{'documentation'} );
|
||||
|
||||
#
|
||||
# Collect options
|
||||
#
|
||||
my $DEBUG = ( defined( $options{debug} ) ? $options{debug} : $DEFDEBUG );
|
||||
my $silent = ( defined( $options{silent} ) ? $options{silent} : 0 );
|
||||
my $prefix = ( defined( $options{prefix} ) ? $options{prefix} : $DEFPREFIX );
|
||||
my $backup = ( defined( $options{backup} ) ? $options{backup} : 1 );
|
||||
my $force = ( defined( $options{force} ) ? $options{force} : 0 );
|
||||
|
||||
#
|
||||
# Check we have arguments
|
||||
#
|
||||
die "Usage: $PROG [options] file1 [file2 [file3 [fileN]]]\n"
|
||||
unless ( scalar(@ARGV) > 0 );
|
||||
|
||||
#
|
||||
# Clean up the prefix
|
||||
#
|
||||
$prefix = ($prefix =~ /(.*)_$/ ? $1 : $prefix);
|
||||
|
||||
#
|
||||
# Backup suffix (the dot gets added later)
|
||||
#
|
||||
$bsuffix = 'bck';
|
||||
|
||||
#
|
||||
# Debug the options
|
||||
#
|
||||
_debug(
|
||||
$DEBUG > 1,
|
||||
'$silent = ' . $silent,
|
||||
'$prefix = ' . $prefix,
|
||||
'$backup = ' . $backup,
|
||||
'$force = ' . $force,
|
||||
);
|
||||
|
||||
# }}}
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Prepare items for later use: current working directory and a MIME::Types
|
||||
# object
|
||||
#-------------------------------------------------------------------------------
|
||||
my $curdir = Path::Tiny->cwd;
|
||||
|
||||
my $mt = MIME::Types->new;
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Loop through the arguments
|
||||
#-------------------------------------------------------------------------------
|
||||
foreach my $notesfile (@ARGV) {
|
||||
unless (-e $notesfile) {
|
||||
warn "Unable to find $notesfile\n";
|
||||
next;
|
||||
}
|
||||
|
||||
#
|
||||
# Force the MIME type of $notesfile to a string
|
||||
#
|
||||
$typename = "" . $mt->mimeTypeOf("$notesfile");
|
||||
|
||||
#
|
||||
# Check the MIME type and reject non-HTML
|
||||
#
|
||||
unless ($typename eq 'text/html') {
|
||||
warn "File $notesfile is not HTML\n";
|
||||
next
|
||||
}
|
||||
|
||||
say "Reading from $notesfile\n" unless $silent;
|
||||
|
||||
#
|
||||
# Get HTML file basename without the suffix for building filenames
|
||||
#
|
||||
$basename = path($notesfile)->basename('.html');
|
||||
|
||||
#
|
||||
# Read the HTML
|
||||
#
|
||||
open (my $nfh, '<', $notesfile) or die "Unable to open $notesfile\n";
|
||||
$notes = <$nfh>;
|
||||
close($nfh);
|
||||
|
||||
#
|
||||
# Image files are to have an index
|
||||
#
|
||||
$fcount = 0;
|
||||
|
||||
#
|
||||
# Keep a note of HTML updates
|
||||
#
|
||||
$updates = 0;
|
||||
|
||||
#
|
||||
# Initialise the TreeBuilder
|
||||
#
|
||||
$tree = HTML::TreeBuilder->new;
|
||||
$tree->ignore_unknown(0);
|
||||
$tree->no_expand_entities(1);
|
||||
$tree->p_strict(1);
|
||||
$tree->store_comments(1);
|
||||
$tree->warn(1);
|
||||
|
||||
#
|
||||
# Load this HTML file into the TreeBuilder
|
||||
#
|
||||
$tree->parse_content($notes)
|
||||
or die "HTML::TreeBuilder failed to parse notes: $!\n";
|
||||
|
||||
#
|
||||
# Loop through the tree looking for 'data' scheme images
|
||||
#
|
||||
for ( @{ $tree->extract_links( 'img' ) } ) {
|
||||
my ( $link, $element, $attr, $tag ) = @$_;
|
||||
|
||||
$uri = URI->new( $link );
|
||||
unless ($silent) {
|
||||
say "Scheme: ",$uri->scheme;
|
||||
say "Media type: ",$uri->media_type;
|
||||
}
|
||||
|
||||
#
|
||||
# We only care about 'data' scheme stuff - for now anyway, and only
|
||||
# images within this set
|
||||
#
|
||||
if ( $uri->scheme eq 'data' ) {
|
||||
#
|
||||
# Only images
|
||||
#
|
||||
if ( $uri->media_type =~ /^image/ ) {
|
||||
#
|
||||
# Extract the file name suffix from the MIME string, and give it
|
||||
# a leading '.'
|
||||
#
|
||||
( $suffix = $uri->media_type ) =~ s{^.*/}{.};
|
||||
|
||||
#
|
||||
# Construct the filename for this image
|
||||
#
|
||||
$fcount++;
|
||||
$filename
|
||||
= "$curdir/${prefix}_${basename}_${fcount}${suffix}";
|
||||
say "Writing to: $filename" unless $silent;
|
||||
|
||||
say '-' x 40 unless $silent;
|
||||
|
||||
#
|
||||
# Check if the file exists. Don't clobber it unless --force is active
|
||||
#
|
||||
if ( -e $filename ) {
|
||||
unless ($force) {
|
||||
warn "File $filename exists; not overwriting\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
#
|
||||
# Write the data to the file in binary format. The URI module
|
||||
# does the conversion so it's already binary.
|
||||
#
|
||||
$fh = path($filename)->openw_raw;
|
||||
print $fh $uri->data;
|
||||
close($fh);
|
||||
}
|
||||
|
||||
#
|
||||
# Update the HTML with a link to the file we created
|
||||
#
|
||||
$updates++;
|
||||
$newURL = path($filename)->basename;
|
||||
$element->attr( $attr, $newURL );
|
||||
}
|
||||
}
|
||||
} # extract_links loop
|
||||
|
||||
#
|
||||
# Output the changed HTML turning what became standalone back into
|
||||
# a <body> fragment.
|
||||
#
|
||||
if ($updates > 0) {
|
||||
my $body = $tree->look_down( _tag => 'body' );
|
||||
( my $result = $body->as_HTML( undef, ' ', {} ) )
|
||||
=~ s{(^<body[^>]*>|</body>$)}{}gi;
|
||||
|
||||
#$notesfile = path($notesfile)->basename;
|
||||
if ($backup) {
|
||||
_backup( $notesfile, $bsuffix, $backupcount );
|
||||
say "$notesfile backed up" unless $silent;
|
||||
}
|
||||
else {
|
||||
say "$notesfile not backed up" unless $silent;
|
||||
}
|
||||
|
||||
$fh = path($notesfile)->openw;
|
||||
say $fh $result;
|
||||
close($fh);
|
||||
|
||||
say "$updates images converted, $notesfile updated" unless $silent;
|
||||
}
|
||||
else {
|
||||
say "No images found, no changes made to $notesfile" unless $silent;
|
||||
}
|
||||
|
||||
} # $notesfile loop
|
||||
|
||||
exit;
|
||||
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: _backup
|
||||
# PURPOSE: Given a file, make a backup of it by appending $suffix, and
|
||||
# handle previous backups
|
||||
# PARAMETERS: $filename path of file to backup
|
||||
# $suffix suffix to use, default 'bck'
|
||||
# $limit number of backups to keep
|
||||
# RETURNS: True or false depending on success
|
||||
# DESCRIPTION: Checks that the file exists and returns FALSE if it doesn't.
|
||||
# Rationalises the $limit to avoid it being 0 or less.
|
||||
# THROWS: No exceptions
|
||||
# COMMENTS: None
|
||||
# SEE ALSO: N/A
|
||||
#===============================================================================
|
||||
sub _backup {
|
||||
my ( $filename, $suffix, $limit ) = @_;
|
||||
|
||||
my ( $backupname, $limitname );
|
||||
|
||||
#
|
||||
# Check the target file exists
|
||||
#
|
||||
unless ( -e $filename ) {
|
||||
warn "Unable to find $filename to backup\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
#
|
||||
# Handle invalid $limit values
|
||||
#
|
||||
$limit = 1 unless ( $limit >= 1 );
|
||||
|
||||
#
|
||||
# Defaults
|
||||
#
|
||||
$suffix = 'bck' unless $suffix;
|
||||
$limitname = "$filename.$suffix.$limit";
|
||||
$backupname = "$filename.$suffix";
|
||||
|
||||
#
|
||||
# Look for existing backups
|
||||
#
|
||||
if ( -e $backupname ) {
|
||||
|
||||
#
|
||||
# If maximum version exists delete it
|
||||
#
|
||||
if ( -e $limitname ) {
|
||||
unlink($limitname);
|
||||
}
|
||||
|
||||
#
|
||||
# Go backwards through the versions incrementing their version numbers
|
||||
#
|
||||
for ( my $vsn = $limit - 1; $vsn > 0; $vsn-- ) {
|
||||
if ( -e "$filename.$suffix.$vsn" ) {
|
||||
move( "$filename.$suffix.$vsn",
|
||||
sprintf( '%s.%s.%s', $filename, $suffix, $vsn + 1 ) );
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Make $filename.bck into $filename.bck.1
|
||||
#
|
||||
move( "$filename.$suffix", "$filename.$suffix.1" );
|
||||
|
||||
}
|
||||
|
||||
#
|
||||
# Finally save the $filename as $filename.bck
|
||||
#
|
||||
move( $filename, "$filename.$suffix" );
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: _debug
|
||||
# PURPOSE: Prints debug reports
|
||||
# PARAMETERS: $active Boolean: 1 for print, 0 for no print
|
||||
# $messages... Arbitrary list of messages to print
|
||||
# RETURNS: Nothing
|
||||
# DESCRIPTION: Outputs messages if $active is true. It removes any trailing
|
||||
# newline from each one and then adds one in the 'print' to the
|
||||
# caller doesn't have to bother. Prepends each message with 'D>'
|
||||
# to show it's a debug message.
|
||||
# THROWS: No exceptions
|
||||
# COMMENTS: Differs from other functions of the same name
|
||||
# SEE ALSO: N/A
|
||||
#===============================================================================
|
||||
sub _debug {
|
||||
my $active = shift;
|
||||
|
||||
my $message;
|
||||
return unless $active;
|
||||
|
||||
while ($message = shift) {
|
||||
chomp($message);
|
||||
print STDERR "D> $message\n";
|
||||
}
|
||||
}
|
||||
|
||||
#=== FUNCTION ================================================================
|
||||
# NAME: Options
|
||||
# PURPOSE: Processes command-line options
|
||||
# PARAMETERS: $optref Hash reference to hold the options
|
||||
# RETURNS: Undef
|
||||
# DESCRIPTION: Process the options we want to offer. See the documentation
|
||||
# for details
|
||||
# THROWS: no exceptions
|
||||
# COMMENTS: none
|
||||
# SEE ALSO: n/a
|
||||
#===============================================================================
|
||||
sub Options {
|
||||
my ($optref) = @_;
|
||||
|
||||
my @options = (
|
||||
"help", "documentation|man", "debug=i", "silent!",
|
||||
"prefix=s", "backup!", "force!",
|
||||
# "config=s",
|
||||
);
|
||||
|
||||
if ( !GetOptions( $optref, @options ) ) {
|
||||
pod2usage(
|
||||
-msg => "$PROG version $VERSION\n",
|
||||
-exitval => 1,
|
||||
-verbose => 0
|
||||
);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
__END__
|
||||
|
||||
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
# Application Documentation
|
||||
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
#{{{
|
||||
|
||||
=head1 NAME
|
||||
|
||||
extract_images - extract embedded images from HTML and save as files
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
This documentation refers to extract_images version 0.0.1
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
extract_images
|
||||
[--help] [--documentation|man] [-debug=N]
|
||||
[--prefix=STRING] [--[no]backup] [--[no]force] [--[no]silent]
|
||||
HTML_file [ [HTML_file_2] [ [HTML_file_3] ... ] ]
|
||||
|
||||
Examples:
|
||||
|
||||
extract_images --prefix=picture_ --backup index.html
|
||||
|
||||
extract_images --silent --nobackup shownotes.html
|
||||
|
||||
=head1 REQUIRED ARGUMENTS
|
||||
|
||||
The script requires the names of one or more HTML files which will be scanned
|
||||
for embedded images.
|
||||
|
||||
=head1 OPTIONS
|
||||
|
||||
Note that all on/off options can be written as B<--silent>, B<--nosilent> or
|
||||
B<--no-silent>. A single hyphen can be used at the start or a pair.
|
||||
|
||||
=over 8
|
||||
|
||||
=item B<--help>
|
||||
|
||||
Reports brief information about how to use the script and exits. To see the
|
||||
full documentation use the option B<--documentation> or B<--man>. Alternatively,
|
||||
to generate a PDF version use the I<pod2pdf> tool from
|
||||
I<http://search.cpan.org/~jonallen/pod2pdf-0.42/bin/pod2pdf>. This can be
|
||||
installed with the cpan tool as App::pod2pdf.
|
||||
|
||||
=item B<--documentation> or B<--man>
|
||||
|
||||
Reports full information about how to use the script and exits. Alternatively,
|
||||
to generate a PDF version use the I<pod2pdf> tool from
|
||||
I<http://search.cpan.org/~jonallen/pod2pdf-0.42/bin/pod2pdf>. This can be
|
||||
installed with the cpan tool as App::pod2pdf.
|
||||
|
||||
=item B<--debug=N>
|
||||
|
||||
Run in debug mode at the level specified by I<N>. Possible values are:
|
||||
|
||||
=over 4
|
||||
|
||||
=item B<0>
|
||||
|
||||
No debugging (the default).
|
||||
|
||||
=item B<1>
|
||||
|
||||
TBA
|
||||
|
||||
=item B<2>
|
||||
|
||||
TBA
|
||||
|
||||
=item B<3>
|
||||
|
||||
TBA
|
||||
|
||||
=back
|
||||
|
||||
=item B<--prefix=STRING>
|
||||
|
||||
Since embedded images have no names, when they are written to image files
|
||||
names are generated for them. These names are built from the following
|
||||
components:
|
||||
|
||||
=over 4
|
||||
|
||||
=item B<HTML filename>
|
||||
|
||||
The name of the HTML file without a suffix. So, if the name is 'index.html',
|
||||
the 'index' part will be used.
|
||||
|
||||
=item B<prefix>
|
||||
|
||||
The prefix string provided by this option, or 'image' if not specified.
|
||||
|
||||
=item B<counter>
|
||||
|
||||
The images found in the HTML are counted, starting from 1, and this number is
|
||||
used here.
|
||||
|
||||
=item B<extension>
|
||||
|
||||
The image format extension, taken from the embedded image information.
|
||||
Examples would be 'jpg', 'jpeg' and 'png'.
|
||||
|
||||
=back
|
||||
|
||||
The B<HTML filename>, B<prefix>, B<counter> and B<extension> are joined
|
||||
together to make the file name as follows:
|
||||
|
||||
<HTML filename>_<prefix>_<counter>.<extension>
|
||||
|
||||
So the following run of the script would generate the first file shown below
|
||||
assuming the first embedded picture was in 'PNG' format:
|
||||
|
||||
extract_images --prefix=picture hpr4283.html
|
||||
|
||||
hpr4283_picture_1.png
|
||||
|
||||
=item B<--[no]backup>
|
||||
|
||||
The HTML is modified to leave placeholders referring to any embedded images
|
||||
found as it it processed. The new HTML is written to the original file if
|
||||
B<--nobackup> is specified, or a backup of the original file is made, before
|
||||
writing the new HTML. Making a backup is the default behaviour.
|
||||
|
||||
=item B<--[no]force>
|
||||
|
||||
Images are written to the current directory. If an image already exists, and
|
||||
B<--force> has not been specified, the script will stop processing and exit.
|
||||
The default setting of this option is B<--noforce>.
|
||||
|
||||
=item B<--[no]silent>
|
||||
|
||||
By default the script reports its progress as it processes an HTML file, but
|
||||
this can be turned off by using this option.
|
||||
|
||||
=back
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This Perl script B<extract_images> parses HTML looking for embedded images.
|
||||
Such images use a URI with the scheme 'data' followed by image details
|
||||
including the encoded binary contents. See the Wikipedia article
|
||||
https://en.wikipedia.org/wiki/Data_URI_scheme for details.
|
||||
|
||||
When such images are found they are written as files (with generated names),
|
||||
and the HTML is updated with these names replacing the original URI. Further
|
||||
work is likely to be required to build full image links, but the majority of
|
||||
work will have been done.
|
||||
|
||||
The script will not overwrite image files unless the B<--force> option is
|
||||
used, but will overwrite the original HTML file unless B<--backup> is
|
||||
specified.
|
||||
|
||||
By default details of progress are written to standard output, but this can be
|
||||
preveneted by using the B<--silent> option.
|
||||
|
||||
=head2 GENERATED IMAGE FILE NAMES
|
||||
|
||||
These names are built from various elements:
|
||||
|
||||
<HTML filename>_<prefix>_<counter>.<extension>
|
||||
|
||||
Where <HTML filename> is the base name of the HTML input file, <prefix> is the
|
||||
string provided with the B<--prefix=STRING> option (or B<image> by default),
|
||||
<counter> is a count of image files found during the scan of the HTML, and
|
||||
<extension> is the appropriate file extension for the type of image being
|
||||
converted.
|
||||
|
||||
See the option B<--prefix=STRING> for details of file name generation.
|
||||
|
||||
=head1 DIAGNOSTICS
|
||||
|
||||
TBA
|
||||
|
||||
=head1 CONFIGURATION AND ENVIRONMENT
|
||||
|
||||
TBA
|
||||
|
||||
=head1 DEPENDENCIES
|
||||
|
||||
Data::Dumper
|
||||
File::Copy
|
||||
Getopt::Long
|
||||
HTML::TreeBuilder
|
||||
MIME::Types
|
||||
Path::Tiny
|
||||
Pod::Usage
|
||||
URI
|
||||
|
||||
=head1 BUGS AND LIMITATIONS
|
||||
|
||||
There are no known bugs in this module.
|
||||
Please report problems to Dave Morriss (Dave.Morriss@gmail.com)
|
||||
Patches are welcome.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Dave Morriss (Dave.Morriss@gmail.com)
|
||||
|
||||
=head1 LICENCE AND COPYRIGHT
|
||||
|
||||
Copyright (c) 2024 Dave Morriss (Dave.Morriss@gmail.com).
|
||||
All rights reserved.
|
||||
|
||||
This module is free software; you can redistribute it and/or
|
||||
modify it under the same terms as Perl itself. See perldoc perlartistic.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
=cut
|
||||
|
||||
#}}}
|
||||
|
||||
# [zo to open fold, zc to close]
|
||||
|
||||
# vim: syntax=perl:ts=8:sw=4:et:ai:tw=78:fo=tcrqn21:fdm=marker
|
||||
|
@ -19,9 +19,9 @@
|
||||
# BUGS: ---
|
||||
# NOTES: ---
|
||||
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
|
||||
# VERSION: 0.0.2
|
||||
# VERSION: 0.0.3
|
||||
# CREATED: 2024-12-25 10:53:15
|
||||
# REVISION: 2024-12-30 09:28:40
|
||||
# REVISION: 2024-12-30 11:52:59
|
||||
#
|
||||
#===============================================================================
|
||||
|
||||
@ -48,7 +48,7 @@ use Data::Dumper;
|
||||
#
|
||||
# Version number (Incremented by Vim)
|
||||
#
|
||||
our $VERSION = '0.0.2';
|
||||
our $VERSION = '0.0.3';
|
||||
|
||||
#
|
||||
# Script and directory names
|
||||
@ -242,8 +242,9 @@ foreach my $notesfile (@ARGV) {
|
||||
# the directory the HTML is in.
|
||||
#
|
||||
$fcount++;
|
||||
# ${fileprefix}_${prefix}_${increment}.${extension}
|
||||
$filename
|
||||
= "$dirname/${prefix}_${basename}_${fcount}${suffix}";
|
||||
= "$dirname/${basename}_${prefix}_${fcount}${suffix}";
|
||||
say "Writing to: $filename" unless $silent;
|
||||
|
||||
say '-' x 40 unless $silent;
|
||||
@ -473,7 +474,7 @@ extract_images - extract embedded images from HTML and save as files
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
This documentation refers to extract_images version 0.0.2
|
||||
This documentation refers to extract_images version 0.0.3
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user