[SVG2]: Implement support for the 'pathLength' attribute
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 Jan 2020 01:40:16 +0000 (01:40 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 Jan 2020 01:40:16 +0000 (01:40 +0000)
https://bugs.webkit.org/show_bug.cgi?id=72401

Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2020-01-15
Reviewed by Simon Fraser.

LayoutTests/imported/w3c:

* web-platform-tests/svg/types/scripted/SVGGeometryElement.isPointInStroke-01-expected.txt:

Source/WebCore:

The spec link is:
    https://svgwg.org/svg2-draft/paths.html#PathLengthAttribute

The 'pathLength' attribute affects the calculations for text on a path,
stroke dash offset and stroke dash array. 'pathLength' has no effect on
percentage lengths.

Tests: svg/custom/stroke-dash-array-pathLength.svg

* rendering/svg/RenderSVGTextPath.cpp:
(WebCore::RenderSVGTextPath::targetElement const):
A helper function which returns the target element. Notice target element
can't be used in this context unless it is a SVGGeometryElement. See
pathFromGraphicsElement().

(WebCore::RenderSVGTextPath::layoutPath const):
Use the new function targetElement().

(WebCore::RenderSVGTextPath::startOffset const):
In SVGTextLayoutEngine::beginTextPathLayout(), we used to check whether
startOffset is in the range [0, 1] to treat it as a percentage or not.
This is of course wrong especially when using with 'pathLength'. So we
need to return the SVGLengthValue to make the decision correctly.

* rendering/svg/RenderSVGTextPath.h:

* rendering/svg/SVGRenderSupport.cpp:
(WebCore::SVGRenderSupport::applyStrokeStyleToContext):
Apply 'pathLength' to the shape 'stroke-dashoffset' and 'stroke-dasharray'
properties.

* rendering/svg/SVGRenderTreeAsText.cpp:
(WebCore::writeStyle):
Add the 'pathLength' property to the shape stroke property.

* rendering/svg/SVGTextLayoutEngine.cpp:
(WebCore::SVGTextLayoutEngine::beginTextPathLayout):
Apply 'pathLength' to the text path 'start-offset' property.

LayoutTests:

* TestExpectations:

* platform/gtk/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-expected.txt:
* platform/gtk/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-percentage-expected.txt:
* platform/gtk/imported/w3c/web-platform-tests/svg/shapes/line-dasharray-expected.txt:
* platform/gtk/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-001-expected.txt:
* platform/gtk/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-002-expected.txt:
* platform/gtk/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-003-expected.txt:
'pathLength' is now included in the DRT of the stroke. Other tests will
need to be rebaselined.

* platform/ios-simulator/imported/w3c/web-platform-tests/svg/import/paths-dom-01-f-manual-expected.txt:
* platform/ios-simulator/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-expected.txt:
* platform/ios-simulator/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-percentage-expected.txt:
* platform/ios-simulator/imported/w3c/web-platform-tests/svg/path/distance/pathLength-zero-expected.txt:
* platform/ios-simulator/imported/w3c/web-platform-tests/svg/path/distance/pathLength-zero-percentage-expected.txt:
* platform/ios-simulator/imported/w3c/web-platform-tests/svg/shapes/line-dasharray-expected.txt:
* platform/ios-simulator/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-001-expected.txt:
* platform/ios-simulator/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-002-expected.txt:
* platform/ios-simulator/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-003-expected.txt:
* platform/ios-simulator/imported/w3c/web-platform-tests/svg/text/reftests/textpath-shape-001-expected.txt:
* platform/mac/imported/w3c/web-platform-tests/svg/import/paths-dom-01-f-manual-expected.txt:
* platform/mac/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-expected.txt:
* platform/mac/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-percentage-expected.txt:
* platform/mac/imported/w3c/web-platform-tests/svg/path/distance/pathLength-zero-expected.txt:
* platform/mac/imported/w3c/web-platform-tests/svg/path/distance/pathLength-zero-percentage-expected.txt:
* platform/mac/imported/w3c/web-platform-tests/svg/shapes/line-dasharray-expected.txt:
* platform/mac/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-001-expected.txt:
* platform/mac/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-002-expected.txt:
* platform/mac/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-003-expected.txt:
* platform/mac/imported/w3c/web-platform-tests/svg/text/reftests/textpath-shape-001-expected.txt:
'pathLength' is now included in the DRT of the stroke. These tests were
rendering incorrectly. With this patch, the rendering matches the rendering
of other browsers.

* platform/wpe/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-expected.txt:
* platform/wpe/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-percentage-expected.txt:
* platform/wpe/imported/w3c/web-platform-tests/svg/shapes/line-dasharray-expected.txt:
* platform/wpe/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-001-expected.txt:
* platform/wpe/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-002-expected.txt:
* platform/wpe/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-003-expected.txt:
'pathLength' is now included in the DRT of the stroke. Other tests will
need to be rebaselined.

* svg/custom/stroke-dash-array-pathLength-expected.svg: Added.
* svg/custom/stroke-dash-array-pathLength.svg: Added.

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

44 files changed:
LayoutTests/ChangeLog
LayoutTests/TestExpectations
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/svg/types/scripted/SVGGeometryElement.isPointInStroke-01-expected.txt
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-expected.txt
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-percentage-expected.txt
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/svg/shapes/line-dasharray-expected.txt
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-001-expected.txt
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-002-expected.txt
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-003-expected.txt
LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/import/paths-dom-01-f-manual-expected.txt
LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-expected.txt
LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-percentage-expected.txt
LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/path/distance/pathLength-zero-expected.txt
LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/path/distance/pathLength-zero-percentage-expected.txt
LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/shapes/line-dasharray-expected.txt
LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-001-expected.txt
LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-002-expected.txt
LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-003-expected.txt
LayoutTests/platform/ios-simulator/imported/w3c/web-platform-tests/svg/text/reftests/textpath-shape-001-expected.txt
LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/import/paths-dom-01-f-manual-expected.txt
LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-expected.txt
LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-percentage-expected.txt
LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/path/distance/pathLength-zero-expected.txt
LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/path/distance/pathLength-zero-percentage-expected.txt
LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/shapes/line-dasharray-expected.txt
LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-001-expected.txt
LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-002-expected.txt
LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-003-expected.txt
LayoutTests/platform/mac/imported/w3c/web-platform-tests/svg/text/reftests/textpath-shape-001-expected.txt
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-expected.txt
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-percentage-expected.txt
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/svg/shapes/line-dasharray-expected.txt
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-001-expected.txt
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-002-expected.txt
LayoutTests/platform/wpe/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-003-expected.txt
LayoutTests/svg/custom/stroke-dash-array-pathLength-expected.svg [new file with mode: 0644]
LayoutTests/svg/custom/stroke-dash-array-pathLength.svg [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/rendering/svg/RenderSVGTextPath.cpp
Source/WebCore/rendering/svg/RenderSVGTextPath.h
Source/WebCore/rendering/svg/SVGRenderSupport.cpp
Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp
Source/WebCore/rendering/svg/SVGTextLayoutEngine.cpp

index 997a493..c68d3d3 100644 (file)
@@ -1,3 +1,57 @@
+2020-01-15  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+        [SVG2]: Implement support for the 'pathLength' attribute
+        https://bugs.webkit.org/show_bug.cgi?id=72401
+
+        Reviewed by Simon Fraser.
+
+        * TestExpectations:
+
+        * platform/gtk/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-expected.txt:
+        * platform/gtk/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-percentage-expected.txt:
+        * platform/gtk/imported/w3c/web-platform-tests/svg/shapes/line-dasharray-expected.txt:
+        * platform/gtk/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-001-expected.txt:
+        * platform/gtk/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-002-expected.txt:
+        * platform/gtk/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-003-expected.txt:
+        'pathLength' is now included in the DRT of the stroke. Other tests will
+        need to be rebaselined.
+
+        * platform/ios-simulator/imported/w3c/web-platform-tests/svg/import/paths-dom-01-f-manual-expected.txt:
+        * platform/ios-simulator/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-expected.txt:
+        * platform/ios-simulator/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-percentage-expected.txt:
+        * platform/ios-simulator/imported/w3c/web-platform-tests/svg/path/distance/pathLength-zero-expected.txt:
+        * platform/ios-simulator/imported/w3c/web-platform-tests/svg/path/distance/pathLength-zero-percentage-expected.txt:
+        * platform/ios-simulator/imported/w3c/web-platform-tests/svg/shapes/line-dasharray-expected.txt:
+        * platform/ios-simulator/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-001-expected.txt:
+        * platform/ios-simulator/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-002-expected.txt:
+        * platform/ios-simulator/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-003-expected.txt:
+        * platform/ios-simulator/imported/w3c/web-platform-tests/svg/text/reftests/textpath-shape-001-expected.txt:
+        * platform/mac/imported/w3c/web-platform-tests/svg/import/paths-dom-01-f-manual-expected.txt:
+        * platform/mac/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-expected.txt:
+        * platform/mac/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-percentage-expected.txt:
+        * platform/mac/imported/w3c/web-platform-tests/svg/path/distance/pathLength-zero-expected.txt:
+        * platform/mac/imported/w3c/web-platform-tests/svg/path/distance/pathLength-zero-percentage-expected.txt:
+        * platform/mac/imported/w3c/web-platform-tests/svg/shapes/line-dasharray-expected.txt:
+        * platform/mac/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-001-expected.txt:
+        * platform/mac/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-002-expected.txt:
+        * platform/mac/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-003-expected.txt:
+        * platform/mac/imported/w3c/web-platform-tests/svg/text/reftests/textpath-shape-001-expected.txt:
+        'pathLength' is now included in the DRT of the stroke. These tests were
+        rendering incorrectly. With this patch, the rendering matches the rendering
+        of other browsers.
+
+        * platform/wpe/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-expected.txt:
+        * platform/wpe/imported/w3c/web-platform-tests/svg/path/distance/pathLength-positive-percentage-expected.txt:
+        * platform/wpe/imported/w3c/web-platform-tests/svg/shapes/line-dasharray-expected.txt:
+        * platform/wpe/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-001-expected.txt:
+        * platform/wpe/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-002-expected.txt:
+        * platform/wpe/imported/w3c/web-platform-tests/svg/shapes/reftests/pathlength-003-expected.txt:
+        'pathLength' is now included in the DRT of the stroke. Other tests will
+        need to be rebaselined.
+
+        * svg/custom/stroke-dash-array-pathLength-expected.svg: Added.
+        * svg/custom/stroke-dash-array-pathLength.svg: Added.
+
 2020-01-15  Caitlin Potter <caitp@igalia.com>
 
         [JSC] Add support for public class fields
index 1260ce2..9394d82 100644 (file)
@@ -1572,7 +1572,6 @@ webkit.org/b/5968 imported/mozilla/svg/linearGradient-basic-03.svg [ ImageOnlyFa
 webkit.org/b/32177 imported/mozilla/svg/as-image/background-image-rect-1png.html [ ImageOnlyFailure ]
 webkit.org/b/32177 imported/mozilla/svg/as-image/background-image-rect-2.html [ ImageOnlyFailure ]
 webkit.org/b/32177 imported/mozilla/svg/text-white-space-01.svg [ ImageOnlyFailure ]
-webkit.org/b/72401 imported/mozilla/svg/pathLength-01.svg [ ImageOnlyFailure ]
 webkit.org/b/112032 imported/mozilla/svg/text-layout-01.svg [ ImageOnlyFailure ]
 webkit.org/b/139107 imported/mozilla/svg/clip-02a.svg [ ImageOnlyFailure ]
 webkit.org/b/139107 imported/mozilla/svg/clip-02b.svg [ ImageOnlyFailure ]
index e601118..e893ff2 100644 (file)
@@ -1,3 +1,12 @@
+2020-01-15  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+        [SVG2]: Implement support for the 'pathLength' attribute
+        https://bugs.webkit.org/show_bug.cgi?id=72401
+
+        Reviewed by Simon Fraser.
+
+        * web-platform-tests/svg/types/scripted/SVGGeometryElement.isPointInStroke-01-expected.txt:
+
 2020-01-15  Oriol Brufau  <obrufau@igalia.com>
 
         [css-grid] Exclude implicit grid tracks from the resolved value
index bbd86b6..32061b9 100644 (file)
@@ -7,7 +7,7 @@ PASS SVGGeometryElement.prototype.isPointInStroke, 'stroke-dashoffset'.
 PASS SVGGeometryElement.prototype.isPointInStroke, 'stroke-miterlimit'. 
 PASS SVGGeometryElement.prototype.isPointInStroke, 'stroke-linejoin'. 
 PASS SVGGeometryElement.prototype.isPointInStroke, 'stroke-linecap'. 
-FAIL SVGGeometryElement.prototype.isPointInStroke, 'pathLength'. assert_false: expected false got true
+PASS SVGGeometryElement.prototype.isPointInStroke, 'pathLength'. 
 FAIL SVGGeometryElement.prototype.isPointInStroke, 'vector-effect'. assert_false: expected false got true
 PASS SVGGeometryElement.prototype.isPointInStroke, 'visibility' and 'pointer-events' have no effect. 
 
index 1b49c23..3118d4a 100644 (file)
@@ -3,10 +3,10 @@ layer at (0,0) size 800x600
 layer at (0,0) size 300x200
   RenderSVGRoot {svg} at (49,24) size 209x132
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
     RenderSVGContainer {g} at (50,24) size 208x32
       RenderSVGContainer {use} at (50,49) size 200x2
-        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (50,24) size 208x32 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 208x32
           RenderSVGInlineText {#text} at (0,0) size 208x32
@@ -28,14 +28,14 @@ layer at (0,0) size 300x200
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {g} at (50,99) size 200x2 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
       RenderSVGContainer {use} at (50,99) size 200x2
-        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 0x0
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {g} at (49,124) size 208x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
       RenderSVGContainer {use} at (50,149) size 200x2
-        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (49,24) size 208x32 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 208x32
           RenderSVGInlineText {#text} at (0,0) size 208x32
index 82d0a10..7e92968 100644 (file)
@@ -3,10 +3,10 @@ layer at (0,0) size 800x600
 layer at (0,0) size 300x200
   RenderSVGRoot {svg} at (49,24) size 209x132
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
     RenderSVGContainer {g} at (50,24) size 208x32
       RenderSVGContainer {use} at (50,49) size 200x2
-        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (50,24) size 208x32 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 208x32
           RenderSVGInlineText {#text} at (0,0) size 208x32
@@ -28,7 +28,7 @@ layer at (0,0) size 300x200
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {g} at (50,74) size 200x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
       RenderSVGContainer {use} at (50,99) size 200x2
-        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (150,24) size 95x32 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 95x32
           RenderSVGInlineText {#text} at (0,0) size 95x32
@@ -42,7 +42,7 @@ layer at (0,0) size 300x200
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {g} at (49,124) size 209x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
       RenderSVGContainer {use} at (50,149) size 200x2
-        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (49,24) size 209x32 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 208x32
           RenderSVGInlineText {#text} at (0,0) size 208x32
index 6562049..bfa5cd3 100644 (file)
@@ -1,5 +1,5 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 300x200
-  RenderSVGRoot {svg} at (50,99) size 199x2
-    RenderSVGPath {line} at (50,99) size 199x2 [stroke={[type=SOLID] [color=#0000FF] [dash array={3.00, 1.00}]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=100.00] [x2=250.00] [y2=100.00]
+  RenderSVGRoot {svg} at (50,99) size 200x2
+    RenderSVGPath {line} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#0000FF] [dash array={3.00, 1.00}] [path length=25.00]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=100.00] [x2=250.00] [y2=100.00]
index 47975e4..440ec15 100644 (file)
@@ -5,4 +5,4 @@ layer at (0,0) size 800x600
     RenderSVGContainer {g} at (0,0) size 0x0
     RenderSVGContainer {g} at (29,229) size 742x342
       RenderSVGRect {rect} at (29,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={50.00}]}] [x=20.00] [y=140.00] [width=200.00] [height=200.00]
-      RenderSVGRect {rect} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}]}] [x=260.00] [y=140.00] [width=200.00] [height=200.00]
+      RenderSVGRect {rect} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}] [path length=4.00]}] [x=260.00] [y=140.00] [width=200.00] [height=200.00]
index 30e367d..9b372dd 100644 (file)
@@ -5,4 +5,4 @@ layer at (0,0) size 800x600
     RenderSVGContainer {g} at (0,0) size 0x0
     RenderSVGContainer {g} at (29,229) size 742x342
       RenderSVGEllipse {circle} at (29,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={39.27}]}] [cx=120.00] [cy=240.00] [r=100.00]
