<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[178189] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/178189">178189</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2015-01-09 12:32:18 -0800 (Fri, 09 Jan 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add support for SVG CSS Properties to the new StyleBuilder
https://bugs.webkit.org/show_bug.cgi?id=140277

Reviewed by Andreas Kling.

Update the new StyleBuilder generator to add support for SVG CSS
Properties whose methods are on SVGRenderStyle instead of RenderStyle.

A new &quot;SVG&quot; parameter is now supported by makeprop.pl to correctly
generate such properties.

* CMakeLists.txt:
* DerivedSources.make:
* WebCore.xcodeproj/project.pbxproj:
* css/CSSPropertyNames.in:
* css/SVGCSSPropertyNames.in: Removed.
Merged SVG CSS properties into CSSPropertyNames.in. I personally don't
think having a separate file for SVG CSS properties is really helpful.

* css/SVGCSSStyleSelector.cpp:
(WebCore::StyleResolver::applySVGProperty):
Drop legacy StyleBuilder code for several SVG properties and generate
them instead. Those are trivial and do not require any custom code or
converter.

* css/StyleResolver.cpp:
Update the id of the first low-priority property.

* css/makeprop.pl:
Add support for SVG CSS Properties whose methods are on SVGRenderStyle
instead of RenderStyle.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreDerivedSourcesmake">trunk/Source/WebCore/DerivedSources.make</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorecssCSSPropertyNamesin">trunk/Source/WebCore/css/CSSPropertyNames.in</a></li>
<li><a href="#trunkSourceWebCorecssSVGCSSStyleSelectorcpp">trunk/Source/WebCore/css/SVGCSSStyleSelector.cpp</a></li>
<li><a href="#trunkSourceWebCorecssStyleResolvercpp">trunk/Source/WebCore/css/StyleResolver.cpp</a></li>
<li><a href="#trunkSourceWebCorecssmakeproppl">trunk/Source/WebCore/css/makeprop.pl</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorecssSVGCSSPropertyNamesin">trunk/Source/WebCore/css/SVGCSSPropertyNames.in</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (178188 => 178189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2015-01-09 20:30:21 UTC (rev 178188)
+++ trunk/Source/WebCore/CMakeLists.txt        2015-01-09 20:32:18 UTC (rev 178189)
</span><span class="lines">@@ -2762,9 +2762,6 @@
</span><span class="cx">     )
</span><span class="cx"> endif ()
</span><span class="cx"> 
</span><del>-list(APPEND WebCore_CSS_PROPERTY_NAMES
-    ${WEBCORE_DIR}/css/SVGCSSPropertyNames.in
-)
</del><span class="cx"> list(APPEND WebCore_CSS_VALUE_KEYWORDS
</span><span class="cx">     ${WEBCORE_DIR}/css/SVGCSSValueKeywords.in
</span><span class="cx"> )
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (178188 => 178189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-01-09 20:30:21 UTC (rev 178188)
+++ trunk/Source/WebCore/ChangeLog        2015-01-09 20:32:18 UTC (rev 178189)
</span><span class="lines">@@ -1,3 +1,37 @@
</span><ins>+2015-01-09  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Add support for SVG CSS Properties to the new StyleBuilder
+        https://bugs.webkit.org/show_bug.cgi?id=140277
+
+        Reviewed by Andreas Kling.
+
+        Update the new StyleBuilder generator to add support for SVG CSS
+        Properties whose methods are on SVGRenderStyle instead of RenderStyle.
+
+        A new &quot;SVG&quot; parameter is now supported by makeprop.pl to correctly
+        generate such properties.
+
+        * CMakeLists.txt:
+        * DerivedSources.make:
+        * WebCore.xcodeproj/project.pbxproj:
+        * css/CSSPropertyNames.in:
+        * css/SVGCSSPropertyNames.in: Removed.
+        Merged SVG CSS properties into CSSPropertyNames.in. I personally don't
+        think having a separate file for SVG CSS properties is really helpful.
+
+        * css/SVGCSSStyleSelector.cpp:
+        (WebCore::StyleResolver::applySVGProperty):
+        Drop legacy StyleBuilder code for several SVG properties and generate
+        them instead. Those are trivial and do not require any custom code or
+        converter.
+
+        * css/StyleResolver.cpp:
+        Update the id of the first low-priority property.
+
+        * css/makeprop.pl:
+        Add support for SVG CSS Properties whose methods are on SVGRenderStyle
+        instead of RenderStyle.
+
</ins><span class="cx"> 2015-01-08  Anders Carlsson  &lt;andersca@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Start removing Web Database support from workers
</span></span></pre></div>
<a id="trunkSourceWebCoreDerivedSourcesmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/DerivedSources.make (178188 => 178189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/DerivedSources.make        2015-01-09 20:30:21 UTC (rev 178188)
+++ trunk/Source/WebCore/DerivedSources.make        2015-01-09 20:32:18 UTC (rev 178189)
</span><span class="lines">@@ -820,7 +820,6 @@
</span><span class="cx"> 
</span><span class="cx"> WEBCORE_CSS_PROPERTY_NAMES := $(WebCore)/css/CSSPropertyNames.in
</span><span class="cx"> WEBCORE_CSS_VALUE_KEYWORDS := $(WebCore)/css/CSSValueKeywords.in
</span><del>-WEBCORE_CSS_PROPERTY_NAMES := $(WEBCORE_CSS_PROPERTY_NAMES) $(WebCore)/css/SVGCSSPropertyNames.in
</del><span class="cx"> WEBCORE_CSS_VALUE_KEYWORDS := $(WEBCORE_CSS_VALUE_KEYWORDS) $(WebCore)/css/SVGCSSValueKeywords.in
</span><span class="cx"> 
</span><span class="cx"> CSSPropertyNames.h StyleBuilder.cpp : $(WEBCORE_CSS_PROPERTY_NAMES) css/makeprop.pl bindings/scripts/preprocessor.pm $(PLATFORM_FEATURE_DEFINES)
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (178188 => 178189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2015-01-09 20:30:21 UTC (rev 178188)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2015-01-09 20:32:18 UTC (rev 178189)
</span><span class="lines">@@ -12014,7 +12014,6 @@
</span><span class="cx">                 B22279610D00BF210071B782 /* SVGZoomAndPan.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGZoomAndPan.idl; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B2227B000D00BFF10071B782 /* SVGCSSComputedStyleDeclaration.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGCSSComputedStyleDeclaration.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B2227B010D00BFF10071B782 /* SVGCSSParser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGCSSParser.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                B2227B020D00BFF10071B782 /* SVGCSSPropertyNames.in */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGCSSPropertyNames.in; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 B2227B030D00BFF10071B782 /* SVGCSSStyleSelector.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGCSSStyleSelector.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B2227B040D00BFF10071B782 /* SVGCSSValueKeywords.in */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGCSSValueKeywords.in; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B222F6960AB771950022EFAD /* JSSVGAngle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGAngle.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -22336,7 +22335,6 @@
</span><span class="cx">                                 93CA4CA209DF93FA00DF8677 /* svg.css */,
</span><span class="cx">                                 B2227B000D00BFF10071B782 /* SVGCSSComputedStyleDeclaration.cpp */,
</span><span class="cx">                                 B2227B010D00BFF10071B782 /* SVGCSSParser.cpp */,
</span><del>-                                B2227B020D00BFF10071B782 /* SVGCSSPropertyNames.in */,
</del><span class="cx">                                 B2227B030D00BFF10071B782 /* SVGCSSStyleSelector.cpp */,
</span><span class="cx">                                 B2227B040D00BFF10071B782 /* SVGCSSValueKeywords.in */,
</span><span class="cx">                                 FB484F4A171F821E00040755 /* TransformFunctions.cpp */,
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPropertyNamesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSPropertyNames.in (178188 => 178189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSPropertyNames.in        2015-01-09 20:30:21 UTC (rev 178188)
+++ trunk/Source/WebCore/css/CSSPropertyNames.in        2015-01-09 20:32:18 UTC (rev 178189)
</span><span class="lines">@@ -61,6 +61,10 @@
</span><span class="cx"> // Custom=All. Alternatively, several '|'-separated options can be passed:
</span><span class="cx"> // e.g. 'Custom=Inherit|Value&quot;.
</span><span class="cx"> //
</span><ins>+// * SVG:
+// Indicates that this is an SVG CSS property and that the corresponding
+// methods are on SVGRenderStyle instead of RenderStyle.
+//
</ins><span class="cx"> // * AutoFunctions:
</span><span class="cx"> // Indicates that this CSS property requires handling of &quot;auto&quot; and has
</span><span class="cx"> // corresponding hasAutoXXX() / setHasAutoXXX() methods on RenderStyle.
</span><span class="lines">@@ -127,6 +131,7 @@
</span><span class="cx"> -webkit-ruby-position [Inherited, TypeName=RubyPosition]
</span><span class="cx"> 
</span><span class="cx"> // The remaining properties are listed in alphabetical order
</span><ins>+alignment-baseline [SVG]
</ins><span class="cx"> animation [LegacyStyleBuilder]
</span><span class="cx"> animation-delay [AnimationProperty, TypeName=double, NameForMethods=Delay]
</span><span class="cx"> animation-direction [AnimationProperty, TypeName=Animation::AnimationDirection, NameForMethods=Direction]
</span><span class="lines">@@ -150,6 +155,7 @@
</span><span class="cx"> background-repeat-x [FillLayerProperty, TypeName=EFillRepeat, NameForMethods=RepeatX]
</span><span class="cx"> background-repeat-y [FillLayerProperty, TypeName=EFillRepeat, NameForMethods=RepeatY]
</span><span class="cx"> background-size [FillLayerProperty, TypeName=EFillSize, NameForMethods=Size]
</span><ins>+baseline-shift [LegacyStyleBuilder, SVG]
</ins><span class="cx"> border [LegacyStyleBuilder]
</span><span class="cx"> border-bottom [LegacyStyleBuilder]
</span><span class="cx"> border-bottom-color [VisitedLinkColorSupport, Initial=invalidColor]
</span><span class="lines">@@ -190,6 +196,7 @@
</span><span class="cx"> bottom [Initial=initialOffset, Converter=LengthOrAuto]
</span><span class="cx"> box-shadow [Custom=All]
</span><span class="cx"> box-sizing
</span><ins>+buffered-rendering [SVG]
</ins><span class="cx"> // -webkit-box-sizing worked in Safari 4 and earlier.
</span><span class="cx"> -webkit-box-sizing = box-sizing
</span><span class="cx"> caption-side [Inherited]
</span><span class="lines">@@ -197,6 +204,12 @@
</span><span class="cx"> clear
</span><span class="cx"> clip [Custom=All]
</span><span class="cx"> -webkit-clip-path [Converter=ClipPath]
</span><ins>+clip-path [LegacyStyleBuilder, SVG]
+clip-rule [Inherited, SVG, TypeName=WindRule]
+color-interpolation [Inherited, SVG]
+color-interpolation-filters [Inherited, SVG, TypeName=EColorInterpolation]
+color-profile [LegacyStyleBuilder, SVG]
+color-rendering [Inherited, SVG]
</ins><span class="cx"> content [Custom=All]
</span><span class="cx"> counter-increment [Custom=All]
</span><span class="cx"> counter-reset [Custom=All]
</span><span class="lines">@@ -204,9 +217,21 @@
</span><span class="cx"> #if defined(ENABLE_CURSOR_VISIBILITY) &amp;&amp; ENABLE_CURSOR_VISIBILITY
</span><span class="cx"> -webkit-cursor-visibility [Inherited, TypeName=CursorVisibility]
</span><span class="cx"> #endif
</span><ins>+cx [Initial=initialZeroLength, Converter=Length]
+cy [Initial=initialZeroLength, Converter=Length]
+dominant-baseline [SVG]
</ins><span class="cx"> empty-cells [Inherited, TypeName=EEmptyCell]
</span><ins>+enable-background [LegacyStyleBuilder, SVG]
+fill [Inherited, LegacyStyleBuilder, SVG]
+fill-opacity [Inherited, LegacyStyleBuilder, SVG]
+fill-rule [Inherited, SVG, TypeName=WindRule]
+filter [LegacyStyleBuilder, SVG]
</ins><span class="cx"> float [TypeName=EFloat, NameForMethods=Floating]
</span><ins>+flood-color [LegacyStyleBuilder, SVG]
+flood-opacity [LegacyStyleBuilder, SVG]
</ins><span class="cx"> font-stretch [LegacyStyleBuilder]
</span><ins>+glyph-orientation-horizontal [Inherited, LegacyStyleBuilder, SVG]
+glyph-orientation-vertical [Inherited, LegacyStyleBuilder, SVG]
</ins><span class="cx"> height [Initial=initialSize, Converter=LengthSizing]
</span><span class="cx"> #if defined(ENABLE_CSS_IMAGE_ORIENTATION) &amp;&amp; ENABLE_CSS_IMAGE_ORIENTATION
</span><span class="cx"> image-orientation [Inherited, TypeName=ImageOrientationEnum]
</span><span class="lines">@@ -215,8 +240,10 @@
</span><span class="cx"> #if defined(ENABLE_CSS_IMAGE_RESOLUTION) &amp;&amp; ENABLE_CSS_IMAGE_RESOLUTION
</span><span class="cx"> image-resolution [Inherited, Custom=All]
</span><span class="cx"> #endif
</span><ins>+kerning [Inherited, LegacyStyleBuilder, SVG]
</ins><span class="cx"> left [Initial=initialOffset, Converter=LengthOrAuto]
</span><span class="cx"> letter-spacing [Inherited, Converter=Spacing]
</span><ins>+lighting-color [LegacyStyleBuilder, SVG]
</ins><span class="cx"> list-style [Inherited, LegacyStyleBuilder]
</span><span class="cx"> list-style-image [Inherited, Converter=StyleImage&lt;CSSPropertyListStyleImage&gt;]
</span><span class="cx"> list-style-position [Inherited]
</span><span class="lines">@@ -226,6 +253,12 @@
</span><span class="cx"> margin-left [Initial=initialMargin, Converter=LengthOrAuto]
</span><span class="cx"> margin-right [Initial=initialMargin, Converter=LengthOrAuto]
</span><span class="cx"> margin-top [Initial=initialMargin, Converter=LengthOrAuto]
</span><ins>+marker [Inherited, LegacyStyleBuilder, SVG]
+marker-end [Inherited, LegacyStyleBuilder, SVG]
+marker-mid [Inherited, LegacyStyleBuilder, SVG]
+marker-start [Inherited, LegacyStyleBuilder, SVG]
+mask [LegacyStyleBuilder, SVG]
+mask-type [SVG]
</ins><span class="cx"> max-height [Initial=initialMaxSize, Converter=LengthMaxSizing]
</span><span class="cx"> max-width [Initial=initialMaxSize, Converter=LengthMaxSizing]
</span><span class="cx"> min-height [Initial=initialMinSize, Converter=LengthSizing]
</span><span class="lines">@@ -258,14 +291,29 @@
</span><span class="cx"> pointer-events [Inherited]
</span><span class="cx"> position
</span><span class="cx"> quotes [Inherited, Converter=Quotes]
</span><ins>+r [Initial=initialZeroLength, Converter=Length]
</ins><span class="cx"> resize [Inherited, Converter=Resize]
</span><span class="cx"> right [Initial=initialOffset, Converter=LengthOrAuto]
</span><ins>+rx [Initial=initialZeroLength, Converter=Length]
+ry [Initial=initialZeroLength, Converter=Length]
+shape-rendering [Inherited, SVG]
</ins><span class="cx"> size [Custom=All]
</span><span class="cx"> src [LegacyStyleBuilder]
</span><ins>+stop-color [LegacyStyleBuilder, SVG]
+stop-opacity [LegacyStyleBuilder, SVG]
+stroke [Inherited, LegacyStyleBuilder, SVG]
+stroke-dasharray [Inherited, LegacyStyleBuilder, SVG]
+stroke-dashoffset [Inherited, NameForMethods=StrokeDashOffset, Initial=initialZeroLength, Converter=Length]
+stroke-linecap [Inherited, SVG, NameForMethods=CapStyle, TypeName=LineCap]
+stroke-linejoin [Inherited, SVG, NameForMethods=JoinStyle, TypeName=LineJoin]
+stroke-miterlimit [Inherited, LegacyStyleBuilder, SVG]
+stroke-opacity [Inherited, LegacyStyleBuilder, SVG]
+stroke-width [Inherited, Initial=initialOneLength, Converter=Length]
</ins><span class="cx"> speak [Inherited]
</span><span class="cx"> table-layout
</span><span class="cx"> tab-size [Inherited, TypeName=unsigned]
</span><span class="cx"> text-align [Inherited, Converter=TextAlign]
</span><ins>+text-anchor [Inherited, SVG]
</ins><span class="cx"> text-decoration [Converter=TextDecoration]
</span><span class="cx"> text-indent [Inherited, Custom=All]
</span><span class="cx"> text-line-through [LegacyStyleBuilder]
</span><span class="lines">@@ -296,6 +344,7 @@
</span><span class="cx"> 
</span><span class="cx"> unicode-bidi
</span><span class="cx"> unicode-range [LegacyStyleBuilder]
</span><ins>+vector-effect [SVG]
</ins><span class="cx"> vertical-align [Custom=Value]
</span><span class="cx"> visibility [Inherited]
</span><span class="cx"> white-space [Inherited]
</span><span class="lines">@@ -305,6 +354,9 @@
</span><span class="cx"> -epub-word-break = word-break
</span><span class="cx"> word-spacing [Inherited, ConditionalConverter=WordSpacing, TypeName=Length]
</span><span class="cx"> word-wrap [Inherited=EOverflowWrap, NameForMethods=OverflowWrap]
</span><ins>+writing-mode [Inherited, SVG, TypeName=SVGWritingMode]
+x [Initial=initialZeroLength, Converter=Length]
+y [Initial=initialZeroLength, Converter=Length]
</ins><span class="cx"> z-index [TypeName=int, AutoFunctions]
</span><span class="cx"> alt [NameForMethods=ContentAltText, Custom=Value]
</span><span class="cx"> -webkit-alt = alt
</span><span class="lines">@@ -516,6 +568,7 @@
</span><span class="cx"> -webkit-scroll-snap-destination [Converter=SnapCoordinatePair]
</span><span class="cx"> -webkit-scroll-snap-coordinate [Converter=ScrollSnapCoordinates, NameForMethods=ScrollSnapCoordinates]
</span><span class="cx"> #endif
</span><ins>+-webkit-svg-shadow [LegacyStyleBuilder, SVG]
</ins><span class="cx"> -webkit-text-combine [Inherited, TypeName=TextCombine]
</span><span class="cx"> -epub-text-combine = -webkit-text-combine
</span><span class="cx"> #if defined(ENABLE_CSS3_TEXT) &amp;&amp; ENABLE_CSS3_TEXT
</span></span></pre></div>
<a id="trunkSourceWebCorecssSVGCSSPropertyNamesin"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/css/SVGCSSPropertyNames.in (178188 => 178189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/SVGCSSPropertyNames.in        2015-01-09 20:30:21 UTC (rev 178188)
+++ trunk/Source/WebCore/css/SVGCSSPropertyNames.in        2015-01-09 20:32:18 UTC (rev 178189)
</span><span class="lines">@@ -1,62 +0,0 @@
</span><del>-//
-// SVG CSS property names
-//
-
-// SVG style props
-buffered-rendering [LegacyStyleBuilder]
-clip-path [LegacyStyleBuilder]
-clip-rule [Inherited, LegacyStyleBuilder]
-mask [LegacyStyleBuilder]
-// opacity
-enable-background [LegacyStyleBuilder]
-filter [LegacyStyleBuilder]
-flood-color [LegacyStyleBuilder]
-flood-opacity [LegacyStyleBuilder]
-lighting-color [LegacyStyleBuilder]
-stop-color [LegacyStyleBuilder]
-stop-opacity [LegacyStyleBuilder]
-// pointer-events
-color-interpolation [Inherited, LegacyStyleBuilder]
-color-interpolation-filters [Inherited, LegacyStyleBuilder]
-color-profile [LegacyStyleBuilder]
-color-rendering [Inherited, LegacyStyleBuilder]
-fill [Inherited, LegacyStyleBuilder]
-fill-opacity [Inherited, LegacyStyleBuilder]
-fill-rule [Inherited, LegacyStyleBuilder]
-//font-size-adjust
-//image-rendering
-marker [Inherited, LegacyStyleBuilder]
-marker-end [Inherited, LegacyStyleBuilder]
-marker-mid [Inherited, LegacyStyleBuilder]
-marker-start [Inherited, LegacyStyleBuilder]
-mask-type [LegacyStyleBuilder]
-shape-rendering [Inherited, LegacyStyleBuilder]
-stroke [Inherited, LegacyStyleBuilder]
-stroke-dasharray [Inherited, LegacyStyleBuilder]
-stroke-dashoffset [Inherited, NameForMethods=StrokeDashOffset, Initial=initialZeroLength, Converter=Length]
-stroke-linecap [Inherited, LegacyStyleBuilder]
-stroke-linejoin [Inherited, LegacyStyleBuilder]
-stroke-miterlimit [Inherited, LegacyStyleBuilder]
-stroke-opacity [Inherited, LegacyStyleBuilder]
-stroke-width [Inherited, Initial=initialOneLength, Converter=Length]
-// text-rendering
-alignment-baseline [LegacyStyleBuilder]
-baseline-shift [LegacyStyleBuilder]
-dominant-baseline [LegacyStyleBuilder]
-glyph-orientation-horizontal [Inherited, LegacyStyleBuilder]
-glyph-orientation-vertical [Inherited, LegacyStyleBuilder]
-kerning [Inherited, LegacyStyleBuilder]
-text-anchor [Inherited, LegacyStyleBuilder]
-vector-effect [LegacyStyleBuilder]
-writing-mode [Inherited, LegacyStyleBuilder]
-
--webkit-svg-shadow [LegacyStyleBuilder]
-
-cx [Initial=initialZeroLength, Converter=Length]
-cy [Initial=initialZeroLength, Converter=Length]
-r [Initial=initialZeroLength, Converter=Length]
-rx [Initial=initialZeroLength, Converter=Length]
-ry [Initial=initialZeroLength, Converter=Length]
-x [Initial=initialZeroLength, Converter=Length]
-y [Initial=initialZeroLength, Converter=Length]
-
</del></span></pre></div>
<a id="trunkSourceWebCorecssSVGCSSStyleSelectorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/SVGCSSStyleSelector.cpp (178188 => 178189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/SVGCSSStyleSelector.cpp        2015-01-09 20:30:21 UTC (rev 178188)
+++ trunk/Source/WebCore/css/SVGCSSStyleSelector.cpp        2015-01-09 20:32:18 UTC (rev 178189)
</span><span class="lines">@@ -100,6 +100,8 @@
</span><span class="cx">     return color;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+// FIXME: This method should go away once all SVG CSS properties have been
+// ported to the new generated StyleBuilder.
</ins><span class="cx"> void StyleResolver::applySVGProperty(CSSPropertyID id, CSSValue* value)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(value);
</span><span class="lines">@@ -120,15 +122,6 @@
</span><span class="cx">     switch (id)
</span><span class="cx">     {
</span><span class="cx">         // ident only properties
</span><del>-        case CSSPropertyAlignmentBaseline:
-        {
-            HANDLE_INHERIT_AND_INITIAL(alignmentBaseline, AlignmentBaseline)
-            if (!primitiveValue)
-                break;
-
-            svgStyle.setAlignmentBaseline(*primitiveValue);
-            break;
-        }
</del><span class="cx">         case CSSPropertyBaselineShift:
</span><span class="cx">         {
</span><span class="cx">             HANDLE_INHERIT_AND_INITIAL(baselineShift, BaselineShift);
</span><span class="lines">@@ -163,46 +156,11 @@
</span><span class="cx">                 svgStyle.setKerning(SVGLength::fromCSSPrimitiveValue(primitiveValue));
</span><span class="cx">             break;
</span><span class="cx">         }
</span><del>-        case CSSPropertyDominantBaseline:
-        {
-            HANDLE_INHERIT_AND_INITIAL(dominantBaseline, DominantBaseline)
-            if (primitiveValue)
-                svgStyle.setDominantBaseline(*primitiveValue);
-            break;
-        }
-        case CSSPropertyColorInterpolation:
-        {
-            HANDLE_INHERIT_AND_INITIAL(colorInterpolation, ColorInterpolation)
-            if (primitiveValue)
-                svgStyle.setColorInterpolation(*primitiveValue);
-            break;
-        }
-        case CSSPropertyColorInterpolationFilters:
-        {
-            HANDLE_INHERIT_AND_INITIAL(colorInterpolationFilters, ColorInterpolationFilters)
-            if (primitiveValue)
-                svgStyle.setColorInterpolationFilters(*primitiveValue);
-            break;
-        }
</del><span class="cx">         case CSSPropertyColorProfile:
</span><span class="cx">         {
</span><span class="cx">             // Not implemented.
</span><span class="cx">             break;
</span><span class="cx">         }
</span><del>-        case CSSPropertyColorRendering:
-        {
-            HANDLE_INHERIT_AND_INITIAL(colorRendering, ColorRendering)
-            if (primitiveValue)
-                svgStyle.setColorRendering(*primitiveValue);
-            break;
-        }
-        case CSSPropertyClipRule:
-        {
-            HANDLE_INHERIT_AND_INITIAL(clipRule, ClipRule)
-            if (primitiveValue)
-                svgStyle.setClipRule(*primitiveValue);
-            break;
-        }
</del><span class="cx">         case CSSPropertyPaintOrder: {
</span><span class="cx">             HANDLE_INHERIT_AND_INITIAL(paintOrder, PaintOrder)
</span><span class="cx">             // 'normal' is the only primitiveValue
</span><span class="lines">@@ -233,27 +191,6 @@
</span><span class="cx">             svgStyle.setPaintOrder(static_cast&lt;PaintOrder&gt;(paintOrder));
</span><span class="cx">             break;
</span><span class="cx">         }
</span><del>-        case CSSPropertyFillRule:
-        {
-            HANDLE_INHERIT_AND_INITIAL(fillRule, FillRule)
-            if (primitiveValue)
-                svgStyle.setFillRule(*primitiveValue);
-            break;
-        }
-        case CSSPropertyStrokeLinejoin:
-        {
-            HANDLE_INHERIT_AND_INITIAL(joinStyle, JoinStyle)
-            if (primitiveValue)
-                svgStyle.setJoinStyle(*primitiveValue);
-            break;
-        }
-        case CSSPropertyShapeRendering:
-        {
-            HANDLE_INHERIT_AND_INITIAL(shapeRendering, ShapeRendering)
-            if (primitiveValue)
-                svgStyle.setShapeRendering(*primitiveValue);
-            break;
-        }
</del><span class="cx">         // end of ident only properties
</span><span class="cx">         case CSSPropertyFill:
</span><span class="cx">         {
</span><span class="lines">@@ -409,13 +346,6 @@
</span><span class="cx">             svgStyle.setMarkerEndResource(SVGURIReference::fragmentIdentifierFromIRIString(s, state.document()));
</span><span class="cx">             break;
</span><span class="cx">         }
</span><del>-        case CSSPropertyStrokeLinecap:
-        {
-            HANDLE_INHERIT_AND_INITIAL(capStyle, CapStyle)
-            if (primitiveValue)
-                svgStyle.setCapStyle(*primitiveValue);
-            break;
-        }
</del><span class="cx">         case CSSPropertyStrokeMiterlimit:
</span><span class="cx">         {
</span><span class="cx">             HANDLE_INHERIT_AND_INITIAL(strokeMiterLimit, StrokeMiterLimit)
</span><span class="lines">@@ -474,20 +404,6 @@
</span><span class="cx">             svgStyle.setClipperResource(SVGURIReference::fragmentIdentifierFromIRIString(s, state.document()));
</span><span class="cx">             break;
</span><span class="cx">         }
</span><del>-        case CSSPropertyTextAnchor:
-        {
-            HANDLE_INHERIT_AND_INITIAL(textAnchor, TextAnchor)
-            if (primitiveValue)
-                svgStyle.setTextAnchor(*primitiveValue);
-            break;
-        }
-        case CSSPropertyWritingMode:
-        {
-            HANDLE_INHERIT_AND_INITIAL(writingMode, WritingMode)
-            if (primitiveValue)
-                svgStyle.setWritingMode(*primitiveValue);
-            break;
-        }
</del><span class="cx">         case CSSPropertyStopColor:
</span><span class="cx">         {
</span><span class="cx">             HANDLE_INHERIT_AND_INITIAL(stopColor, StopColor);
</span><span class="lines">@@ -597,30 +513,6 @@
</span><span class="cx">             svgStyle.setShadow(WTF::move(shadowData));
</span><span class="cx">             return;
</span><span class="cx">         }
</span><del>-        case CSSPropertyVectorEffect: {
-            HANDLE_INHERIT_AND_INITIAL(vectorEffect, VectorEffect)
-            if (!primitiveValue)
-                break;
-
-            svgStyle.setVectorEffect(*primitiveValue);
-            break;
-        }
-        case CSSPropertyBufferedRendering: {
-            HANDLE_INHERIT_AND_INITIAL(bufferedRendering, BufferedRendering)
-            if (!primitiveValue)
-                break;
-
-            svgStyle.setBufferedRendering(*primitiveValue);
-            break;
-        }
-        case CSSPropertyMaskType: {
-            HANDLE_INHERIT_AND_INITIAL(maskType, MaskType)
-            if (!primitiveValue)
-                break;
-
-            svgStyle.setMaskType(*primitiveValue);
-            break;
-        }
</del><span class="cx">         default:
</span><span class="cx">             // If you crash here, it's because you added a css property and are not handling it
</span><span class="cx">             // in either this switch statement or the one in StyleResolver::applyProperty
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleResolvercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleResolver.cpp (178188 => 178189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleResolver.cpp        2015-01-09 20:30:21 UTC (rev 178188)
+++ trunk/Source/WebCore/css/StyleResolver.cpp        2015-01-09 20:32:18 UTC (rev 178189)
</span><span class="lines">@@ -168,6 +168,8 @@
</span><span class="cx"> 
</span><span class="cx"> using namespace HTMLNames;
</span><span class="cx"> 
</span><ins>+static const CSSPropertyID firstLowPriorityProperty = static_cast&lt;CSSPropertyID&gt;(CSSPropertyLineHeight + 1);
+
</ins><span class="cx"> class StyleResolver::CascadedProperties {
</span><span class="cx"> public:
</span><span class="cx">     CascadedProperties(TextDirection, WritingMode);
</span><span class="lines">@@ -842,7 +844,7 @@
</span><span class="cx">         applyProperty(CSSPropertyLineHeight, state.lineHeightValue());
</span><span class="cx"> 
</span><span class="cx">     // Now do rest of the properties.
</span><del>-    applyCascadedProperties(cascade, CSSPropertyAnimation, lastCSSProperty);
</del><ins>+    applyCascadedProperties(cascade, firstLowPriorityProperty, lastCSSProperty);
</ins><span class="cx"> 
</span><span class="cx">     // If our font got dirtied by one of the non-essential font props,
</span><span class="cx">     // go ahead and update it a second time.
</span><span class="lines">@@ -1012,7 +1014,7 @@
</span><span class="cx">     if (m_state.lineHeightValue())
</span><span class="cx">         applyProperty(CSSPropertyLineHeight, m_state.lineHeightValue());
</span><span class="cx"> 
</span><del>-    applyCascadedProperties(cascade, CSSPropertyAnimation, lastCSSProperty);
</del><ins>+    applyCascadedProperties(cascade, firstLowPriorityProperty, lastCSSProperty);
</ins><span class="cx"> 
</span><span class="cx">     cascade.applyDeferredProperties(*this);
</span><span class="cx"> 
</span><span class="lines">@@ -1765,7 +1767,7 @@
</span><span class="cx">         applyCascadedProperties(cascade, firstCSSProperty, CSSPropertyLineHeight);
</span><span class="cx">     
</span><span class="cx">         updateFont();
</span><del>-        applyCascadedProperties(cascade, CSSPropertyAnimation, lastCSSProperty);
</del><ins>+        applyCascadedProperties(cascade, firstLowPriorityProperty, lastCSSProperty);
</ins><span class="cx"> 
</span><span class="cx">         state.cacheBorderAndBackground();
</span><span class="cx">     }
</span><span class="lines">@@ -1803,7 +1805,7 @@
</span><span class="cx">         return applyMatchedProperties(matchResult, element, DoNotUseMatchedPropertiesCache);
</span><span class="cx"> 
</span><span class="cx">     // Apply properties that no other properties depend on.
</span><del>-    applyCascadedProperties(cascade, CSSPropertyAnimation, lastCSSProperty);
</del><ins>+    applyCascadedProperties(cascade, firstLowPriorityProperty, lastCSSProperty);
</ins><span class="cx"> 
</span><span class="cx">     // Finally, some properties must be applied in the order they were parsed.
</span><span class="cx">     // There are some CSS properties that affect the same RenderStyle values,
</span></span></pre></div>
<a id="trunkSourceWebCorecssmakeproppl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/makeprop.pl (178188 => 178189)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/makeprop.pl        2015-01-09 20:30:21 UTC (rev 178188)
+++ trunk/Source/WebCore/css/makeprop.pl        2015-01-09 20:32:18 UTC (rev 178189)
</span><span class="lines">@@ -54,6 +54,7 @@
</span><span class="cx">   Initial =&gt; 1,
</span><span class="cx">   NameForMethods =&gt; 1,
</span><span class="cx">   NoDefaultColor =&gt; 1,
</span><ins>+  SVG =&gt; 1,
</ins><span class="cx">   Setter =&gt; 1,
</span><span class="cx">   TypeName =&gt; 1,
</span><span class="cx">   VisitedLinkColorSupport =&gt; 1,
</span><span class="lines">@@ -96,6 +97,8 @@
</span><span class="cx">         $isUsingLegacyStyleBuilder = 1;
</span><span class="cx">         delete $propertiesWithStyleBuilderOptions{$_};
</span><span class="cx">       } elsif ($styleBuilderOptions{$optionName}) {
</span><ins>+        # FIXME: Temporary until all SVG properties have been ported to the new StyleBuilder.
+        next if ($optionName eq &quot;SVG&quot; &amp;&amp; $isUsingLegacyStyleBuilder);
</ins><span class="cx">         die &quot;\&quot;&quot; . $optionName . &quot;\&quot; option was used with \&quot;LegacyStyleBuilder\&quot; option for &quot; . $_ . &quot; property.&quot; if $isUsingLegacyStyleBuilder;
</span><span class="cx">         $propertiesWithStyleBuilderOptions{$_}{$optionName} = $optionValue;
</span><span class="cx">       } else {
</span><span class="lines">@@ -684,12 +687,23 @@
</span><span class="cx">   return $setterContent;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+sub generateSetValueStatement
+{
+  my $name = shift;
+  my $value = shift;
+
+  my $isSVG = exists $propertiesWithStyleBuilderOptions{$name}{&quot;SVG&quot;};
+  my $setter = $propertiesWithStyleBuilderOptions{$name}{&quot;Setter&quot;};
+  return &quot;styleResolver.style()-&gt;&quot; .  ($isSVG ? &quot;accessSVGStyle().&quot; : &quot;&quot;) . $setter . &quot;(&quot; . $value . &quot;)&quot;;
+}
+
</ins><span class="cx"> sub generateInitialValueSetter {
</span><span class="cx">   my $name = shift;
</span><span class="cx">   my $indent = shift;
</span><span class="cx"> 
</span><span class="cx">   my $setter = $propertiesWithStyleBuilderOptions{$name}{&quot;Setter&quot;};
</span><span class="cx">   my $initial = $propertiesWithStyleBuilderOptions{$name}{&quot;Initial&quot;};
</span><ins>+  my $isSVG = exists $propertiesWithStyleBuilderOptions{$name}{&quot;SVG&quot;};
</ins><span class="cx">   my $setterContent = &quot;&quot;;
</span><span class="cx">   $setterContent .= $indent . &quot;static void applyInitial&quot; . $nameToId{$name} . &quot;(StyleResolver&amp; styleResolver)\n&quot;;
</span><span class="cx">   $setterContent .= $indent . &quot;{\n&quot;;
</span><span class="lines">@@ -708,8 +722,8 @@
</span><span class="cx">   } elsif (exists $propertiesWithStyleBuilderOptions{$name}{&quot;FillLayerProperty&quot;}) {
</span><span class="cx">     $setterContent .= generateFillLayerPropertyInitialValueSetter($name, $indent . &quot;    &quot;);
</span><span class="cx">   } else {
</span><del>-    my $setValue = $style . &quot;-&gt;&quot; . $setter;
-    $setterContent .= $indent . &quot;    &quot; . $setValue . &quot;(RenderStyle::&quot; . $initial . &quot;());\n&quot;;
</del><ins>+    my $initialValue = ($isSVG ? &quot;SVGRenderStyle&quot; : &quot;RenderStyle&quot;) . &quot;::&quot; . $initial . &quot;()&quot;;
+    $setterContent .= $indent . &quot;    &quot; . generateSetValueStatement($name, $initialValue) . &quot;;\n&quot;;
</ins><span class="cx">   }
</span><span class="cx">   $setterContent .= $indent . &quot;}\n&quot;;
</span><span class="cx"> 
</span><span class="lines">@@ -723,6 +737,7 @@
</span><span class="cx">   my $setterContent = &quot;&quot;;
</span><span class="cx">   $setterContent .= $indent . &quot;static void applyInherit&quot; . $nameToId{$name} . &quot;(StyleResolver&amp; styleResolver)\n&quot;;
</span><span class="cx">   $setterContent .= $indent . &quot;{\n&quot;;
</span><ins>+  my $isSVG = exists $propertiesWithStyleBuilderOptions{$name}{&quot;SVG&quot;};
</ins><span class="cx">   my $parentStyle = &quot;styleResolver.parentStyle()&quot;;
</span><span class="cx">   my $style = &quot;styleResolver.style()&quot;;
</span><span class="cx">   my $getter = $propertiesWithStyleBuilderOptions{$name}{&quot;Getter&quot;};
</span><span class="lines">@@ -754,9 +769,8 @@
</span><span class="cx">     $didCallSetValue = 1;
</span><span class="cx">   }
</span><span class="cx">   if (!$didCallSetValue) {
</span><del>-    my $inheritedValue = $parentStyle . &quot;-&gt;&quot; .  $getter . &quot;()&quot;;
-    my $setValue = $style . &quot;-&gt;&quot; . $setter;
-    $setterContent .= $indent . &quot;    &quot; . $setValue . &quot;(&quot; . $inheritedValue . &quot;);\n&quot;;
</del><ins>+    my $inheritedValue = $parentStyle . &quot;-&gt;&quot; . ($isSVG ? &quot;svgStyle().&quot; : &quot;&quot;) .  $getter . &quot;()&quot;;
+    $setterContent .= $indent . &quot;    &quot; . generateSetValueStatement($name, $inheritedValue) . &quot;;\n&quot;;
</ins><span class="cx">   }
</span><span class="cx">   $setterContent .= $indent . &quot;}\n&quot;;
</span><span class="cx"> 
</span><span class="lines">@@ -809,12 +823,11 @@
</span><span class="cx">     $didCallSetValue = 1;
</span><span class="cx">   }
</span><span class="cx">   if (!$didCallSetValue) {
</span><del>-    my $setValue = $style . &quot;-&gt;&quot; . $setter;
</del><span class="cx">     if (exists($propertiesWithStyleBuilderOptions{$name}{&quot;ConditionalConverter&quot;})) {
</span><span class="cx">       $setterContent .= $indent . &quot;    if (StyleBuilderConverter::convert&quot; . $propertiesWithStyleBuilderOptions{$name}{&quot;ConditionalConverter&quot;} . &quot;(styleResolver, value, &quot; . $convertedValue . &quot;))\n&quot;;
</span><span class="cx">       $setterContent .= &quot;    &quot;;
</span><span class="cx">     }
</span><del>-    $setterContent .= $indent . &quot;    &quot; . $setValue . &quot;(&quot; . $convertedValue . &quot;);\n&quot;;
</del><ins>+    $setterContent .= $indent . &quot;    &quot; . generateSetValueStatement($name, $convertedValue) . &quot;;\n&quot;;
</ins><span class="cx">   }
</span><span class="cx">   $setterContent .= $indent . &quot;}\n&quot;;
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>