#!/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;