#!/usr/bin/perl
#
# HTMLMinifer v1.0
#
# The MIT License (MIT)
#
# Copyright (c) 2014 Daniele Bonini
#
# Permission is hereby granted, free of charge, to any person obtaining a copy of
# this software and associated documentation files (the "Software"), to deal in the
# Software without restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
# Software, and to permit persons to whom the Software is furnished to do so, subject
# to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
use strict;
use warnings;
print "HTMLMinifier v1.0.\n";
print "Copyright 2014 Daniele Bonini. All rights reserved.\n";
print "Author: Daniele Bonini\n";
print "Creation Date: Jun 27th, 2014\n";
print "Started at ", scalar(localtime), "\n";
# Initialization of the minifier components
use HTML::Packer;
my $HTMLpacker = HTML::Packer->init();
# Check of the arguments passed to the script
if (! $ARGV[0]) {
print "\n\n";
print "Invalid argument, source file is required!";
print "\n";
exit 1;
}
my $sourcefile = $ARGV[0];
my $destinationfile;
if ($ARGV[1]) {
$destinationfile = $ARGV[1];
}
else {
$destinationfile = $sourcefile . "m";
}
print "Source file: \'", $sourcefile, "\'\n";
print "Destination file: \'", $destinationfile, "\'\n";
# Check if the source file exists
if (! -T $sourcefile) {
print "\n\n";
print "Source file doesn't exist!";
print "\n";
exit 1;
}
# Check if the destinaton file exists
if (-T $destinationfile) {
my $replace="";
while (($replace ne "Y") && ($replace ne "N")) {
print "\n\n";
print "Destination file \'$destinationfile\' already exists. Do you want to continue and replace it? (Y/N)\n";
chomp($replace=);
if (uc($replace) eq "N") {
exit 0;
}
last if (uc($replace) eq "Y");
}
}
my @sourcetexta;
my $sourcetext;
my $minifiedtext;
# Read source file
open(SFILEH, $sourcefile) || die "Error accessing the source file \'$sourcefile\': $!";
if (! (@sourcetexta=)) {
die "Error reading the source file \'$sourcefile\': $!";
}
close(SFILEH);
print "\n";
print "Processing data..", "\n", "\n";
# Map the array of the source text to a string scalar to align to the
# packer->minify method definition requirements
my $i;
for( $i=0; $i<=$#sourcetexta; $i=$i+1 ) {
$sourcetext.=$sourcetexta[$i];
}
# Execute the minification
my $opts = {
remove_comments => 1,
remove_newlines => 1,
do_javascript => "best",
do_stylesheet => 0,
no_compress_comment => 1,
};
$minifiedtext = $HTMLpacker->minify( \$sourcetext, $opts );
# Output the result to the console
print $minifiedtext, "\n";
# Write the result to the destination file..
print "\n", "\n";
print "Saving to \'" . $destinationfile . "\'...", "\n";
print "\n", "\n";
open(DFILEH, ">$destinationfile") || die "Error creating the destination file \'$destinationfile\': $!";
if (! print DFILEH $minifiedtext, "\n" ) {
die "Error saving the resulting data to \'$destinationfile\': $!";
}
close(DFILEH);
# Ending..
print "\n", "\n";
print "OK, done!";
exit 0;