97 lines
2.9 KiB
Perl
Executable File
97 lines
2.9 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
#
|
|
# Copyright (C) 2006 Apple Inc.
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Library General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2 of the License, or (at your option) any later version.
|
|
#
|
|
# This library 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. See the GNU
|
|
# Library General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Library General Public License
|
|
# along with this library; see the file COPYING.LIB. If not, write to
|
|
# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
# Boston, MA 02110-1301, USA.
|
|
#
|
|
|
|
# Usage: make-css-file-arrays.pl <header> <output> <input> ...
|
|
|
|
use strict;
|
|
use warnings;
|
|
use FindBin;
|
|
use lib "$FindBin::Bin/../bindings/scripts";
|
|
|
|
use Getopt::Long;
|
|
|
|
my $defines;
|
|
my $preprocessor;
|
|
GetOptions('defines=s' => \$defines,
|
|
'preprocessor=s' => \$preprocessor);
|
|
|
|
my $header = $ARGV[0];
|
|
shift;
|
|
|
|
my $out = $ARGV[0];
|
|
shift;
|
|
|
|
open HEADER, ">", $header or die;
|
|
open OUT, ">", $out or die;
|
|
|
|
print HEADER "namespace WebCore {\n";
|
|
print OUT "namespace WebCore {\n";
|
|
|
|
for my $in (@ARGV) {
|
|
$in =~ /(\w+)\.css$/ or $in =~ /(\w+)\.js$/ or die;
|
|
my $name = $1;
|
|
|
|
# Slurp in the CSS file.
|
|
my $text;
|
|
require preprocessor;
|
|
$text = join('', applyPreprocessor($in, $defines, $preprocessor));
|
|
|
|
# Remove comments in a simple-minded way that will work fine for our files.
|
|
# Could do this a fancier way if we were worried about arbitrary CSS source.
|
|
$text =~ s|/\*.*?\*/||gs;
|
|
|
|
# Crunch whitespace just to make it a little smaller.
|
|
# Could do work to avoid doing this inside quote marks but our files don't have runs of spaces in quotes.
|
|
# Could crunch further based on places where whitespace is optional.
|
|
$text =~ s|\s+| |gs;
|
|
$text =~ s|^ ||;
|
|
$text =~ s| $||;
|
|
|
|
# Write out a C array of the characters.
|
|
my $length = length $text;
|
|
if ($in =~ /(\w+)\.css$/) {
|
|
print HEADER "extern const char ${name}UserAgentStyleSheet[${length}];\n";
|
|
print OUT "extern const char ${name}UserAgentStyleSheet[${length}] = {\n";
|
|
} else {
|
|
print HEADER "extern const char ${name}JavaScript[${length}];\n";
|
|
print OUT "extern const char ${name}JavaScript[${length}] = {\n";
|
|
}
|
|
my $i = 0;
|
|
while ($i < $length) {
|
|
print OUT " ";
|
|
my $j = 0;
|
|
while ($j < 16 && $i < $length) {
|
|
my $character = ord substr $text, $i, 1;
|
|
die if $character >= 128;
|
|
print OUT ", " unless $j == 0;
|
|
print OUT $character;
|
|
++$i;
|
|
++$j;
|
|
}
|
|
print OUT "," unless $i == $length;
|
|
print OUT "\n";
|
|
}
|
|
print OUT "};\n";
|
|
|
|
}
|
|
|
|
print HEADER "}\n";
|
|
print OUT "}\n";
|