use strict;
use warnings;
open NAMES, "<CSSValueKeywords.in" || die "Could not open CSSValueKeywords.in";
my @names = ();
while (<NAMES>) {
next if (m/(^ $_ =~ s/[\r\n]+$//g;
push @names, $_;
}
close(NAMES);
open GPERF, ">CSSValueKeywords.gperf" || die "Could not open CSSValueKeywords.gperf for writing";
print GPERF << "EOF";
%{
/* This file is automatically generated from CSSValueKeywords.in by makevalues, do not edit */
namespace WebCore {
%}
%struct-type
struct Value;
%omit-struct-type
%language=C++
%readonly-tables
%compare-strncmp
%define class-name CSSValueKeywordsHash
%define lookup-function-name findValueImpl
%define hash-function-name value_hash_function
%define word-array-name value_word_list
%enum
%%
EOF
foreach my $name (@names) {
my $id = $name;
$id =~ s/(^[^-])|-(.)/uc($1||$2)/ge;
print GPERF $name . ", CSSValue" . $id . "\n";
}
print GPERF << "EOF";
%%
static const char* const valueList[] = {
"",
EOF
foreach my $name (@names) {
print GPERF " \"" . $name . "\",\n";
}
print GPERF << "EOF";
0
};
const Value* findValue(register const char* str, register unsigned int len)
{
return CSSValueKeywordsHash::findValueImpl(str, len);
}
const char* getValueName(unsigned short id)
{
if (id >= numCSSValueKeywords || id <= 0)
return 0;
return valueList[id];
}
} // namespace WebCore
EOF
close GPERF;
open HEADER, ">CSSValueKeywords.h" || die "Could not open CSSValueKeywords.h for writing";
print HEADER << "EOF";
/* This file is automatically generated from CSSValueKeywords.in by makevalues, do not edit */
namespace WebCore {
const int CSSValueInvalid = 0;
EOF
my $i = 1;
my $maxLen = 0;
foreach my $name (@names) {
my $id = $name;
$id =~ s/(^[^-])|-(.)/uc($1||$2)/ge;
print HEADER "const int CSSValue" . $id . " = " . $i . ";\n";
$i = $i + 1;
if (length($name) > $maxLen) {
$maxLen = length($name);
}
}
print HEADER "const int numCSSValueKeywords = " . $i . ";\n";
print HEADER "const size_t maxCSSValueKeywordLength = " . $maxLen . ";\n";
print HEADER << "EOF";
const char* getValueName(unsigned short id);
} // namespace WebCore
EOF
close HEADER;
system("gperf --key-positions=\"*\" -D -n -s 2 CSSValueKeywords.gperf > CSSValueKeywords.cpp") == 0 || die "calling gperf failed: $?";