18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#! /usr/bin/perl
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   This file is part of the WebKit project
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   Copyright (C) 1999 Waldo Bastian (bastian@kde.org)
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   Copyright (C) 2007 Apple Inc. All rights reserved.
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
8545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#   Copyright (C) 2010 Andras Becsi (abecsi@inf.u-szeged.hu), University of Szeged
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   This library is free software; you can redistribute it and/or
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   modify it under the terms of the GNU Library General Public
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   License as published by the Free Software Foundation; either
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   version 2 of the License, or (at your option) any later version.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   This library is distributed in the hope that it will be useful,
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   but WITHOUT ANY WARRANTY; without even the implied warranty of
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   Library General Public License for more details.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   You should have received a copy of the GNU Library General Public License
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   along with this library; see the file COPYING.LIB.  If not, write to
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   Boston, MA 02110-1301, USA.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectuse strict;
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectuse warnings;
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectopen NAMES, "<CSSValueKeywords.in" || die "Could not open CSSValueKeywords.in";
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy @names = ();
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectwhile (<NAMES>) {
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  next if (m/(^#)|(^\s*$)/);
310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  # Input may use a different EOL sequence than $/, so avoid chomp.
320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch  $_ =~ s/[\r\n]+$//g;
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  push @names, $_;
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclose(NAMES);
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectopen GPERF, ">CSSValueKeywords.gperf" || die "Could not open CSSValueKeywords.gperf for writing";
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprint GPERF << "EOF";
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%{
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* This file is automatically generated from CSSValueKeywords.in by makevalues, do not edit */
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include \"CSSValueKeywords.h\"
434576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include \"HashTools.h\"
444576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include <string.h>
454576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
464576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangnamespace WebCore {
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%}
48545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch%struct-type
49bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenstruct Value;
50bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen%omit-struct-type
51bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen%language=C++
52545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch%readonly-tables
53545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch%compare-strncmp
54bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen%define class-name CSSValueKeywordsHash
55bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen%define lookup-function-name findValueImpl
56545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch%define hash-function-name value_hash_function
57545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch%define word-array-name value_word_list
58545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch%enum
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project%%
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEOF
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectforeach my $name (@names) {
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  my $id = $name;
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  $id =~ s/(^[^-])|-(.)/uc($1||$2)/ge;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  print GPERF $name . ", CSSValue" . $id . "\n";
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
674576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
684576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangprint GPERF << "EOF";
694576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang%%
704576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangstatic const char* const valueList[] = {
714576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    "",
724576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) WangEOF
734576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
744576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangforeach my $name (@names) {
754576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang  print GPERF "    \"" . $name . "\",\n";
764576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
774576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
784576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangprint GPERF << "EOF";
794576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    0
804576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang};
814576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
824576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangconst Value* findValue(register const char* str, register unsigned int len)
834576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
844576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return CSSValueKeywordsHash::findValueImpl(str, len);
854576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
864576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
874576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangconst char* getValueName(unsigned short id)
884576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{
894576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    if (id >= numCSSValueKeywords || id <= 0)
904576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang        return 0;
914576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    return valueList[id];
924576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}
934576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
944576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang} // namespace WebCore
954576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) WangEOF
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclose GPERF;
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
984576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectopen HEADER, ">CSSValueKeywords.h" || die "Could not open CSSValueKeywords.h for writing";
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprint HEADER << "EOF";
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* This file is automatically generated from CSSValueKeywords.in by makevalues, do not edit */
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
103545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#ifndef CSSValueKeywords_h
104545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#define CSSValueKeywords_h
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
106bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include <string.h>
107bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
108bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsennamespace WebCore {
109bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectconst int CSSValueInvalid = 0;
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEOF
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy $i = 1;
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmy $maxLen = 0;
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectforeach my $name (@names) {
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  my $id = $name;
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  $id =~ s/(^[^-])|-(.)/uc($1||$2)/ge;
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  print HEADER "const int CSSValue" . $id . " = " . $i . ";\n";
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  $i = $i + 1;
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  if (length($name) > $maxLen) {
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    $maxLen = length($name);
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprint HEADER "const int numCSSValueKeywords = " . $i . ";\n";
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprint HEADER "const size_t maxCSSValueKeywordLength = " . $maxLen . ";\n";
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprint HEADER << "EOF";
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectconst char* getValueName(unsigned short id);
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
130bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} // namespace WebCore
131bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
132545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif // CSSValueKeywords_h
133bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEOF
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclose HEADER;
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangsystem("gperf --key-positions=\"*\" -D -n -s 2 CSSValueKeywords.gperf > CSSValueKeywords.cpp") == 0 || die "calling gperf failed: $?";
138