generate-inspector-html-with-extras   [plain text]


#!/usr/bin/perl -w

# Copyright (C) 2008, 2011 Apple Inc. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# Script to include some extra resources, from an inspector subdirectory,
# into an html file by linking to JavaScript and CSS Stylesheet resources
# in the <head>.

use strict;
use Getopt::Long;
use File::Basename;
use File::Path;

my $inputHtmlFile;
my $outputDirectory;
my $outputHtmlFileName;

our $extrasDirectory;
our $extrasDirectoryBasename;

GetOptions('input-html=s' => \$inputHtmlFile,
           'output-directory=s' => \$outputDirectory,
           'output-html-file-name=s' => \$outputHtmlFileName,
           'extras-directory=s' => \$extrasDirectory);

unless (defined $inputHtmlFile and defined $outputDirectory and defined $outputHtmlFileName and defined $extrasDirectory) {
    print "Usage: $0 --input-html <path> --output-directory <path> --output-html-file-name <name> --extras-directory <path>\n";
    exit 1;
}

my $htmlDirectory = dirname($inputHtmlFile);
my $htmlContents;

{
    local $/;
    open HTML, $inputHtmlFile or die "Can't open $inputHtmlFile: $!";
    $htmlContents = <HTML>;
    close HTML;
}

$htmlContents =~ m/<head>(.*)<\/head>/si;
my $headContents = $1;

$extrasDirectoryBasename = basename($extrasDirectory);
$headContents .= extraResourcesString();

$htmlContents =~ s/<head>.*<\/head>/<head>$headContents<\/head>/si;

open HTML, ">", "$outputDirectory/$outputHtmlFileName" or die "Can't open $outputDirectory/$outputHtmlFileName: $!";
print HTML $htmlContents;
close HTML;


sub extraResourcesString
{
    my $str = "\n";
    $str .= "    <!-- Extra Resources -->\n";

    my @files = <$extrasDirectory/*>;
    foreach my $file (@files) {
        next if -d $file;
        $str .= includeStringForFile($file);
    }

    return $str;
}

sub includeStringForFile($)
{
    my ($file) = @_;

    my $basename = basename($file);
    if ($basename =~ /\.js$/) {
        return "    <script type=\"text/javascript\" src=\"$extrasDirectoryBasename/$basename\"></script>\n";
    } elsif ($basename =~ /\.css$/) {
        return "    <link rel=\"stylesheet\" type=\"text/css\" href=\"$extrasDirectoryBasename/$basename\">\n";
    } else {
        print "Do not know how to handle \"$file\".\n";
    }
}