Reviewed by Sam.
authorzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Jul 2008 00:41:38 +0000 (00:41 +0000)
committerzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Jul 2008 00:41:38 +0000 (00:41 +0000)
Fixes: https://bugs.webkit.org/show_bug.cgi?id=20052
Export the tag & attribute names as string literals for SVGNames/XLinkNames and one property in HTMLNames.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@35206 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/dom/make_names.pl
WebCore/html/HTMLAttributeNames.in
WebCore/svg/svgattrs.in
WebCore/svg/svgtags.in
WebCore/svg/xlinkattrs.in

index 4a27b1c8c8fc5914fd9a8f15aad222558d56f098..3b9d2efe0b17ffbf0be548e054d43406cad160bb 100644 (file)
@@ -1,3 +1,20 @@
+2008-07-16  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Sam.
+
+        Fixes: https://bugs.webkit.org/show_bug.cgi?id=20052 
+        Prepare SVGAnimatedProperty introduction.
+
+        Export the tag & attribute names as string literals for SVGNames/XLinkNames and one property in HTMLNames. SVGAnimatedProperty
+        contains two string literal template parameters, and we're using these exported string literals from {SVG,HTML,XLink}Names as input paramters.
+        See https://bugs.webkit.org/show_bug.cgi?id=20051 for details.
+
+        * dom/make_names.pl: Handle new params "exportString" / "exportStrings".
+        * html/HTMLAttributeNames.in: Expose just the single "class" attribute, as string.
+        * svg/svgattrs.in: Export all SVG attributes as strings.
+        * svg/svgtags.in: Export all SVG tags as strings.
+        * svg/xlinkattrs.in: Expose all XLink attributes as strings.
+
 2008-07-16  Nikolas Zimmermann  <zimmermann@kde.org>
 
         Reviewed by Eric.
index fa060a4f9a1485f73414e8c1f98b07c80e3c0a03..0568967afcaf3e7165a300d99abd68be94d4633a 100755 (executable)
@@ -86,12 +86,14 @@ if ($parameters{'generateWrapperFactory'}) {
 sub initializeTagPropertyHash
 {
     return ('upperCase' => upperCaseName($_[0]),
-            'applyAudioHack' => 0);
+            'applyAudioHack' => 0,
+            'exportString' => 0);
 }
 
 sub initializeAttrPropertyHash
 {
-    return ('upperCase' => upperCaseName($_[0]));
+    return ('upperCase' => upperCaseName($_[0]),
+            'exportString' => 0);
 }
 
 sub initializeParametersHash
@@ -105,7 +107,8 @@ sub initializeParametersHash
             'generateWrapperFactory' => 0,
             # The 2 nullNamespace properties are generated from the "nullNamespace" attribute with respect to the file parsed (attrs or tags).
             'tagsNullNamespace' => 0,
-            'attrsNullNamespace' => 0);
+            'attrsNullNamespace' => 0,
+            'exportStrings' => 0);
 }
 
 ### Parsing handlers
@@ -224,8 +227,14 @@ sub readNames
 sub printMacros
 {
     my ($F, $macro, $suffix, $namesRef) = @_;
+    my %names = %$namesRef;
+
     for my $name (sort keys %$namesRef) {
-        print F "    $macro $name","$suffix;\n";
+        print F "$macro $name","$suffix;\n";
+
+        if ($parameters{'exportStrings'} or $names{$name}{"exportString"}) { 
+            print F "extern char $name", "${suffix}String[];\n";
+        }
     }
 }
 
@@ -394,7 +403,6 @@ DEFINE_GLOBAL(AtomicString, ${lowerNamespace}NamespaceURI, \"$parameters{'namesp
         print F "    *size = ", scalar(keys %tags), ";\n";
         print F "    return $parameters{'namespace'}Tags;\n";
         print F "}\n";
-        
     }
 
     if (keys %attrs) {
@@ -413,6 +421,14 @@ DEFINE_GLOBAL(AtomicString, ${lowerNamespace}NamespaceURI, \"$parameters{'namesp
         print F "}\n";
     }
 
+    if (keys %tags) {
+        printDefinitionStrings($F, \%tags, "tags");
+    }
+
+    if (keys %attrs) {
+        printDefinitionStrings($F, \%attrs, "attributes");
+    }
+
 print F "\nvoid init()
 {
     static bool initialized = false;
@@ -466,6 +482,25 @@ sub printElementIncludes
     }
 }
 
