Changeset 34467 in webkit
- Timestamp:
- Jun 9, 2008 3:59:57 AM (16 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r34466 r34467 1 2008-06-07 Julien Chaffraix <jchaffraix@webkit.org> 2 3 Reviewed by Darin Adler. 4 5 Part of bug 19200: *.in files should embed more information 6 https://bugs.webkit.org/show_bug.cgi?id=19200 7 8 - Added a parameters hash that will hold the parameters we used to give in the 9 command line. 10 11 - Added "tags" / "attrs" XML tag parsing to fill the parameters hash. 12 13 - Moved namespace, namespaceURI, namespacePrefix and cppNamespace in the *.in 14 files. 15 16 * dom/make_names.pl: 17 * html/HTMLAttributeNames.in: 18 * html/HTMLTagNames.in: 19 * svg/svgattrs.in: 20 * svg/svgtags.in: 21 * svg/xlinkattrs.in: 22 * xml/xmlattrs.in: 23 1 24 2008-06-09 Tor Arne Vestbø <tavestbo@trolltech.com> 2 25 -
trunk/WebCore/dom/make_names.pl
r34415 r34467 38 38 my $printFactory = 0; 39 39 my $printWrapperFactory = 0; 40 my $cppNamespace = "";41 my $namespace = "";42 my $namespacePrefix = "";43 my $namespaceURI = "";44 40 my $tagsFile = ""; 45 41 my $attrsFile = ""; … … 47 43 my %tags = (); 48 44 my %attrs = (); 45 my %parameters = (); 49 46 my $tagsNullNamespace = 0; 50 47 my $attrsNullNamespace = 0; … … 58 55 'attrs=s' => \$attrsFile, 59 56 'outputDir=s' => \$outputDir, 60 'namespace=s' => \$namespace,61 'namespacePrefix=s' => \$namespacePrefix,62 'namespaceURI=s' => \$namespaceURI,63 'cppNamespace=s' => \$cppNamespace,64 57 'factory' => \$printFactory, 65 58 'wrapperFactory' => \$printWrapperFactory, … … 70 63 'guardFactoryWith=s' => \$guardFactoryWith); 71 64 72 die "You must specify a namespace (e.g. SVG) for <namespace>Names.h" unless $namespace;73 die "You must specify a namespaceURI (e.g. http://www.w3.org/2000/svg)" unless $namespaceURI;74 die "You must specify a cppNamespace (e.g. DOM) used for <cppNamespace>::<namespace>Names::fooTag" unless $cppNamespace;75 65 die "You must specify at least one of --tags <file> or --attrs <file>" unless (length($tagsFile) || length($attrsFile)); 76 77 $namespacePrefix = $namespace unless $namespacePrefix;78 66 79 67 readNames($tagsFile) if length($tagsFile); 80 68 readNames($attrsFile) if length($attrsFile); 81 69 70 die "You must specify a namespace (e.g. SVG) for <namespace>Names.h" unless $parameters{'namespace'}; 71 die "You must specify a namespaceURI (e.g. http://www.w3.org/2000/svg)" unless $parameters{'namespaceURI'}; 72 die "You must specify a cppNamespace (e.g. DOM) used for <cppNamespace>::<namespace>Names::fooTag" unless $parameters{'cppNamespace'}; 73 74 $parameters{'namespacePrefix'} = $parameters{'namespace'} unless $parameters{'namespacePrefix'}; 75 82 76 mkpath($outputDir); 83 my $namesBasePath = "$outputDir/$ {namespace}Names";84 my $factoryBasePath = "$outputDir/$ {namespace}ElementFactory";85 my $wrapperFactoryBasePath = "$outputDir/JS$ {namespace}ElementWrapperFactory";77 my $namesBasePath = "$outputDir/$parameters{'namespace'}Names"; 78 my $factoryBasePath = "$outputDir/$parameters{'namespace'}ElementFactory"; 79 my $wrapperFactoryBasePath = "$outputDir/JS$parameters{'namespace'}ElementWrapperFactory"; 86 80 87 81 printNamesHeaderFile("$namesBasePath.h"); … … 111 105 } 112 106 107 sub initializeParametersHash 108 { 109 return ('namespace' => '', 110 'namespacePrefix' => '', 111 'namespaceURI' => '', 112 'cppNamespace' => ''); 113 } 113 114 114 115 ### Parsing handlers 115 116 116 117 # Our files should have the following form : 117 # < tags> or <attrs>118 # <'tags' or 'attrs' globalProperty1 = 'value1' ... /> 118 119 # <'tag/attr name' 'property1' = 'value1' ... /> 119 120 # where the properties are defined in the initialize*PropertyHash methods. … … 159 160 } 160 161 162 sub parseParameters 163 { 164 my $propertiesRef = shift; 165 my %properties = %$propertiesRef; 166 167 # Initialize default properties' values. 168 %parameters = initializeParametersHash() if !(keys %parameters); 169 170 # Parse the XML attributes. 171 foreach my $property (keys %properties) { 172 die "Unknown parameter $property for tags/attrs\n" if !defined($parameters{$property}); 173 $parameters{$property} = $properties{$property}; 174 } 175 } 176 161 177 ## Support routines 162 178 … … 185 201 switch($name) { 186 202 case "tags" { 203 parseParameters(\%{$document{'attrib'}}); 187 204 parseTags(\@{$document{'content'}}); 188 205 } 189 206 case "attrs" { 207 parseParameters(\%{$document{'attrib'}}); 190 208 parseAttrs(\@{$document{'content'}}); 191 } 192 }193 194 # FIXME: we should process the attributes here to build a parameter map209 } else { 210 die "Do not know how to parse file starting with $name!\n"; 211 } 212 } 195 213 196 214 close($names); … … 216 234 my $ucName = $names{$name}{"upperCase"}; 217 235 218 print F "$ {namespace}Element* ${name}Constructor(Document* doc, bool createdByParser)\n";236 print F "$parameters{'namespace'}Element* ${name}Constructor(Document* doc, bool createdByParser)\n"; 219 237 print F "{\n"; 220 print F " return new $ {namespace}${ucName}Element(${name}Tag, doc);\n";238 print F " return new $parameters{'namespace'}${ucName}Element(${name}Tag, doc);\n"; 221 239 print F "}\n\n"; 222 240 } … … 247 265 my $name = shift; 248 266 249 $name = svgCapitalizationHacks($name) if ($ namespaceeq "SVG");267 $name = svgCapitalizationHacks($name) if ($parameters{'namespace'} eq "SVG"); 250 268 251 269 while ($name =~ /^(.*?)_(.*)/) { … … 298 316 299 317 printLicenseHeader($F); 300 print F "#ifndef DOM_$ {namespace}NAMES_H\n";301 print F "#define DOM_$ {namespace}NAMES_H\n\n";318 print F "#ifndef DOM_$parameters{'namespace'}NAMES_H\n"; 319 print F "#define DOM_$parameters{'namespace'}NAMES_H\n\n"; 302 320 print F "#include \"QualifiedName.h\"\n\n"; 303 321 304 print F "namespace $ cppNamespace { namespace ${namespace}Names {\n\n";305 306 my $lowerNamespace = lc($ namespacePrefix);307 print F "#ifndef DOM_$ {namespace}NAMES_HIDE_GLOBALS\n";322 print F "namespace $parameters{'cppNamespace'} { namespace $parameters{'namespace'}Names {\n\n"; 323 324 my $lowerNamespace = lc($parameters{'namespacePrefix'}); 325 print F "#ifndef DOM_$parameters{'namespace'}NAMES_HIDE_GLOBALS\n"; 308 326 print F "// Namespace\n"; 309 327 print F "extern const WebCore::AtomicString ${lowerNamespace}NamespaceURI;\n\n"; … … 312 330 print F "// Tags\n"; 313 331 printMacros($F, "extern const WebCore::QualifiedName", "Tag", \%tags); 314 print F "\n\nWebCore::QualifiedName** get$ {namespace}Tags(size_t* size);\n";332 print F "\n\nWebCore::QualifiedName** get$parameters{'namespace'}Tags(size_t* size);\n"; 315 333 } 316 334 … … 318 336 print F "// Attributes\n"; 319 337 printMacros($F, "extern const WebCore::QualifiedName", "Attr", \%attrs); 320 print F "\n\nWebCore::QualifiedName** get$ {namespace}Attr(size_t* size);\n";338 print F "\n\nWebCore::QualifiedName** get$parameters{'namespace'}Attr(size_t* size);\n"; 321 339 } 322 340 print F "#endif\n\n"; … … 336 354 printLicenseHeader($F); 337 355 338 my $lowerNamespace = lc($ namespacePrefix);356 my $lowerNamespace = lc($parameters{'namespacePrefix'}); 339 357 340 358 print F "#include \"config.h\"\n"; 341 359 342 360 print F "#ifdef AVOID_STATIC_CONSTRUCTORS\n"; 343 print F "#define DOM_$ {namespace}NAMES_HIDE_GLOBALS 1\n";361 print F "#define DOM_$parameters{'namespace'}NAMES_HIDE_GLOBALS 1\n"; 344 362 print F "#else\n"; 345 363 print F "#define QNAME_DEFAULT_CONSTRUCTOR 1\n"; … … 347 365 348 366 349 print F "#include \"$ {namespace}Names.h\"\n\n";367 print F "#include \"$parameters{'namespace'}Names.h\"\n\n"; 350 368 print F "#include \"StaticConstructors.h\"\n"; 351 369 352 print F "namespace $ cppNamespace { namespace ${namespace}Names {370 print F "namespace $parameters{'cppNamespace'} { namespace $parameters{'namespace'}Names { 353 371 354 372 using namespace WebCore; 355 373 356 DEFINE_GLOBAL(AtomicString, ${lowerNamespace}NamespaceURI, \"$ namespaceURI\")374 DEFINE_GLOBAL(AtomicString, ${lowerNamespace}NamespaceURI, \"$parameters{'namespaceURI'}\") 357 375 "; 358 376 … … 363 381 } 364 382 365 print F "\n\nWebCore::QualifiedName** get$ {namespace}Tags(size_t* size)\n";366 print F "{\n static WebCore::QualifiedName* $ {namespace}Tags[] = {\n";383 print F "\n\nWebCore::QualifiedName** get$parameters{'namespace'}Tags(size_t* size)\n"; 384 print F "{\n static WebCore::QualifiedName* $parameters{'namespace'}Tags[] = {\n"; 367 385 for my $name (sort keys %tags) { 368 386 print F " (WebCore::QualifiedName*)&${name}Tag,\n"; … … 370 388 print F " };\n"; 371 389 print F " *size = ", scalar(keys %tags), ";\n"; 372 print F " return $ {namespace}Tags;\n";390 print F " return $parameters{'namespace'}Tags;\n"; 373 391 print F "}\n"; 374 392 … … 380 398 print F "DEFINE_GLOBAL(QualifiedName, ", $name, "Attr, nullAtom, \"$name\", ${lowerNamespace}NamespaceURI);\n"; 381 399 } 382 print F "\n\nWebCore::QualifiedName** get$ {namespace}Attrs(size_t* size)\n";383 print F "{\n static WebCore::QualifiedName* $ {namespace}Attr[] = {\n";400 print F "\n\nWebCore::QualifiedName** get$parameters{'namespace'}Attrs(size_t* size)\n"; 401 print F "{\n static WebCore::QualifiedName* $parameters{'namespace'}Attr[] = {\n"; 384 402 for my $name (sort keys %attrs) { 385 403 print F " (WebCore::QualifiedName*)&${name}Attr,\n"; … … 387 405 print F " };\n"; 388 406 print F " *size = ", scalar(keys %attrs), ";\n"; 389 print F " return $ {namespace}Attr;\n";407 print F " return $parameters{'namespace'}Attr;\n"; 390 408 print F "}\n"; 391 409 } … … 403 421 "; 404 422 405 print(F " AtomicString ${lowerNamespace}NS(\"$ namespaceURI\");\n\n");423 print(F " AtomicString ${lowerNamespace}NS(\"$parameters{'namespaceURI'}\");\n\n"); 406 424 407 425 print(F " // Namespace\n"); … … 428 446 429 447 my $ucName = $names{$name}{"upperCase"}; 430 print F "#include \"JS$ {namespace}${ucName}Element.h\"\n";448 print F "#include \"JS$parameters{'namespace'}${ucName}Element.h\"\n"; 431 449 } 432 450 } … … 440 458 441 459 my $ucName = $names{$name}{"upperCase"}; 442 print F "#include \"$ {namespace}${ucName}Element.h\"\n";460 print F "#include \"$parameters{'namespace'}${ucName}Element.h\"\n"; 443 461 } 444 462 } … … 485 503 print F <<END 486 504 #include "config.h" 487 #include "$ {namespace}ElementFactory.h"488 #include "$ {namespace}Names.h"505 #include "$parameters{'namespace'}ElementFactory.h" 506 #include "$parameters{'namespace'}Names.h" 489 507 #include "Page.h" 490 508 #include "Settings.h" … … 498 516 499 517 using namespace WebCore; 500 using namespace $ {cppNamespace}::${namespace}Names;501 502 typedef $ {namespace}Element* (*ConstructorFunc)(Document* doc, bool createdByParser);518 using namespace $parameters{'cppNamespace'}::$parameters{'namespace'}Names; 519 520 typedef $parameters{'namespace'}Element* (*ConstructorFunc)(Document* doc, bool createdByParser); 503 521 typedef WTF::HashMap<AtomicStringImpl*, ConstructorFunc> FunctionMap; 504 522 505 523 static FunctionMap* gFunctionMap = 0; 506 524 507 namespace $ {cppNamespace} {525 namespace $parameters{'cppNamespace'} { 508 526 509 527 END … … 532 550 533 551 print F <<END 534 $ {namespace}Element* ${namespace}ElementFactory::create${namespace}Element(const QualifiedName& qName, Document* doc, bool createdByParser)552 $parameters{'namespace'}Element* $parameters{'namespace'}ElementFactory::create$parameters{'namespace'}Element(const QualifiedName& qName, Document* doc, bool createdByParser) 535 553 { 536 554 END … … 555 573 return func(doc, createdByParser); 556 574 557 return new $ {namespace}Element(qName, doc);575 return new $parameters{'namespace'}Element(qName, doc); 558 576 END 559 577 ; … … 589 607 printLicenseHeader($F); 590 608 591 print F "#ifndef $ {namespace}ELEMENTFACTORY_H\n";592 print F "#define $ {namespace}ELEMENTFACTORY_H\n\n";609 print F "#ifndef $parameters{'namespace'}ELEMENTFACTORY_H\n"; 610 print F "#define $parameters{'namespace'}ELEMENTFACTORY_H\n\n"; 593 611 594 612 print F " … … 600 618 } 601 619 602 namespace $ {cppNamespace}603 { 604 class $ {namespace}Element;620 namespace $parameters{'cppNamespace'} 621 { 622 class $parameters{'namespace'}Element; 605 623 606 624 // The idea behind this class is that there will eventually be a mapping from namespace URIs to ElementFactories that can dispense 607 625 // elements. In a compound document world, the generic createElement function (will end up being virtual) will be called. 608 class $ {namespace}ElementFactory626 class $parameters{'namespace'}ElementFactory 609 627 { 610 628 public: 611 629 WebCore::Element* createElement(const WebCore::QualifiedName& qName, WebCore::Document* doc, bool createdByParser = true); 612 static $ {namespace}Element* create${namespace}Element(const WebCore::QualifiedName& qName, WebCore::Document* doc, bool createdByParser = true);630 static $parameters{'namespace'}Element* create$parameters{'namespace'}Element(const WebCore::QualifiedName& qName, WebCore::Document* doc, bool createdByParser = true); 613 631 }; 614 632 } … … 687 705 my $name = shift; 688 706 initializeCustomMappings(); 689 return 1 if $ namespaceeq "HTML" && exists($htmlCustomMappings{$name});690 return 1 if $ namespaceeq "SVG" && exists($svgCustomMappings{$name});707 return 1 if $parameters{'namespace'} eq "HTML" && exists($htmlCustomMappings{$name}); 708 return 1 if $parameters{'namespace'} eq "SVG" && exists($svgCustomMappings{$name}); 691 709 return 0; 692 710 } … … 704 722 if ($names{$name}{"applyAudioHack"}) { 705 723 print F <<END 706 static JSNode* create${ucName}Wrapper(ExecState* exec, PassRefPtr<$ {namespace}Element> element)724 static JSNode* create${ucName}Wrapper(ExecState* exec, PassRefPtr<$parameters{'namespace'}Element> element) 707 725 { 708 726 if (!MediaPlayer::isAvailable()) 709 return new JS$ {namespace}Element(JS${namespace}ElementPrototype::self(exec), element.get());710 return new JS$ {namespace}${ucName}Element(JS${namespace}${ucName}ElementPrototype::self(exec), static_cast<${namespace}${ucName}Element*>(element.get()));727 return new JS$parameters{'namespace'}Element(JS$parameters{'namespace'}ElementPrototype::self(exec), element.get()); 728 return new JS$parameters{'namespace'}${ucName}Element(JS$parameters{'namespace'}${ucName}ElementPrototype::self(exec), static_cast<$parameters{'namespace'}${ucName}Element*>(element.get())); 711 729 } 712 730 … … 715 733 } else { 716 734 print F <<END 717 static JSNode* create${ucName}Wrapper(ExecState* exec, PassRefPtr<$ {namespace}Element> element)735 static JSNode* create${ucName}Wrapper(ExecState* exec, PassRefPtr<$parameters{'namespace'}Element> element) 718 736 { 719 return new JS$ {namespace}${ucName}Element(JS${namespace}${ucName}ElementPrototype::self(exec), static_cast<${namespace}${ucName}Element*>(element.get()));737 return new JS$parameters{'namespace'}${ucName}Element(JS$parameters{'namespace'}${ucName}ElementPrototype::self(exec), static_cast<$parameters{'namespace'}${ucName}Element*>(element.get())); 720 738 } 721 739 … … 738 756 print F "#if $guardFactoryWith\n\n" if $guardFactoryWith; 739 757 740 print F "#include \"JS$ {namespace}ElementWrapperFactory.h\"\n";758 print F "#include \"JS$parameters{'namespace'}ElementWrapperFactory.h\"\n"; 741 759 742 760 printJSElementIncludes($F, \%tags); 743 761 744 print F "\n#include \"$ {namespace}Names.h\"\n\n";762 print F "\n#include \"$parameters{'namespace'}Names.h\"\n\n"; 745 763 746 764 printElementIncludes($F, \%tags, 1); … … 751 769 namespace WebCore { 752 770 753 using namespace $ {namespace}Names;754 755 typedef JSNode* (*Create$ {namespace}ElementWrapperFunction)(ExecState*, PassRefPtr<${namespace}Element>);771 using namespace $parameters{'namespace'}Names; 772 773 typedef JSNode* (*Create$parameters{'namespace'}ElementWrapperFunction)(ExecState*, PassRefPtr<$parameters{'namespace'}Element>); 756 774 757 775 END … … 761 779 762 780 print F <<END 763 JSNode* createJS$ {namespace}Wrapper(ExecState* exec, PassRefPtr<${namespace}Element> element)781 JSNode* createJS$parameters{'namespace'}Wrapper(ExecState* exec, PassRefPtr<$parameters{'namespace'}Element> element) 764 782 { 765 static HashMap<WebCore::AtomicStringImpl*, Create$ {namespace}ElementWrapperFunction> map;783 static HashMap<WebCore::AtomicStringImpl*, Create$parameters{'namespace'}ElementWrapperFunction> map; 766 784 if (map.isEmpty()) { 767 785 END … … 775 793 } 776 794 777 if ($ namespaceeq "HTML") {795 if ($parameters{'namespace'} eq "HTML") { 778 796 for my $tag (sort keys %htmlCustomMappings) { 779 797 next if !$htmlCustomMappings{$tag}; … … 788 806 print F <<END 789 807 } 790 Create$ {namespace}ElementWrapperFunction createWrapperFunction = map.get(element->localName().impl());808 Create$parameters{'namespace'}ElementWrapperFunction createWrapperFunction = map.get(element->localName().impl()); 791 809 if (createWrapperFunction) 792 810 return createWrapperFunction(exec, element); 793 return new JS$ {namespace}Element(JS${namespace}ElementPrototype::self(exec), element.get());811 return new JS$parameters{'namespace'}Element(JS$parameters{'namespace'}ElementPrototype::self(exec), element.get()); 794 812 } 795 813 … … 812 830 printLicenseHeader($F); 813 831 814 print F "#ifndef JS$ {namespace}ElementWrapperFactory_h\n";815 print F "#define JS$ {namespace}ElementWrapperFactory_h\n\n";832 print F "#ifndef JS$parameters{'namespace'}ElementWrapperFactory_h\n"; 833 print F "#define JS$parameters{'namespace'}ElementWrapperFactory_h\n\n"; 816 834 817 835 print F "#if ${guardFactoryWith}\n" if $guardFactoryWith; … … 827 845 828 846 class JSNode; 829 class $ {namespace}Element;830 831 JSNode* createJS$ {namespace}Wrapper(KJS::ExecState*, PassRefPtr<${namespace}Element>);847 class $parameters{'namespace'}Element; 848 849 JSNode* createJS$parameters{'namespace'}Wrapper(KJS::ExecState*, PassRefPtr<$parameters{'namespace'}Element>); 832 850 833 851 } … … 838 856 print F "#endif // $guardFactoryWith\n\n" if $guardFactoryWith; 839 857 840 print F "#endif // JS$ {namespace}ElementWrapperFactory_h\n";858 print F "#endif // JS$parameters{'namespace'}ElementWrapperFactory_h\n"; 841 859 842 860 close F; -
trunk/WebCore/html/HTMLAttributeNames.in
r34410 r34467 1 <attrs >1 <attrs namespace="HTML" namespacePrefix="xhtml" cppNamespace="WebCore" namespaceURI="http://www.w3.org/1999/xhtml"> 2 2 <abbr/> 3 3 <accept_charset/> -
trunk/WebCore/html/HTMLTagNames.in
r34415 r34467 1 <tags >1 <tags namespace="HTML" namespacePrefix="xhtml" cppNamespace="WebCore" namespaceURI="http://www.w3.org/1999/xhtml"> 2 2 <a upperCase="Anchor"/> 3 3 <abbr/> -
trunk/WebCore/svg/svgattrs.in
r34410 r34467 1 <attrs >1 <attrs namespace="SVG" cppNamespace="WebCore" namespaceURI="http://www.w3.org/2000/svg"> 2 2 <accent-height/> 3 3 <accumulate/> -
trunk/WebCore/svg/svgtags.in
r34415 r34467 1 <tags >1 <tags namespace="SVG" cppNamespace="WebCore" namespaceURI="http://www.w3.org/2000/svg"> 2 2 <a/> 3 3 #if ENABLE_SVG_FONTS -
trunk/WebCore/svg/xlinkattrs.in
r34410 r34467 1 <attrs >1 <attrs namespace="XLink" cppNamespace="WebCore" namespaceURI="http://www.w3.org/1999/xlink"> 2 2 <actuate/> 3 3 <arcrole/> -
trunk/WebCore/xml/xmlattrs.in
r34410 r34467 1 <attrs >1 <attrs namespace="XML" cppNamespace="WebCore" namespaceURI="http://www.w3.org/XML/1998/namespace"> 2 2 <base/> 3 3 <lang/>
Note: See TracChangeset
for help on using the changeset viewer.