| Index: Source/core/scripts/make_names.pl | 
| diff --git a/Source/core/scripts/make_names.pl b/Source/core/scripts/make_names.pl | 
| deleted file mode 100755 | 
| index d2570770c259b45fd6961033c9b9b3a8e036bd7c..0000000000000000000000000000000000000000 | 
| --- a/Source/core/scripts/make_names.pl | 
| +++ /dev/null | 
| @@ -1,1284 +0,0 @@ | 
| -#!/usr/bin/perl -w | 
| - | 
| -# Copyright (C) 2005, 2006, 2007, 2009 Apple Inc. All rights reserved. | 
| -# Copyright (C) 2009, Julien Chaffraix <jchaffraix@webkit.org> | 
| -# Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) | 
| -# Copyright (C) 2011 Ericsson AB. 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. | 
| -# 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of | 
| -#     its contributors may be used to endorse or promote products derived | 
| -#     from this software without specific prior written permission. | 
| -# | 
| -# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "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 OR ITS 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. | 
| - | 
| -use strict; | 
| - | 
| -use StaticString; | 
| -use Config; | 
| -use Getopt::Long; | 
| -use File::Path; | 
| -use File::Spec; | 
| -use IO::File; | 
| -use InFilesParser; | 
| - | 
| -sub readTags($$); | 
| -sub readAttrs($$); | 
| - | 
| -my $printFactory = 0; | 
| -my $fontNamesIn = ""; | 
| -my $tagsFile = ""; | 
| -my $attrsFile = ""; | 
| -my $outputDir = "."; | 
| -my %parsedTags = (); | 
| -my %parsedAttrs = (); | 
| -my %enabledTags = (); | 
| -my %enabledAttrs = (); | 
| -my %allTags = (); | 
| -my %allAttrs = (); | 
| -my %allStrings = (); | 
| -my %parameters = (); | 
| -my $extraDefines = 0; | 
| -my $initDefaults = 1; | 
| -my %extensionAttrs = (); | 
| - | 
| -require Config; | 
| - | 
| -my $gccLocation = ""; | 
| -if ($ENV{CC}) { | 
| -    $gccLocation = $ENV{CC}; | 
| -} elsif (($Config::Config{'osname'}) =~ /solaris/i) { | 
| -    $gccLocation = "/usr/sfw/bin/gcc"; | 
| -} else { | 
| -    $gccLocation = "/usr/bin/gcc"; | 
| -} | 
| -my $preprocessor = $gccLocation . " -E -x c++"; | 
| - | 
| -GetOptions( | 
| -    'tags=s' => \$tagsFile, | 
| -    'attrs=s' => \$attrsFile, | 
| -    'factory' => \$printFactory, | 
| -    'outputDir=s' => \$outputDir, | 
| -    'extraDefines=s' => \$extraDefines, | 
| -    'preprocessor=s' => \$preprocessor, | 
| -    'fonts=s' => \$fontNamesIn, | 
| -); | 
| - | 
| -mkpath($outputDir); | 
| - | 
| -if (length($fontNamesIn)) { | 
| -    my $familyNamesFileBase = "FontFamily"; | 
| -    my $familyNamesPrefix = "CSS"; | 
| -    createGenericNamesFile($fontNamesIn, $familyNamesFileBase, $familyNamesPrefix); | 
| -} | 
| - | 
| -die "You must specify at least one of --tags <file> or --attrs <file>" unless (length($tagsFile) || length($attrsFile)); | 
| - | 
| -if (length($tagsFile)) { | 
| -    %allTags = %{readTags($tagsFile, 0)}; | 
| -    %enabledTags = %{readTags($tagsFile, 1)}; | 
| -    namesToStrings(\%allTags, \%allStrings); | 
| -} | 
| - | 
| -if (length($attrsFile)) { | 
| -    %allAttrs = %{readAttrs($attrsFile, 0)}; | 
| -    %enabledAttrs = %{readAttrs($attrsFile, 1)}; | 
| -    namesToStrings(\%allAttrs, \%allStrings); | 
| -} | 
| - | 
| -die "You must specify a namespace (e.g. SVG) for <namespace>Names.h" unless $parameters{namespace}; | 
| -die "You must specify a namespaceURI (e.g. http://www.w3.org/2000/svg)" unless $parameters{namespaceURI}; | 
| - | 
| -$parameters{namespacePrefix} = $parameters{namespace} unless $parameters{namespacePrefix}; | 
| -$parameters{fallbackJSInterfaceName} = $parameters{fallbackInterfaceName} unless $parameters{fallbackJSInterfaceName}; | 
| - | 
| -my $namesBasePath = "$outputDir/$parameters{namespace}Names"; | 
| -my $factoryBasePath = "$outputDir/$parameters{namespace}ElementFactory"; | 
| -my $wrapperFactoryFileName = "$parameters{namespace}ElementWrapperFactory"; | 
| - | 
| -printNamesHeaderFile("$namesBasePath.h"); | 
| -printNamesCppFile("$namesBasePath.cpp"); | 
| - | 
| -if ($printFactory) { | 
| -    printFactoryCppFile("$factoryBasePath.cpp"); | 
| -    printFactoryHeaderFile("$factoryBasePath.h"); | 
| -} | 
| - | 
| -printWrapperFactoryCppFile($outputDir, $wrapperFactoryFileName); | 
| -printWrapperFactoryHeaderFile($outputDir, $wrapperFactoryFileName); | 
| - | 
| -### Hash initialization | 
| - | 
| -sub defaultTagPropertyHash | 
| -{ | 
| -    return ( | 
| -        'constructorNeedsCreatedByParser' => 0, | 
| -        'constructorNeedsFormElement' => 0, | 
| -        'noConstructor' => 0, | 
| -        'interfaceName' => defaultInterfaceName($_[0]), | 
| -        # By default, the JSInterfaceName is the same as the interfaceName. | 
| -        'JSInterfaceName' => defaultInterfaceName($_[0]), | 
| -        'mapToTagName' => '', | 
| -        'wrapperOnlyIfMediaIsAvailable' => 0, | 
| -        'conditional' => 0, | 
| -        'contextConditional' => 0, | 
| -        'runtimeConditional' => 0 | 
| -    ); | 
| -} | 
| - | 
| -sub defaultParametersHash | 
| -{ | 
| -    return ( | 
| -        'namespace' => '', | 
| -        'namespacePrefix' => '', | 
| -        'namespaceURI' => '', | 
| -        'guardFactoryWith' => '', | 
| -        'tagsNullNamespace' => 0, | 
| -        'attrsNullNamespace' => 0, | 
| -        'fallbackInterfaceName' => '', | 
| -        'fallbackJSInterfaceName' => '' | 
| -    ); | 
| -} | 
| - | 
| -sub defaultInterfaceName | 
| -{ | 
| -    die "No namespace found" if !$parameters{namespace}; | 
| -    return $parameters{namespace} . upperCaseName($_[0]) . "Element" | 
| -} | 
| - | 
| -### Parsing handlers | 
| - | 
| -sub valueForName | 
| -{ | 
| -    my $name = shift; | 
| -    my $value = $extensionAttrs{$name}; | 
| - | 
| -    if (!$value) { | 
| -        $value = $name; | 
| -        $value =~ s/_/-/g; | 
| -    } | 
| - | 
| -    return $value; | 
| -} | 
| - | 
| -sub namesToStrings | 
| -{ | 
| -    my $namesRef = shift; | 
| -    my $stringsRef = shift; | 
| - | 
| -    my %names = %$namesRef; | 
| - | 
| -    for my $name (keys %names) { | 
| -        $stringsRef->{$name} = valueForName($name); | 
| -    } | 
| -} | 
| - | 
| -sub tagsHandler | 
| -{ | 
| -    my ($tag, $property, $value) = @_; | 
| - | 
| -    $tag =~ s/-/_/g; | 
| - | 
| -    # Initialize default property values. | 
| -    $parsedTags{$tag} = { defaultTagPropertyHash($tag) } if !defined($parsedTags{$tag}); | 
| - | 
| -    if ($property) { | 
| -        die "Unknown property $property for tag $tag\n" if !defined($parsedTags{$tag}{$property}); | 
| - | 
| -        # The code relies on JSInterfaceName deriving from interfaceName to check for custom JSInterfaceName. | 
| -        # So override JSInterfaceName if it was not already set. | 
| -        $parsedTags{$tag}{JSInterfaceName} = $value if $property eq "interfaceName" && $parsedTags{$tag}{JSInterfaceName} eq $parsedTags{$tag}{interfaceName}; | 
| - | 
| -        $parsedTags{$tag}{$property} = $value; | 
| -    } | 
| -} | 
| - | 
| -sub attrsHandler | 
| -{ | 
| -    my ($attr, $property, $value) = @_; | 
| -    # Translate HTML5 extension attributes of the form 'x-webkit-feature' to 'webkitfeature'. | 
| -    # We don't just check for the 'x-' prefix because there are attributes such as x-height | 
| -    # which should follow the default path below. | 
| -    if ($attr =~ m/^x-webkit-(.*)/) { | 
| -        my $newAttr = "webkit$1"; | 
| -        $extensionAttrs{$newAttr} = $attr; | 
| -        $attr = $newAttr; | 
| -    } | 
| -    $attr =~ s/-/_/g; | 
| - | 
| -    # Initialize default properties' values. | 
| -    $parsedAttrs{$attr} = {} if !defined($parsedAttrs{$attr}); | 
| - | 
| -    if ($property) { | 
| -        die "Unknown property $property for attribute $attr\n" if !defined($parsedAttrs{$attr}{$property}); | 
| -        $parsedAttrs{$attr}{$property} = $value; | 
| -    } | 
| -} | 
| - | 
| -sub parametersHandler | 
| -{ | 
| -    my ($parameter, $value) = @_; | 
| - | 
| -    # Initialize default properties' values. | 
| -    %parameters = defaultParametersHash() if (!(keys %parameters) && $initDefaults); | 
| - | 
| -    # If the input is an array, we want the strings to have the same value as the key. | 
| -    if ( $value eq 1) { | 
| -        $value = $parameter; | 
| -    } | 
| - | 
| -    die "Unknown parameter $parameter for tags/attrs\n" if (!defined($parameters{$parameter}) && $initDefaults); | 
| -    $parameters{$parameter} = $value; | 
| -} | 
| - | 
| -## Support routines | 
| - | 
| -sub preprocessorCommand() | 
| -{ | 
| -    return $preprocessor if $extraDefines eq 0; | 
| -    return $preprocessor . " -D" . join(" -D", split(" ", $extraDefines)); | 
| -} | 
| - | 
| -sub readNames($$$$) | 
| -{ | 
| -    my ($namesFile, $hashToFillRef, $handler, $usePreprocessor) = @_; | 
| - | 
| -    my $names = new IO::File; | 
| -    if ($usePreprocessor) { | 
| -        open($names, preprocessorCommand() . " " . $namesFile . "|") or die "Failed to open file: $namesFile"; | 
| -    } else { | 
| -        open($names, $namesFile) or die "Failed to open file: $namesFile"; | 
| -    } | 
| - | 
| -    my $InParser = InFilesParser->new(); | 
| -    $InParser->parse($names, \¶metersHandler, $handler); | 
| - | 
| -    close($names); | 
| -    die "Failed to read names from file: $namesFile" if (keys %{$hashToFillRef} == 0); | 
| -    return $hashToFillRef; | 
| -} | 
| - | 
| -sub readAttrs($$) | 
| -{ | 
| -    my ($namesFile, $usePreprocessor) = @_; | 
| -    %parsedAttrs = (); | 
| -    return readNames($namesFile, \%parsedAttrs, \&attrsHandler, $usePreprocessor); | 
| -} | 
| - | 
| -sub readTags($$) | 
| -{ | 
| -    my ($namesFile, $usePreprocessor) = @_; | 
| -    %parsedTags = (); | 
| -    return readNames($namesFile, \%parsedTags, \&tagsHandler, $usePreprocessor); | 
| -} | 
| - | 
| -sub printMacros | 
| -{ | 
| -    my ($F, $macro, $suffix, $namesRef) = @_; | 
| -    my %names = %$namesRef; | 
| - | 
| -    for my $name (sort keys %names) { | 
| -        print F "$macro $name","$suffix;\n"; | 
| -    } | 
| -} | 
| - | 
| -sub usesDefaultWrapper | 
| -{ | 
| -    my $tagName = shift; | 
| -    return $tagName eq $parameters{namespace} . "Element"; | 
| -} | 
| - | 
| -# Build a direct mapping from the tags to the Element to create. | 
| -sub buildConstructorMap | 
| -{ | 
| -    my %tagConstructorMap = (); | 
| -    for my $tagName (keys %enabledTags) { | 
| -        my $interfaceName = $enabledTags{$tagName}{interfaceName}; | 
| - | 
| -        if ($enabledTags{$tagName}{mapToTagName}) { | 
| -            die "Cannot handle multiple mapToTagName for $tagName\n" if $enabledTags{$enabledTags{$tagName}{mapToTagName}}{mapToTagName}; | 
| -            $interfaceName = $enabledTags{ $enabledTags{$tagName}{mapToTagName} }{interfaceName}; | 
| -        } | 
| - | 
| -        # Chop the string to keep the interesting part. | 
| -        $interfaceName =~ s/$parameters{namespace}(.*)Element/$1/; | 
| -        $tagConstructorMap{$tagName} = lc($interfaceName); | 
| -    } | 
| - | 
| -    return %tagConstructorMap; | 
| -} | 
| - | 
| -# Helper method that print the constructor's signature avoiding | 
| -# unneeded arguments. | 
| -sub printConstructorSignature | 
| -{ | 
| -    my ($F, $tagName, $constructorName, $constructorTagName) = @_; | 
| - | 
| -    print F "static PassRefPtr<$parameters{namespace}Element> ${constructorName}Constructor(const QualifiedName& $constructorTagName, Document& document"; | 
| -    if ($parameters{namespace} eq "HTML") { | 
| -        print F ", HTMLFormElement*"; | 
| -        print F " formElement" if $enabledTags{$tagName}{constructorNeedsFormElement}; | 
| -    } | 
| -    print F ", bool"; | 
| -    print F " createdByParser" if $enabledTags{$tagName}{constructorNeedsCreatedByParser}; | 
| -    print F ")\n{\n"; | 
| -} | 
| - | 
| -# Helper method to dump the constructor interior and call the | 
| -# Element constructor with the right arguments. | 
| -# The variable names should be kept in sync with the previous method. | 
| -sub printConstructorInterior | 
| -{ | 
| -    my ($F, $tagName, $interfaceName, $constructorTagName) = @_; | 
| - | 
| -    # Handle media elements. | 
| -    if ($enabledTags{$tagName}{wrapperOnlyIfMediaIsAvailable}) { | 
| -        print F <<END | 
| -    Settings* settings = document.settings(); | 
| -    if (!RuntimeEnabledFeatures::mediaEnabled() || (settings && !settings->mediaEnabled())) | 
| -        return 0; | 
| - | 
| -END | 
| -; | 
| -    } | 
| - | 
| -    my $contextConditional = $enabledTags{$tagName}{contextConditional}; | 
| -    if ($contextConditional) { | 
| -        print F <<END | 
| -    if (!ContextFeatures::${contextConditional}Enabled(&document)) | 
| -        return 0; | 
| -END | 
| -; | 
| -    } | 
| - | 
| -    my $runtimeConditional = $enabledTags{$tagName}{runtimeConditional}; | 
| -    if ($runtimeConditional) { | 
| -        print F <<END | 
| -    if (!RuntimeEnabledFeatures::${runtimeConditional}Enabled()) | 
| -        return 0; | 
| -END | 
| -; | 
| -    } | 
| - | 
| -    # Call the constructor with the right parameters. | 
| -    print F "    return ${interfaceName}::create($constructorTagName, document"; | 
| -    print F ", formElement" if $enabledTags{$tagName}{constructorNeedsFormElement}; | 
| -    print F ", createdByParser" if $enabledTags{$tagName}{constructorNeedsCreatedByParser}; | 
| -    print F ");\n}\n\n"; | 
| -} | 
| - | 
| -sub printConstructors | 
| -{ | 
| -    my ($F, $tagConstructorMapRef) = @_; | 
| -    my %tagConstructorMap = %$tagConstructorMapRef; | 
| - | 
| -    # This is to avoid generating the same constructor several times. | 
| -    my %uniqueTags = (); | 
| -    for my $tagName (sort keys %tagConstructorMap) { | 
| -        my $interfaceName = $enabledTags{$tagName}{interfaceName}; | 
| - | 
| -        # Ignore the mapped tag | 
| -        # FIXME: It could be moved inside this loop but was split for readibility. | 
| -        next if (defined($uniqueTags{$interfaceName}) || $enabledTags{$tagName}{mapToTagName}); | 
| -        # Tags can have wrappers without constructors. | 
| -        # This is useful to make user-agent shadow elements internally testable | 
| -        # while keeping them from being avaialble in the HTML markup. | 
| -        next if $enabledTags{$tagName}{noConstructor}; | 
| - | 
| -        $uniqueTags{$interfaceName} = '1'; | 
| - | 
| -        my $conditional = $enabledTags{$tagName}{conditional}; | 
| -        if ($conditional) { | 
| -            my $conditionalString = "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")"; | 
| -            print F "#if ${conditionalString}\n\n"; | 
| -        } | 
| - | 
| -        printConstructorSignature($F, $tagName, $tagConstructorMap{$tagName}, "tagName"); | 
| -        printConstructorInterior($F, $tagName, $interfaceName, "tagName"); | 
| - | 
| -        if ($conditional) { | 
| -            print F "#endif\n"; | 
| -        } | 
| -    } | 
| - | 
| -    # Mapped tag name uses a special wrapper to keep their prefix and namespaceURI while using the mapped localname. | 
| -    for my $tagName (sort keys %tagConstructorMap) { | 
| -        if ($enabledTags{$tagName}{mapToTagName}) { | 
| -            my $mappedName = $enabledTags{$tagName}{mapToTagName}; | 
| -            printConstructorSignature($F, $mappedName, $mappedName . "To" . $tagName, "tagName"); | 
| -            printConstructorInterior($F, $mappedName, $enabledTags{$mappedName}{interfaceName}, "QualifiedName(tagName.prefix(), ${mappedName}Tag.localName(), tagName.namespaceURI())"); | 
| -        } | 
| -    } | 
| -} | 
| - | 
| -sub printFunctionInits | 
| -{ | 
| -    my ($F, $tagConstructorMap) = @_; | 
| -    my %tagConstructorMap = %$tagConstructorMap; | 
| - | 
| -    for my $tagName (sort keys %tagConstructorMap) { | 
| -        next if $enabledTags{$tagName}{noConstructor}; | 
| - | 
| -        my $conditional = $enabledTags{$tagName}{conditional}; | 
| -        if ($conditional) { | 
| -            my $conditionalString = "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")"; | 
| -            print F "#if ${conditionalString}\n"; | 
| -        } | 
| - | 
| -        if ($enabledTags{$tagName}{mapToTagName}) { | 
| -            print F "    addTag(${tagName}Tag, $enabledTags{$tagName}{mapToTagName}To${tagName}Constructor);\n"; | 
| -        } else { | 
| -            print F "    addTag(${tagName}Tag, $tagConstructorMap{$tagName}Constructor);\n"; | 
| -        } | 
| - | 
| -        if ($conditional) { | 
| -            print F "#endif\n\n"; | 
| -        } | 
| -    } | 
| -} | 
| - | 
| -sub svgCapitalizationHacks | 
| -{ | 
| -    my $name = shift; | 
| - | 
| -    $name = "FE" . ucfirst $1 if $name =~ /^fe(.+)$/; | 
| - | 
| -    return $name; | 
| -} | 
| - | 
| -sub upperCaseName | 
| -{ | 
| -    my $name = shift; | 
| - | 
| -    $name = svgCapitalizationHacks($name) if ($parameters{namespace} eq "SVG"); | 
| - | 
| -    while ($name =~ /^(.*?)_(.*)/) { | 
| -        $name = $1 . ucfirst $2; | 
| -    } | 
| - | 
| -    return ucfirst $name; | 
| -} | 
| - | 
| -sub printHeaderHead | 
| -{ | 
| -    my ($F, $prefix, $nsName, $includes) = @_; | 
| - | 
| -    print F "#ifndef ${prefix}_${nsName}Names_h\n"; | 
| -    print F "#define ${prefix}_${nsName}Names_h\n\n"; | 
| -    print F "$includes\n\n"; | 
| - | 
| -    print F "namespace WebCore {\n\n"; | 
| -    print F "namespace ${nsName}Names {\n\n"; | 
| - | 
| -    print F "#ifndef ${prefix}_${nsName}NAMES_HIDE_GLOBALS\n"; | 
| -} | 
| - | 
| -sub printCppHead | 
| -{ | 
| -    my ($F, $prefix, $nsName, $usedNamespace) = @_; | 
| - | 
| -    print F "#include \"config.h\"\n\n"; | 
| -    print F "#ifdef SKIP_STATIC_CONSTRUCTORS_ON_GCC\n"; | 
| -    print F "#define ${prefix}_${nsName}NAMES_HIDE_GLOBALS 1\n"; | 
| -    print F "#else\n"; | 
| -    print F "#define QNAME_DEFAULT_CONSTRUCTOR 1\n"; | 
| -    print F "#endif\n\n"; | 
| - | 
| -    print F "#include \"${nsName}Names.h\"\n\n"; | 
| -    print F "#include \"wtf/StaticConstructors.h\"\n"; | 
| - | 
| -    print F "namespace WebCore {\n\n"; | 
| -    print F "namespace ${nsName}Names {\n\n"; | 
| -    print F "using namespace $usedNamespace;\n\n"; | 
| -} | 
| - | 
| -sub printInit | 
| -{ | 
| -    my ($F, $isDefinition) = @_; | 
| - | 
| -    if ($isDefinition) { | 
| -        print F "\nvoid init();\n\n"; | 
| -        print F "} }\n\n"; | 
| -        print F "#endif\n\n"; | 
| -        return; | 
| -    } | 
| - | 
| -print F "\nvoid init() | 
| -{ | 
| -    // Use placement new to initialize the globals. | 
| - | 
| -"; | 
| -} | 
| - | 
| -sub printLicenseHeader | 
| -{ | 
| -    my $F = shift; | 
| -    print F "/* | 
| - * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT. | 
| - * | 
| - * This file was generated by the core/scripts/make_names.pl script. | 
| - * | 
| - * Copyright (C) 2005, 2006, 2007, 2008, 2009 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 COMPUTER, 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 COMPUTER, 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. | 
| - */ | 
| - | 
| -"; | 
| -} | 
| - | 
| -sub printNamesHeaderFile | 
| -{ | 
| -    my ($headerPath) = shift; | 
| -    my $F; | 
| -    open F, ">$headerPath"; | 
| - | 
| -    printLicenseHeader($F); | 
| -    printHeaderHead($F, "DOM", $parameters{namespace}, "#include \"core/dom/QualifiedName.h\""); | 
| - | 
| -    my $lowerNamespace = lc($parameters{namespacePrefix}); | 
| -    print F "// Namespace\n"; | 
| -    print F "extern const WTF::AtomicString ${lowerNamespace}NamespaceURI;\n\n"; | 
| - | 
| -    if (keys %allTags) { | 
| -        print F "// Tags\n"; | 
| -        printMacros($F, "extern const WebCore::QualifiedName", "Tag", \%allTags); | 
| -    } | 
| - | 
| -    if (keys %allAttrs) { | 
| -        print F "// Attributes\n"; | 
| -        printMacros($F, "extern const WebCore::QualifiedName", "Attr", \%allAttrs); | 
| -    } | 
| -    print F "#endif\n\n"; | 
| - | 
| -    if (keys %allTags) { | 
| -        print F "const unsigned $parameters{namespace}TagsCount = ", scalar(keys %allTags), ";\n"; | 
| -        print F "WebCore::QualifiedName** get$parameters{namespace}Tags();\n"; | 
| -    } | 
| - | 
| -    if (keys %allAttrs) { | 
| -        print F "const unsigned $parameters{namespace}AttrsCount = ", scalar(keys %allAttrs), ";\n"; | 
| -        print F "WebCore::QualifiedName** get$parameters{namespace}Attrs();\n"; | 
| -    } | 
| - | 
| -    printInit($F, 1); | 
| -    close F; | 
| -} | 
| - | 
| -sub printNamesCppFile | 
| -{ | 
| -    my $cppPath = shift; | 
| -    my $F; | 
| -    open F, ">$cppPath"; | 
| - | 
| -    printLicenseHeader($F); | 
| -    printCppHead($F, "DOM", $parameters{namespace}, "WebCore"); | 
| - | 
| -    my $lowerNamespace = lc($parameters{namespacePrefix}); | 
| - | 
| -    print F "DEFINE_GLOBAL(AtomicString, ${lowerNamespace}NamespaceURI)\n\n"; | 
| - | 
| -    if (keys %allTags) { | 
| -        print F "// Tags\n"; | 
| -        for my $name (sort keys %allTags) { | 
| -            print F "DEFINE_GLOBAL(QualifiedName, ", $name, "Tag)\n"; | 
| -        } | 
| - | 
| -        print F "\n\nWebCore::QualifiedName** get$parameters{namespace}Tags()\n"; | 
| -        print F "{\n    static WebCore::QualifiedName* $parameters{namespace}Tags[] = {\n"; | 
| -        for my $name (sort keys %allTags) { | 
| -            print F "        (WebCore::QualifiedName*)&${name}Tag,\n"; | 
| -        } | 
| -        print F "    };\n"; | 
| -        print F "    return $parameters{namespace}Tags;\n"; | 
| -        print F "}\n"; | 
| -    } | 
| - | 
| -    if (keys %allAttrs) { | 
| -        print F "\n// Attributes\n"; | 
| -        for my $name (sort keys %allAttrs) { | 
| -            print F "DEFINE_GLOBAL(QualifiedName, ", $name, "Attr)\n"; | 
| -        } | 
| -        print F "\n\nWebCore::QualifiedName** get$parameters{namespace}Attrs()\n"; | 
| -        print F "{\n    static WebCore::QualifiedName* $parameters{namespace}Attr[] = {\n"; | 
| -        for my $name (sort keys %allAttrs) { | 
| -            print F "        (WebCore::QualifiedName*)&${name}Attr,\n"; | 
| -        } | 
| -        print F "    };\n"; | 
| -        print F "    return $parameters{namespace}Attr;\n"; | 
| -        print F "}\n"; | 
| -    } | 
| - | 
| -    printInit($F, 0); | 
| - | 
| -    print(F "    AtomicString ${lowerNamespace}NS(\"$parameters{namespaceURI}\", AtomicString::ConstructFromLiteral);\n\n"); | 
| - | 
| -    print(F "    // Namespace\n"); | 
| -    print(F "    new ((void*)&${lowerNamespace}NamespaceURI) AtomicString(${lowerNamespace}NS);\n"); | 
| -    print(F "\n"); | 
| -    print F StaticString::GenerateStringImpls(\%allStrings); | 
| - | 
| -    if (keys %allTags) { | 
| -        my $tagsNamespace = $parameters{tagsNullNamespace} ? "nullAtom" : "${lowerNamespace}NS"; | 
| -        printDefinitions($F, \%allTags, "tags", $tagsNamespace); | 
| -    } | 
| -    if (keys %allAttrs) { | 
| -        my $attrsNamespace = $parameters{attrsNullNamespace} ? "nullAtom" : "${lowerNamespace}NS"; | 
| -        printDefinitions($F, \%allAttrs, "attributes", $attrsNamespace); | 
| -    } | 
| - | 
| -    print F "}\n\n} }\n\n"; | 
| -    close F; | 
| -} | 
| - | 
| -sub printJSElementIncludes | 
| -{ | 
| -    my $F = shift; | 
| - | 
| -    my %tagsSeen; | 
| -    for my $tagName (sort keys %enabledTags) { | 
| -        my $JSInterfaceName = $enabledTags{$tagName}{JSInterfaceName}; | 
| -        next if defined($tagsSeen{$JSInterfaceName}) || usesDefaultJSWrapper($tagName); | 
| -        if ($enabledTags{$tagName}{conditional}) { | 
| -            # We skip feature-define-specific #includes here since we handle them separately. | 
| -            next; | 
| -        } | 
| -        $tagsSeen{$JSInterfaceName} = 1; | 
| - | 
| -        print F "#include \"V8${JSInterfaceName}.h\"\n"; | 
| -    } | 
| -    print F "#include \"V8$parameters{fallbackJSInterfaceName}.h\"\n"; | 
| -} | 
| - | 
| -sub printElementIncludes | 
| -{ | 
| -    my $F = shift; | 
| - | 
| -    my %tagsSeen; | 
| -    for my $tagName (sort keys %enabledTags) { | 
| -        my $interfaceName = $enabledTags{$tagName}{interfaceName}; | 
| -        next if defined($tagsSeen{$interfaceName}); | 
| -        if ($enabledTags{$tagName}{conditional}) { | 
| -            # We skip feature-define-specific #includes here since we handle them separately. | 
| -            next; | 
| -        } | 
| -        $tagsSeen{$interfaceName} = 1; | 
| - | 
| -        print F "#include \"${interfaceName}.h\"\n"; | 
| -    } | 
| -    print F "#include \"$parameters{fallbackInterfaceName}.h\"\n"; | 
| -} | 
| - | 
| -sub printConditionalElementIncludes | 
| -{ | 
| -    my ($F, $shouldIncludeV8Headers) = @_; | 
| - | 
| -    my %conditionals; | 
| -    my %unconditionalElementIncludes; | 
| -    my %unconditionalJSElementIncludes; | 
| - | 
| -    for my $tagName (keys %enabledTags) { | 
| -        my $conditional = $enabledTags{$tagName}{conditional}; | 
| -        my $interfaceName = $enabledTags{$tagName}{interfaceName}; | 
| -        my $JSInterfaceName = $enabledTags{$tagName}{JSInterfaceName}; | 
| - | 
| -        if ($conditional) { | 
| -            $conditionals{$conditional}{interfaceNames}{$interfaceName} = 1; | 
| -            $conditionals{$conditional}{JSInterfaceNames}{$JSInterfaceName} = 1; | 
| -        } else { | 
| -            $unconditionalElementIncludes{$interfaceName} = 1; | 
| -            $unconditionalJSElementIncludes{$JSInterfaceName} = 1; | 
| -        } | 
| -    } | 
| - | 
| -    for my $conditional (sort keys %conditionals) { | 
| -        print F "\n#if ENABLE($conditional)\n"; | 
| -        for my $interfaceName (sort keys %{$conditionals{$conditional}{interfaceNames}}) { | 
| -            next if $unconditionalElementIncludes{$interfaceName}; | 
| -            print F "#include \"$interfaceName.h\"\n"; | 
| -        } | 
| -        if ($shouldIncludeV8Headers) { | 
| -            for my $JSInterfaceName (sort keys %{$conditionals{$conditional}{JSInterfaceNames}}) { | 
| -                next if $unconditionalJSElementIncludes{$JSInterfaceName}; | 
| -                print F "#include \"V8$JSInterfaceName.h\"\n"; | 
| -            } | 
| -        } | 
| -        print F "#endif\n"; | 
| -    } | 
| -} | 
| - | 
| -sub printDefinitions | 
| -{ | 
| -    my ($F, $namesRef, $type, $namespaceURI) = @_; | 
| -    my $singularType = substr($type, 0, -1); | 
| -    my $shortType = substr($singularType, 0, 4); | 
| -    my $shortCamelType = ucfirst($shortType); | 
| -    my $shortUpperType = uc($shortType); | 
| - | 
| -    print F "    // " . ucfirst($type) . "\n"; | 
| - | 
| -    for my $name (sort keys %$namesRef) { | 
| -        # To generate less code in init(), the common case of nullAtom for the namespace, we call createQualifiedName() without passing $namespaceURI. | 
| -        if ($namespaceURI eq "nullAtom") { | 
| -            print F "    createQualifiedName((void*)&$name","${shortCamelType}, ${name}Impl);\n"; | 
| -        } else { | 
| -            print F "    createQualifiedName((void*)&$name","${shortCamelType}, ${name}Impl, $namespaceURI);\n"; | 
| -        } | 
| -    } | 
| -} | 
| - | 
| -## ElementFactory routines | 
| - | 
| -sub printFactoryCppFile | 
| -{ | 
| -    my $cppPath = shift; | 
| -    my $F; | 
| -    open F, ">$cppPath"; | 
| - | 
| -printLicenseHeader($F); | 
| - | 
| -print F <<END | 
| -#include "config.h" | 
| -END | 
| -; | 
| - | 
| -print F "\n#if $parameters{guardFactoryWith}\n\n" if $parameters{guardFactoryWith}; | 
| - | 
| -print F <<END | 
| -#include "$parameters{namespace}ElementFactory.h" | 
| -#include "$parameters{namespace}Names.h" | 
| -END | 
| -; | 
| - | 
| -printElementIncludes($F); | 
| - | 
| -print F "\n#include \"wtf/HashMap.h\"\n"; | 
| - | 
| -printConditionalElementIncludes($F); | 
| - | 
| -print F <<END | 
| - | 
| -#include "RuntimeEnabledFeatures.h" | 
| -#include "core/dom/ContextFeatures.h" | 
| -#include "core/dom/custom/CustomElement.h" | 
| -#include "core/dom/custom/CustomElementRegistrationContext.h" | 
| -#include "core/dom/Document.h" | 
| -#include "core/page/Settings.h" | 
| - | 
| -namespace WebCore { | 
| - | 
| -using namespace $parameters{namespace}Names; | 
| - | 
| -END | 
| -; | 
| - | 
| -print F "typedef PassRefPtr<$parameters{namespace}Element> (*ConstructorFunction)(const QualifiedName&, Document&"; | 
| -print F ", HTMLFormElement*" if $parameters{namespace} eq "HTML"; | 
| -print F ", bool createdByParser);\n"; | 
| -print F <<END | 
| -typedef HashMap<StringImpl*, ConstructorFunction> FunctionMap; | 
| - | 
| -static FunctionMap* gFunctionMap = 0; | 
| - | 
| -END | 
| -; | 
| - | 
| -my %tagConstructorMap = buildConstructorMap(); | 
| - | 
| -printConstructors($F, \%tagConstructorMap); | 
| - | 
| -print F <<END | 
| -static void addTag(const QualifiedName& tag, ConstructorFunction func) | 
| -{ | 
| -    gFunctionMap->set(tag.localName().impl(), func); | 
| -} | 
| - | 
| -static void createFunctionMap() | 
| -{ | 
| -    ASSERT(!gFunctionMap); | 
| - | 
| -    // Create the table. | 
| -    gFunctionMap = new FunctionMap; | 
| - | 
| -    // Populate it with constructor functions. | 
| -END | 
| -; | 
| - | 
| -printFunctionInits($F, \%tagConstructorMap); | 
| - | 
| -print F "}\n"; | 
| - | 
| - | 
| -print F "\nPassRefPtr<$parameters{namespace}Element> $parameters{namespace}ElementFactory::create$parameters{namespace}Element(const QualifiedName& qName, Document* document"; | 
| -print F ", HTMLFormElement* formElement" if $parameters{namespace} eq "HTML"; | 
| -print F ", bool createdByParser)\n{\n"; | 
| - | 
| -print F <<END | 
| -    if (!document) | 
| -        return 0; | 
| - | 
| -    if (CustomElement::isValidName(qName.localName()) && document->registrationContext()) { | 
| -        RefPtr<Element> element = document->registrationContext()->createCustomTagElement(*document, qName, createdByParser ? CustomElementRegistrationContext::CreatedByParser : CustomElementRegistrationContext::NotCreatedByParser); | 
| -        ASSERT_WITH_SECURITY_IMPLICATION(element->is$parameters{namespace}Element()); | 
| -        return static_pointer_cast<$parameters{namespace}Element>(element.release()); | 
| -    } | 
| - | 
| -    if (!gFunctionMap) | 
| -        createFunctionMap(); | 
| -    if (ConstructorFunction function = gFunctionMap->get(qName.localName().impl())) { | 
| -END | 
| -; | 
| - | 
| -if ($parameters{namespace} eq "HTML") { | 
| -    print F "        if (PassRefPtr<$parameters{namespace}Element> element = function(qName, *document, formElement, createdByParser))\n"; | 
| -    print F "            return element;\n"; | 
| -} else { | 
| -    print F "        if (PassRefPtr<$parameters{namespace}Element> element = function(qName, *document, createdByParser))\n"; | 
| -    print F "            return element;\n"; | 
| -} | 
| -print F <<END | 
| -    } | 
| - | 
| -    return $parameters{fallbackInterfaceName}::create(qName, *document); | 
| -} | 
| - | 
| -} // namespace WebCore | 
| - | 
| -END | 
| -; | 
| - | 
| -    print F "#endif\n" if $parameters{guardFactoryWith}; | 
| - | 
| -    close F; | 
| -} | 
| - | 
| -sub printFactoryHeaderFile | 
| -{ | 
| -    my $headerPath = shift; | 
| -    my $F; | 
| -    open F, ">$headerPath"; | 
| - | 
| -    printLicenseHeader($F); | 
| - | 
| -    print F<<END | 
| -#ifndef $parameters{namespace}ElementFactory_h | 
| -#define $parameters{namespace}ElementFactory_h | 
| - | 
| -#include "wtf/Forward.h" | 
| -#include "wtf/PassRefPtr.h" | 
| - | 
| -namespace WebCore { | 
| -    class Element; | 
| -    class Document; | 
| -    class QualifiedName; | 
| -} | 
| - | 
| -namespace WebCore { | 
| - | 
| -    class $parameters{namespace}Element; | 
| -END | 
| -; | 
| - | 
| -print F "     class HTMLFormElement;\n" if $parameters{namespace} eq "HTML"; | 
| - | 
| -print F<<END | 
| -    // The idea behind this class is that there will eventually be a mapping from namespace URIs to ElementFactories that can dispense | 
| -    // elements. In a compound document world, the generic createElement function (will end up being virtual) will be called. | 
| -    class $parameters{namespace}ElementFactory { | 
| -    public: | 
| -        PassRefPtr<Element> createElement(const WebCore::QualifiedName&, WebCore::Document*, bool createdByParser = true); | 
| -END | 
| -; | 
| -print F "        static PassRefPtr<$parameters{namespace}Element> create$parameters{namespace}Element(const WebCore::QualifiedName&, WebCore::Document*"; | 
| -print F ", HTMLFormElement* = 0" if $parameters{namespace} eq "HTML"; | 
| -print F ", bool createdByParser = true);\n"; | 
| - | 
| -printf F<<END | 
| -    }; | 
| -} | 
| - | 
| -#endif // $parameters{namespace}ElementFactory_h | 
| - | 
| -END | 
| -; | 
| - | 
| -    close F; | 
| -} | 
| - | 
| -## Wrapper Factory routines | 
| - | 
| -sub usesDefaultJSWrapper | 
| -{ | 
| -    my $name = shift; | 
| - | 
| -    # A tag reuses the default wrapper if its JSInterfaceName matches the default namespace Element. | 
| -    return $enabledTags{$name}{JSInterfaceName} eq $parameters{namespace} . "Element"; | 
| -} | 
| - | 
| -sub printWrapperFunctions | 
| -{ | 
| -    my $F = shift; | 
| - | 
| -    my %tagsSeen; | 
| -    for my $tagName (sort keys %enabledTags) { | 
| -        # Avoid defining the same wrapper method twice. | 
| -        my $JSInterfaceName = $enabledTags{$tagName}{JSInterfaceName}; | 
| -        next if defined($tagsSeen{$JSInterfaceName}) || (usesDefaultJSWrapper($tagName) && ($parameters{fallbackJSInterfaceName} eq $parameters{namespace} . "Element")); | 
| -        $tagsSeen{$JSInterfaceName} = 1; | 
| - | 
| -        my $conditional = $enabledTags{$tagName}{conditional}; | 
| -        if ($conditional) { | 
| -            my $conditionalString = "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")"; | 
| -            print F "#if ${conditionalString}\n\n"; | 
| -        } | 
| - | 
| -        if ($enabledTags{$tagName}{wrapperOnlyIfMediaIsAvailable}) { | 
| -            print F <<END | 
| -static v8::Handle<v8::Object> create${JSInterfaceName}Wrapper($parameters{namespace}Element* element, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) | 
| -{ | 
| -    Settings* settings = element->document().settings(); | 
| -    if (!RuntimeEnabledFeatures::mediaEnabled() || (settings && !settings->mediaEnabled())) | 
| -        return createV8$parameters{namespace}FallbackWrapper(to$parameters{fallbackInterfaceName}(element), creationContext, isolate); | 
| -    return wrap(static_cast<${JSInterfaceName}*>(element), creationContext, isolate); | 
| -} | 
| - | 
| -END | 
| -; | 
| -        } elsif ($enabledTags{$tagName}{contextConditional}) { | 
| -            my $contextConditional = $enabledTags{$tagName}{contextConditional}; | 
| -            print F <<END | 
| -static v8::Handle<v8::Object> create${JSInterfaceName}Wrapper($parameters{namespace}Element* element, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) | 
| -{ | 
| -    if (!ContextFeatures::${contextConditional}Enabled(&element->document())) | 
| -        return createV8$parameters{namespace}FallbackWrapper(to$parameters{fallbackInterfaceName}(element), creationContext, isolate); | 
| -    return wrap(static_cast<${JSInterfaceName}*>(element), creationContext, isolate); | 
| -} | 
| -END | 
| -; | 
| -        } elsif ($enabledTags{$tagName}{runtimeConditional}) { | 
| -            my $runtimeConditional = $enabledTags{$tagName}{runtimeConditional}; | 
| -            print F <<END | 
| -static v8::Handle<v8::Object> create${JSInterfaceName}Wrapper($parameters{namespace}Element* element, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) | 
| -{ | 
| -    if (!RuntimeEnabledFeatures::${runtimeConditional}Enabled()) | 
| -        return createV8$parameters{namespace}FallbackWrapper(to$parameters{fallbackInterfaceName}(element), creationContext, isolate); | 
| -    return wrap(static_cast<${JSInterfaceName}*>(element), creationContext, isolate); | 
| -} | 
| -END | 
| -; | 
| -        } elsif (${JSInterfaceName} eq "HTMLElement") { | 
| -            print F <<END | 
| -static v8::Handle<v8::Object> create${JSInterfaceName}Wrapper($parameters{namespace}Element* element, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) | 
| -{ | 
| -    ASSERT_NOT_REACHED(); | 
| -    return v8::Handle<v8::Object>(); | 
| -} | 
| - | 
| -END | 
| -; | 
| -        } else { | 
| -            print F <<END | 
| -static v8::Handle<v8::Object> create${JSInterfaceName}Wrapper($parameters{namespace}Element* element, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) | 
| -{ | 
| -    return wrap(static_cast<${JSInterfaceName}*>(element), creationContext, isolate); | 
| -} | 
| - | 
| - | 
| -END | 
| -; | 
| -        } | 
| - | 
| -        if ($conditional) { | 
| -            print F "#endif\n\n"; | 
| -        } | 
| -    } | 
| -} | 
| - | 
| -sub printWrapperFactoryCppFile | 
| -{ | 
| -    my $outputDir = shift; | 
| -    my $wrapperFactoryFileName = shift; | 
| -    my $F; | 
| -    open F, ">" . $outputDir . "/V8" . $wrapperFactoryFileName . ".cpp"; | 
| - | 
| -    printLicenseHeader($F); | 
| - | 
| -    print F "#include \"config.h\"\n"; | 
| -    print F "#include \"V8$parameters{namespace}ElementWrapperFactory.h\"\n"; | 
| - | 
| -    print F "\n#if $parameters{guardFactoryWith}\n\n" if $parameters{guardFactoryWith}; | 
| - | 
| -    printJSElementIncludes($F); | 
| - | 
| -    print F "\n#include \"$parameters{namespace}Names.h\"\n\n"; | 
| - | 
| -    printElementIncludes($F); | 
| - | 
| -    print F "\n#include \"wtf/StdLibExtras.h\"\n"; | 
| - | 
| -    printConditionalElementIncludes($F, 1); | 
| - | 
| -    print F <<END | 
| - | 
| -#include "RuntimeEnabledFeatures.h" | 
| -#include "core/dom/ContextFeatures.h" | 
| -#include "core/dom/Document.h" | 
| -#include "core/page/Settings.h" | 
| - | 
| -#include "V8$parameters{namespace}Element.h" | 
| - | 
| -#include "bindings/v8/CustomElementWrapper.h" | 
| - | 
| -#include <v8.h> | 
| - | 
| -namespace WebCore { | 
| - | 
| -using namespace $parameters{namespace}Names; | 
| - | 
| -typedef v8::Handle<v8::Object> (*Create$parameters{namespace}ElementWrapperFunction)($parameters{namespace}Element*, v8::Handle<v8::Object> creationContext, v8::Isolate*); | 
| - | 
| -END | 
| -; | 
| - | 
| -    printWrapperFunctions($F); | 
| - | 
| -    print F <<END | 
| -v8::Handle<v8::Object> createV8$parameters{namespace}Wrapper($parameters{namespace}Element* element, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) | 
| -{ | 
| -    typedef HashMap<WTF::StringImpl*, Create$parameters{namespace}ElementWrapperFunction> FunctionMap; | 
| -    DEFINE_STATIC_LOCAL(FunctionMap, map, ()); | 
| -    if (map.isEmpty()) { | 
| -END | 
| -; | 
| - | 
| -    for my $tag (sort keys %enabledTags) { | 
| -        # Do not add the name to the map if it does not have a JS wrapper constructor or uses the default wrapper. | 
| -        next if (usesDefaultJSWrapper($tag, \%enabledTags) && ($parameters{fallbackJSInterfaceName} eq $parameters{namespace} . "Element")); | 
| - | 
| -        my $conditional = $enabledTags{$tag}{conditional}; | 
| -        if ($conditional) { | 
| -            my $conditionalString = "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")"; | 
| -            print F "#if ${conditionalString}\n"; | 
| -        } | 
| - | 
| -        my $ucTag = $enabledTags{$tag}{JSInterfaceName}; | 
| -        print F "       map.set(${tag}Tag.localName().impl(), create${ucTag}Wrapper);\n"; | 
| - | 
| -        if ($conditional) { | 
| -            print F "#endif\n"; | 
| -        } | 
| -    } | 
| - | 
| -    print F <<END | 
| -    } | 
| - | 
| -    Create$parameters{namespace}ElementWrapperFunction createWrapperFunction = map.get(element->localName().impl()); | 
| -END | 
| -; | 
| -    if ($parameters{namespace} eq "HTML") { | 
| -        print F <<END | 
| -    if (createWrapperFunction == createHTMLElementWrapper) | 
| -        createWrapperFunction = createV8HTMLDirectWrapper; | 
| -END | 
| -; | 
| -    } | 
| -    print F <<END | 
| -    if (element->isCustomElement()) | 
| -        return CustomElementWrapper<$parameters{namespace}Element, V8$parameters{namespace}Element>::wrap(element, creationContext, isolate, createWrapperFunction); | 
| - | 
| -    if (createWrapperFunction) | 
| -        return createWrapperFunction(element, creationContext, isolate); | 
| -END | 
| -; | 
| -    if ($parameters{namespace} eq "SVG") { | 
| -        print F <<END | 
| -    return V8SVGElement::createWrapper(element, creationContext, isolate); | 
| -END | 
| -; | 
| -    } else { | 
| -        print F <<END | 
| -    return wrap(to$parameters{fallbackInterfaceName}(element), creationContext, isolate); | 
| -END | 
| -; | 
| -    } | 
| - | 
| -    my $fallbackWrapper = $parameters{fallbackInterfaceName}; | 
| -    if ($parameters{namespace} eq "SVG") { | 
| -        $fallbackWrapper = "SVGElement"; | 
| -    } | 
| - | 
| -    print F <<END | 
| -} | 
| - | 
| -WrapperTypeInfo* findWrapperTypeFor$parameters{namespace}TagName(const AtomicString& name) | 
| -{ | 
| -    typedef HashMap<WTF::StringImpl*, WrapperTypeInfo*> NameTypeMap; | 
| -    DEFINE_STATIC_LOCAL(NameTypeMap, map, ()); | 
| -    if (map.isEmpty()) { | 
| -END | 
| -; | 
| - | 
| -    for my $tagName (sort keys %enabledTags) { | 
| -        if (!usesDefaultJSWrapper($tagName)) { | 
| -            my $conditional = $enabledTags{$tagName}{conditional}; | 
| -            if ($conditional) { | 
| -                my $conditionalString = "ENABLE(" . join(") && ENABLE(", split(/&/, $conditional)) . ")"; | 
| -                print F "#if ${conditionalString}\n"; | 
| -            } | 
| - | 
| -            my $JSInterfaceName = $enabledTags{$tagName}{JSInterfaceName}; | 
| -            print F "       map.set(${tagName}Tag.localName().impl(), WrapperTypeTraits<${JSInterfaceName}>::info());\n"; | 
| - | 
| -            if ($conditional) { | 
| -                print F "#endif\n"; | 
| -            } | 
| -        } | 
| -    } | 
| - | 
| -    print F <<END | 
| -    } | 
| - | 
| -    if (WrapperTypeInfo* result = map.get(name.impl())) | 
| -        return result; | 
| - | 
| -    return WrapperTypeTraits<$fallbackWrapper>::info(); | 
| -} | 
| - | 
| -END | 
| -; | 
| - | 
| -    print F "}\n\n"; | 
| -    print F "#endif\n" if $parameters{guardFactoryWith}; | 
| - | 
| -    close F; | 
| -} | 
| - | 
| -sub printWrapperFactoryHeaderFile | 
| -{ | 
| -    my $outputDir = shift; | 
| -    my $wrapperFactoryFileName = shift; | 
| -    my $F; | 
| -    open F, ">" . $outputDir . "/V8" . $wrapperFactoryFileName . ".h"; | 
| - | 
| -    printLicenseHeader($F); | 
| - | 
| -    print F "#ifndef V8$parameters{namespace}ElementWrapperFactory_h\n"; | 
| -    print F "#define V8$parameters{namespace}ElementWrapperFactory_h\n\n"; | 
| - | 
| -    print F "#if $parameters{guardFactoryWith}\n" if $parameters{guardFactoryWith}; | 
| - | 
| -    print F <<END | 
| -#include <V8$parameters{namespace}Element.h> | 
| -#include <V8$parameters{fallbackJSInterfaceName}.h> | 
| -#include <v8.h> | 
| - | 
| -namespace WebCore { | 
| - | 
| -    class $parameters{namespace}Element; | 
| - | 
| -    WrapperTypeInfo* findWrapperTypeFor$parameters{namespace}TagName(const AtomicString& name); | 
| - | 
| -    v8::Handle<v8::Object> createV8$parameters{namespace}Wrapper($parameters{namespace}Element*, v8::Handle<v8::Object> creationContext, v8::Isolate*); | 
| -    inline v8::Handle<v8::Object> createV8$parameters{namespace}DirectWrapper($parameters{namespace}Element* element, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) | 
| -    { | 
| -        return V8$parameters{namespace}Element::createWrapper(element, creationContext, isolate); | 
| -    } | 
| -    inline v8::Handle<v8::Object> createV8$parameters{namespace}FallbackWrapper($parameters{fallbackJSInterfaceName}* element, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) | 
| -    { | 
| -        return V8$parameters{fallbackJSInterfaceName}::createWrapper(element, creationContext, isolate); | 
| -    } | 
| -} | 
| -END | 
| -; | 
| -    print F "#endif // $parameters{guardFactoryWith}\n\n" if $parameters{guardFactoryWith}; | 
| - | 
| -    print F "#endif // V8$parameters{namespace}ElementWrapperFactory_h\n"; | 
| - | 
| -    close F; | 
| -} | 
| - | 
| -sub createGenericNamesFile | 
| -{ | 
| -    my $inputName = shift; | 
| -    my $baseName = shift; | 
| -    my $basePrefix = shift; | 
| - | 
| -    my $names = new IO::File; | 
| -    open($names, $inputName) or die "Failed to open file: $inputName"; | 
| - | 
| -    $initDefaults = 0; | 
| -    my $Parser = InFilesParser->new(); | 
| -    my $dummy; | 
| -    $Parser->parse($names, \¶metersHandler, \&dummy); | 
| - | 
| -    my $F; | 
| -    my $header = File::Spec->catfile($outputDir, "${baseName}Names.h"); | 
| -    open F, ">$header" or die "Unable to open $header for writing."; | 
| - | 
| -    printLicenseHeader($F); | 
| -    printHeaderHead($F, $basePrefix, $baseName, "#include \"wtf/text/AtomicString.h\""); | 
| - | 
| -    printMacros($F, "extern const WTF::AtomicString", "", \%parameters); | 
| -    print F "#endif\n\n"; | 
| - | 
| -    printInit($F, 1); | 
| -    close F; | 
| - | 
| -    my $source = File::Spec->catfile($outputDir, "${baseName}Names.cpp"); | 
| -    open F, ">$source" or die "Unable to open $source for writing."; | 
| - | 
| -    printLicenseHeader($F); | 
| -    printCppHead($F, $basePrefix, $baseName, "WTF"); | 
| - | 
| -    while ( my ($name, $identifier) = each %parameters ) { | 
| -        print F "DEFINE_GLOBAL(AtomicString, $name)\n"; | 
| -    } | 
| - | 
| -    printInit($F, 0); | 
| - | 
| -    print F "\n"; | 
| -    print F StaticString::GenerateStringImpls(\%parameters); | 
| - | 
| -    while ( my ($name, $identifier) = each %parameters ) { | 
| -        print F "    new ((void*)&$name) AtomicString(${name}Impl);\n"; | 
| -    } | 
| - | 
| -    print F "}\n}\n}\n"; | 
| -    close F; | 
| -    exit 0; | 
| -} | 
|  |