-      RenderSVGEllipse {circle} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}]}] [cx=360.00] [cy=240.00] [r=100.00]
+      RenderSVGEllipse {circle} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}] [path length=4.00]}] [cx=360.00] [cy=240.00] [r=100.00]
index 27f2d8e..24d9948 100644 (file)
@@ -5,7 +5,7 @@ layer at (0,0) size 800x600
     RenderSVGContainer {g} at (0,0) size 0x0
     RenderSVGContainer {g} at (0,0) size 768x568
       RenderSVGEllipse {circle} at (32,232) size 336x336 [stroke={[type=SOLID] [color=#000000]}] [cx=120.00] [cy=240.00] [r=100.00]
-      RenderSVGEllipse {circle} at (432,232) size 336x336 [stroke={[type=SOLID] [color=#000000]}] [cx=360.00] [cy=240.00] [r=100.00]
+      RenderSVGEllipse {circle} at (432,232) size 336x336 [stroke={[type=SOLID] [color=#000000] [path length=4.00]}] [cx=360.00] [cy=240.00] [r=100.00]
       RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 0x0
           RenderSVGInlineText {#text} at (0,0) size 0x0
index 040c7f5..56d3091 100644 (file)
@@ -55,39 +55,32 @@ layer at (0,0) size 800x600
             chunk 1 text run 1 at (270.00,50.00) startOffset 0 endOffset 17 width 116.26: "pathLength=\"100\":"
         RenderSVGContainer {use} at (500,133) size 167x84
           RenderSVGPath {path} at (500,133) size 167x84 [fill={[type=SOLID] [color=#008000]}] [data="M 300 80 L 400 80 L 400 130 L 300 130 L 300 80"]
-        RenderSVGText {text} at (311,66) size 103x78 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 102x77
-            RenderSVGInlineText {#text} at (0,0) size 102x77
-              chunk 1 text run 1 at (354.31,80.00) startOffset 0 endOffset 1 width 8.61: "T"
-              chunk 1 text run 2 at (362.53,80.00) startOffset 1 endOffset 2 width 7.84: "h"
-              chunk 1 text run 3 at (370.38,80.00) startOffset 2 endOffset 3 width 7.84: "e"
-              chunk 1 text run 4 at (376.26,80.00) startOffset 3 endOffset 4 width 3.92: " "
-              chunk 1 text run 5 at (380.17,80.00) startOffset 4 endOffset 5 width 3.92: "t"
-              chunk 1 text run 6 at (386.05,80.00) startOffset 5 endOffset 6 width 7.84: "e"
-              chunk 1 text run 7 at (393.50,80.00) startOffset 6 endOffset 7 width 7.05: "x"
-              chunk 1 text run 8 at (398.98,80.00) startOffset 7 endOffset 8 width 3.92: "t"
-              chunk 1 text run 9 at (400.00,82.90) startOffset 8 endOffset 9 width 3.92: " "
-              chunk 1 text run 10 at (400.00,88.78) startOffset 9 endOffset 10 width 7.84: "g"
-              chunk 1 text run 11 at (400.00,96.62) startOffset 10 endOffset 11 width 7.84: "o"
-              chunk 1 text run 12 at (400.00,104.46) startOffset 11 endOffset 12 width 7.84: "e"
-              chunk 1 text run 13 at (400.00,111.91) startOffset 12 endOffset 13 width 7.05: "s"
-              chunk 1 text run 14 at (400.00,117.39) startOffset 13 endOffset 14 width 3.92: " "
-              chunk 1 text run 15 at (400.00,123.27) startOffset 14 endOffset 15 width 7.84: "a"
-              chunk 1 text run 16 at (400.00,129.54) startOffset 15 endOffset 16 width 4.70: "r"
-              chunk 1 text run 17 at (394.19,130.00) startOffset 16 endOffset 17 width 7.84: "o"
-              chunk 1 text run 18 at (386.35,130.00) startOffset 17 endOffset 18 width 7.84: "u"
-              chunk 1 text run 19 at (378.51,130.00) startOffset 18 endOffset 19 width 7.84: "n"
-              chunk 1 text run 20 at (370.67,130.00) startOffset 19 endOffset 20 width 7.84: "d"
-              chunk 1 text run 21 at (364.79,130.00) startOffset 20 endOffset 21 width 3.92: " "
-              chunk 1 text run 22 at (360.87,130.00) startOffset 21 endOffset 22 width 3.92: "t"
-              chunk 1 text run 23 at (354.99,130.00) startOffset 22 endOffset 23 width 7.84: "h"
-              chunk 1 text run 24 at (347.15,130.00) startOffset 23 endOffset 24 width 7.84: "e"
-              chunk 1 text run 25 at (341.27,130.00) startOffset 24 endOffset 25 width 3.92: " "
-              chunk 1 text run 26 at (336.96,130.00) startOffset 25 endOffset 26 width 4.70: "r"
-              chunk 1 text run 27 at (330.69,130.00) startOffset 26 endOffset 27 width 7.84: "e"
-              chunk 1 text run 28 at (323.25,130.00) startOffset 27 endOffset 28 width 7.05: "c"
-              chunk 1 text run 29 at (317.76,130.00) startOffset 28 endOffset 29 width 3.92: "t"
-              chunk 1 text run 30 at (313.85,130.00) startOffset 29 endOffset 30 width 3.92: "."
+        RenderSVGText {text} at (286,81) size 114x63 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 114x63
+            RenderSVGInlineText {#text} at (0,0) size 114x63
+              chunk 1 text run 1 at (395.69,130.00) startOffset 0 endOffset 1 width 8.61: "T"
+              chunk 1 text run 2 at (387.47,130.00) startOffset 1 endOffset 2 width 7.84: "h"
+              chunk 1 text run 3 at (379.62,130.00) startOffset 2 endOffset 3 width 7.84: "e"
+              chunk 1 text run 4 at (373.74,130.00) startOffset 3 endOffset 4 width 3.92: " "
+              chunk 1 text run 5 at (369.83,130.00) startOffset 4 endOffset 5 width 3.92: "t"
+              chunk 1 text run 6 at (363.95,130.00) startOffset 5 endOffset 6 width 7.84: "e"
+              chunk 1 text run 7 at (356.50,130.00) startOffset 6 endOffset 7 width 7.05: "x"
+              chunk 1 text run 8 at (351.02,130.00) startOffset 7 endOffset 8 width 3.92: "t"
+              chunk 1 text run 9 at (347.10,130.00) startOffset 8 endOffset 9 width 3.92: " "
+              chunk 1 text run 10 at (341.22,130.00) startOffset 9 endOffset 10 width 7.84: "g"
+              chunk 1 text run 11 at (333.38,130.00) startOffset 10 endOffset 11 width 7.84: "o"
+              chunk 1 text run 12 at (325.54,130.00) startOffset 11 endOffset 12 width 7.84: "e"
+              chunk 1 text run 13 at (318.09,130.00) startOffset 12 endOffset 13 width 7.05: "s"
+              chunk 1 text run 14 at (312.61,130.00) startOffset 13 endOffset 14 width 3.92: " "
+              chunk 1 text run 15 at (306.73,130.00) startOffset 14 endOffset 15 width 7.84: "a"
+              chunk 1 text run 16 at (300.46,130.00) startOffset 15 endOffset 16 width 4.70: "r"
+              chunk 1 text run 17 at (300.00,124.19) startOffset 16 endOffset 17 width 7.84: "o"
+              chunk 1 text run 18 at (300.00,116.35) startOffset 17 endOffset 18 width 7.84: "u"
+              chunk 1 text run 19 at (300.00,108.51) startOffset 18 endOffset 19 width 7.84: "n"
+              chunk 1 text run 20 at (300.00,100.67) startOffset 19 endOffset 20 width 7.84: "d"
+              chunk 1 text run 21 at (300.00,94.79) startOffset 20 endOffset 21 width 3.92: " "
+              chunk 1 text run 22 at (300.00,90.87) startOffset 21 endOffset 22 width 3.92: "t"
+              chunk 1 text run 23 at (300.00,84.99) startOffset 22 endOffset 23 width 7.84: "h"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGContainer {g} at (16,260) size 582x229 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,-10.00)}]
           RenderSVGText {text} at (10,166) size 98x18 contains 1 chunk(s)
index 40478b2..7fbc67b 100644 (file)
@@ -1,12 +1,12 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 300x200
-  RenderSVGRoot {svg} at (49,23) size 207x134
+  RenderSVGRoot {svg} at (43,23) size 213x134
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
     RenderSVGContainer {g} at (50,23) size 206x34
       RenderSVGContainer {use} at (50,49) size 200x2
-        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (50,23) size 206x34 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 206x33
           RenderSVGInlineText {#text} at (0,0) size 206x33
@@ -26,32 +26,36 @@ layer at (0,0) size 300x200
             chunk 1 text run 14 at (229.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
             chunk 1 text run 15 at (247.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-    RenderSVGContainer {g} at (50,99) size 200x2 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
+    RenderSVGContainer {g} at (50,73) size 200x34 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
       RenderSVGContainer {use} at (50,99) size 200x2
-        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
-      RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 0x0
-          RenderSVGInlineText {#text} at (0,0) size 0x0
+        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
+      RenderSVGText {text} at (150,23) size 94x34 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 94x33
+          RenderSVGInlineText {#text} at (0,0) size 94x33
+            chunk 1 text run 1 at (158.55,50.00) startOffset 0 endOffset 1 width 17.10: "T"
+            chunk 1 text run 2 at (174.89,50.00) startOffset 1 endOffset 2 width 15.57: "h"
+            chunk 1 text run 3 at (190.46,50.00) startOffset 2 endOffset 3 width 15.57: "e"
+            chunk 1 text run 4 at (202.14,50.00) startOffset 3 endOffset 4 width 7.78: " "
+            chunk 1 text run 5 at (213.81,50.00) startOffset 4 endOffset 5 width 15.57: "q"
+            chunk 1 text run 6 at (229.39,50.00) startOffset 5 endOffset 6 width 15.57: "u"
+            chunk 1 text run 7 at (240.28,50.00) startOffset 6 endOffset 7 width 6.22: "i"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-    RenderSVGContainer {g} at (49,123) size 206x34 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
+    RenderSVGContainer {g} at (43,123) size 207x34 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
       RenderSVGContainer {use} at (50,149) size 200x2
-        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
-      RenderSVGText {text} at (49,23) size 206x34 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 206x33
-          RenderSVGInlineText {#text} at (0,0) size 206x33
-            chunk 1 text run 1 at (57.55,50.00) startOffset 0 endOffset 1 width 17.10: "T"
-            chunk 1 text run 2 at (73.89,50.00) startOffset 1 endOffset 2 width 15.57: "h"
-            chunk 1 text run 3 at (89.46,50.00) startOffset 2 endOffset 3 width 15.57: "e"
-            chunk 1 text run 4 at (101.14,50.00) startOffset 3 endOffset 4 width 7.78: " "
-            chunk 1 text run 5 at (112.81,50.00) startOffset 4 endOffset 5 width 15.57: "q"
-            chunk 1 text run 6 at (128.39,50.00) startOffset 5 endOffset 6 width 15.57: "u"
-            chunk 1 text run 7 at (139.28,50.00) startOffset 6 endOffset 7 width 6.22: "i"
-            chunk 1 text run 8 at (149.39,50.00) startOffset 7 endOffset 8 width 14.00: "c"
-            chunk 1 text run 9 at (163.39,50.00) startOffset 8 endOffset 9 width 14.00: "k"
-            chunk 1 text run 10 at (174.28,50.00) startOffset 9 endOffset 10 width 7.78: " "
-            chunk 1 text run 11 at (185.96,50.00) startOffset 10 endOffset 11 width 15.57: "b"
-            chunk 1 text run 12 at (198.41,50.00) startOffset 11 endOffset 12 width 9.32: "r"
-            chunk 1 text run 13 at (210.85,50.00) startOffset 12 endOffset 13 width 15.57: "o"
-            chunk 1 text run 14 at (228.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
-            chunk 1 text run 15 at (246.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
+        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
+      RenderSVGText {text} at (43,23) size 158x34 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 158x33
+          RenderSVGInlineText {#text} at (0,0) size 158x33
+            chunk 1 text run 1 at (50.39,50.00) startOffset 7 endOffset 8 width 14.00: "c"
+            chunk 1 text run 2 at (64.39,50.00) startOffset 8 endOffset 9 width 14.00: "k"
+            chunk 1 text run 3 at (75.28,50.00) startOffset 9 endOffset 10 width 7.78: " "
+            chunk 1 text run 4 at (86.96,50.00) startOffset 10 endOffset 11 width 15.57: "b"
+            chunk 1 text run 5 at (99.41,50.00) startOffset 11 endOffset 12 width 9.32: "r"
+            chunk 1 text run 6 at (111.85,50.00) startOffset 12 endOffset 13 width 15.57: "o"
+            chunk 1 text run 7 at (129.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
+            chunk 1 text run 8 at (147.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
+            chunk 1 text run 9 at (159.32,50.00) startOffset 15 endOffset 16 width 7.78: " "
+            chunk 1 text run 10 at (167.10,50.00) startOffset 16 endOffset 17 width 7.78: "f"
+            chunk 1 text run 11 at (178.78,50.00) startOffset 17 endOffset 18 width 15.57: "o"
+            chunk 1 text run 12 at (193.56,50.00) startOffset 18 endOffset 19 width 14.00: "x"
         RenderSVGInlineText {#text} at (0,0) size 0x0
index 707c7f6..7fbc67b 100644 (file)
@@ -1,12 +1,12 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 300x200
-  RenderSVGRoot {svg} at (49,23) size 207x134
+  RenderSVGRoot {svg} at (43,23) size 213x134
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
     RenderSVGContainer {g} at (50,23) size 206x34
       RenderSVGContainer {use} at (50,49) size 200x2
-        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (50,23) size 206x34 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 206x33
           RenderSVGInlineText {#text} at (0,0) size 206x33
@@ -28,7 +28,7 @@ layer at (0,0) size 300x200
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {g} at (50,73) size 200x34 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
       RenderSVGContainer {use} at (50,99) size 200x2
-        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (150,23) size 94x34 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 94x33
           RenderSVGInlineText {#text} at (0,0) size 94x33
@@ -40,25 +40,22 @@ layer at (0,0) size 300x200
             chunk 1 text run 6 at (229.39,50.00) startOffset 5 endOffset 6 width 15.57: "u"
             chunk 1 text run 7 at (240.28,50.00) startOffset 6 endOffset 7 width 6.22: "i"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-    RenderSVGContainer {g} at (49,123) size 206x34 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
+    RenderSVGContainer {g} at (43,123) size 207x34 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
       RenderSVGContainer {use} at (50,149) size 200x2
-        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
-      RenderSVGText {text} at (49,23) size 206x34 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 206x33
-          RenderSVGInlineText {#text} at (0,0) size 206x33
-            chunk 1 text run 1 at (58.05,50.00) startOffset 0 endOffset 1 width 17.10: "T"
-            chunk 1 text run 2 at (74.39,50.00) startOffset 1 endOffset 2 width 15.57: "h"
-            chunk 1 text run 3 at (89.96,50.00) startOffset 2 endOffset 3 width 15.57: "e"
-            chunk 1 text run 4 at (101.64,50.00) startOffset 3 endOffset 4 width 7.78: " "
-            chunk 1 text run 5 at (113.31,50.00) startOffset 4 endOffset 5 width 15.57: "q"
-            chunk 1 text run 6 at (128.89,50.00) startOffset 5 endOffset 6 width 15.57: "u"
-            chunk 1 text run 7 at (139.78,50.00) startOffset 6 endOffset 7 width 6.22: "i"
-            chunk 1 text run 8 at (149.89,50.00) startOffset 7 endOffset 8 width 14.00: "c"
-            chunk 1 text run 9 at (163.89,50.00) startOffset 8 endOffset 9 width 14.00: "k"
-            chunk 1 text run 10 at (174.78,50.00) startOffset 9 endOffset 10 width 7.78: " "
-            chunk 1 text run 11 at (186.46,50.00) startOffset 10 endOffset 11 width 15.57: "b"
-            chunk 1 text run 12 at (198.91,50.00) startOffset 11 endOffset 12 width 9.32: "r"
-            chunk 1 text run 13 at (211.35,50.00) startOffset 12 endOffset 13 width 15.57: "o"
-            chunk 1 text run 14 at (229.25,50.00) startOffset 13 endOffset 14 width 20.22: "w"
-            chunk 1 text run 15 at (247.15,50.00) startOffset 14 endOffset 15 width 15.57: "n"
+        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
+      RenderSVGText {text} at (43,23) size 158x34 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 158x33
+          RenderSVGInlineText {#text} at (0,0) size 158x33
+            chunk 1 text run 1 at (50.39,50.00) startOffset 7 endOffset 8 width 14.00: "c"
+            chunk 1 text run 2 at (64.39,50.00) startOffset 8 endOffset 9 width 14.00: "k"
+            chunk 1 text run 3 at (75.28,50.00) startOffset 9 endOffset 10 width 7.78: " "
+            chunk 1 text run 4 at (86.96,50.00) startOffset 10 endOffset 11 width 15.57: "b"
+            chunk 1 text run 5 at (99.41,50.00) startOffset 11 endOffset 12 width 9.32: "r"
+            chunk 1 text run 6 at (111.85,50.00) startOffset 12 endOffset 13 width 15.57: "o"
+            chunk 1 text run 7 at (129.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
+            chunk 1 text run 8 at (147.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
+            chunk 1 text run 9 at (159.32,50.00) startOffset 15 endOffset 16 width 7.78: " "
+            chunk 1 text run 10 at (167.10,50.00) startOffset 16 endOffset 17 width 7.78: "f"
+            chunk 1 text run 11 at (178.78,50.00) startOffset 17 endOffset 18 width 15.57: "o"
+            chunk 1 text run 12 at (193.56,50.00) startOffset 18 endOffset 19 width 14.00: "x"
         RenderSVGInlineText {#text} at (0,0) size 0x0
index 40478b2..3d44da8 100644 (file)
@@ -1,7 +1,7 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 300x200
-  RenderSVGRoot {svg} at (49,23) size 207x134
+  RenderSVGRoot {svg} at (49,23) size 208x134
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
     RenderSVGContainer {g} at (50,23) size 206x34
@@ -26,12 +26,27 @@ layer at (0,0) size 300x200
             chunk 1 text run 14 at (229.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
             chunk 1 text run 15 at (247.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-    RenderSVGContainer {g} at (50,99) size 200x2 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
+    RenderSVGContainer {g} at (50,73) size 207x34 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
       RenderSVGContainer {use} at (50,99) size 200x2
         RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
-      RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 0x0
-          RenderSVGInlineText {#text} at (0,0) size 0x0
+      RenderSVGText {text} at (51,23) size 206x34 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 206x33
+          RenderSVGInlineText {#text} at (0,0) size 206x33
+            chunk 1 text run 1 at (59.55,50.00) startOffset 0 endOffset 1 width 17.10: "T"
+            chunk 1 text run 2 at (75.89,50.00) startOffset 1 endOffset 2 width 15.57: "h"
+            chunk 1 text run 3 at (91.46,50.00) startOffset 2 endOffset 3 width 15.57: "e"
+            chunk 1 text run 4 at (103.14,50.00) startOffset 3 endOffset 4 width 7.78: " "
+            chunk 1 text run 5 at (114.81,50.00) startOffset 4 endOffset 5 width 15.57: "q"
+            chunk 1 text run 6 at (130.39,50.00) startOffset 5 endOffset 6 width 15.57: "u"
+            chunk 1 text run 7 at (141.28,50.00) startOffset 6 endOffset 7 width 6.22: "i"
+            chunk 1 text run 8 at (151.39,50.00) startOffset 7 endOffset 8 width 14.00: "c"
+            chunk 1 text run 9 at (165.39,50.00) startOffset 8 endOffset 9 width 14.00: "k"
+            chunk 1 text run 10 at (176.28,50.00) startOffset 9 endOffset 10 width 7.78: " "
+            chunk 1 text run 11 at (187.96,50.00) startOffset 10 endOffset 11 width 15.57: "b"
+            chunk 1 text run 12 at (200.41,50.00) startOffset 11 endOffset 12 width 9.32: "r"
+            chunk 1 text run 13 at (212.85,50.00) startOffset 12 endOffset 13 width 15.57: "o"
+            chunk 1 text run 14 at (230.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
+            chunk 1 text run 15 at (248.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {g} at (49,123) size 206x34 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
       RenderSVGContainer {use} at (50,149) size 200x2
index 707c7f6..8e69cfe 100644 (file)
@@ -1,7 +1,7 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 300x200
-  RenderSVGRoot {svg} at (49,23) size 207x134
+  RenderSVGRoot {svg} at (43,23) size 213x134
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
     RenderSVGContainer {g} at (50,23) size 206x34
@@ -40,25 +40,22 @@ layer at (0,0) size 300x200
             chunk 1 text run 6 at (229.39,50.00) startOffset 5 endOffset 6 width 15.57: "u"
             chunk 1 text run 7 at (240.28,50.00) startOffset 6 endOffset 7 width 6.22: "i"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-    RenderSVGContainer {g} at (49,123) size 206x34 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
+    RenderSVGContainer {g} at (43,123) size 207x34 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
       RenderSVGContainer {use} at (50,149) size 200x2
         RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
-      RenderSVGText {text} at (49,23) size 206x34 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 206x33
-          RenderSVGInlineText {#text} at (0,0) size 206x33
-            chunk 1 text run 1 at (58.05,50.00) startOffset 0 endOffset 1 width 17.10: "T"
-            chunk 1 text run 2 at (74.39,50.00) startOffset 1 endOffset 2 width 15.57: "h"
-            chunk 1 text run 3 at (89.96,50.00) startOffset 2 endOffset 3 width 15.57: "e"
-            chunk 1 text run 4 at (101.64,50.00) startOffset 3 endOffset 4 width 7.78: " "
-            chunk 1 text run 5 at (113.31,50.00) startOffset 4 endOffset 5 width 15.57: "q"
-            chunk 1 text run 6 at (128.89,50.00) startOffset 5 endOffset 6 width 15.57: "u"
-            chunk 1 text run 7 at (139.78,50.00) startOffset 6 endOffset 7 width 6.22: "i"
-            chunk 1 text run 8 at (149.89,50.00) startOffset 7 endOffset 8 width 14.00: "c"
-            chunk 1 text run 9 at (163.89,50.00) startOffset 8 endOffset 9 width 14.00: "k"
-            chunk 1 text run 10 at (174.78,50.00) startOffset 9 endOffset 10 width 7.78: " "
-            chunk 1 text run 11 at (186.46,50.00) startOffset 10 endOffset 11 width 15.57: "b"
-            chunk 1 text run 12 at (198.91,50.00) startOffset 11 endOffset 12 width 9.32: "r"
-            chunk 1 text run 13 at (211.35,50.00) startOffset 12 endOffset 13 width 15.57: "o"
-            chunk 1 text run 14 at (229.25,50.00) startOffset 13 endOffset 14 width 20.22: "w"
-            chunk 1 text run 15 at (247.15,50.00) startOffset 14 endOffset 15 width 15.57: "n"
+      RenderSVGText {text} at (43,23) size 158x34 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 158x33
+          RenderSVGInlineText {#text} at (0,0) size 158x33
+            chunk 1 text run 1 at (50.39,50.00) startOffset 7 endOffset 8 width 14.00: "c"
+            chunk 1 text run 2 at (64.39,50.00) startOffset 8 endOffset 9 width 14.00: "k"
+            chunk 1 text run 3 at (75.28,50.00) startOffset 9 endOffset 10 width 7.78: " "
+            chunk 1 text run 4 at (86.96,50.00) startOffset 10 endOffset 11 width 15.57: "b"
+            chunk 1 text run 5 at (99.41,50.00) startOffset 11 endOffset 12 width 9.32: "r"
+            chunk 1 text run 6 at (111.85,50.00) startOffset 12 endOffset 13 width 15.57: "o"
+            chunk 1 text run 7 at (129.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
+            chunk 1 text run 8 at (147.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
+            chunk 1 text run 9 at (159.32,50.00) startOffset 15 endOffset 16 width 7.78: " "
+            chunk 1 text run 10 at (167.10,50.00) startOffset 16 endOffset 17 width 7.78: "f"
+            chunk 1 text run 11 at (178.78,50.00) startOffset 17 endOffset 18 width 15.57: "o"
+            chunk 1 text run 12 at (193.56,50.00) startOffset 18 endOffset 19 width 14.00: "x"
         RenderSVGInlineText {#text} at (0,0) size 0x0
index 6562049..bfa5cd3 100644 (file)
@@ -1,5 +1,5 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 300x200
-  RenderSVGRoot {svg} at (50,99) size 199x2
-    RenderSVGPath {line} at (50,99) size 199x2 [stroke={[type=SOLID] [color=#0000FF] [dash array={3.00, 1.00}]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=100.00] [x2=250.00] [y2=100.00]
+  RenderSVGRoot {svg} at (50,99) size 200x2
+    RenderSVGPath {line} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#0000FF] [dash array={3.00, 1.00}] [path length=25.00]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=100.00] [x2=250.00] [y2=100.00]
index 47975e4..440ec15 100644 (file)
@@ -5,4 +5,4 @@ layer at (0,0) size 800x600
     RenderSVGContainer {g} at (0,0) size 0x0
     RenderSVGContainer {g} at (29,229) size 742x342
       RenderSVGRect {rect} at (29,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={50.00}]}] [x=20.00] [y=140.00] [width=200.00] [height=200.00]
-      RenderSVGRect {rect} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}]}] [x=260.00] [y=140.00] [width=200.00] [height=200.00]
+      RenderSVGRect {rect} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}] [path length=4.00]}] [x=260.00] [y=140.00] [width=200.00] [height=200.00]
index 30e367d..9b372dd 100644 (file)
@@ -5,4 +5,4 @@ layer at (0,0) size 800x600
     RenderSVGContainer {g} at (0,0) size 0x0
     RenderSVGContainer {g} at (29,229) size 742x342
       RenderSVGEllipse {circle} at (29,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={39.27}]}] [cx=120.00] [cy=240.00] [r=100.00]
-      RenderSVGEllipse {circle} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}]}] [cx=360.00] [cy=240.00] [r=100.00]
+      RenderSVGEllipse {circle} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}] [path length=4.00]}] [cx=360.00] [cy=240.00] [r=100.00]
index 27f2d8e..9b78c17 100644 (file)
@@ -1,14 +1,58 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,0) size 768x568
+  RenderSVGRoot {svg} at (12,193) size 776x375
     RenderSVGContainer {g} at (0,0) size 0x0
-    RenderSVGContainer {g} at (0,0) size 768x568
+    RenderSVGContainer {g} at (12,193) size 776x375
       RenderSVGEllipse {circle} at (32,232) size 336x336 [stroke={[type=SOLID] [color=#000000]}] [cx=120.00] [cy=240.00] [r=100.00]
-      RenderSVGEllipse {circle} at (432,232) size 336x336 [stroke={[type=SOLID] [color=#000000]}] [cx=360.00] [cy=240.00] [r=100.00]
-      RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 0x0
-          RenderSVGInlineText {#text} at (0,0) size 0x0
-      RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 0x0
-          RenderSVGInlineText {#text} at (0,0) size 0x0
+      RenderSVGEllipse {circle} at (432,232) size 336x336 [stroke={[type=SOLID] [color=#000000] [path length=4.00]}] [cx=360.00] [cy=240.00] [r=100.00]
+      RenderSVGText {text} at (8,117) size 224x86 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 224x86
+          RenderSVGInlineText {#text} at (0,0) size 224x86
+            chunk 1 (middle anchor) text run 1 at (32.33,191.87) startOffset 0 endOffset 1 width 16.01: "S"
+            chunk 1 (middle anchor) text run 2 at (40.32,179.57) startOffset 1 endOffset 2 width 13.35: "o"
+            chunk 1 (middle anchor) text run 3 at (51.45,167.19) startOffset 2 endOffset 3 width 19.99: "m"
+            chunk 1 (middle anchor) text run 4 at (64.48,156.82) startOffset 3 endOffset 4 width 13.35: "e"
+            chunk 1 (middle anchor) text run 5 at (73.06,151.68) startOffset 4 endOffset 5 width 6.67: " "
+            chunk 1 (middle anchor) text run 6 at (79.05,148.74) startOffset 5 endOffset 6 width 6.67: "t"
+            chunk 1 (middle anchor) text run 7 at (88.37,145.11) startOffset 6 endOffset 7 width 13.35: "e"
+            chunk 1 (middle anchor) text run 8 at (100.61,141.88) startOffset 7 endOffset 8 width 12.00: "x"
+            chunk 1 (middle anchor) text run 9 at (109.84,140.51) startOffset 8 endOffset 9 width 6.67: "t"
+            chunk 1 (middle anchor) text run 10 at (116.49,140.06) startOffset 9 endOffset 10 width 6.67: " "
+            chunk 1 (middle anchor) text run 11 at (126.50,140.21) startOffset 10 endOffset 11 width 13.35: "o"
+            chunk 1 (middle anchor) text run 12 at (139.72,141.94) startOffset 11 endOffset 12 width 13.35: "n"
+            chunk 1 (middle anchor) text run 13 at (149.42,144.40) startOffset 12 endOffset 13 width 6.67: " "
+            chunk 1 (middle anchor) text run 14 at (158.82,147.81) startOffset 13 endOffset 14 width 13.35: "a"
+            chunk 1 (middle anchor) text run 15 at (167.83,152.16) startOffset 14 endOffset 15 width 6.67: " "
+            chunk 1 (middle anchor) text run 16 at (175.80,157.01) startOffset 15 endOffset 16 width 12.00: "c"
+            chunk 1 (middle anchor) text run 17 at (182.77,162.15) startOffset 16 endOffset 17 width 5.33: "i"
+            chunk 1 (middle anchor) text run 18 at (187.81,166.51) startOffset 17 endOffset 18 width 7.99: "r"
+            chunk 1 (middle anchor) text run 19 at (194.81,173.64) startOffset 18 endOffset 19 width 12.00: "c"
+            chunk 1 (middle anchor) text run 20 at (200.28,180.36) startOffset 19 endOffset 20 width 5.33: "l"
+            chunk 1 (middle anchor) text run 21 at (205.50,188.10) startOffset 20 endOffset 21 width 13.35: "e"
+            chunk 1 (middle anchor) text run 22 at (210.26,196.90) startOffset 21 endOffset 22 width 6.67: "!"
+      RenderSVGText {text} at (248,117) size 224x86 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 224x85
+          RenderSVGInlineText {#text} at (0,0) size 224x85
+            chunk 1 (middle anchor) text run 1 at (272.09,192.30) startOffset 0 endOffset 1 width 16.01: "S"
+            chunk 1 (middle anchor) text run 2 at (280.02,179.96) startOffset 1 endOffset 2 width 13.35: "o"
+            chunk 1 (middle anchor) text run 3 at (291.09,167.53) startOffset 2 endOffset 3 width 19.99: "m"
+            chunk 1 (middle anchor) text run 4 at (304.07,157.09) startOffset 3 endOffset 4 width 13.35: "e"
+            chunk 1 (middle anchor) text run 5 at (312.62,151.91) startOffset 4 endOffset 5 width 6.67: " "
+            chunk 1 (middle anchor) text run 6 at (318.60,148.95) startOffset 5 endOffset 6 width 6.67: "t"
+            chunk 1 (middle anchor) text run 7 at (327.90,145.26) startOffset 6 endOffset 7 width 13.35: "e"
+            chunk 1 (middle anchor) text run 8 at (340.13,141.98) startOffset 7 endOffset 8 width 12.00: "x"
+            chunk 1 (middle anchor) text run 9 at (349.35,140.56) startOffset 8 endOffset 9 width 6.67: "t"
+            chunk 1 (middle anchor) text run 10 at (356.00,140.08) startOffset 9 endOffset 10 width 6.67: " "
+            chunk 1 (middle anchor) text run 11 at (366.00,140.18) startOffset 10 endOffset 11 width 13.35: "o"
+            chunk 1 (middle anchor) text run 12 at (379.23,141.85) startOffset 11 endOffset 12 width 13.35: "n"
+            chunk 1 (middle anchor) text run 13 at (388.95,144.25) startOffset 12 endOffset 13 width 6.67: " "
+            chunk 1 (middle anchor) text run 14 at (398.36,147.62) startOffset 13 endOffset 14 width 13.35: "a"
+            chunk 1 (middle anchor) text run 15 at (407.40,151.92) startOffset 14 endOffset 15 width 6.67: " "
+            chunk 1 (middle anchor) text run 16 at (415.39,156.73) startOffset 15 endOffset 16 width 12.00: "c"
+            chunk 1 (middle anchor) text run 17 at (422.39,161.84) startOffset 16 endOffset 17 width 5.33: "i"
+            chunk 1 (middle anchor) text run 18 at (427.45,166.17) startOffset 17 endOffset 18 width 7.99: "r"
+            chunk 1 (middle anchor) text run 19 at (434.48,173.27) startOffset 18 endOffset 19 width 12.00: "c"
+            chunk 1 (middle anchor) text run 20 at (439.98,179.96) startOffset 19 endOffset 20 width 5.33: "l"
+            chunk 1 (middle anchor) text run 21 at (445.24,187.68) startOffset 20 endOffset 21 width 13.35: "e"
+            chunk 1 (middle anchor) text run 22 at (450.05,196.45) startOffset 21 endOffset 22 width 6.67: "!"
index ccab455..58bffff 100644 (file)
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (149,249) size 502x169
+  RenderSVGRoot {svg} at (121,221) size 558x225
     RenderSVGContainer {g} at (0,0) size 0x0
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGRect {rect} at (150,250) size 167x167 [fill={[type=SOLID] [color=#000000]}] [x=90.00] [y=150.00] [width=100.00] [height=100.00]
       RenderSVGEllipse {circle} at (483,250) size 167x167 [fill={[type=SOLID] [color=#000000]}] [cx=340.00] [cy=200.00] [r=50.00]
-    RenderSVGContainer {g} at (149,249) size 502x169
+    RenderSVGContainer {g} at (121,221) size 558x225
       RenderSVGContainer {use} at (149,249) size 169x169
         RenderSVGRect {rect} at (149,249) size 169x169 [stroke={[type=SOLID] [color=#ADD8E6]}] [x=90.00] [y=150.00] [width=100.00] [height=100.00]
-      RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 0x0
-          RenderSVGInlineText {#text} at (0,0) size 0x0
+      RenderSVGText {text} at (72,132) size 136x136 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 135x135
+          RenderSVGInlineText {#text} at (0,0) size 135x135
+            chunk 1 text run 1 at (115.01,150.00) startOffset 0 endOffset 1 width 10.01: "L"
+            chunk 1 text run 2 at (125.02,150.00) startOffset 1 endOffset 2 width 10.01: "o"
+            chunk 1 text run 3 at (133.02,150.00) startOffset 2 endOffset 3 width 5.99: "r"
+            chunk 1 text run 4 at (141.02,150.00) startOffset 3 endOffset 4 width 10.01: "e"
+            chunk 1 text run 5 at (153.52,150.00) startOffset 4 endOffset 5 width 14.99: "m"
+            chunk 1 text run 6 at (163.52,150.00) startOffset 5 endOffset 6 width 5.00: " "
+            chunk 1 text run 7 at (168.02,150.00) startOffset 6 endOffset 7 width 4.00: "i"
+            chunk 1 text run 8 at (174.97,150.62) startOffset 7 endOffset 8 width 10.01: "p"
+            chunk 1 text run 9 at (183.28,155.05) startOffset 8 endOffset 9 width 9.00: "s"
+            chunk 1 text run 10 at (188.66,162.78) startOffset 9 endOffset 10 width 10.01: "u"
+            chunk 1 text run 11 at (190.00,175.12) startOffset 10 endOffset 11 width 14.99: "m"
+            chunk 1 text run 12 at (190.00,185.12) startOffset 11 endOffset 12 width 5.00: " "
+            chunk 1 text run 13 at (190.00,192.62) startOffset 12 endOffset 13 width 10.01: "d"
+            chunk 1 text run 14 at (190.00,202.63) startOffset 13 endOffset 14 width 10.01: "o"
+            chunk 1 text run 15 at (190.00,209.64) startOffset 14 endOffset 15 width 4.00: "l"
+            chunk 1 text run 16 at (190.00,216.64) startOffset 15 endOffset 16 width 10.01: "o"
+            chunk 1 text run 17 at (190.00,224.64) startOffset 16 endOffset 17 width 5.99: "r"
+            chunk 1 text run 18 at (190.00,230.14) startOffset 17 endOffset 18 width 5.00: " "
+            chunk 1 text run 19 at (188.74,236.99) startOffset 18 endOffset 19 width 9.00: "s"
+            chunk 1 text run 20 at (185.53,242.61) startOffset 19 endOffset 20 width 4.00: "i"
+            chunk 1 text run 21 at (182.32,245.75) startOffset 20 endOffset 21 width 5.00: "t"
+            chunk 1 text run 22 at (178.04,248.32) startOffset 21 endOffset 22 width 5.00: " "
+            chunk 1 text run 23 at (170.77,249.99) startOffset 22 endOffset 23 width 10.01: "a"
+            chunk 1 text run 24 at (158.27,250.00) startOffset 23 endOffset 24 width 14.99: "m"
+            chunk 1 text run 25 at (145.77,250.00) startOffset 24 endOffset 25 width 10.01: "e"
+            chunk 1 text run 26 at (138.26,250.00) startOffset 25 endOffset 26 width 5.00: "t"
+            chunk 1 text run 27 at (133.26,250.00) startOffset 26 endOffset 27 width 5.00: ","
+            chunk 1 text run 28 at (128.26,250.00) startOffset 27 endOffset 28 width 5.00: " "
+            chunk 1 text run 29 at (121.26,250.00) startOffset 28 endOffset 29 width 9.00: "c"
+            chunk 1 text run 30 at (111.75,250.00) startOffset 29 endOffset 30 width 10.01: "o"
+            chunk 1 text run 31 at (101.97,248.32) startOffset 30 endOffset 31 width 10.01: "n"
+            chunk 1 text run 32 at (94.48,242.62) startOffset 31 endOffset 32 width 9.00: "s"
+            chunk 1 text run 33 at (90.43,234.12) startOffset 32 endOffset 33 width 10.01: "e"
+            chunk 1 text run 34 at (90.00,224.65) startOffset 33 endOffset 34 width 9.00: "c"
+            chunk 1 text run 35 at (90.00,217.65) startOffset 34 endOffset 35 width 5.00: "t"
+            chunk 1 text run 36 at (90.00,210.14) startOffset 35 endOffset 36 width 10.01: "e"
+            chunk 1 text run 37 at (90.00,202.63) startOffset 36 endOffset 37 width 5.00: "t"
+            chunk 1 text run 38 at (90.00,195.13) startOffset 37 endOffset 38 width 10.01: "u"
+            chunk 1 text run 39 at (90.00,187.13) startOffset 38 endOffset 39 width 5.99: "r"
+            chunk 1 text run 40 at (90.00,181.63) startOffset 39 endOffset 40 width 5.00: " "
+            chunk 1 text run 41 at (90.00,174.12) startOffset 40 endOffset 41 width 10.01: "a"
+            chunk 1 text run 42 at (90.86,164.20) startOffset 41 endOffset 42 width 10.01: "d"
+            chunk 1 text run 43 at (94.01,157.98) startOffset 42 endOffset 43 width 4.00: "i"
+            chunk 1 text run 44 at (99.11,153.23) startOffset 43 endOffset 44 width 10.01: "p"
+            chunk 1 text run 45 at (105.52,150.50) startOffset 44 endOffset 45 width 4.00: "i"
         RenderSVGInlineText {#text} at (0,0) size 0x0
       RenderSVGContainer {use} at (482,249) size 169x169
         RenderSVGEllipse {circle} at (482,249) size 169x169 [stroke={[type=SOLID] [color=#ADD8E6]}] [cx=340.00] [cy=200.00] [r=50.00]
-      RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 0x0
-          RenderSVGInlineText {#text} at (0,0) size 0x0
+      RenderSVGText {text} at (272,132) size 136x136 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 135x135
+          RenderSVGInlineText {#text} at (0,0) size 135x135
+            chunk 1 text run 1 at (389.75,205.00) startOffset 0 endOffset 1 width 10.01: "L"
+            chunk 1 text run 2 at (387.77,214.79) startOffset 1 endOffset 2 width 10.01: "o"
+            chunk 1 text run 3 at (384.81,222.22) startOffset 2 endOffset 3 width 5.99: "r"
+            chunk 1 text run 4 at (380.69,229.07) startOffset 3 endOffset 4 width 10.01: "e"
+            chunk 1 text run 5 at (372.23,238.23) startOffset 4 endOffset 5 width 14.99: "m"
+            chunk 1 text run 6 at (364.00,243.87) startOffset 5 endOffset 6 width 5.00: " "
+            chunk 1 text run 7 at (359.96,245.86) startOffset 6 endOffset 7 width 4.00: "i"
+            chunk 1 text run 8 at (353.36,248.19) startOffset 7 endOffset 8 width 10.01: "p"
+            chunk 1 text run 9 at (344.02,249.84) startOffset 8 endOffset 9 width 9.00: "s"
+            chunk 1 text run 10 at (334.53,249.70) startOffset 9 endOffset 10 width 10.01: "u"
+            chunk 1 text run 11 at (322.40,246.81) startOffset 10 endOffset 11 width 14.99: "m"
+            chunk 1 text run 12 at (313.45,242.38) startOffset 11 endOffset 12 width 5.00: " "
+            chunk 1 text run 13 at (307.42,237.93) startOffset 12 endOffset 13 width 10.01: "d"
+            chunk 1 text run 14 at (300.53,230.69) startOffset 13 endOffset 14 width 10.01: "o"
+            chunk 1 text run 15 at (296.62,224.88) startOffset 14 endOffset 15 width 4.00: "l"
+            chunk 1 text run 16 at (293.57,218.58) startOffset 15 endOffset 16 width 10.01: "o"
+            chunk 1 text run 17 at (291.20,210.95) startOffset 16 endOffset 17 width 5.99: "r"
+            chunk 1 text run 18 at (290.30,205.53) startOffset 17 endOffset 18 width 5.00: " "
+            chunk 1 text run 19 at (290.02,198.54) startOffset 18 endOffset 19 width 9.00: "s"
+            chunk 1 text run 20 at (290.63,192.07) startOffset 19 endOffset 20 width 4.00: "i"
+            chunk 1 text run 21 at (291.53,187.67) startOffset 20 endOffset 21 width 5.00: "t"
+            chunk 1 text run 22 at (293.00,182.89) startOffset 21 endOffset 22 width 5.00: " "
+            chunk 1 text run 23 at (296.10,176.06) startOffset 22 endOffset 23 width 10.01: "a"
+            chunk 1 text run 24 at (303.39,165.94) startOffset 23 endOffset 24 width 14.99: "m"
+            chunk 1 text run 25 at (312.95,157.94) startOffset 24 endOffset 25 width 10.01: "e"
+            chunk 1 text run 26 at (319.54,154.36) startOffset 25 endOffset 26 width 5.00: "t"
+            chunk 1 text run 27 at (324.20,152.55) startOffset 26 endOffset 27 width 5.00: ","
+            chunk 1 text run 28 at (329.02,151.21) startOffset 27 endOffset 28 width 5.00: " "
+            chunk 1 text run 29 at (335.93,150.16) startOffset 28 endOffset 29 width 9.00: "c"
+            chunk 1 text run 30 at (345.42,150.29) startOffset 29 endOffset 30 width 10.01: "o"
+            chunk 1 text run 31 at (355.20,152.35) startOffset 30 endOffset 31 width 10.01: "n"
+            chunk 1 text run 32 at (363.93,156.09) startOffset 31 endOffset 32 width 9.00: "s"
+            chunk 1 text run 33 at (371.79,161.41) startOffset 32 endOffset 33 width 10.01: "e"
+            chunk 1 text run 34 at (378.51,168.11) startOffset 33 endOffset 34 width 9.00: "c"
+            chunk 1 text run 35 at (382.59,173.79) startOffset 34 endOffset 35 width 5.00: "t"
+            chunk 1 text run 36 at (386.03,180.45) startOffset 35 endOffset 36 width 10.01: "e"
+            chunk 1 text run 37 at (388.44,187.55) startOffset 36 endOffset 37 width 5.00: "t"
+            chunk 1 text run 38 at (389.75,194.94) startOffset 37 endOffset 38 width 10.01: "u"
         RenderSVGInlineText {#text} at (0,0) size 0x0
index f4dc159..174a14d 100644 (file)
@@ -55,39 +55,33 @@ layer at (0,0) size 800x600
             chunk 1 text run 1 at (270.00,50.00) startOffset 0 endOffset 17 width 113.78: "pathLength=\"100\":"
         RenderSVGContainer {use} at (500,133) size 167x84
           RenderSVGPath {path} at (500,133) size 167x84 [fill={[type=SOLID] [color=#008000]}] [data="M 300 80 L 400 80 L 400 130 L 300 130 L 300 80"]
-        RenderSVGText {text} at (315,67) size 98x76 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 97x75
-            RenderSVGInlineText {#text} at (0,0) size 97x75
-              chunk 1 text run 1 at (354.21,80.00) startOffset 0 endOffset 1 width 8.43: "T"
-              chunk 1 text run 2 at (362.27,80.00) startOffset 1 endOffset 2 width 7.67: "h"
-              chunk 1 text run 3 at (369.94,80.00) startOffset 2 endOffset 3 width 7.67: "e"
-              chunk 1 text run 4 at (375.70,80.00) startOffset 3 endOffset 4 width 3.83: " "
-              chunk 1 text run 5 at (379.53,80.00) startOffset 4 endOffset 5 width 3.83: "t"
-              chunk 1 text run 6 at (385.29,80.00) startOffset 5 endOffset 6 width 7.67: "e"
-              chunk 1 text run 7 at (392.57,80.00) startOffset 6 endOffset 7 width 6.90: "x"
-              chunk 1 text run 8 at (397.94,80.00) startOffset 7 endOffset 8 width 3.83: "t"
-              chunk 1 text run 9 at (400.00,81.77) startOffset 8 endOffset 9 width 3.83: " "
-              chunk 1 text run 10 at (400.00,87.53) startOffset 9 endOffset 10 width 7.67: "g"
-              chunk 1 text run 11 at (400.00,95.20) startOffset 10 endOffset 11 width 7.67: "o"
-              chunk 1 text run 12 at (400.00,102.88) startOffset 11 endOffset 12 width 7.67: "e"
-              chunk 1 text run 13 at (400.00,110.17) startOffset 12 endOffset 13 width 6.90: "s"
-              chunk 1 text run 14 at (400.00,115.53) startOffset 13 endOffset 14 width 3.83: " "
-              chunk 1 text run 15 at (400.00,121.29) startOffset 14 endOffset 15 width 7.67: "a"
-              chunk 1 text run 16 at (400.00,127.42) startOffset 15 endOffset 16 width 4.60: "r"
-              chunk 1 text run 17 at (396.44,130.00) startOffset 16 endOffset 17 width 7.67: "o"
-              chunk 1 text run 18 at (388.77,130.00) startOffset 17 endOffset 18 width 7.67: "u"
-              chunk 1 text run 19 at (381.09,130.00) startOffset 18 endOffset 19 width 7.67: "n"
-              chunk 1 text run 20 at (373.42,130.00) startOffset 19 endOffset 20 width 7.67: "d"
-              chunk 1 text run 21 at (367.66,130.00) startOffset 20 endOffset 21 width 3.83: " "
-              chunk 1 text run 22 at (363.83,130.00) startOffset 21 endOffset 22 width 3.83: "t"
-              chunk 1 text run 23 at (358.08,130.00) startOffset 22 endOffset 23 width 7.67: "h"
-              chunk 1 text run 24 at (350.40,130.00) startOffset 23 endOffset 24 width 7.67: "e"
-              chunk 1 text run 25 at (344.65,130.00) startOffset 24 endOffset 25 width 3.83: " "
-              chunk 1 text run 26 at (340.43,130.00) startOffset 25 endOffset 26 width 4.60: "r"
-              chunk 1 text run 27 at (334.30,130.00) startOffset 26 endOffset 27 width 7.67: "e"
-              chunk 1 text run 28 at (327.01,130.00) startOffset 27 endOffset 28 width 6.90: "c"
-              chunk 1 text run 29 at (321.64,130.00) startOffset 28 endOffset 29 width 3.83: "t"
-              chunk 1 text run 30 at (317.81,130.00) startOffset 29 endOffset 30 width 3.83: "."
+        RenderSVGText {text} at (287,76) size 113x67 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 113x66
+            RenderSVGInlineText {#text} at (0,0) size 113x66
+              chunk 1 text run 1 at (395.79,130.00) startOffset 0 endOffset 1 width 8.43: "T"
+              chunk 1 text run 2 at (387.73,130.00) startOffset 1 endOffset 2 width 7.67: "h"
+              chunk 1 text run 3 at (380.06,130.00) startOffset 2 endOffset 3 width 7.67: "e"
+              chunk 1 text run 4 at (374.30,130.00) startOffset 3 endOffset 4 width 3.83: " "
+              chunk 1 text run 5 at (370.47,130.00) startOffset 4 endOffset 5 width 3.83: "t"
+              chunk 1 text run 6 at (364.72,130.00) startOffset 5 endOffset 6 width 7.67: "e"
+              chunk 1 text run 7 at (357.43,130.00) startOffset 6 endOffset 7 width 6.90: "x"
+              chunk 1 text run 8 at (352.06,130.00) startOffset 7 endOffset 8 width 3.83: "t"
+              chunk 1 text run 9 at (348.23,130.00) startOffset 8 endOffset 9 width 3.83: " "
+              chunk 1 text run 10 at (342.47,130.00) startOffset 9 endOffset 10 width 7.67: "g"
+              chunk 1 text run 11 at (334.80,130.00) startOffset 10 endOffset 11 width 7.67: "o"
+              chunk 1 text run 12 at (327.12,130.00) startOffset 11 endOffset 12 width 7.67: "e"
+              chunk 1 text run 13 at (319.83,130.00) startOffset 12 endOffset 13 width 6.90: "s"
+              chunk 1 text run 14 at (314.47,130.00) startOffset 13 endOffset 14 width 3.83: " "
+              chunk 1 text run 15 at (308.71,130.00) startOffset 14 endOffset 15 width 7.67: "a"
+              chunk 1 text run 16 at (302.58,130.00) startOffset 15 endOffset 16 width 4.60: "r"
+              chunk 1 text run 17 at (300.00,126.44) startOffset 16 endOffset 17 width 7.67: "o"
+              chunk 1 text run 18 at (300.00,118.77) startOffset 17 endOffset 18 width 7.67: "u"
+              chunk 1 text run 19 at (300.00,111.09) startOffset 18 endOffset 19 width 7.67: "n"
+              chunk 1 text run 20 at (300.00,103.42) startOffset 19 endOffset 20 width 7.67: "d"
+              chunk 1 text run 21 at (300.00,97.66) startOffset 20 endOffset 21 width 3.83: " "
+              chunk 1 text run 22 at (300.00,93.83) startOffset 21 endOffset 22 width 3.83: "t"
+              chunk 1 text run 23 at (300.00,88.08) startOffset 22 endOffset 23 width 7.67: "h"
+              chunk 1 text run 24 at (300.00,80.40) startOffset 23 endOffset 24 width 7.67: "e"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGContainer {g} at (16,262) size 580x227 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,-10.00)}]
           RenderSVGText {text} at (10,167) size 96x17 contains 1 chunk(s)
index eb1f21f..536f3fd 100644 (file)
@@ -1,12 +1,12 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 300x200
-  RenderSVGRoot {svg} at (49,24) size 207x133
+  RenderSVGRoot {svg} at (43,24) size 213x133
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
     RenderSVGContainer {g} at (50,24) size 206x33
       RenderSVGContainer {use} at (50,49) size 200x2
-        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (50,24) size 206x33 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 206x32
           RenderSVGInlineText {#text} at (0,0) size 206x32
@@ -26,32 +26,36 @@ layer at (0,0) size 300x200
             chunk 1 text run 14 at (229.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
             chunk 1 text run 15 at (247.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-    RenderSVGContainer {g} at (50,99) size 200x2 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
+    RenderSVGContainer {g} at (50,74) size 200x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
       RenderSVGContainer {use} at (50,99) size 200x2
-        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
-      RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 0x0
-          RenderSVGInlineText {#text} at (0,0) size 0x0
+        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
+      RenderSVGText {text} at (150,24) size 94x33 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 94x32
+          RenderSVGInlineText {#text} at (0,0) size 94x32
+            chunk 1 text run 1 at (158.55,50.00) startOffset 0 endOffset 1 width 17.10: "T"
+            chunk 1 text run 2 at (174.89,50.00) startOffset 1 endOffset 2 width 15.57: "h"
+            chunk 1 text run 3 at (190.46,50.00) startOffset 2 endOffset 3 width 15.57: "e"
+            chunk 1 text run 4 at (202.14,50.00) startOffset 3 endOffset 4 width 7.78: " "
+            chunk 1 text run 5 at (213.81,50.00) startOffset 4 endOffset 5 width 15.57: "q"
+            chunk 1 text run 6 at (229.39,50.00) startOffset 5 endOffset 6 width 15.57: "u"
+            chunk 1 text run 7 at (240.28,50.00) startOffset 6 endOffset 7 width 6.22: "i"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-    RenderSVGContainer {g} at (49,124) size 206x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
+    RenderSVGContainer {g} at (43,124) size 207x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
       RenderSVGContainer {use} at (50,149) size 200x2
-        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
-      RenderSVGText {text} at (49,24) size 206x33 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 206x32
-          RenderSVGInlineText {#text} at (0,0) size 206x32
-            chunk 1 text run 1 at (57.55,50.00) startOffset 0 endOffset 1 width 17.10: "T"
-            chunk 1 text run 2 at (73.89,50.00) startOffset 1 endOffset 2 width 15.57: "h"
-            chunk 1 text run 3 at (89.46,50.00) startOffset 2 endOffset 3 width 15.57: "e"
-            chunk 1 text run 4 at (101.14,50.00) startOffset 3 endOffset 4 width 7.78: " "
-            chunk 1 text run 5 at (112.81,50.00) startOffset 4 endOffset 5 width 15.57: "q"
-            chunk 1 text run 6 at (128.39,50.00) startOffset 5 endOffset 6 width 15.57: "u"
-            chunk 1 text run 7 at (139.28,50.00) startOffset 6 endOffset 7 width 6.22: "i"
-            chunk 1 text run 8 at (149.39,50.00) startOffset 7 endOffset 8 width 14.00: "c"
-            chunk 1 text run 9 at (163.39,50.00) startOffset 8 endOffset 9 width 14.00: "k"
-            chunk 1 text run 10 at (174.28,50.00) startOffset 9 endOffset 10 width 7.78: " "
-            chunk 1 text run 11 at (185.96,50.00) startOffset 10 endOffset 11 width 15.57: "b"
-            chunk 1 text run 12 at (198.41,50.00) startOffset 11 endOffset 12 width 9.32: "r"
-            chunk 1 text run 13 at (210.85,50.00) startOffset 12 endOffset 13 width 15.57: "o"
-            chunk 1 text run 14 at (228.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
-            chunk 1 text run 15 at (246.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
+        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
+      RenderSVGText {text} at (43,24) size 158x33 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 158x32
+          RenderSVGInlineText {#text} at (0,0) size 158x32
+            chunk 1 text run 1 at (50.39,50.00) startOffset 7 endOffset 8 width 14.00: "c"
+            chunk 1 text run 2 at (64.39,50.00) startOffset 8 endOffset 9 width 14.00: "k"
+            chunk 1 text run 3 at (75.28,50.00) startOffset 9 endOffset 10 width 7.78: " "
+            chunk 1 text run 4 at (86.96,50.00) startOffset 10 endOffset 11 width 15.57: "b"
+            chunk 1 text run 5 at (99.41,50.00) startOffset 11 endOffset 12 width 9.32: "r"
+            chunk 1 text run 6 at (111.85,50.00) startOffset 12 endOffset 13 width 15.57: "o"
+            chunk 1 text run 7 at (129.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
+            chunk 1 text run 8 at (147.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
+            chunk 1 text run 9 at (159.32,50.00) startOffset 15 endOffset 16 width 7.78: " "
+            chunk 1 text run 10 at (167.10,50.00) startOffset 16 endOffset 17 width 7.78: "f"
+            chunk 1 text run 11 at (178.78,50.00) startOffset 17 endOffset 18 width 15.57: "o"
+            chunk 1 text run 12 at (193.56,50.00) startOffset 18 endOffset 19 width 14.00: "x"
         RenderSVGInlineText {#text} at (0,0) size 0x0
index 826e7b0..536f3fd 100644 (file)
@@ -1,12 +1,12 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 300x200
-  RenderSVGRoot {svg} at (49,24) size 207x133
+  RenderSVGRoot {svg} at (43,24) size 213x133
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
     RenderSVGContainer {g} at (50,24) size 206x33
       RenderSVGContainer {use} at (50,49) size 200x2
-        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (50,24) size 206x33 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 206x32
           RenderSVGInlineText {#text} at (0,0) size 206x32
@@ -28,7 +28,7 @@ layer at (0,0) size 300x200
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {g} at (50,74) size 200x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
       RenderSVGContainer {use} at (50,99) size 200x2
-        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (150,24) size 94x33 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 94x32
           RenderSVGInlineText {#text} at (0,0) size 94x32
@@ -40,25 +40,22 @@ layer at (0,0) size 300x200
             chunk 1 text run 6 at (229.39,50.00) startOffset 5 endOffset 6 width 15.57: "u"
             chunk 1 text run 7 at (240.28,50.00) startOffset 6 endOffset 7 width 6.22: "i"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-    RenderSVGContainer {g} at (49,124) size 206x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
+    RenderSVGContainer {g} at (43,124) size 207x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
       RenderSVGContainer {use} at (50,149) size 200x2
-        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
-      RenderSVGText {text} at (49,24) size 206x33 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 206x32
-          RenderSVGInlineText {#text} at (0,0) size 206x32
-            chunk 1 text run 1 at (58.05,50.00) startOffset 0 endOffset 1 width 17.10: "T"
-            chunk 1 text run 2 at (74.39,50.00) startOffset 1 endOffset 2 width 15.57: "h"
-            chunk 1 text run 3 at (89.96,50.00) startOffset 2 endOffset 3 width 15.57: "e"
-            chunk 1 text run 4 at (101.64,50.00) startOffset 3 endOffset 4 width 7.78: " "
-            chunk 1 text run 5 at (113.31,50.00) startOffset 4 endOffset 5 width 15.57: "q"
-            chunk 1 text run 6 at (128.89,50.00) startOffset 5 endOffset 6 width 15.57: "u"
-            chunk 1 text run 7 at (139.78,50.00) startOffset 6 endOffset 7 width 6.22: "i"
-            chunk 1 text run 8 at (149.89,50.00) startOffset 7 endOffset 8 width 14.00: "c"
-            chunk 1 text run 9 at (163.89,50.00) startOffset 8 endOffset 9 width 14.00: "k"
-            chunk 1 text run 10 at (174.78,50.00) startOffset 9 endOffset 10 width 7.78: " "
-            chunk 1 text run 11 at (186.46,50.00) startOffset 10 endOffset 11 width 15.57: "b"
-            chunk 1 text run 12 at (198.91,50.00) startOffset 11 endOffset 12 width 9.32: "r"
-            chunk 1 text run 13 at (211.35,50.00) startOffset 12 endOffset 13 width 15.57: "o"
-            chunk 1 text run 14 at (229.25,50.00) startOffset 13 endOffset 14 width 20.22: "w"
-            chunk 1 text run 15 at (247.15,50.00) startOffset 14 endOffset 15 width 15.57: "n"
+        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
+      RenderSVGText {text} at (43,24) size 158x33 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 158x32
+          RenderSVGInlineText {#text} at (0,0) size 158x32
+            chunk 1 text run 1 at (50.39,50.00) startOffset 7 endOffset 8 width 14.00: "c"
+            chunk 1 text run 2 at (64.39,50.00) startOffset 8 endOffset 9 width 14.00: "k"
+            chunk 1 text run 3 at (75.28,50.00) startOffset 9 endOffset 10 width 7.78: " "
+            chunk 1 text run 4 at (86.96,50.00) startOffset 10 endOffset 11 width 15.57: "b"
+            chunk 1 text run 5 at (99.41,50.00) startOffset 11 endOffset 12 width 9.32: "r"
+            chunk 1 text run 6 at (111.85,50.00) startOffset 12 endOffset 13 width 15.57: "o"
+            chunk 1 text run 7 at (129.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
+            chunk 1 text run 8 at (147.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
+            chunk 1 text run 9 at (159.32,50.00) startOffset 15 endOffset 16 width 7.78: " "
+            chunk 1 text run 10 at (167.10,50.00) startOffset 16 endOffset 17 width 7.78: "f"
+            chunk 1 text run 11 at (178.78,50.00) startOffset 17 endOffset 18 width 15.57: "o"
+            chunk 1 text run 12 at (193.56,50.00) startOffset 18 endOffset 19 width 14.00: "x"
         RenderSVGInlineText {#text} at (0,0) size 0x0
index eb1f21f..ff30f7e 100644 (file)
@@ -1,7 +1,7 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 300x200
-  RenderSVGRoot {svg} at (49,24) size 207x133
+  RenderSVGRoot {svg} at (49,24) size 208x133
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
     RenderSVGContainer {g} at (50,24) size 206x33
@@ -26,12 +26,27 @@ layer at (0,0) size 300x200
             chunk 1 text run 14 at (229.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
             chunk 1 text run 15 at (247.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-    RenderSVGContainer {g} at (50,99) size 200x2 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
+    RenderSVGContainer {g} at (50,74) size 207x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
       RenderSVGContainer {use} at (50,99) size 200x2
         RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
-      RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 0x0
-          RenderSVGInlineText {#text} at (0,0) size 0x0
+      RenderSVGText {text} at (51,24) size 206x33 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 206x32
+          RenderSVGInlineText {#text} at (0,0) size 206x32
+            chunk 1 text run 1 at (59.55,50.00) startOffset 0 endOffset 1 width 17.10: "T"
+            chunk 1 text run 2 at (75.89,50.00) startOffset 1 endOffset 2 width 15.57: "h"
+            chunk 1 text run 3 at (91.46,50.00) startOffset 2 endOffset 3 width 15.57: "e"
+            chunk 1 text run 4 at (103.14,50.00) startOffset 3 endOffset 4 width 7.78: " "
+            chunk 1 text run 5 at (114.81,50.00) startOffset 4 endOffset 5 width 15.57: "q"
+            chunk 1 text run 6 at (130.39,50.00) startOffset 5 endOffset 6 width 15.57: "u"
+            chunk 1 text run 7 at (141.28,50.00) startOffset 6 endOffset 7 width 6.22: "i"
+            chunk 1 text run 8 at (151.39,50.00) startOffset 7 endOffset 8 width 14.00: "c"
+            chunk 1 text run 9 at (165.39,50.00) startOffset 8 endOffset 9 width 14.00: "k"
+            chunk 1 text run 10 at (176.28,50.00) startOffset 9 endOffset 10 width 7.78: " "
+            chunk 1 text run 11 at (187.96,50.00) startOffset 10 endOffset 11 width 15.57: "b"
+            chunk 1 text run 12 at (200.41,50.00) startOffset 11 endOffset 12 width 9.32: "r"
+            chunk 1 text run 13 at (212.85,50.00) startOffset 12 endOffset 13 width 15.57: "o"
+            chunk 1 text run 14 at (230.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
+            chunk 1 text run 15 at (248.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {g} at (49,124) size 206x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
       RenderSVGContainer {use} at (50,149) size 200x2
index 826e7b0..05cb770 100644 (file)
@@ -1,7 +1,7 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 300x200
-  RenderSVGRoot {svg} at (49,24) size 207x133
+  RenderSVGRoot {svg} at (43,24) size 213x133
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
     RenderSVGContainer {g} at (50,24) size 206x33
@@ -40,25 +40,22 @@ layer at (0,0) size 300x200
             chunk 1 text run 6 at (229.39,50.00) startOffset 5 endOffset 6 width 15.57: "u"
             chunk 1 text run 7 at (240.28,50.00) startOffset 6 endOffset 7 width 6.22: "i"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-    RenderSVGContainer {g} at (49,124) size 206x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
+    RenderSVGContainer {g} at (43,124) size 207x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
       RenderSVGContainer {use} at (50,149) size 200x2
         RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
-      RenderSVGText {text} at (49,24) size 206x33 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 206x32
-          RenderSVGInlineText {#text} at (0,0) size 206x32
-            chunk 1 text run 1 at (58.05,50.00) startOffset 0 endOffset 1 width 17.10: "T"
-            chunk 1 text run 2 at (74.39,50.00) startOffset 1 endOffset 2 width 15.57: "h"
-            chunk 1 text run 3 at (89.96,50.00) startOffset 2 endOffset 3 width 15.57: "e"
-            chunk 1 text run 4 at (101.64,50.00) startOffset 3 endOffset 4 width 7.78: " "
-            chunk 1 text run 5 at (113.31,50.00) startOffset 4 endOffset 5 width 15.57: "q"
-            chunk 1 text run 6 at (128.89,50.00) startOffset 5 endOffset 6 width 15.57: "u"
-            chunk 1 text run 7 at (139.78,50.00) startOffset 6 endOffset 7 width 6.22: "i"
-            chunk 1 text run 8 at (149.89,50.00) startOffset 7 endOffset 8 width 14.00: "c"
-            chunk 1 text run 9 at (163.89,50.00) startOffset 8 endOffset 9 width 14.00: "k"
-            chunk 1 text run 10 at (174.78,50.00) startOffset 9 endOffset 10 width 7.78: " "
-            chunk 1 text run 11 at (186.46,50.00) startOffset 10 endOffset 11 width 15.57: "b"
-            chunk 1 text run 12 at (198.91,50.00) startOffset 11 endOffset 12 width 9.32: "r"
-            chunk 1 text run 13 at (211.35,50.00) startOffset 12 endOffset 13 width 15.57: "o"
-            chunk 1 text run 14 at (229.25,50.00) startOffset 13 endOffset 14 width 20.22: "w"
-            chunk 1 text run 15 at (247.15,50.00) startOffset 14 endOffset 15 width 15.57: "n"
+      RenderSVGText {text} at (43,24) size 158x33 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 158x32
+          RenderSVGInlineText {#text} at (0,0) size 158x32
+            chunk 1 text run 1 at (50.39,50.00) startOffset 7 endOffset 8 width 14.00: "c"
+            chunk 1 text run 2 at (64.39,50.00) startOffset 8 endOffset 9 width 14.00: "k"
+            chunk 1 text run 3 at (75.28,50.00) startOffset 9 endOffset 10 width 7.78: " "
+            chunk 1 text run 4 at (86.96,50.00) startOffset 10 endOffset 11 width 15.57: "b"
+            chunk 1 text run 5 at (99.41,50.00) startOffset 11 endOffset 12 width 9.32: "r"
+            chunk 1 text run 6 at (111.85,50.00) startOffset 12 endOffset 13 width 15.57: "o"
+            chunk 1 text run 7 at (129.75,50.00) startOffset 13 endOffset 14 width 20.22: "w"
+            chunk 1 text run 8 at (147.65,50.00) startOffset 14 endOffset 15 width 15.57: "n"
+            chunk 1 text run 9 at (159.32,50.00) startOffset 15 endOffset 16 width 7.78: " "
+            chunk 1 text run 10 at (167.10,50.00) startOffset 16 endOffset 17 width 7.78: "f"
+            chunk 1 text run 11 at (178.78,50.00) startOffset 17 endOffset 18 width 15.57: "o"
+            chunk 1 text run 12 at (193.56,50.00) startOffset 18 endOffset 19 width 14.00: "x"
         RenderSVGInlineText {#text} at (0,0) size 0x0
index 6562049..bfa5cd3 100644 (file)
@@ -1,5 +1,5 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 300x200
-  RenderSVGRoot {svg} at (50,99) size 199x2
-    RenderSVGPath {line} at (50,99) size 199x2 [stroke={[type=SOLID] [color=#0000FF] [dash array={3.00, 1.00}]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=100.00] [x2=250.00] [y2=100.00]
+  RenderSVGRoot {svg} at (50,99) size 200x2
+    RenderSVGPath {line} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#0000FF] [dash array={3.00, 1.00}] [path length=25.00]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=100.00] [x2=250.00] [y2=100.00]
index 47975e4..440ec15 100644 (file)
@@ -5,4 +5,4 @@ layer at (0,0) size 800x600
     RenderSVGContainer {g} at (0,0) size 0x0
     RenderSVGContainer {g} at (29,229) size 742x342
       RenderSVGRect {rect} at (29,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={50.00}]}] [x=20.00] [y=140.00] [width=200.00] [height=200.00]
-      RenderSVGRect {rect} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}]}] [x=260.00] [y=140.00] [width=200.00] [height=200.00]
+      RenderSVGRect {rect} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}] [path length=4.00]}] [x=260.00] [y=140.00] [width=200.00] [height=200.00]
index 30e367d..9b372dd 100644 (file)
@@ -5,4 +5,4 @@ layer at (0,0) size 800x600
     RenderSVGContainer {g} at (0,0) size 0x0
     RenderSVGContainer {g} at (29,229) size 742x342
       RenderSVGEllipse {circle} at (29,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={39.27}]}] [cx=120.00] [cy=240.00] [r=100.00]
-      RenderSVGEllipse {circle} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}]}] [cx=360.00] [cy=240.00] [r=100.00]
+      RenderSVGEllipse {circle} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}] [path length=4.00]}] [cx=360.00] [cy=240.00] [r=100.00]
index 27f2d8e..0911ea7 100644 (file)
@@ -1,14 +1,58 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,0) size 768x568
+  RenderSVGRoot {svg} at (13,194) size 775x374
     RenderSVGContainer {g} at (0,0) size 0x0
-    RenderSVGContainer {g} at (0,0) size 768x568
+    RenderSVGContainer {g} at (13,194) size 775x374
       RenderSVGEllipse {circle} at (32,232) size 336x336 [stroke={[type=SOLID] [color=#000000]}] [cx=120.00] [cy=240.00] [r=100.00]
-      RenderSVGEllipse {circle} at (432,232) size 336x336 [stroke={[type=SOLID] [color=#000000]}] [cx=360.00] [cy=240.00] [r=100.00]
-      RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 0x0
-          RenderSVGInlineText {#text} at (0,0) size 0x0
-      RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 0x0
-          RenderSVGInlineText {#text} at (0,0) size 0x0
+      RenderSVGEllipse {circle} at (432,232) size 336x336 [stroke={[type=SOLID] [color=#000000] [path length=4.00]}] [cx=360.00] [cy=240.00] [r=100.00]
+      RenderSVGText {text} at (9,117) size 223x86 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 223x85
+          RenderSVGInlineText {#text} at (0,0) size 223x85
+            chunk 1 (middle anchor) text run 1 at (32.33,191.87) startOffset 0 endOffset 1 width 16.01: "S"
+            chunk 1 (middle anchor) text run 2 at (40.32,179.57) startOffset 1 endOffset 2 width 13.35: "o"
+            chunk 1 (middle anchor) text run 3 at (51.45,167.19) startOffset 2 endOffset 3 width 19.99: "m"
+            chunk 1 (middle anchor) text run 4 at (64.48,156.82) startOffset 3 endOffset 4 width 13.35: "e"
+            chunk 1 (middle anchor) text run 5 at (73.06,151.68) startOffset 4 endOffset 5 width 6.67: " "
+            chunk 1 (middle anchor) text run 6 at (79.05,148.74) startOffset 5 endOffset 6 width 6.67: "t"
+            chunk 1 (middle anchor) text run 7 at (88.37,145.11) startOffset 6 endOffset 7 width 13.35: "e"
+            chunk 1 (middle anchor) text run 8 at (100.61,141.88) startOffset 7 endOffset 8 width 12.00: "x"
+            chunk 1 (middle anchor) text run 9 at (109.84,140.51) startOffset 8 endOffset 9 width 6.67: "t"
+            chunk 1 (middle anchor) text run 10 at (116.49,140.06) startOffset 9 endOffset 10 width 6.67: " "
+            chunk 1 (middle anchor) text run 11 at (126.50,140.21) startOffset 10 endOffset 11 width 13.35: "o"
+            chunk 1 (middle anchor) text run 12 at (139.72,141.94) startOffset 11 endOffset 12 width 13.35: "n"
+            chunk 1 (middle anchor) text run 13 at (149.42,144.40) startOffset 12 endOffset 13 width 6.67: " "
+            chunk 1 (middle anchor) text run 14 at (158.82,147.81) startOffset 13 endOffset 14 width 13.35: "a"
+            chunk 1 (middle anchor) text run 15 at (167.83,152.16) startOffset 14 endOffset 15 width 6.67: " "
+            chunk 1 (middle anchor) text run 16 at (175.80,157.01) startOffset 15 endOffset 16 width 12.00: "c"
+            chunk 1 (middle anchor) text run 17 at (182.77,162.15) startOffset 16 endOffset 17 width 5.33: "i"
+            chunk 1 (middle anchor) text run 18 at (187.81,166.51) startOffset 17 endOffset 18 width 7.99: "r"
+            chunk 1 (middle anchor) text run 19 at (194.81,173.64) startOffset 18 endOffset 19 width 12.00: "c"
+            chunk 1 (middle anchor) text run 20 at (200.28,180.36) startOffset 19 endOffset 20 width 5.33: "l"
+            chunk 1 (middle anchor) text run 21 at (205.50,188.10) startOffset 20 endOffset 21 width 13.35: "e"
+            chunk 1 (middle anchor) text run 22 at (210.26,196.90) startOffset 21 endOffset 22 width 6.67: "!"
+      RenderSVGText {text} at (248,117) size 224x85 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 223x85
+          RenderSVGInlineText {#text} at (0,0) size 223x85
+            chunk 1 (middle anchor) text run 1 at (272.09,192.30) startOffset 0 endOffset 1 width 16.01: "S"
+            chunk 1 (middle anchor) text run 2 at (280.02,179.96) startOffset 1 endOffset 2 width 13.35: "o"
+            chunk 1 (middle anchor) text run 3 at (291.09,167.53) startOffset 2 endOffset 3 width 19.99: "m"
+            chunk 1 (middle anchor) text run 4 at (304.07,157.09) startOffset 3 endOffset 4 width 13.35: "e"
+            chunk 1 (middle anchor) text run 5 at (312.62,151.91) startOffset 4 endOffset 5 width 6.67: " "
+            chunk 1 (middle anchor) text run 6 at (318.60,148.95) startOffset 5 endOffset 6 width 6.67: "t"
+            chunk 1 (middle anchor) text run 7 at (327.90,145.26) startOffset 6 endOffset 7 width 13.35: "e"
+            chunk 1 (middle anchor) text run 8 at (340.13,141.98) startOffset 7 endOffset 8 width 12.00: "x"
+            chunk 1 (middle anchor) text run 9 at (349.35,140.56) startOffset 8 endOffset 9 width 6.67: "t"
+            chunk 1 (middle anchor) text run 10 at (356.00,140.08) startOffset 9 endOffset 10 width 6.67: " "
+            chunk 1 (middle anchor) text run 11 at (366.00,140.18) startOffset 10 endOffset 11 width 13.35: "o"
+            chunk 1 (middle anchor) text run 12 at (379.23,141.85) startOffset 11 endOffset 12 width 13.35: "n"
+            chunk 1 (middle anchor) text run 13 at (388.95,144.25) startOffset 12 endOffset 13 width 6.67: " "
+            chunk 1 (middle anchor) text run 14 at (398.36,147.62) startOffset 13 endOffset 14 width 13.35: "a"
+            chunk 1 (middle anchor) text run 15 at (407.40,151.92) startOffset 14 endOffset 15 width 6.67: " "
+            chunk 1 (middle anchor) text run 16 at (415.39,156.73) startOffset 15 endOffset 16 width 12.00: "c"
+            chunk 1 (middle anchor) text run 17 at (422.39,161.84) startOffset 16 endOffset 17 width 5.33: "i"
+            chunk 1 (middle anchor) text run 18 at (427.45,166.17) startOffset 17 endOffset 18 width 7.99: "r"
+            chunk 1 (middle anchor) text run 19 at (434.48,173.27) startOffset 18 endOffset 19 width 12.00: "c"
+            chunk 1 (middle anchor) text run 20 at (439.98,179.96) startOffset 19 endOffset 20 width 5.33: "l"
+            chunk 1 (middle anchor) text run 21 at (445.24,187.68) startOffset 20 endOffset 21 width 13.35: "e"
+            chunk 1 (middle anchor) text run 22 at (450.05,196.45) startOffset 21 endOffset 22 width 6.67: "!"
index ccab455..028b364 100644 (file)
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (149,249) size 502x169
+  RenderSVGRoot {svg} at (121,221) size 558x225
     RenderSVGContainer {g} at (0,0) size 0x0
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGRect {rect} at (150,250) size 167x167 [fill={[type=SOLID] [color=#000000]}] [x=90.00] [y=150.00] [width=100.00] [height=100.00]
       RenderSVGEllipse {circle} at (483,250) size 167x167 [fill={[type=SOLID] [color=#000000]}] [cx=340.00] [cy=200.00] [r=50.00]
-    RenderSVGContainer {g} at (149,249) size 502x169
+    RenderSVGContainer {g} at (121,221) size 558x225
       RenderSVGContainer {use} at (149,249) size 169x169
         RenderSVGRect {rect} at (149,249) size 169x169 [stroke={[type=SOLID] [color=#ADD8E6]}] [x=90.00] [y=150.00] [width=100.00] [height=100.00]
-      RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 0x0
-          RenderSVGInlineText {#text} at (0,0) size 0x0
+      RenderSVGText {text} at (72,133) size 135x134 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 134x134
+          RenderSVGInlineText {#text} at (0,0) size 134x134
+            chunk 1 text run 1 at (115.01,150.00) startOffset 0 endOffset 1 width 10.01: "L"
+            chunk 1 text run 2 at (125.02,150.00) startOffset 1 endOffset 2 width 10.01: "o"
+            chunk 1 text run 3 at (133.02,150.00) startOffset 2 endOffset 3 width 5.99: "r"
+            chunk 1 text run 4 at (141.02,150.00) startOffset 3 endOffset 4 width 10.01: "e"
+            chunk 1 text run 5 at (153.52,150.00) startOffset 4 endOffset 5 width 14.99: "m"
+            chunk 1 text run 6 at (163.52,150.00) startOffset 5 endOffset 6 width 5.00: " "
+            chunk 1 text run 7 at (168.02,150.00) startOffset 6 endOffset 7 width 4.00: "i"
+            chunk 1 text run 8 at (174.97,150.62) startOffset 7 endOffset 8 width 10.01: "p"
+            chunk 1 text run 9 at (183.28,155.05) startOffset 8 endOffset 9 width 9.00: "s"
+            chunk 1 text run 10 at (188.66,162.78) startOffset 9 endOffset 10 width 10.01: "u"
+            chunk 1 text run 11 at (190.00,175.12) startOffset 10 endOffset 11 width 14.99: "m"
+            chunk 1 text run 12 at (190.00,185.12) startOffset 11 endOffset 12 width 5.00: " "
+            chunk 1 text run 13 at (190.00,192.62) startOffset 12 endOffset 13 width 10.01: "d"
+            chunk 1 text run 14 at (190.00,202.63) startOffset 13 endOffset 14 width 10.01: "o"
+            chunk 1 text run 15 at (190.00,209.64) startOffset 14 endOffset 15 width 4.00: "l"
+            chunk 1 text run 16 at (190.00,216.64) startOffset 15 endOffset 16 width 10.01: "o"
+            chunk 1 text run 17 at (190.00,224.64) startOffset 16 endOffset 17 width 5.99: "r"
+            chunk 1 text run 18 at (190.00,230.14) startOffset 17 endOffset 18 width 5.00: " "
+            chunk 1 text run 19 at (188.74,236.99) startOffset 18 endOffset 19 width 9.00: "s"
+            chunk 1 text run 20 at (185.53,242.61) startOffset 19 endOffset 20 width 4.00: "i"
+            chunk 1 text run 21 at (182.32,245.75) startOffset 20 endOffset 21 width 5.00: "t"
+            chunk 1 text run 22 at (178.04,248.32) startOffset 21 endOffset 22 width 5.00: " "
+            chunk 1 text run 23 at (170.77,249.99) startOffset 22 endOffset 23 width 10.01: "a"
+            chunk 1 text run 24 at (158.27,250.00) startOffset 23 endOffset 24 width 14.99: "m"
+            chunk 1 text run 25 at (145.77,250.00) startOffset 24 endOffset 25 width 10.01: "e"
+            chunk 1 text run 26 at (138.26,250.00) startOffset 25 endOffset 26 width 5.00: "t"
+            chunk 1 text run 27 at (133.26,250.00) startOffset 26 endOffset 27 width 5.00: ","
+            chunk 1 text run 28 at (128.26,250.00) startOffset 27 endOffset 28 width 5.00: " "
+            chunk 1 text run 29 at (121.26,250.00) startOffset 28 endOffset 29 width 9.00: "c"
+            chunk 1 text run 30 at (111.75,250.00) startOffset 29 endOffset 30 width 10.01: "o"
+            chunk 1 text run 31 at (101.97,248.32) startOffset 30 endOffset 31 width 10.01: "n"
+            chunk 1 text run 32 at (94.48,242.62) startOffset 31 endOffset 32 width 9.00: "s"
+            chunk 1 text run 33 at (90.43,234.12) startOffset 32 endOffset 33 width 10.01: "e"
+            chunk 1 text run 34 at (90.00,224.65) startOffset 33 endOffset 34 width 9.00: "c"
+            chunk 1 text run 35 at (90.00,217.65) startOffset 34 endOffset 35 width 5.00: "t"
+            chunk 1 text run 36 at (90.00,210.14) startOffset 35 endOffset 36 width 10.01: "e"
+            chunk 1 text run 37 at (90.00,202.63) startOffset 36 endOffset 37 width 5.00: "t"
+            chunk 1 text run 38 at (90.00,195.13) startOffset 37 endOffset 38 width 10.01: "u"
+            chunk 1 text run 39 at (90.00,187.13) startOffset 38 endOffset 39 width 5.99: "r"
+            chunk 1 text run 40 at (90.00,181.63) startOffset 39 endOffset 40 width 5.00: " "
+            chunk 1 text run 41 at (90.00,174.12) startOffset 40 endOffset 41 width 10.01: "a"
+            chunk 1 text run 42 at (90.86,164.20) startOffset 41 endOffset 42 width 10.01: "d"
+            chunk 1 text run 43 at (94.01,157.98) startOffset 42 endOffset 43 width 4.00: "i"
+            chunk 1 text run 44 at (99.11,153.23) startOffset 43 endOffset 44 width 10.01: "p"
+            chunk 1 text run 45 at (105.52,150.50) startOffset 44 endOffset 45 width 4.00: "i"
         RenderSVGInlineText {#text} at (0,0) size 0x0
       RenderSVGContainer {use} at (482,249) size 169x169
         RenderSVGEllipse {circle} at (482,249) size 169x169 [stroke={[type=SOLID] [color=#ADD8E6]}] [cx=340.00] [cy=200.00] [r=50.00]
-      RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
-        RenderSVGTextPath {textPath} at (0,0) size 0x0
-          RenderSVGInlineText {#text} at (0,0) size 0x0
+      RenderSVGText {text} at (273,132) size 134x136 contains 1 chunk(s)
+        RenderSVGTextPath {textPath} at (0,0) size 134x135
+          RenderSVGInlineText {#text} at (0,0) size 134x135
+            chunk 1 text run 1 at (389.75,205.00) startOffset 0 endOffset 1 width 10.01: "L"
+            chunk 1 text run 2 at (387.77,214.79) startOffset 1 endOffset 2 width 10.01: "o"
+            chunk 1 text run 3 at (384.81,222.22) startOffset 2 endOffset 3 width 5.99: "r"
+            chunk 1 text run 4 at (380.69,229.07) startOffset 3 endOffset 4 width 10.01: "e"
+            chunk 1 text run 5 at (372.23,238.23) startOffset 4 endOffset 5 width 14.99: "m"
+            chunk 1 text run 6 at (364.00,243.87) startOffset 5 endOffset 6 width 5.00: " "
+            chunk 1 text run 7 at (359.96,245.86) startOffset 6 endOffset 7 width 4.00: "i"
+            chunk 1 text run 8 at (353.36,248.19) startOffset 7 endOffset 8 width 10.01: "p"
+            chunk 1 text run 9 at (344.02,249.84) startOffset 8 endOffset 9 width 9.00: "s"
+            chunk 1 text run 10 at (334.53,249.70) startOffset 9 endOffset 10 width 10.01: "u"
+            chunk 1 text run 11 at (322.40,246.81) startOffset 10 endOffset 11 width 14.99: "m"
+            chunk 1 text run 12 at (313.45,242.38) startOffset 11 endOffset 12 width 5.00: " "
+            chunk 1 text run 13 at (307.42,237.93) startOffset 12 endOffset 13 width 10.01: "d"
+            chunk 1 text run 14 at (300.53,230.69) startOffset 13 endOffset 14 width 10.01: "o"
+            chunk 1 text run 15 at (296.62,224.88) startOffset 14 endOffset 15 width 4.00: "l"
+            chunk 1 text run 16 at (293.57,218.58) startOffset 15 endOffset 16 width 10.01: "o"
+            chunk 1 text run 17 at (291.20,210.95) startOffset 16 endOffset 17 width 5.99: "r"
+            chunk 1 text run 18 at (290.30,205.53) startOffset 17 endOffset 18 width 5.00: " "
+            chunk 1 text run 19 at (290.02,198.54) startOffset 18 endOffset 19 width 9.00: "s"
+            chunk 1 text run 20 at (290.63,192.07) startOffset 19 endOffset 20 width 4.00: "i"
+            chunk 1 text run 21 at (291.53,187.67) startOffset 20 endOffset 21 width 5.00: "t"
+            chunk 1 text run 22 at (293.00,182.89) startOffset 21 endOffset 22 width 5.00: " "
+            chunk 1 text run 23 at (296.10,176.06) startOffset 22 endOffset 23 width 10.01: "a"
+            chunk 1 text run 24 at (303.39,165.94) startOffset 23 endOffset 24 width 14.99: "m"
+            chunk 1 text run 25 at (312.95,157.94) startOffset 24 endOffset 25 width 10.01: "e"
+            chunk 1 text run 26 at (319.54,154.36) startOffset 25 endOffset 26 width 5.00: "t"
+            chunk 1 text run 27 at (324.20,152.55) startOffset 26 endOffset 27 width 5.00: ","
+            chunk 1 text run 28 at (329.02,151.21) startOffset 27 endOffset 28 width 5.00: " "
+            chunk 1 text run 29 at (335.93,150.16) startOffset 28 endOffset 29 width 9.00: "c"
+            chunk 1 text run 30 at (345.42,150.29) startOffset 29 endOffset 30 width 10.01: "o"
+            chunk 1 text run 31 at (355.20,152.35) startOffset 30 endOffset 31 width 10.01: "n"
+            chunk 1 text run 32 at (363.93,156.09) startOffset 31 endOffset 32 width 9.00: "s"
+            chunk 1 text run 33 at (371.79,161.41) startOffset 32 endOffset 33 width 10.01: "e"
+            chunk 1 text run 34 at (378.51,168.11) startOffset 33 endOffset 34 width 9.00: "c"
+            chunk 1 text run 35 at (382.59,173.79) startOffset 34 endOffset 35 width 5.00: "t"
+            chunk 1 text run 36 at (386.03,180.45) startOffset 35 endOffset 36 width 10.01: "e"
+            chunk 1 text run 37 at (388.44,187.55) startOffset 36 endOffset 37 width 5.00: "t"
+            chunk 1 text run 38 at (389.75,194.94) startOffset 37 endOffset 38 width 10.01: "u"
         RenderSVGInlineText {#text} at (0,0) size 0x0
index 1b49c23..3118d4a 100644 (file)
@@ -3,10 +3,10 @@ layer at (0,0) size 800x600
 layer at (0,0) size 300x200
   RenderSVGRoot {svg} at (49,24) size 209x132
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
     RenderSVGContainer {g} at (50,24) size 208x32
       RenderSVGContainer {use} at (50,49) size 200x2
-        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (50,24) size 208x32 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 208x32
           RenderSVGInlineText {#text} at (0,0) size 208x32
@@ -28,14 +28,14 @@ layer at (0,0) size 300x200
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {g} at (50,99) size 200x2 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
       RenderSVGContainer {use} at (50,99) size 200x2
-        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 0x0
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {g} at (49,124) size 208x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
       RenderSVGContainer {use} at (50,149) size 200x2
-        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (49,24) size 208x32 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 208x32
           RenderSVGInlineText {#text} at (0,0) size 208x32
index 82d0a10..7e92968 100644 (file)
@@ -3,10 +3,10 @@ layer at (0,0) size 800x600
 layer at (0,0) size 300x200
   RenderSVGRoot {svg} at (49,24) size 209x132
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
-      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+      RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
     RenderSVGContainer {g} at (50,24) size 208x32
       RenderSVGContainer {use} at (50,49) size 200x2
-        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,49) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (50,24) size 208x32 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 208x32
           RenderSVGInlineText {#text} at (0,0) size 208x32
@@ -28,7 +28,7 @@ layer at (0,0) size 300x200
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {g} at (50,74) size 200x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
       RenderSVGContainer {use} at (50,99) size 200x2
-        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (150,24) size 95x32 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 95x32
           RenderSVGInlineText {#text} at (0,0) size 95x32
@@ -42,7 +42,7 @@ layer at (0,0) size 300x200
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {g} at (49,124) size 209x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
       RenderSVGContainer {use} at (50,149) size 200x2
-        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6]}] [data="M 50 50 L 250 50"]
+        RenderSVGPath {path} at (50,149) size 200x2 [stroke={[type=SOLID] [color=#ADD8E6] [path length=2.00]}] [data="M 50 50 L 250 50"]
       RenderSVGText {text} at (49,24) size 209x32 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 208x32
           RenderSVGInlineText {#text} at (0,0) size 208x32
index 6562049..bfa5cd3 100644 (file)
@@ -1,5 +1,5 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 300x200
-  RenderSVGRoot {svg} at (50,99) size 199x2
-    RenderSVGPath {line} at (50,99) size 199x2 [stroke={[type=SOLID] [color=#0000FF] [dash array={3.00, 1.00}]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=100.00] [x2=250.00] [y2=100.00]
+  RenderSVGRoot {svg} at (50,99) size 200x2
+    RenderSVGPath {line} at (50,99) size 200x2 [stroke={[type=SOLID] [color=#0000FF] [dash array={3.00, 1.00}] [path length=25.00]}] [fill={[type=SOLID] [color=#000000]}] [x1=50.00] [y1=100.00] [x2=250.00] [y2=100.00]
index 47975e4..440ec15 100644 (file)
@@ -5,4 +5,4 @@ layer at (0,0) size 800x600
     RenderSVGContainer {g} at (0,0) size 0x0
     RenderSVGContainer {g} at (29,229) size 742x342
       RenderSVGRect {rect} at (29,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={50.00}]}] [x=20.00] [y=140.00] [width=200.00] [height=200.00]
-      RenderSVGRect {rect} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}]}] [x=260.00] [y=140.00] [width=200.00] [height=200.00]
+      RenderSVGRect {rect} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}] [path length=4.00]}] [x=260.00] [y=140.00] [width=200.00] [height=200.00]
index 30e367d..9b372dd 100644 (file)
@@ -5,4 +5,4 @@ layer at (0,0) size 800x600
     RenderSVGContainer {g} at (0,0) size 0x0
     RenderSVGContainer {g} at (29,229) size 742x342
       RenderSVGEllipse {circle} at (29,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={39.27}]}] [cx=120.00] [cy=240.00] [r=100.00]
-      RenderSVGEllipse {circle} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}]}] [cx=360.00] [cy=240.00] [r=100.00]
+      RenderSVGEllipse {circle} at (429,229) size 342x342 [stroke={[type=SOLID] [color=#000000] [stroke width=5.00] [dash array={0.25}] [path length=4.00]}] [cx=360.00] [cy=240.00] [r=100.00]
index 27f2d8e..24d9948 100644 (file)
@@ -5,7 +5,7 @@ layer at (0,0) size 800x600
     RenderSVGContainer {g} at (0,0) size 0x0
     RenderSVGContainer {g} at (0,0) size 768x568
       RenderSVGEllipse {circle} at (32,232) size 336x336 [stroke={[type=SOLID] [color=#000000]}] [cx=120.00] [cy=240.00] [r=100.00]
-      RenderSVGEllipse {circle} at (432,232) size 336x336 [stroke={[type=SOLID] [color=#000000]}] [cx=360.00] [cy=240.00] [r=100.00]
+      RenderSVGEllipse {circle} at (432,232) size 336x336 [stroke={[type=SOLID] [color=#000000] [path length=4.00]}] [cx=360.00] [cy=240.00] [r=100.00]
       RenderSVGText {text} at (0,0) size 0x0 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 0x0
           RenderSVGInlineText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/svg/custom/stroke-dash-array-pathLength-expected.svg b/LayoutTests/svg/custom/stroke-dash-array-pathLength-expected.svg
new file mode 100644 (file)
index 0000000..20ec486
--- /dev/null
@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+       <rect x="20" y="20" width="400" height="400" fill="blue"/>
+       <rect x="20" y="20" width="150" height="150" fill="white"/>
+       <rect x="270" y="270" width="150" height="150" fill="white"/>
+       <rect x="120" y="120" width="200" height="200" fill="green"/>
+</svg>
diff --git a/LayoutTests/svg/custom/stroke-dash-array-pathLength.svg b/LayoutTests/svg/custom/stroke-dash-array-pathLength.svg
new file mode 100644 (file)
index 0000000..94c04cf
--- /dev/null
@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+    <path d="M 120,220 h200" pathLength="10" fill="none" stroke="green" stroke-dasharray="10" stroke-width="200"/>
+    <rect x="70" y="70" width="300" height="300" pathLength="30" fill="none" stroke="blue" stroke-dashoffset="12.5" stroke-dasharray="10 5" stroke-width="100"/>
+</svg>
index f0e80f3..e6f5431 100644 (file)
@@ -1,3 +1,49 @@
+2020-01-15  Said Abou-Hallawa  <sabouhallawa@apple.com>
+
+        [SVG2]: Implement support for the 'pathLength' attribute
+        https://bugs.webkit.org/show_bug.cgi?id=72401
+
+        Reviewed by Simon Fraser.
+
+        The spec link is:
+            https://svgwg.org/svg2-draft/paths.html#PathLengthAttribute
+
+        The 'pathLength' attribute affects the calculations for text on a path,
+        stroke dash offset and stroke dash array. 'pathLength' has no effect on
+        percentage lengths.
+
+        Tests: svg/custom/stroke-dash-array-pathLength.svg
+
+        * rendering/svg/RenderSVGTextPath.cpp:
+        (WebCore::RenderSVGTextPath::targetElement const):
+        A helper function which returns the target element. Notice target element 
+        can't be used in this context unless it is a SVGGeometryElement. See
+        pathFromGraphicsElement().
+
+        (WebCore::RenderSVGTextPath::layoutPath const):
+        Use the new function targetElement().
+
+        (WebCore::RenderSVGTextPath::startOffset const):
+        In SVGTextLayoutEngine::beginTextPathLayout(), we used to check whether
+        startOffset is in the range [0, 1] to treat it as a percentage or not.
+        This is of course wrong especially when using with 'pathLength'. So we
+        need to return the SVGLengthValue to make the decision correctly.
+
+        * rendering/svg/RenderSVGTextPath.h:
+
+        * rendering/svg/SVGRenderSupport.cpp:
+        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):
+        Apply 'pathLength' to the shape 'stroke-dashoffset' and 'stroke-dasharray'
+        properties.
+
+        * rendering/svg/SVGRenderTreeAsText.cpp:
+        (WebCore::writeStyle):
+        Add the 'pathLength' property to the shape stroke property.
+
+        * rendering/svg/SVGTextLayoutEngine.cpp:
+        (WebCore::SVGTextLayoutEngine::beginTextPathLayout):
+        Apply 'pathLength' to the text path 'start-offset' property.
+
 2020-01-15  Chris Dumez  <cdumez@apple.com>
 
         Regression(r253213) Load hang and high CPU usage when trying to load myuhc.com
index 1961e17..e7b24b9 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "FloatQuad.h"
 #include "RenderBlock.h"
+#include "SVGGeometryElement.h"
 #include "SVGInlineTextBox.h"
 #include "SVGNames.h"
 #include "SVGPathData.h"
@@ -44,28 +45,35 @@ SVGTextPathElement& RenderSVGTextPath::textPathElement() const
     return downcast<SVGTextPathElement>(RenderSVGInline::graphicsElement());
 }
 
-Path RenderSVGTextPath::layoutPath() const
+SVGGeometryElement* RenderSVGTextPath::targetElement() const
 {
     auto target = SVGURIReference::targetElementFromIRIString(textPathElement().href(), textPathElement().treeScope());
-    if (!is<SVGPathElement>(target.element))
-        return Path();
+    if (!is<SVGGeometryElement>(target.element))
+        return nullptr;
+
+    return downcast<SVGGeometryElement>(target.element.get());
+}
 
-    SVGPathElement& pathElement = downcast<SVGPathElement>(*target.element);
+Path RenderSVGTextPath::layoutPath() const
+{
+    auto element = targetElement();
+    if (!is<SVGGeometryElement>(element))
+        return Path();
 
-    Path path = pathFromGraphicsElement(&pathElement);
+    Path path = pathFromGraphicsElement(element);
 
     // Spec:  The transform attribute on the referenced 'path' element represents a
     // supplemental transformation relative to the current user coordinate system for
     // the current 'text' element, including any adjustments to the current user coordinate
     // system due to a possible transform attribute on the current 'text' element.
     // http://www.w3.org/TR/SVG/text.html#TextPathElement
-    path.transform(pathElement.animatedLocalTransform());
+    path.transform(element->animatedLocalTransform());
     return path;
 }
 
-float RenderSVGTextPath::startOffset() const
+const SVGLengthValue& RenderSVGTextPath::startOffset() const
 {
-    return textPathElement().startOffset().valueAsPercentage();
+    return textPathElement().startOffset();
 }
 
 bool RenderSVGTextPath::exactAlignment() const
index 5bc4b59..2800884 100644 (file)
 
 namespace WebCore {
 
+class SVGGeometryElement;
+
 class RenderSVGTextPath final : public RenderSVGInline {
     WTF_MAKE_ISO_ALLOCATED(RenderSVGTextPath);
 public:
     RenderSVGTextPath(SVGTextPathElement&, RenderStyle&&);
 
     SVGTextPathElement& textPathElement() const;
+    SVGGeometryElement* targetElement() const;
 
     Path layoutPath() const;
-    float startOffset() const;
+    const SVGLengthValue& startOffset() const;
     bool exactAlignment() const;
     bool stretchMethod() const;
 
index 76a5a7e..0c6d16c 100644 (file)
@@ -423,8 +423,12 @@ bool SVGRenderSupport::pointInClippingArea(const RenderElement& renderer, const
 void SVGRenderSupport::applyStrokeStyleToContext(GraphicsContext* context, const RenderStyle& style, const RenderElement& renderer)
 {
     ASSERT(context);
-    ASSERT(renderer.element());
-    ASSERT(renderer.element()->isSVGElement());
+    
+    Element* element = renderer.element();
+    if (!is<SVGElement>(element)) {
+        ASSERT_NOT_REACHED();
+        return;
+    }
 
     const SVGRenderStyle& svgStyle = style.svgStyle();
 
@@ -442,15 +446,23 @@ void SVGRenderSupport::applyStrokeStyleToContext(GraphicsContext* context, const
         DashArray dashArray;
         dashArray.reserveInitialCapacity(dashes.size());
         bool canSetLineDash = false;
+        float scaleFactor = 1;
 
+        if (is<SVGGeometryElement>(element)) {
+            ASSERT(renderer.isSVGShape());
+            // FIXME: A value of zero is valid. Need to differentiate this case from being unspecified.
+            if (float pathLength = downcast<SVGGeometryElement>(element)->pathLength())
+                scaleFactor = downcast<RenderSVGShape>(renderer).getTotalLength() / pathLength;
+        }
+        
         for (auto& dash : dashes) {
-            dashArray.uncheckedAppend(dash.value(lengthContext));
+            dashArray.uncheckedAppend(dash.value(lengthContext) * scaleFactor);
             if (dashArray.last() > 0)
                 canSetLineDash = true;
         }
 
         if (canSetLineDash)
-            context->setLineDash(dashArray, lengthContext.valueForLength(svgStyle.strokeDashOffset()));
+            context->setLineDash(dashArray, lengthContext.valueForLength(svgStyle.strokeDashOffset()) * scaleFactor);
         else
             context->setStrokeStyle(SolidStroke);
     }
index 0e73fa4..3b4934b 100644 (file)
@@ -202,6 +202,11 @@ static void writeStyle(TextStream& ts, const RenderElement& renderer)
             if (!dashArray.isEmpty())
                 writeNameValuePair(ts, "dash array", dashArray);
 
+            if (is<SVGGeometryElement>(shape.graphicsElement())) {
+                double pathLength = downcast<SVGGeometryElement>(shape.graphicsElement()).pathLength();
+                writeIfNotDefault(ts, "path length", pathLength, 0.0);
+            }
+
             ts << "}]";
         }
 
index a0e9237..ab55d24 100644 (file)
@@ -23,6 +23,7 @@
 #include "PathTraversalState.h"
 #include "RenderSVGTextPath.h"
 #include "SVGElement.h"
+#include "SVGGeometryElement.h"
 #include "SVGInlineTextBox.h"
 #include "SVGLengthContext.h"
 #include "SVGTextContentElement.h"
@@ -170,10 +171,19 @@ void SVGTextLayoutEngine::beginTextPathLayout(RenderSVGTextPath& textPath, SVGTe
     if (m_textPath.isEmpty())
         return;
 
-    m_textPathStartOffset = textPath.startOffset();
+    const auto& startOffset = textPath.startOffset();
     m_textPathLength = m_textPath.length();
-    if (m_textPathStartOffset > 0 && m_textPathStartOffset <= 1)
-        m_textPathStartOffset *= m_textPathLength;
+    
+    if (textPath.startOffset().lengthType() == SVGLengthType::Percentage)
+        m_textPathStartOffset = startOffset.valueAsPercentage() * m_textPathLength;
+    else {
+        m_textPathStartOffset = startOffset.valueInSpecifiedUnits();
+        if (auto* tragetElement = textPath.targetElement()) {
+            // FIXME: A value of zero is valid. Need to differentiate this case from being unspecified.
+            if (float pathLength = tragetElement->pathLength())
+                m_textPathStartOffset *= m_textPathLength / pathLength;
+        }
+    }
 
     lineLayout.m_chunkLayoutBuilder.buildTextChunks(lineLayout.m_lineLayoutBoxes);