combine-javascript-resources.pl 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/usr/bin/perl -w
  2. # Copyright (C) 2008 Apple Inc. All Rights Reserved.
  3. #
  4. # Redistribution and use in source and binary forms, with or without
  5. # modification, are permitted provided that the following conditions
  6. # are met:
  7. # 1. Redistributions of source code must retain the above copyright
  8. # notice, this list of conditions and the following disclaimer.
  9. # 2. Redistributions in binary form must reproduce the above copyright
  10. # notice, this list of conditions and the following disclaimer in the
  11. # documentation and/or other materials provided with the distribution.
  12. #
  13. # THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
  14. # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  15. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  16. # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
  17. # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  18. # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  19. # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  20. # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  21. # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  22. # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  23. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  24. # Script to combine multiple JavaScript files into one file, based on
  25. # the script tags in the head of an input HTML file.
  26. use strict;
  27. use Getopt::Long;
  28. use File::Basename;
  29. use File::Path;
  30. my $generatedScriptsDirectory;
  31. my $outputDirectory;
  32. my $scriptName;
  33. my $htmlFile;
  34. GetOptions('output-dir=s' => \$outputDirectory,
  35. 'output-script-name=s' => \$scriptName,
  36. 'generated-scripts-dir=s' => \$generatedScriptsDirectory,
  37. 'input-html=s' => \$htmlFile);
  38. unless (defined $htmlFile and defined $scriptName and defined $outputDirectory) {
  39. print "Usage: $0 --input-html <path> --output-dir path --output-script-name <name>\n";
  40. exit;
  41. }
  42. my $htmlDirectory = dirname($htmlFile);
  43. my $htmlContents;
  44. {
  45. local $/;
  46. open HTML, $htmlFile or die;
  47. $htmlContents = <HTML>;
  48. close HTML;
  49. }
  50. $htmlContents =~ m/<head>(.*)<\/head>/si;
  51. my $headContents = $1;
  52. mkpath $outputDirectory;
  53. open SCRIPT_OUT, ">", "$outputDirectory/$scriptName" or die "Can't open $outputDirectory/$scriptName: $!";
  54. while ($headContents =~ m/<script.*src="([^"]*)"[^>]*>/gi) {
  55. local $/;
  56. open SCRIPT_IN, "$generatedScriptsDirectory/$1" or open SCRIPT_IN, "$htmlDirectory/$1" or die "Can't open $htmlDirectory/$1: $!";
  57. print SCRIPT_OUT "/* $1 */\n\n";
  58. print SCRIPT_OUT <SCRIPT_IN>;
  59. close SCRIPT_IN;
  60. }
  61. close SCRIPT_OUT;
  62. $headContents =~ s/<script.*src="[^"]*"[^>]*><\/script>\s*//gi;
  63. $headContents .= "<script type=\"text/javascript\" src=\"$scriptName\"></script>\n";
  64. $htmlContents =~ s/<head>.*<\/head>/<head>$headContents<\/head>/si;
  65. open HTML, ">", "$outputDirectory/" . basename($htmlFile) or die "Can't open $outputDirectory/" . basename($htmlFile) . ": $!";
  66. print HTML $htmlContents;
  67. close HTML;