+sub printDefinitionStrings
+{
+    my ($F, $namesRef, $type) = @_;
+    my $singularType = substr($type, 0, -1);
+    my $shortType = substr($singularType, 0, 4);
+    my $shortCamelType = ucfirst($shortType);
+    print F "\n// " . ucfirst($type) . " as strings\n";
+
+    my %names = %$namesRef;
+    for my $name (sort keys %$namesRef) {
+        next if (!$parameters{'exportStrings'} and !$names{$name}{"exportString"});
+
+        my $realName = $name;
+        $realName =~ s/_/-/g;
+
+        print F "char $name","${shortCamelType}String[] = \"$realName\";\n";
+    }
+} 
+
 sub printDefinitions
 {
     my ($F, $namesRef, $type, $namespaceURI) = @_;
@@ -476,23 +511,18 @@ sub printDefinitions
     
     print F "    // " . ucfirst($type) . "\n";
 
+    my %names = %$namesRef;
     for my $name (sort keys %$namesRef) {
-        print F "    const char *$name","${shortCamelType}String = \"$name\";\n";
-    }
-        
-    for my $name (sort keys %$namesRef) {
-        if ($name =~ /_/) {
-            my $realName = $name;
-            $realName =~ s/_/-/g;
-            print F "    ${name}${shortCamelType}String = \"$realName\";\n";
-        }
+        next if ($parameters{'exportStrings'} or $names{$name}{"exportString"});
+
+        my $realName = $name;
+        $realName =~ s/_/-/g;
+        print F "    const char *$name","${shortCamelType}String = \"$realName\";\n\n";
     }
-    print F "\n";
 
     for my $name (sort keys %$namesRef) {
         print F "    new ((void*)&$name","${shortCamelType}) QualifiedName(nullAtom, $name","${shortCamelType}String, $namespaceURI);\n";
     }
-
 }
 
 ## ElementFactory routines
index 25074010da1300bb199fbcfb4fd557840a26b15b..c1779e238a5f45c0e54c8623826ab2c9850ee289 100644 (file)
@@ -38,7 +38,7 @@
 <checked/>
 <cellborder/>
 <cite/>
-<class/>
+<class exportString="1"/>
 <classid/>
 <clear/>
 <code/>
index 8f9b557355b6edf5abbb456c55f507d127c987b6..5ae13a3f1556a037fe0c2dc1d01bce266f91bc03 100644 (file)
@@ -1,4 +1,4 @@
-<attrs namespace="SVG" cppNamespace="WebCore" namespaceURI="http://www.w3.org/2000/svg" generateFactory="1" generateWrapperFactory="1" guardFactoryWith="ENABLE(SVG)" nullNamespace="1">
+<attrs namespace="SVG" cppNamespace="WebCore" namespaceURI="http://www.w3.org/2000/svg" generateFactory="1" generateWrapperFactory="1" guardFactoryWith="ENABLE(SVG)" nullNamespace="1" exportStrings="1">
 <accent-height/>
 <accumulate/>
 <additive/>
index 63a515c07a045bed4d2ebebda4e353f87a314508..2cda4b0f7afbcdae69d22866e309a5c3814bdfee 100644 (file)
@@ -1,4 +1,4 @@
-<tags namespace="SVG" cppNamespace="WebCore" namespaceURI="http://www.w3.org/2000/svg" generateFactory="1" generateWrapperFactory="1" guardFactoryWith="ENABLE(SVG)">
+<tags namespace="SVG" cppNamespace="WebCore" namespaceURI="http://www.w3.org/2000/svg" generateFactory="1" generateWrapperFactory="1" guardFactoryWith="ENABLE(SVG)" exportStrings="1">
 <a/>
 #if ENABLE_SVG_FONTS
 <altGlyph/>
index 625839509493db8bd362ff030fee9a41d6ae64a0..d6a3bae676c09b952d62e58506c24744f5c1827f 100644 (file)
@@ -1,4 +1,4 @@
-<attrs namespace="XLink" cppNamespace="WebCore" namespaceURI="http://www.w3.org/1999/xlink">
+<attrs namespace="XLink" cppNamespace="WebCore" namespaceURI="http://www.w3.org/1999/xlink" exportStrings="1">
 <actuate/>
 <arcrole/>
 <href/>