12011-07-09 Nikolas Zimmermann <nzimmermann@rim.com>
2
3 Add a possibility to retrieve the associated SVGAnimatedProperty object for a certain XML attribute
4 https://bugs.webkit.org/show_bug.cgi?id=63797
5
6 Reviewed by NOBODY (OOPS!).
7
8 In order to prepare animVal support we need a way to map a given SVG DOM attribute to a SVGAnimatedProperty.
9 eg. SVGNames::xAttr -> SVGRectElement::xAnimated(), etc. This will be needed to update the animVal of the
10 SVGAnimatedProperty, if an animation is running. It would required adding a new method to all SVG* classes
11 that define animated properties. Unfortunately we already have lots of repeated code in methods like
12 synchronizeProperty / fillAttributeToPropertyTypeMap. Look at SVGRectElement for example:
13
14 void SVGRectElement::synchronizeProperty(const QualifiedName& attrName)
15 {
16 if (attrName == anyQName()) {
17 synchronizeX();
18 synchronizeY();
19 ...
20 }
21
22 if (attrName == SVGNames::xAttr) {
23 synchronizeX();
24 return;
25 }
26
27 if (attrName == SVGNames::yAttr) {
28 synchronizeY();
29 return;
30 }
31 ...
32 }
33
34 or
35
36 void SVGRectElement::fillAttributeToPropertyTypeMap()
37 {
38 AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
39
40 SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
41 attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedLength);
42 attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedLength);
43 ...
44 }
45
46 These lookups are all performed dynamically. Each synchronizeProperty() call does a lot of comparisons.
47 fillAttributeToPropertyTypeMap() isn't that bad as the result is cached in a static HashMap per-SVGRectElement.
48 There's no reason to do these things dynamically!
49
50 Inspired by JSC, I'm adding a "static const SVGPropertyInfo s_fooPropertyInfo" object for each animated SVG property.
51 For example, for SVGRectElements SVGAnimatedLength x property we're storing:
52 - "AnimatedPropertyType type" (AnimatedLength -- note the enum was named AnimatedAttributeType, I renamed it to AnimatedPropertyType for clarity)
53 - "const QualifiedName& attributeName" (SVGNames::xAttr)
54 - "const AtomicString& propertyIdentifier" (SVGNames::xAttr.localName() -- only different if N-wrappers map to a single XML DOM attribute, eg. orientAttr)
55 - "SynchronizeProperty synchronizeProperty" (callback to SVGRectElement::synchronizeX)
56 - "LookupOrCreateWrapperForAnimatedProperty lookupOrCreateWrapperForAnimatedProperty" (callback to SVGRectElement::xAnimated)
57
58 Using this information, we can replace all the various synchronizeProperty/fillAttributeToPropertyMap implementations, with a single one in SVGElement.
59 All these are auto-generated, using the standard macros used to define/declare SVG animated properties. This required several changes to the macros.
60 Here's a summary:
61
62 #1) In all headers, wrap DECLARE_ANIMATED_* calls, in BEGIN_DECLARE_ANIMATED_PROPERTIES(ClassName) / END_DECLARE_ANIMATED_PROPERTIES blocks.
63
64 Sample change for SVGRectElement:
65 - DECLARE_ANIMATED_LENGTH(X, x)
66 - DECLARE_ANIMATED_LENGTH(Y, y)
67 - ...
68
69 + BEGIN_DECLARE_ANIMATED_PROPERTIES(SVGRectElement)
70 + DECLARE_ANIMATED_LENGTH(X, x)
71 + DECLARE_ANIMATED_LENGTH(Y, y)
72 + ...
73 + END_DECLARE_ANIMATED_PROPERTIES
74
75 #2) In all cpp files, add a new section wrapped in BEGIN_REGISTER_ANIMATED_PROPERTIES(ClassName / END_REGISTER_ANIMATED_PROPERTIES blocks:
76
77 Sample change for SVGRectElement:
78 +BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGRectElement)
79 + REGISTER_LOCAL_ANIMATED_PROPERTY(x)
80 + REGISTER_LOCAL_ANIMATED_PROPERTY(y)
81 + ...
82 + REGISTER_PARENT_ANIMATED_PROPERTIES(SVGStyledTransformableElement)
83 + REGISTER_PARENT_ANIMATED_PROPERTIES(SVGTests)
84 +END_REGISTER_ANIMATED_PROPERTIES
85
86 This is the main piece of the logic that replaces the manual synchronizeProperty/fillAttributeToPropertyMap implementation. It expands to following:
87
88 SVGAttributeToPropertyMap& SVGRectElement::attributeToPropertyMap()
89 {
90 DEFINE_STATIC_LOCAL(SVGAttributeToPropertyMap, s_attributeToPropertyMap, ());
91 }
92
93 static void registerAnimatedPropertiesForSVGRectElement()
94 {
95 SVGAttributeToPropertyMap& map = SVGRectElement::attributeToPropertyMap();
96 if (!map.isEmpty())
97 return;
98 map.addProperty(SVGRectElement::xPropertyInfo());
99 map.addProperty(SVGRectElement::yPropertyInfo());
100 ...
101 map.addProperties(SVGStyledTransformableElement::attributeToPropertyMap());
102 map.addProperties(SVGTests::attributeToPropertyMap());
103 }
104
105 A single-instance of SVGAttributeToPropertyMap is created for each SVG*Element. The constructor of SVGRectElement is supposed to call
106 registerAnimatedPropertiesForSVGRectElement(), which collects all properties of SVGRectElement and all its parent classes and stores them
107 in a Vector<const SVGPropertyInfo*>. This Vector is stored in a HashMap<QualifiedName, Vector<const SVGPropertyInfo*> > where the key
108 is the attribute name (eg. SVGNames::xAttr -> SVGRectElement::xPropertyInfo). This is only done _once_ per SVGRectElement.
109
110 SVGElement contains a "virtual SVGAttributeToPropertyMap& localAttributeToPropertyMap()" method, and SVGRectElement overrides it
111 and returns SVGRectElement::attributeToPropertyMap() (which is static!) -- this is hidden again in the macros, no need to write any code.
112
113 SVGAttributeToPropertyMap provides following API:
114 - bool synchronizeProperty(SVGElement* contextElement, const QualifiedName& attributeName)
115 - void synchronizeProperties(SVGElement* contextElement)
116
117 A generic way to synchronize a SVGAnimatedProperty with its XML DOM attribute. Any SVG DOM change to eg. <rect>s x property will now trigger
118 contextElement->localAttributeToPropertyMap().synchronizeProperty(this, SVGNames::xAttr)
119 The SVGAttributeToPropertyMap will ask its HashMap for the Vector containing the properties for SVGNames::xAttr (in that case, just one xAnimated()).
120
121 - void animatedPropertyTypeForAttribute(const QualifiedName& attributeName, Vector<AnimatedPropertyType>& propertyTypes)
122
123 This method replaces the fillAttributeToPropertyMap implementations everywhere.
124
125 - void animatedPropertiesForAttribute(SVGElement* contextElement, const QualifiedName& attributeName, Vector<RefPtr<SVGAnimatedProperty> >& properties);
126
127 This method is not used yet, but allows us to collect all SVGAnimatedProperties for a QualifiedName -- the initial goal for this patch.
128
129 #3) In all cpp files, add a call to "registerAnimatedPropertiesForClassName()" in the constructor. Forgetting this will result in a compile error.
130
131 Doesn't affect any tests.
132
133 * CMakeLists.txt:
134 * GNUmakefile.list.am:
135 * WebCore.gypi:
136 * WebCore.pro:
137 * WebCore.vcproj/WebCore.vcproj:
138 * WebCore.xcodeproj/project.pbxproj:
139 * bindings/scripts/CodeGeneratorJS.pm:
140 (NativeToJSValue):
141 * bindings/scripts/CodeGeneratorObjC.pm:
142 (GenerateImplementation):
143 * bindings/scripts/CodeGeneratorV8.pm:
144 (GenerateNormalAttrGetter):
145 * svg/SVGAElement.cpp:
146 (WebCore::SVGAElement::SVGAElement):
147 * svg/SVGAElement.h:
148 (WebCore::SVGAElement::synchronizeRequiredFeatures):
149 (WebCore::SVGAElement::synchronizeRequiredExtensions):
150 (WebCore::SVGAElement::synchronizeSystemLanguage):
151 * svg/SVGAltGlyphElement.cpp:
152 (WebCore::SVGAltGlyphElement::SVGAltGlyphElement):
153 * svg/SVGAltGlyphElement.h:
154 * svg/SVGAnimateElement.cpp:
155 (WebCore::SVGAnimateElement::SVGAnimateElement):
156 (WebCore::SVGAnimateElement::hasValidAttributeType):
157 (WebCore::SVGAnimateElement::determineAnimatedPropertyType):
158 (WebCore::SVGAnimateElement::determinePropertyValueTypes):
159 (WebCore::SVGAnimateElement::calculateAnimatedValue):
160 (WebCore::SVGAnimateElement::calculateFromAndToValues):
161 (WebCore::SVGAnimateElement::calculateFromAndByValues):
162 (WebCore::SVGAnimateElement::resetToBaseValue):
163 (WebCore::SVGAnimateElement::applyResultsToTarget):
164 (WebCore::SVGAnimateElement::calculateDistance):
165 (WebCore::SVGAnimateElement::ensureAnimator):
166 * svg/SVGAnimateElement.h:
167 * svg/SVGAnimateTransformElement.cpp:
168 (WebCore::SVGAnimateTransformElement::hasValidAttributeType):
169 (WebCore::SVGAnimateTransformElement::determineAnimatedPropertyType):
170 (WebCore::SVGAnimateTransformElement::resetToBaseValue):
171 (WebCore::SVGAnimateTransformElement::calculateAnimatedValue):
172 (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
173 * svg/SVGAnimateTransformElement.h:
174 * svg/SVGAnimatedAngle.h:
175 * svg/SVGAnimatedBoolean.h:
176 * svg/SVGAnimatedEnumeration.h:
177 * svg/SVGAnimatedInteger.h:
178 * svg/SVGAnimatedLength.h:
179 * svg/SVGAnimatedLengthList.h:
180 * svg/SVGAnimatedNumber.h:
181 * svg/SVGAnimatedNumberList.h:
182 * svg/SVGAnimatedPreserveAspectRatio.h:
183 * svg/SVGAnimatedRect.h:
184 * svg/SVGAnimatedString.h:
185 * svg/SVGAnimatedTransformList.h:
186 * svg/SVGAnimatedType.cpp:
187 (WebCore::SVGAnimatedType::SVGAnimatedType):
188 * svg/SVGAnimatedType.h:
189 (WebCore::SVGAnimatedType::type):
190 * svg/SVGAnimatedTypeAnimator.h:
191 (WebCore::SVGAnimatedTypeAnimator::SVGAnimatedTypeAnimator):
192 * svg/SVGAnimationElement.cpp:
193 (WebCore::SVGAnimationElement::SVGAnimationElement):
194 (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
195 * svg/SVGAnimationElement.h:
196 (WebCore::SVGAnimationElement::synchronizeRequiredFeatures):
197 (WebCore::SVGAnimationElement::synchronizeRequiredExtensions):
198 (WebCore::SVGAnimationElement::synchronizeSystemLanguage):
199 * svg/SVGAnimatorFactory.h:
200 (WebCore::SVGAnimatorFactory::create):
201 * svg/SVGCircleElement.cpp:
202 (WebCore::SVGCircleElement::SVGCircleElement):
203 * svg/SVGCircleElement.h:
204 (WebCore::SVGCircleElement::synchronizeRequiredFeatures):
205 (WebCore::SVGCircleElement::synchronizeRequiredExtensions):
206 (WebCore::SVGCircleElement::synchronizeSystemLanguage):
207 * svg/SVGClipPathElement.cpp:
208 (WebCore::SVGClipPathElement::SVGClipPathElement):
209 * svg/SVGClipPathElement.h:
210 (WebCore::SVGClipPathElement::synchronizeRequiredFeatures):
211 (WebCore::SVGClipPathElement::synchronizeRequiredExtensions):
212 (WebCore::SVGClipPathElement::synchronizeSystemLanguage):
213 * svg/SVGComponentTransferFunctionElement.cpp:
214 (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
215 * svg/SVGComponentTransferFunctionElement.h:
216 * svg/SVGCursorElement.cpp:
217 (WebCore::SVGCursorElement::SVGCursorElement):
218 * svg/SVGCursorElement.h:
219 (WebCore::SVGCursorElement::synchronizeRequiredFeatures):
220 (WebCore::SVGCursorElement::synchronizeRequiredExtensions):
221 (WebCore::SVGCursorElement::synchronizeSystemLanguage):
222 * svg/SVGDefsElement.cpp:
223 (WebCore::SVGDefsElement::SVGDefsElement):
224 * svg/SVGDefsElement.h:
225 (WebCore::SVGDefsElement::synchronizeRequiredFeatures):
226 (WebCore::SVGDefsElement::synchronizeRequiredExtensions):
227 (WebCore::SVGDefsElement::synchronizeSystemLanguage):
228 * svg/SVGElement.cpp:
229 (WebCore::SVGElement::animatedPropertyTypeForAttribute):
230 (WebCore::SVGElement::updateAnimatedSVGAttribute):
231 (WebCore::SVGElement::localAttributeToPropertyMap):
232 (WebCore::SVGElement::synchronizeRequiredFeatures):
233 (WebCore::SVGElement::synchronizeRequiredExtensions):
234 (WebCore::SVGElement::synchronizeSystemLanguage):
235 * svg/SVGElement.h:
236 (WebCore::SVGElement::svgAttributeChanged):
237 (WebCore::SVGElement::synchronizeRequiredFeatures):
238 (WebCore::SVGElement::synchronizeRequiredExtensions):
239 (WebCore::SVGElement::synchronizeSystemLanguage):
240 * svg/SVGEllipseElement.cpp:
241 (WebCore::SVGEllipseElement::SVGEllipseElement):
242 * svg/SVGEllipseElement.h:
243 (WebCore::SVGEllipseElement::synchronizeRequiredFeatures):
244 (WebCore::SVGEllipseElement::synchronizeRequiredExtensions):
245 (WebCore::SVGEllipseElement::synchronizeSystemLanguage):
246 * svg/SVGFEBlendElement.cpp:
247 (WebCore::SVGFEBlendElement::SVGFEBlendElement):
248 * svg/SVGFEBlendElement.h:
249 * svg/SVGFEColorMatrixElement.cpp:
250 (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
251 * svg/SVGFEColorMatrixElement.h:
252 * svg/SVGFEComponentTransferElement.cpp:
253 (WebCore::SVGFEComponentTransferElement::SVGFEComponentTransferElement):
254 * svg/SVGFEComponentTransferElement.h:
255 * svg/SVGFECompositeElement.cpp:
256 (WebCore::SVGFECompositeElement::SVGFECompositeElement):
257 * svg/SVGFECompositeElement.h:
258 * svg/SVGFEConvolveMatrixElement.cpp:
259 (WebCore::SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement):
260 * svg/SVGFEConvolveMatrixElement.h:
261 * svg/SVGFEDiffuseLightingElement.cpp:
262 (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
263 * svg/SVGFEDiffuseLightingElement.h:
264 * svg/SVGFEDisplacementMapElement.cpp:
265 (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
266 * svg/SVGFEDisplacementMapElement.h:
267 * svg/SVGFEDropShadowElement.cpp:
268 (WebCore::SVGFEDropShadowElement::SVGFEDropShadowElement):
269 * svg/SVGFEDropShadowElement.h:
270 * svg/SVGFEFloodElement.cpp:
271 * svg/SVGFEFloodElement.h:
272 * svg/SVGFEGaussianBlurElement.cpp:
273 (WebCore::SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
274 * svg/SVGFEGaussianBlurElement.h:
275 * svg/SVGFEImageElement.cpp:
276 (WebCore::SVGFEImageElement::SVGFEImageElement):
277 * svg/SVGFEImageElement.h:
278 * svg/SVGFELightElement.cpp:
279 (WebCore::SVGFELightElement::SVGFELightElement):
280 * svg/SVGFELightElement.h:
281 * svg/SVGFEMergeElement.cpp:
282 * svg/SVGFEMergeElement.h:
283 * svg/SVGFEMergeNodeElement.cpp:
284 (WebCore::SVGFEMergeNodeElement::SVGFEMergeNodeElement):
285 * svg/SVGFEMergeNodeElement.h:
286 * svg/SVGFEMorphologyElement.cpp:
287 (WebCore::SVGFEMorphologyElement::SVGFEMorphologyElement):
288 * svg/SVGFEMorphologyElement.h:
289 * svg/SVGFEOffsetElement.cpp:
290 (WebCore::SVGFEOffsetElement::SVGFEOffsetElement):
291 * svg/SVGFEOffsetElement.h:
292 * svg/SVGFESpecularLightingElement.cpp:
293 (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
294 * svg/SVGFESpecularLightingElement.h:
295 * svg/SVGFETileElement.cpp:
296 (WebCore::SVGFETileElement::SVGFETileElement):
297 * svg/SVGFETileElement.h:
298 * svg/SVGFETurbulenceElement.cpp:
299 (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
300 * svg/SVGFETurbulenceElement.h:
301 * svg/SVGFilterElement.cpp:
302 (WebCore::SVGFilterElement::SVGFilterElement):
303 * svg/SVGFilterElement.h:
304 * svg/SVGFilterPrimitiveStandardAttributes.cpp:
305 (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
306 * svg/SVGFilterPrimitiveStandardAttributes.h:
307 * svg/SVGFitToViewBox.cpp:
308 * svg/SVGFitToViewBox.h:
309 * svg/SVGFontElement.cpp:
310 (WebCore::SVGFontElement::SVGFontElement):
311 * svg/SVGFontElement.h:
312 (WebCore::SVGFontElement::rendererIsNeeded):
313 * svg/SVGForeignObjectElement.cpp:
314 (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
315 * svg/SVGForeignObjectElement.h:
316 (WebCore::SVGForeignObjectElement::synchronizeRequiredFeatures):
317 (WebCore::SVGForeignObjectElement::synchronizeRequiredExtensions):
318 (WebCore::SVGForeignObjectElement::synchronizeSystemLanguage):
319 * svg/SVGGElement.cpp:
320 (WebCore::SVGGElement::SVGGElement):
321 * svg/SVGGElement.h:
322 (WebCore::SVGGElement::synchronizeRequiredFeatures):
323 (WebCore::SVGGElement::synchronizeRequiredExtensions):
324 (WebCore::SVGGElement::synchronizeSystemLanguage):
325 * svg/SVGGlyphElement.cpp:
326 * svg/SVGGlyphElement.h:
327 * svg/SVGGradientElement.cpp:
328 (WebCore::SVGGradientElement::SVGGradientElement):
329 (WebCore::SVGGradientElement::svgAttributeChanged):
330 * svg/SVGGradientElement.h:
331 * svg/SVGImageElement.cpp:
332 (WebCore::SVGImageElement::SVGImageElement):
333 * svg/SVGImageElement.h:
334 (WebCore::SVGImageElement::synchronizeRequiredFeatures):
335 (WebCore::SVGImageElement::synchronizeRequiredExtensions):
336 (WebCore::SVGImageElement::synchronizeSystemLanguage):
337 * svg/SVGLineElement.cpp:
338 (WebCore::SVGLineElement::SVGLineElement):
339 * svg/SVGLineElement.h:
340 (WebCore::SVGLineElement::synchronizeRequiredFeatures):
341 (WebCore::SVGLineElement::synchronizeRequiredExtensions):
342 (WebCore::SVGLineElement::synchronizeSystemLanguage):
343 * svg/SVGLinearGradientElement.cpp:
344 (WebCore::SVGLinearGradientElement::SVGLinearGradientElement):
345 * svg/SVGLinearGradientElement.h:
346 * svg/SVGMPathElement.cpp:
347 (WebCore::SVGMPathElement::SVGMPathElement):
348 * svg/SVGMPathElement.h:
349 * svg/SVGMarkerElement.cpp:
350 (WebCore::SVGMarkerElement::orientTypePropertyInfo):
351 (WebCore::SVGMarkerElement::SVGMarkerElement):
352 (WebCore::SVGMarkerElement::setOrientToAuto):
353 (WebCore::SVGMarkerElement::setOrientToAngle):
354 (WebCore::SVGMarkerElement::synchronizeOrientType):
355 (WebCore::SVGMarkerElement::lookupOrCreateOrientTypeWrapper):
356 (WebCore::SVGMarkerElement::orientTypeAnimated):
357 * svg/SVGMarkerElement.h:
358 * svg/SVGMaskElement.cpp:
359 (WebCore::SVGMaskElement::SVGMaskElement):
360 * svg/SVGMaskElement.h:
361 (WebCore::SVGMaskElement::synchronizeRequiredFeatures):
362 (WebCore::SVGMaskElement::synchronizeRequiredExtensions):
363 (WebCore::SVGMaskElement::synchronizeSystemLanguage):
364 * svg/SVGMissingGlyphElement.cpp:
365 * svg/SVGMissingGlyphElement.h:
366 * svg/SVGPathElement.cpp:
367 (WebCore::SVGPathElement::dPropertyInfo):
368 (WebCore::SVGPathElement::SVGPathElement):
369 (WebCore::SVGPathElement::svgAttributeChanged):
370 (WebCore::SVGPathElement::lookupOrCreateDWrapper):
371 (WebCore::SVGPathElement::synchronizeD):
372 (WebCore::SVGPathElement::pathSegList):
373 (WebCore::SVGPathElement::animatedPathSegList):
374 * svg/SVGPathElement.h:
375 (WebCore::SVGPathElement::pathByteStream):
376 (WebCore::SVGPathElement::synchronizeRequiredFeatures):
377 (WebCore::SVGPathElement::synchronizeRequiredExtensions):
378 (WebCore::SVGPathElement::synchronizeSystemLanguage):
379 * svg/SVGPathSegWithContext.h:
380 (WebCore::SVGPathSegWithContext::animatedProperty):
381 * svg/SVGPatternElement.cpp:
382 (WebCore::SVGPatternElement::SVGPatternElement):
383 * svg/SVGPatternElement.h:
384 (WebCore::SVGPatternElement::synchronizeRequiredFeatures):
385 (WebCore::SVGPatternElement::synchronizeRequiredExtensions):
386 (WebCore::SVGPatternElement::synchronizeSystemLanguage):
387 * svg/SVGPolyElement.cpp:
388 (WebCore::SVGPolyElement::pointsPropertyInfo):
389 (WebCore::SVGPolyElement::SVGPolyElement):
390 (WebCore::SVGPolyElement::parseMappedAttribute):
391 (WebCore::SVGPolyElement::synchronizePoints):
392 (WebCore::SVGPolyElement::lookupOrCreatePointsWrapper):
393 (WebCore::SVGPolyElement::points):
394 (WebCore::SVGPolyElement::animatedPoints):
395 * svg/SVGPolyElement.h:
396 (WebCore::SVGPolyElement::synchronizeRequiredFeatures):
397 (WebCore::SVGPolyElement::synchronizeRequiredExtensions):
398 (WebCore::SVGPolyElement::synchronizeSystemLanguage):
399 * svg/SVGRadialGradientElement.cpp:
400 (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
401 * svg/SVGRadialGradientElement.h:
402 * svg/SVGRectElement.cpp:
403 (WebCore::SVGRectElement::SVGRectElement):
404 * svg/SVGRectElement.h:
405 (WebCore::SVGRectElement::synchronizeRequiredFeatures):
406 (WebCore::SVGRectElement::synchronizeRequiredExtensions):
407 (WebCore::SVGRectElement::synchronizeSystemLanguage):
408 * svg/SVGSVGElement.cpp:
409 (WebCore::SVGSVGElement::SVGSVGElement):
410 * svg/SVGSVGElement.h:
411 (WebCore::SVGSVGElement::synchronizeRequiredFeatures):
412 (WebCore::SVGSVGElement::synchronizeRequiredExtensions):
413 (WebCore::SVGSVGElement::synchronizeSystemLanguage):
414 * svg/SVGScriptElement.cpp:
415 (WebCore::SVGScriptElement::SVGScriptElement):
416 * svg/SVGScriptElement.h:
417 * svg/SVGStopElement.cpp:
418 (WebCore::SVGStopElement::SVGStopElement):
419 * svg/SVGStopElement.h:
420 * svg/SVGStyledElement.cpp:
421 (WebCore::SVGStyledElement::SVGStyledElement):
422 (WebCore::cssPropertyToTypeMap):
423 (WebCore::SVGStyledElement::animatedPropertyTypeForAttribute):
424 * svg/SVGStyledElement.h:
425 * svg/SVGStyledTransformableElement.cpp:
426 (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
427 * svg/SVGStyledTransformableElement.h:
428 * svg/SVGSwitchElement.cpp:
429 (WebCore::SVGSwitchElement::SVGSwitchElement):
430 * svg/SVGSwitchElement.h:
431 (WebCore::SVGSwitchElement::synchronizeRequiredFeatures):
432 (WebCore::SVGSwitchElement::synchronizeRequiredExtensions):
433 (WebCore::SVGSwitchElement::synchronizeSystemLanguage):
434 * svg/SVGSymbolElement.cpp:
435 (WebCore::SVGSymbolElement::SVGSymbolElement):
436 * svg/SVGSymbolElement.h:
437 * svg/SVGTRefElement.cpp:
438 (WebCore::SVGTRefElement::SVGTRefElement):
439 * svg/SVGTRefElement.h:
440 * svg/SVGTSpanElement.cpp:
441 * svg/SVGTSpanElement.h:
442 * svg/SVGTests.cpp:
443 (WebCore::SVGTests::requiredFeaturesPropertyInfo):
444 (WebCore::SVGTests::requiredExtensionsPropertyInfo):
445 (WebCore::SVGTests::systemLanguagePropertyInfo):
446 (WebCore::SVGTests::attributeToPropertyMap):
447 (WebCore::SVGTests::synchronizeRequiredFeatures):
448 (WebCore::SVGTests::synchronizeRequiredExtensions):
449 (WebCore::SVGTests::synchronizeSystemLanguage):
450 * svg/SVGTests.h:
451 * svg/SVGTextContentElement.cpp:
452 (WebCore::SVGTextContentElement::textLengthPropertyInfo):
453 (WebCore::SVGTextContentElement::SVGTextContentElement):
454 (WebCore::SVGTextContentElement::synchronizeTextLength):
455 (WebCore::SVGTextContentElement::lookupOrCreateTextLengthWrapper):
456 (WebCore::SVGTextContentElement::textLengthAnimated):
457 * svg/SVGTextContentElement.h:
458 (WebCore::SVGTextContentElement::synchronizeRequiredFeatures):
459 (WebCore::SVGTextContentElement::synchronizeRequiredExtensions):
460 (WebCore::SVGTextContentElement::synchronizeSystemLanguage):
461 * svg/SVGTextElement.cpp:
462 (WebCore::SVGTextElement::SVGTextElement):
463 * svg/SVGTextElement.h:
464 * svg/SVGTextPathElement.cpp:
465 (WebCore::SVGTextPathElement::SVGTextPathElement):
466 * svg/SVGTextPathElement.h:
467 * svg/SVGTextPositioningElement.cpp:
468 (WebCore::SVGTextPositioningElement::SVGTextPositioningElement):
469 * svg/SVGTextPositioningElement.h:
470 * svg/SVGTitleElement.cpp:
471 * svg/SVGTitleElement.h:
472 (WebCore::SVGTitleElement::rendererIsNeeded):
473 * svg/SVGUseElement.cpp:
474 (WebCore::SVGUseElement::SVGUseElement):
475 * svg/SVGUseElement.h:
476 (WebCore::SVGUseElement::synchronizeRequiredFeatures):
477 (WebCore::SVGUseElement::synchronizeRequiredExtensions):
478 (WebCore::SVGUseElement::synchronizeSystemLanguage):
479 * svg/SVGViewElement.cpp:
480 (WebCore::SVGViewElement::SVGViewElement):
481 * svg/SVGViewElement.h:
482 * svg/SVGViewSpec.cpp:
483 (WebCore::SVGViewSpec::SVGViewSpec):
484 * svg/SVGViewSpec.h:
485 * svg/properties/SVGAnimatedProperty.h:
486 (WebCore::SVGAnimatedProperty::lookupOrCreateWrapper):
487 (WebCore::SVGAnimatedProperty::lookupWrapper):
488 * svg/properties/SVGAnimatedPropertyMacros.h:
489 * svg/properties/SVGAnimatedPropertySynchronizer.h:
490 * svg/properties/SVGAttributeToPropertyMap.cpp: Added.
491 (WebCore::SVGAttributeToPropertyMap::addProperties):
492 (WebCore::SVGAttributeToPropertyMap::addProperty):
493 (WebCore::SVGAttributeToPropertyMap::animatedPropertiesForAttribute):
494 (WebCore::SVGAttributeToPropertyMap::animatedPropertyTypeForAttribute):
495 (WebCore::SVGAttributeToPropertyMap::synchronizeProperties):
496 (WebCore::SVGAttributeToPropertyMap::synchronizeProperty):
497 (WebCore::SVGAttributeToPropertyMap::animatedProperty):
498 * svg/properties/SVGAttributeToPropertyMap.h: Added.
499 (WebCore::SVGAttributeToPropertyMap::SVGAttributeToPropertyMap):
500 (WebCore::SVGAttributeToPropertyMap::~SVGAttributeToPropertyMap):
501 (WebCore::SVGAttributeToPropertyMap::isEmpty):
502 * svg/properties/SVGPropertyInfo.h: Added.
503 (WebCore::SVGPropertyInfo::SVGPropertyInfo):
504