Reviewed by Eric.
authorzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 11 Nov 2007 02:12:09 +0000 (02:12 +0000)
committerzimmermann@webkit.org <zimmermann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 11 Nov 2007 02:12:09 +0000 (02:12 +0000)
Fixes: http://bugs.webkit.org/show_bug.cgi?id=15937 (Add glyph-orientation-horizontal/vertical support)
Fixes: http://bugs.webkit.org/show_bug.cgi?id=13971 (text-anchor support on vertical text seems slightly off)

Add glyph-orientation-* support for text & textPath. (90/180/270 and 'auto')
Also fix all vertical text handling - for text & textPath! (especially latin1 characters auto orientation in vertical writing modes)

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

24 files changed:
LayoutTests/ChangeLog
LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-05-b-expected.checksum
LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-05-b-expected.png
LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-05-b-expected.txt
LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-06-b-expected.checksum
LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-06-b-expected.png
LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-06-b-expected.txt
LayoutTests/svg/batik/text/textGlyphOrientationHorizontal-expected.txt
LayoutTests/svg/batik/text/verticalText-expected.checksum
LayoutTests/svg/batik/text/verticalText-expected.png
LayoutTests/svg/batik/text/verticalText-expected.txt
LayoutTests/svg/batik/text/verticalTextOnPath-expected.checksum
LayoutTests/svg/batik/text/verticalTextOnPath-expected.png
LayoutTests/svg/batik/text/verticalTextOnPath-expected.txt
LayoutTests/svg/text/text-align-05-b-expected.txt
LayoutTests/svg/text/text-align-06-b-expected.txt
LayoutTests/svg/text/text-path-01-b-expected.checksum
LayoutTests/svg/text/text-path-01-b-expected.png
WebCore/ChangeLog
WebCore/WebCore.pro
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/rendering/SVGCharacterLayoutInfo.cpp
WebCore/rendering/SVGCharacterLayoutInfo.h
WebCore/rendering/SVGRootInlineBox.cpp

index 089ec83..f9e7444 100644 (file)
@@ -1,5 +1,29 @@
 2007-11-10  Nikolas Zimmermann  <zimmermann@kde.org>
 
+        Reviewed by Eric.
+
+        Update SVG layout test results after landing the vertical text support fixes.
+
+        * platform/mac/svg/W3C-SVG-1.1/text-align-05-b-expected.checksum:
+        * platform/mac/svg/W3C-SVG-1.1/text-align-05-b-expected.png:
+        * platform/mac/svg/W3C-SVG-1.1/text-align-05-b-expected.txt:
+        * platform/mac/svg/W3C-SVG-1.1/text-align-06-b-expected.checksum:
+        * platform/mac/svg/W3C-SVG-1.1/text-align-06-b-expected.png:
+        * platform/mac/svg/W3C-SVG-1.1/text-align-06-b-expected.txt:
+        * svg/batik/text/textGlyphOrientationHorizontal-expected.txt:
+        * svg/batik/text/verticalText-expected.checksum:
+        * svg/batik/text/verticalText-expected.png:
+        * svg/batik/text/verticalText-expected.txt:
+        * svg/batik/text/verticalTextOnPath-expected.checksum:
+        * svg/batik/text/verticalTextOnPath-expected.png:
+        * svg/batik/text/verticalTextOnPath-expected.txt:
+        * svg/text/text-align-05-b-expected.txt:
+        * svg/text/text-align-06-b-expected.txt:
+        * svg/text/text-path-01-b-expected.checksum:
+        * svg/text/text-path-01-b-expected.png:
+
+2007-11-10  Nikolas Zimmermann  <zimmermann@kde.org>
+
         Rubberstamped by Eric.
 
         Update some SVG pixel test results - which show changes lately -> repainting fixes.
index 40cc0df..3b1c861 100644 (file)
Binary files a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-05-b-expected.png and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-05-b-expected.png differ
index 51511d7..02daf35 100644 (file)
@@ -2,27 +2,27 @@ layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
 layer at (0,0) size 480x360
   RenderSVGRoot {svg} at (0.50,0.50) size 479x359
-    RenderSVGContainer {g} at (5,4) size 465x317
+    RenderSVGContainer {g} at (5,4) size 465x311
       RenderSVGText {text} at (5,40) size 465x44 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-36) size 465x44
           chunk 1 text run 1 at (5.00,40.00) startOffset 0 endOffset 29 width 465.00: "Test 'text-anchor' (vertical)"
-      RenderSVGContainer {g} at (152,57) size 117x264
-        RenderSVGContainer {g} at (152,57) size 117x264 [transform={m=((1.00,0.00)(0.00,1.00)) t=(160.00,150.00)}]
-          RenderSVGContainer {g} at (152,147) size 17x174
+      RenderSVGContainer {g} at (152,51) size 117x264
+        RenderSVGContainer {g} at (152,51) size 117x264 [transform={m=((1.00,0.00)(0.00,1.00)) t=(160.00,150.00)}]
+          RenderSVGContainer {g} at (152,147) size 17x168
             RenderPath {circle} at (157,147) size 6x6 [fill={[type=SOLID] [color=#000000]}] [data="M3.00,0.00L2.99,0.19L2.98,0.38L2.95,0.56L2.91,0.75L2.85,0.93L2.79,1.10L2.71,1.28L2.63,1.45L2.53,1.61L2.43,1.76L2.31,1.91L2.19,2.05L2.05,2.19L1.91,2.31L1.76,2.43L1.61,2.53L1.45,2.63L1.28,2.71L1.10,2.79L0.93,2.85L0.75,2.91L0.56,2.95L0.38,2.98L0.19,2.99L-0.00,3.00L-0.19,2.99L-0.38,2.98L-0.56,2.95L-0.75,2.91L-0.93,2.85L-1.10,2.79L-1.28,2.71L-1.45,2.63L-1.61,2.53L-1.76,2.43L-1.91,2.31L-2.05,2.19L-2.19,2.05L-2.31,1.91L-2.43,1.76L-2.53,1.61L-2.63,1.45L-2.71,1.28L-2.79,1.10L-2.85,0.93L-2.91,0.75L-2.95,0.56L-2.98,0.38L-2.99,0.19L-3.00,-0.00L-2.99,-0.19L-2.98,-0.38L-2.95,-0.56L-2.91,-0.75L-2.85,-0.93L-2.79,-1.10L-2.71,-1.28L-2.63,-1.45L-2.53,-1.61L-2.43,-1.76L-2.31,-1.91L-2.19,-2.05L-2.05,-2.19L-1.91,-2.31L-1.76,-2.43L-1.61,-2.53L-1.45,-2.63L-1.28,-2.71L-1.10,-2.79L-0.93,-2.85L-0.75,-2.91L-0.56,-2.95L-0.38,-2.98L-0.19,-2.99L0.00,-3.00L0.19,-2.99L0.38,-2.98L0.56,-2.95L0.75,-2.91L0.93,-2.85L1.10,-2.79L1.28,-2.71L1.45,-2.63L1.61,-2.53L1.76,-2.43L1.91,-2.31L2.05,-2.19L2.19,-2.05L2.31,-1.91L2.43,-1.76L2.53,-1.61L2.63,-1.45L2.71,-1.28L2.79,-1.10L2.85,-0.93L2.91,-0.75L2.95,-0.56L2.98,-0.38L2.99,-0.19"]
-            RenderSVGText {text} at (-9,33) size 17x165 contains 1 chunk(s)
+            RenderSVGText {text} at (-9,27) size 17x165 contains 1 chunk(s)
               RenderSVGInlineText {#text} at (1,-27) size 17x165
-                chunk 1 (vertical) text run 1 at (-8.50,33.00) startOffset 0 endOffset 5 height 165.00: "start"
-          RenderSVGContainer {g} at (198,57) size 25x198 [transform={m=((1.00,0.00)(0.00,1.00)) t=(50.00,0.00)}]
+                chunk 1 (vertical) text run 1 at (-8.50,27.00) startOffset 0 endOffset 5 height 165.00: "start"
+          RenderSVGContainer {g} at (198,51) size 25x198 [transform={m=((1.00,0.00)(0.00,1.00)) t=(50.00,0.00)}]
             RenderPath {circle} at (207,147) size 6x6 [fill={[type=SOLID] [color=#000000]}] [data="M3.00,0.00L2.99,0.19L2.98,0.38L2.95,0.56L2.91,0.75L2.85,0.93L2.79,1.10L2.71,1.28L2.63,1.45L2.53,1.61L2.43,1.76L2.31,1.91L2.19,2.05L2.05,2.19L1.91,2.31L1.76,2.43L1.61,2.53L1.45,2.63L1.28,2.71L1.10,2.79L0.93,2.85L0.75,2.91L0.56,2.95L0.38,2.98L0.19,2.99L-0.00,3.00L-0.19,2.99L-0.38,2.98L-0.56,2.95L-0.75,2.91L-0.93,2.85L-1.10,2.79L-1.28,2.71L-1.45,2.63L-1.61,2.53L-1.76,2.43L-1.91,2.31L-2.05,2.19L-2.19,2.05L-2.31,1.91L-2.43,1.76L-2.53,1.61L-2.63,1.45L-2.71,1.28L-2.79,1.10L-2.85,0.93L-2.91,0.75L-2.95,0.56L-2.98,0.38L-2.99,0.19L-3.00,-0.00L-2.99,-0.19L-2.98,-0.38L-2.95,-0.56L-2.91,-0.75L-2.85,-0.93L-2.79,-1.10L-2.71,-1.28L-2.63,-1.45L-2.53,-1.61L-2.43,-1.76L-2.31,-1.91L-2.19,-2.05L-2.05,-2.19L-1.91,-2.31L-1.76,-2.43L-1.61,-2.53L-1.45,-2.63L-1.28,-2.71L-1.10,-2.79L-0.93,-2.85L-0.75,-2.91L-0.56,-2.95L-0.38,-2.98L-0.19,-2.99L0.00,-3.00L0.19,-2.99L0.38,-2.98L0.56,-2.95L0.75,-2.91L0.93,-2.85L1.10,-2.79L1.28,-2.71L1.45,-2.63L1.61,-2.53L1.76,-2.43L1.91,-2.31L2.05,-2.19L2.19,-2.05L2.31,-1.91L2.43,-1.76L2.53,-1.61L2.63,-1.45L2.71,-1.28L2.79,-1.10L2.85,-0.93L2.91,-0.75L2.95,-0.56L2.98,-0.38L2.99,-0.19"]
-            RenderSVGText {text} at (-13,-66) size 25x198 contains 1 chunk(s)
+            RenderSVGText {text} at (-13,-72) size 25x198 contains 1 chunk(s)
               RenderSVGInlineText {#text} at (1,-27) size 25x198
-                chunk 1 (middle anchor, vertical) text run 1 at (-12.50,-66.00) startOffset 0 endOffset 6 height 198.00: "middle"
-          RenderSVGContainer {g} at (252,57) size 17x99 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,0.00)}]
+                chunk 1 (middle anchor, vertical) text run 1 at (-12.50,-72.00) startOffset 0 endOffset 6 height 198.00: "middle"
+          RenderSVGContainer {g} at (252,51) size 17x102 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,0.00)}]
             RenderPath {circle} at (257,147) size 6x6 [fill={[type=SOLID] [color=#000000]}] [data="M3.00,0.00L2.99,0.19L2.98,0.38L2.95,0.56L2.91,0.75L2.85,0.93L2.79,1.10L2.71,1.28L2.63,1.45L2.53,1.61L2.43,1.76L2.31,1.91L2.19,2.05L2.05,2.19L1.91,2.31L1.76,2.43L1.61,2.53L1.45,2.63L1.28,2.71L1.10,2.79L0.93,2.85L0.75,2.91L0.56,2.95L0.38,2.98L0.19,2.99L-0.00,3.00L-0.19,2.99L-0.38,2.98L-0.56,2.95L-0.75,2.91L-0.93,2.85L-1.10,2.79L-1.28,2.71L-1.45,2.63L-1.61,2.53L-1.76,2.43L-1.91,2.31L-2.05,2.19L-2.19,2.05L-2.31,1.91L-2.43,1.76L-2.53,1.61L-2.63,1.45L-2.71,1.28L-2.79,1.10L-2.85,0.93L-2.91,0.75L-2.95,0.56L-2.98,0.38L-2.99,0.19L-3.00,-0.00L-2.99,-0.19L-2.98,-0.38L-2.95,-0.56L-2.91,-0.75L-2.85,-0.93L-2.79,-1.10L-2.71,-1.28L-2.63,-1.45L-2.53,-1.61L-2.43,-1.76L-2.31,-1.91L-2.19,-2.05L-2.05,-2.19L-1.91,-2.31L-1.76,-2.43L-1.61,-2.53L-1.45,-2.63L-1.28,-2.71L-1.10,-2.79L-0.93,-2.85L-0.75,-2.91L-0.56,-2.95L-0.38,-2.98L-0.19,-2.99L0.00,-3.00L0.19,-2.99L0.38,-2.98L0.56,-2.95L0.75,-2.91L0.93,-2.85L1.10,-2.79L1.28,-2.71L1.45,-2.63L1.61,-2.53L1.76,-2.43L1.91,-2.31L2.05,-2.19L2.19,-2.05L2.31,-1.91L2.43,-1.76L2.53,-1.61L2.63,-1.45L2.71,-1.28L2.79,-1.10L2.85,-0.93L2.91,-0.75L2.95,-0.56L2.98,-0.38L2.99,-0.19"]
-            RenderSVGText {text} at (-9,-66) size 17x99 contains 1 chunk(s)
+            RenderSVGText {text} at (-9,-72) size 17x99 contains 1 chunk(s)
               RenderSVGInlineText {#text} at (1,-27) size 17x99
-                chunk 1 (end anchor, vertical) text run 1 at (-8.50,-66.00) startOffset 0 endOffset 3 height 99.00: "end"
+                chunk 1 (end anchor, vertical) text run 1 at (-8.50,-72.00) startOffset 0 endOffset 3 height 99.00: "end"
     RenderSVGText {text} at (10,340) size 264x46 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-36) size 264x46
         chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 264.00: "$Revision: 1.5 $"
index 007f9c1..5959f96 100644 (file)
Binary files a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-06-b-expected.png and b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-align-06-b-expected.png differ
index 2c2c5eb..ed17571 100644 (file)
@@ -1,51 +1,51 @@
 layer at (0,0) size 480x360
   RenderView at (0,0) size 480x360
 layer at (0,0) size 480x360
-  RenderSVGRoot {svg} at (0,0.50) size 481x362.50
-    RenderSVGContainer {g} at (0,4) size 481x359
+  RenderSVGRoot {svg} at (0,0.50) size 481x359
+    RenderSVGContainer {g} at (0,4) size 481x353
       RenderSVGText {text} at (0,40) size 481x44 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-36) size 481x44
           chunk 1 text run 1 at (0.00,40.00) startOffset 0 endOffset 31 width 481.00: "Test 'baseline-shift' (vertic.)"
-      RenderSVGContainer {g} at (82,66) size 293x297
-        RenderSVGContainer {g} at (82,66) size 293x297 [transform={m=((1.00,0.00)(0.00,1.00)) t=(90.00,60.00)}]
-          RenderSVGText {text} at (-9,33) size 24x165 contains 1 chunk(s)
+      RenderSVGContainer {g} at (82,60) size 293x297
+        RenderSVGContainer {g} at (82,60) size 293x297 [transform={m=((1.00,0.00)(0.00,1.00)) t=(90.00,60.00)}]
+          RenderSVGText {text} at (-9,27) size 24x165 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (1,-27) size 17x66
-              chunk 1 (vertical) text run 1 at (-8.50,33.00) startOffset 0 endOffset 2 height 66.00: "te"
+              chunk 1 (vertical) text run 1 at (-8.50,27.00) startOffset 0 endOffset 2 height 66.00: "te"
             RenderSVGTSpan {tspan} at (0,0) size 17x33
               RenderSVGInlineText {#text} at (8,39) size 17x33
-                chunk 1 (vertical) text run 2 at (-1.50,99.00) startOffset 0 endOffset 1 height 33.00: "7"
+                chunk 1 (vertical) text run 2 at (-1.50,93.00) startOffset 0 endOffset 1 height 33.00: "7"
             RenderSVGInlineText {#text} at (2,72) size 15x66
-              chunk 1 (vertical) text run 3 at (-7.50,132.00) startOffset 0 endOffset 2 height 66.00: "xt"
-          RenderSVGText {text} at (45,33) size 44x264 contains 1 chunk(s)
+              chunk 1 (vertical) text run 3 at (-7.50,126.00) startOffset 0 endOffset 2 height 66.00: "xt"
+          RenderSVGText {text} at (45,27) size 44x264 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (26,-27) size 18x66
-              chunk 1 (vertical) text run 1 at (71.50,33.00) startOffset 0 endOffset 2 height 66.00: "te"
+              chunk 1 (vertical) text run 1 at (71.50,27.00) startOffset 0 endOffset 2 height 66.00: "te"
             RenderSVGTSpan {tspan} at (0,0) size 28x132
               RenderSVGInlineText {#text} at (0,39) size 28x132
-                chunk 1 (vertical) text run 2 at (45.50,99.00) startOffset 0 endOffset 4 height 132.00: "-70%"
+                chunk 1 (vertical) text run 2 at (45.50,93.00) startOffset 0 endOffset 4 height 132.00: "-70%"
             RenderSVGInlineText {#text} at (27,171) size 16x66
-              chunk 1 (vertical) text run 3 at (72.50,231.00) startOffset 0 endOffset 2 height 66.00: "xt"
-          RenderSVGText {text} at (155,33) size 34x231 contains 1 chunk(s)
+              chunk 1 (vertical) text run 3 at (72.50,225.00) startOffset 0 endOffset 2 height 66.00: "xt"
+          RenderSVGText {text} at (155,27) size 34x231 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (16,-27) size 18x66
-              chunk 1 (vertical) text run 1 at (171.50,33.00) startOffset 0 endOffset 2 height 66.00: "te"
+              chunk 1 (vertical) text run 1 at (171.50,27.00) startOffset 0 endOffset 2 height 66.00: "te"
             RenderSVGTSpan {tspan} at (0,0) size 17x99
               RenderSVGInlineText {#text} at (0,39) size 17x99
-                chunk 1 (vertical) text run 2 at (155.00,99.00) startOffset 0 endOffset 3 height 99.00: "sub"
+                chunk 1 (vertical) text run 2 at (155.00,93.00) startOffset 0 endOffset 3 height 99.00: "sub"
             RenderSVGTSpan {tspan} at (0,0) size 16x33
               RenderSVGInlineText {#text} at (17,138) size 16x33
-                chunk 1 (vertical) text run 3 at (172.50,198.00) startOffset 0 endOffset 1 height 33.00: "x"
+                chunk 1 (vertical) text run 3 at (172.50,192.00) startOffset 0 endOffset 1 height 33.00: "x"
             RenderSVGInlineText {#text} at (21,171) size 8x33
-              chunk 1 (vertical) text run 4 at (176.00,231.00) startOffset 0 endOffset 1 height 33.00: "t"
-          RenderSVGText {text} at (251,33) size 34x297 contains 1 chunk(s)
+              chunk 1 (vertical) text run 4 at (176.00,225.00) startOffset 0 endOffset 1 height 33.00: "t"
+          RenderSVGText {text} at (251,27) size 34x297 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (0,-27) size 18x66
-              chunk 1 (vertical) text run 1 at (251.50,33.00) startOffset 0 endOffset 2 height 66.00: "te"
+              chunk 1 (vertical) text run 1 at (251.50,27.00) startOffset 0 endOffset 2 height 66.00: "te"
             RenderSVGTSpan {tspan} at (0,0) size 17x165
               RenderSVGInlineText {#text} at (17,39) size 17x165
-                chunk 1 (vertical) text run 2 at (268.00,99.00) startOffset 0 endOffset 5 height 165.00: "super"
+                chunk 1 (vertical) text run 2 at (268.00,93.00) startOffset 0 endOffset 5 height 165.00: "super"
             RenderSVGTSpan {tspan} at (0,0) size 16x33
               RenderSVGInlineText {#text} at (1,204) size 16x33
-                chunk 1 (vertical) text run 3 at (252.50,264.00) startOffset 0 endOffset 1 height 33.00: "x"
+                chunk 1 (vertical) text run 3 at (252.50,258.00) startOffset 0 endOffset 1 height 33.00: "x"
             RenderSVGInlineText {#text} at (5,237) size 8x33
-              chunk 1 (vertical) text run 4 at (256.00,297.00) startOffset 0 endOffset 1 height 33.00: "t"
+              chunk 1 (vertical) text run 4 at (256.00,291.00) startOffset 0 endOffset 1 height 33.00: "t"
     RenderSVGText {text} at (10,340) size 264x46 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-36) size 264x46
         chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 264.00: "$Revision: 1.5 $"
index 8061380..9f0fb1f 100644 (file)
@@ -1,14 +1,14 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 450x500
-  RenderSVGRoot {svg} at (40,16) size 360x375.52
+  RenderSVGRoot {svg} at (39,16) size 361x375.52
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderPath {path} at (19.65,8.96) size 160.35x42.08 [stroke={[type=SOLID] [color=#0000FF]}] [data="M20.00,40.00C40.00,20.00,60.00,0.00,80.00,20.00C100.00,40.00,120.00,60.00,140.00,40.00C160.00,20.00,180.00,20.00,180.00,20.00"]
       RenderPath {path} at (19.78,8.99) size 320.22x42.02 [stroke={[type=SOLID] [color=#0000FF]}] [data="M20.00,40.00C60.00,20.00,100.00,0.00,140.00,20.00C180.00,40.00,220.00,60.00,260.00,40.00C300.00,20.00,340.00,20.00,340.00,20.00"]
     RenderSVGText {text} at (130,30) size 190x17 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-14) size 190x17
         chunk 1 (middle anchor) text run 1 at (130.00,30.00) startOffset 0 endOffset 27 width 190.00: "Text Orientation Horizontal"
-    RenderSVGContainer {g} at (40,45) size 360x346.52
+    RenderSVGContainer {g} at (39,45) size 361x346.52
       RenderPath {line} at (50,79) size 150x2 [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [fill={[type=SOLID] [color=#000000]}] [data="M50.00,80.00L200.00,80.00"]
       RenderSVGText {text} at (50,80) size 142x27 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-22) size 142x27
@@ -29,28 +29,28 @@ layer at (0,0) size 450x500
                 chunk 1 text run 3 at (85.93,25.89) startOffset 0 endOffset 5 width 65.00: " Good"
           RenderSVGInlineText {#text} at (0,0) size 0x0
       RenderPath {line} at (50,129) size 350x2 [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [fill={[type=SOLID] [color=#000000]}] [data="M50.00,130.00L400.00,130.00"]
-      RenderSVGText {text} at (50,130) size 142x27 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-22) size 142x27
-          chunk 1 text run 1 at (50.00,130.00) startOffset 0 endOffset 13 width 142.00: "Batik is Good"
-      RenderSVGContainer {g} at (40,132) size 330x69.52 [transform={m=((1.00,0.00)(0.00,1.00)) t=(30.00,150.00)}]
+      RenderSVGText {text} at (58,125) size 351x20 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (-11,-15) size 351x20
+          chunk 1 text run 1 at (58.00,125.00) startOffset 0 endOffset 13 width 142.00: "Batik is Good"
+      RenderSVGContainer {g} at (40,147) size 340x54.52 [transform={m=((1.00,0.00)(0.00,1.00)) t=(30.00,150.00)}]
         RenderSVGContainer {use} at (49.55,158.48) size 320.45x43.05
           RenderSVGContainer {g} at (49.55,158.48) size 320.45x43.05
             RenderPath {path} at (49.55,158.48) size 320.45x43.05 [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M20.00,40.00C60.00,20.00,100.00,0.00,140.00,20.00C180.00,40.00,220.00,60.00,260.00,40.00C300.00,20.00,340.00,20.00,340.00,20.00"]
-        RenderSVGText {text} at (27,11) size 153x62 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 153x62
-            RenderSVGInlineText {#text} at (-17,-15) size 67x48
-              chunk 1 text run 1 at (27.16,17.35) startOffset 0 endOffset 6 width 60.00: "Batik "
-            RenderSVGTSpan {tspan} at (0,0) size 25x29
-              RenderSVGInlineText {#text} at (39,-29) size 25x29
-                chunk 1 text run 2 at (77.45,13.71) startOffset 0 endOffset 2 width 17.00: "is"
-            RenderSVGTSpan {tspan} at (0,0) size 74x41
-              RenderSVGInlineText {#text} at (62,-21) size 74x41
-                chunk 1 text run 3 at (95.11,11.78) startOffset 0 endOffset 5 width 65.00: " Good"
+        RenderSVGText {text} at (32,11) size 340x47 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 340x47
+            RenderSVGInlineText {#text} at (-22,-14) size 162x42
+              chunk 1 text run 1 at (32.09,11.82) startOffset 0 endOffset 6 width 60.00: "Batik "
+            RenderSVGTSpan {tspan} at (0,0) size 54x24
+              RenderSVGInlineText {#text} at (138,0) size 54x24
+                chunk 1 text run 2 at (184.39,40.17) startOffset 0 endOffset 2 width 17.00: "is"
+            RenderSVGTSpan {tspan} at (0,0) size 135x40
+              RenderSVGInlineText {#text} at (183,-7) size 135x40
+                chunk 1 text run 3 at (237.33,22.64) startOffset 0 endOffset 5 width 65.00: " Good"
           RenderSVGInlineText {#text} at (0,0) size 0x0
       RenderPath {line} at (50,239) size 150x2 [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [fill={[type=SOLID] [color=#000000]}] [data="M50.00,240.00L200.00,240.00"]
-      RenderSVGText {text} at (50,240) size 142x27 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-22) size 142x27
-          chunk 1 text run 1 at (50.00,240.00) startOffset 0 endOffset 13 width 142.00: "Batik is Good"
+      RenderSVGText {text} at (58,240) size 143x28 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (-9,-23) size 143x28
+          chunk 1 text run 1 at (58.00,240.00) startOffset 0 endOffset 13 width 142.00: "Batik is Good"
       RenderSVGContainer {g} at (224,205) size 176x69 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,220.00)}]
         RenderSVGContainer {use} at (239.29,228.42) size 160.71x43.16
           RenderSVGContainer {g} at (239.29,228.42) size 160.71x43.16
@@ -67,21 +67,21 @@ layer at (0,0) size 450x500
                 chunk 1 text run 3 at (85.93,25.89) startOffset 0 endOffset 5 width 65.00: " Good"
           RenderSVGInlineText {#text} at (0,0) size 0x0
       RenderPath {line} at (50,319) size 350x2 [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [fill={[type=SOLID] [color=#000000]}] [data="M50.00,320.00L400.00,320.00"]
-      RenderSVGText {text} at (50,320) size 142x27 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-22) size 142x27
-          chunk 1 text run 1 at (50.00,320.00) startOffset 0 endOffset 13 width 142.00: "Batik is Good"
-      RenderSVGContainer {g} at (40,322) size 330x69.52 [transform={m=((1.00,0.00)(0.00,1.00)) t=(30.00,340.00)}]
+      RenderSVGText {text} at (42,315) size 353x20 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (5,-15) size 353x20
+          chunk 1 text run 1 at (42.00,315.00) startOffset 0 endOffset 13 width 142.00: "Batik is Good"
+      RenderSVGContainer {g} at (39,338) size 343x53.52 [transform={m=((1.00,0.00)(0.00,1.00)) t=(30.00,340.00)}]
         RenderSVGContainer {use} at (49.55,348.48) size 320.45x43.05
           RenderSVGContainer {g} at (49.55,348.48) size 320.45x43.05
             RenderPath {path} at (49.55,348.48) size 320.45x43.05 [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M20.00,40.00C60.00,20.00,100.00,0.00,140.00,20.00C180.00,40.00,220.00,60.00,260.00,40.00C300.00,20.00,340.00,20.00,340.00,20.00"]
-        RenderSVGText {text} at (27,11) size 153x62 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 153x62
-            RenderSVGInlineText {#text} at (-17,-15) size 67x48
-              chunk 1 text run 1 at (27.16,17.35) startOffset 0 endOffset 6 width 60.00: "Batik "
-            RenderSVGTSpan {tspan} at (0,0) size 25x29
-              RenderSVGInlineText {#text} at (39,-29) size 25x29
-                chunk 1 text run 2 at (77.45,13.71) startOffset 0 endOffset 2 width 17.00: "is"
-            RenderSVGTSpan {tspan} at (0,0) size 74x41
-              RenderSVGInlineText {#text} at (62,-21) size 74x41
-                chunk 1 text run 3 at (95.11,11.78) startOffset 0 endOffset 5 width 65.00: " Good"
+        RenderSVGText {text} at (32,11) size 343x48 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 343x48
+            RenderSVGInlineText {#text} at (-23,-13) size 170x41
+              chunk 1 text run 1 at (32.09,11.82) startOffset 0 endOffset 6 width 60.00: "Batik "
+            RenderSVGTSpan {tspan} at (0,0) size 47x20
+              RenderSVGInlineText {#text} at (148,4) size 47x20
+                chunk 1 text run 2 at (184.39,40.17) startOffset 0 endOffset 2 width 17.00: "is"
+            RenderSVGTSpan {tspan} at (0,0) size 129x42
+              RenderSVGInlineText {#text} at (191,-7) size 129x42
+                chunk 1 text run 3 at (237.33,22.64) startOffset 0 endOffset 5 width 65.00: " Good"
           RenderSVGInlineText {#text} at (0,0) size 0x0
index 3527d4c..abd1aea 100644 (file)
@@ -1 +1 @@
-fcca0c5164888e7b672cc77247cb66cb
\ No newline at end of file
+98c55d902080122e04522de09b80a30a
\ No newline at end of file
index 5fae635..07e0e3f 100644 (file)
Binary files a/LayoutTests/svg/batik/text/verticalText-expected.png and b/LayoutTests/svg/batik/text/verticalText-expected.png differ
index 7b6b213..29dc9ef 100644 (file)
@@ -1,10 +1,10 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 450x500
-  RenderSVGRoot {svg} at (20,26) size 410x512
+  RenderSVGRoot {svg} at (20,26) size 410x464
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderPath {path} at (14.95,7.04) size 315.11x30.91 [transform={m=((0.15,0.00)(0.00,0.15)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF]}] [data="M100.00,200.00C200.00,100.00,300.00,0.00,400.00,100.00C500.00,200.00,600.00,300.00,700.00,200.00C800.00,100.00,900.00,0.00,1000.00,100.00C1100.00,200.00,1200.00,300.00,1300.00,200.00C1400.00,100.00,1500.00,0.00,1600.00,100.00C1700.00,200.00,1800.00,300.00,1900.00,200.00C2000.00,100.00,2100.00,0.00,2200.00,100.00"]
-    RenderSVGContainer {g} at (20,26) size 410x512
+    RenderSVGContainer {g} at (20,26) size 410x464
       RenderSVGText {text} at (163,40) size 124x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 124x17
           chunk 1 (middle anchor) text run 1 at (163.00,40.00) startOffset 0 endOffset 18 width 124.00: "Vertical Text Test"
@@ -26,47 +26,47 @@ layer at (0,0) size 450x500
         RenderPath {line} at (299.50,75) size 1x375 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [data="M300.00,75.00L300.00,450.00"]
         RenderPath {line} at (349.50,75) size 1x375 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [data="M350.00,75.00L350.00,450.00"]
         RenderPath {line} at (399.50,75) size 1x375 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [data="M400.00,75.00L400.00,450.00"]
-      RenderSVGText {text} at (42,92) size 16x391 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-13) size 16x391
-          chunk 1 (vertical) text run 1 at (42.50,92.00) startOffset 0 endOffset 23 height 391.00: "Writing top to bottom\x{753B}\x{50CF}"
-      RenderSVGText {text} at (92,92) size 16x408 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-13) size 16x408
-          chunk 1 (vertical) text run 1 at (92.50,92.00) startOffset 0 endOffset 24 height 408.00: "Glyph Orientation:auto\x{753B}\x{50CF}"
-      RenderSVGText {text} at (142,92) size 16x357 contains 1 chunk(s)
+      RenderSVGText {text} at (33,79) size 18x165 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (8,0) size 18x165
+          chunk 1 (vertical) text run 1 at (33.00,79.00) startOffset 0 endOffset 23 height 391.00: "Writing top to bottom\x{753B}\x{50CF}"
+      RenderSVGText {text} at (83,79) size 18x174 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (8,0) size 18x174
+          chunk 1 (vertical) text run 1 at (83.00,79.00) startOffset 0 endOffset 24 height 408.00: "Glyph Orientation:auto\x{753B}\x{50CF}"
+      RenderSVGText {text} at (142,88) size 16x357 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-13) size 16x357
-          chunk 1 (vertical) text run 1 at (142.50,92.00) startOffset 0 endOffset 21 height 357.00: "Glyph Orientation:0\x{753B}\x{50CF}"
-      RenderSVGText {text} at (192,92) size 16x374 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-13) size 16x374
-          chunk 1 (vertical) text run 1 at (192.50,92.00) startOffset 0 endOffset 22 height 374.00: "Glyph Orientation:90\x{753B}\x{50CF}"
-      RenderSVGText {text} at (242,92) size 16x391 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-13) size 16x391
-          chunk 1 (vertical) text run 1 at (242.50,92.00) startOffset 0 endOffset 23 height 391.00: "Glyph Orientation:180\x{753B}\x{50CF}"
-      RenderSVGText {text} at (292,92) size 16x391 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-13) size 16x391
-          chunk 1 (vertical) text run 1 at (292.50,92.00) startOffset 0 endOffset 23 height 391.00: "Glyph Orientation:270\x{753B}\x{50CF}"
-      RenderSVGText {text} at (344,92) size 12x408 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-13) size 12x153
-          chunk 1 (vertical) text run 1 at (344.00,92.00) startOffset 0 endOffset 9 height 153.00: "Embedded "
-        RenderSVGTSpan {tspan} at (0,0) size 8x119
-          RenderSVGInlineText {#text} at (2,140) size 8x119
-            chunk 1 (vertical) text run 2 at (346.00,245.00) startOffset 0 endOffset 7 height 119.00: "<tspan>"
-        RenderSVGInlineText {#text} at (0,259) size 12x136
-          chunk 1 (vertical) text run 3 at (344.00,364.00) startOffset 0 endOffset 8 height 136.00: " element"
-      RenderSVGText {text} at (394,92) size 12x459 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-13) size 12x153
-          chunk 1 (vertical) text run 1 at (394.00,92.00) startOffset 0 endOffset 9 height 153.00: "Embedded "
+          chunk 1 (vertical) text run 1 at (142.50,88.00) startOffset 0 endOffset 21 height 357.00: "Glyph Orientation:0\x{753B}\x{50CF}"
+      RenderSVGText {text} at (183,79) size 18x163 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (8,0) size 18x163
+          chunk 1 (vertical) text run 1 at (183.00,79.00) startOffset 0 endOffset 22 height 374.00: "Glyph Orientation:90\x{753B}\x{50CF}"
+      RenderSVGText {text} at (250,88) size 16x392 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (-8,-14) size 16x392
+          chunk 1 (vertical) text run 1 at (250.00,88.00) startOffset 0 endOffset 23 height 391.00: "Glyph Orientation:180\x{753B}\x{50CF}"
+      RenderSVGText {text} at (317,79) size 17x171 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (-26,0) size 26x171
+          chunk 1 (vertical) text run 1 at (317.00,79.00) startOffset 0 endOffset 23 height 391.00: "Glyph Orientation:270\x{753B}\x{50CF}"
+      RenderSVGText {text} at (333,79) size 17x173 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (9,0) size 17x71
+          chunk 1 (vertical) text run 1 at (333.00,79.00) startOffset 0 endOffset 9 height 153.00: "Embedded "
+        RenderSVGTSpan {tspan} at (0,0) size 17x49
+          RenderSVGInlineText {#text} at (9,71) size 17x49
+            chunk 1 (vertical) text run 2 at (333.00,150.00) startOffset 0 endOffset 7 height 119.00: "<tspan>"
+        RenderSVGInlineText {#text} at (9,120) size 17x53
+          chunk 1 (vertical) text run 3 at (333.00,199.00) startOffset 0 endOffset 8 height 136.00: " element"
+      RenderSVGText {text} at (383,79) size 18x294 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (8,0) size 18x71
+          chunk 1 (vertical) text run 1 at (383.00,79.00) startOffset 0 endOffset 9 height 153.00: "Embedded "
         RenderSVGTSpan {tspan} at (0,0) size 8x170
-          RenderSVGInlineText {#text} at (2,140) size 8x170
-            chunk 1 (vertical) text run 2 at (396.00,245.00) startOffset 0 endOffset 10 height 170.00: "orientated"
-        RenderSVGInlineText {#text} at (0,310) size 12x136
-          chunk 1 (vertical) text run 3 at (394.00,415.00) startOffset 0 endOffset 8 height 136.00: " element"
-      RenderSVGContainer {g} at (42,454) size 328.11x43 [transform={m=((1.00,0.00)(0.00,1.00)) t=(40.00,450.00)}]
+          RenderSVGInlineText {#text} at (13,67) size 8x170
+            chunk 1 (vertical) text run 2 at (396.00,159.00) startOffset 0 endOffset 10 height 170.00: "orientated"
+        RenderSVGInlineText {#text} at (8,241) size 18x53
+          chunk 1 (vertical) text run 3 at (383.00,320.00) startOffset 0 endOffset 8 height 136.00: " element"
+      RenderSVGContainer {g} at (51,455) size 319.11x35 [transform={m=((1.00,0.00)(0.00,1.00)) t=(40.00,450.00)}]
         RenderSVGContainer {use} at (54.89,457.29) size 315.21x30.43
           RenderSVGContainer {g} at (54.89,457.29) size 315.21x30.43
             RenderPath {path} at (54.89,457.29) size 315.21x30.43 [transform={m=((0.15,0.00)(0.00,0.15)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M100.00,200.00C200.00,100.00,300.00,0.00,400.00,100.00C500.00,200.00,600.00,300.00,700.00,200.00C800.00,100.00,900.00,0.00,1000.00,100.00C1100.00,200.00,1200.00,300.00,1300.00,200.00C1400.00,100.00,1500.00,0.00,1600.00,100.00C1700.00,200.00,1800.00,300.00,1900.00,200.00C2000.00,100.00,2100.00,0.00,2200.00,100.00"]
-        RenderSVGText {text} at (15,22) size 297x43 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 297x43
-            RenderSVGInlineText {#text} at (-13,-18) size 297x43
-              chunk 1 (vertical) text run 1 at (15.47,22.79) startOffset 0 endOffset 25 height 350.00: "Vertical text on a Path\x{753B}\x{50CF}"
+        RenderSVGText {text} at (19,8) size 297x35 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 297x35
+            RenderSVGInlineText {#text} at (-8,-3) size 297x35
+              chunk 1 (vertical) text run 1 at (19.97,8.79) startOffset 0 endOffset 25 height 350.00: "Vertical text on a Path\x{753B}\x{50CF}"
           RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {use} at (0,0) size 0x0
index 5e19263..0fad4b7 100644 (file)
@@ -1 +1 @@
-246a31a6cacaa6e149f46eb5140b9420
\ No newline at end of file
+4802b5c601684a157dc9b1d00ebbdc2a
\ No newline at end of file
index fd2e81f..1c80f0d 100644 (file)
Binary files a/LayoutTests/svg/batik/text/verticalTextOnPath-expected.png and b/LayoutTests/svg/batik/text/verticalTextOnPath-expected.png differ
index 43ba267..9bec469 100644 (file)
@@ -1,28 +1,28 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 450x500
-  RenderSVGRoot {svg} at (1,26) size 446x624
-    RenderSVGContainer {g} at (1,26) size 446x624
+  RenderSVGRoot {svg} at (11,26) size 436x457
+    RenderSVGContainer {g} at (11,26) size 436x457
       RenderSVGText {text} at (134,40) size 182x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 182x17
           chunk 1 (middle anchor) text run 1 at (134.00,40.00) startOffset 0 endOffset 28 width 182.00: "Vertical text on a path test"
       RenderSVGHiddenContainer {defs} at (0,0) size 0x0
         RenderPath {path} at (14.95,7.04) size 120.05x30.91 [transform={m=((0.15,0.00)(0.00,0.15)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF]}] [data="M100.00,200.00C200.00,100.00,300.00,0.00,400.00,100.00C500.00,200.00,600.00,300.00,700.00,200.00C800.00,100.00,900.00,100.00,900.00,100.00"]
         RenderPath {path} at (29.85,12.25) size 90.30x37.75 [transform={m=((0.30,0.00)(0.00,0.50)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF]}] [data="M100.00,100.00C100.00,0.00,400.00,0.00,400.00,100.00"]
-      RenderSVGContainer {g} at (1,75) size 134x129 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,70.00)}]
+      RenderSVGContainer {g} at (11,59) size 124x94 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,70.00)}]
         RenderSVGContainer {use} at (14.89,77.29) size 120.11x30.43
           RenderSVGContainer {g} at (14.89,77.29) size 120.11x30.43
             RenderPath {path} at (14.89,77.29) size 120.11x30.43 [transform={m=((0.15,0.00)(0.00,0.15)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M100.00,200.00C200.00,100.00,300.00,0.00,400.00,100.00C500.00,200.00,600.00,300.00,700.00,200.00C800.00,100.00,900.00,100.00,900.00,100.00"]
-        RenderSVGText {text} at (16,26) size 121x129 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 121x129
-            RenderSVGInlineText {#text} at (-15,-21) size 89x41
-              chunk 1 (vertical) text run 1 at (16.55,26.15) startOffset 0 endOffset 5 height 85.00: "Text "
-            RenderSVGTSpan {tspan} at (0,0) size 18x32
-              RenderSVGInlineText {#text} at (79,-9) size 18x32
-                chunk 1 (vertical) text run 2 at (88.08,45.41) startOffset 0 endOffset 2 height 34.00: "on"
-            RenderSVGTSpan {tspan} at (0,0) size 15x120
-              RenderSVGInlineText {#text} at (91,-12) size 15x120
-                chunk 1 (vertical) text run 3 at (116.63,35.87) startOffset 0 endOffset 7 height 119.00: " a Path"
+        RenderSVGText {text} at (18,9) size 85x56 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 85x56
+            RenderSVGInlineText {#text} at (-7,-9) size 36x33
+              chunk 1 (vertical) text run 1 at (18.19,10.99) startOffset 0 endOffset 5 height 85.00: "Text "
+            RenderSVGTSpan {tspan} at (0,0) size 25x21
+              RenderSVGInlineText {#text} at (22,-20) size 25x21
+                chunk 1 (vertical) text run 2 at (43.70,9.08) startOffset 0 endOffset 2 height 34.00: "on"
+            RenderSVGTSpan {tspan} at (0,0) size 43x39
+              RenderSVGInlineText {#text} at (35,-3) size 43x39
+                chunk 1 (vertical) text run 3 at (56.90,12.32) startOffset 0 endOffset 7 height 119.00: " a Path"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 68x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 68x13
@@ -33,20 +33,20 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (35,80) size 100x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 100x13
             chunk 1 text run 1 at (35.00,80.00) startOffset 0 endOffset 24 width 100.00: "glyph-orientation=\"auto\""
-      RenderSVGContainer {g} at (146,66) size 141x119 [transform={m=((1.00,0.00)(0.00,1.00)) t=(150.00,70.00)}]
+      RenderSVGContainer {g} at (142,66) size 145x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(150.00,70.00)}]
         RenderSVGContainer {use} at (164.89,77.29) size 120.11x30.43
           RenderSVGContainer {g} at (164.89,77.29) size 120.11x30.43
             RenderPath {path} at (164.89,77.29) size 120.11x30.43 [transform={m=((0.15,0.00)(0.00,0.15)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M100.00,200.00C200.00,100.00,300.00,0.00,400.00,100.00C500.00,200.00,600.00,300.00,700.00,200.00C800.00,100.00,900.00,100.00,900.00,100.00"]
-        RenderSVGText {text} at (-5,17) size 109x119 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 109x119
-            RenderSVGInlineText {#text} at (1,-21) size 9x85
-              chunk 1 (middle anchor, vertical) text run 1 at (-4.50,17.00) startOffset 0 endOffset 5 height 85.00: "Text "
-            RenderSVGTSpan {tspan} at (0,0) size 8x35
-              RenderSVGInlineText {#text} at (11,63) size 8x35
-                chunk 1 (middle anchor, vertical) text run 2 at (-4.00,102.00) startOffset 0 endOffset 2 height 34.00: "on"
-            RenderSVGTSpan {tspan} at (0,0) size 101x44
-              RenderSVGInlineText {#text} at (9,-12) size 101x44
-                chunk 1 (middle anchor, vertical) text run 3 at (19.05,26.15) startOffset 0 endOffset 7 height 119.00: " a Path"
+        RenderSVGText {text} at (0,0) size 124x100 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 124x100
+            RenderSVGInlineText {#text} at (-8,-4) size 17x74
+              chunk 1 (middle anchor, vertical) text run 1 at (0.00,0.00) startOffset 0 endOffset 5 height 85.00: "Text "
+            RenderSVGTSpan {tspan} at (0,0) size 17x26
+              RenderSVGInlineText {#text} at (-8,70) size 17x26
+                chunk 1 (middle anchor, vertical) text run 2 at (0.00,85.00) startOffset 0 endOffset 2 height 34.00: "on"
+            RenderSVGTSpan {tspan} at (0,0) size 103x33
+              RenderSVGInlineText {#text} at (13,5) size 103x33
+                chunk 1 (middle anchor, vertical) text run 3 at (21.05,9.15) startOffset 0 endOffset 7 height 119.00: " a Path"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 68x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 68x13
@@ -57,20 +57,20 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (35,80) size 102x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 102x13
             chunk 1 text run 1 at (35.00,80.00) startOffset 0 endOffset 24 width 102.00: "glyph-orientation=\"0deg\""
-      RenderSVGContainer {g} at (296,66) size 151x170 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,70.00)}]
+      RenderSVGContainer {g} at (292,66) size 155x159 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,70.00)}]
         RenderSVGContainer {use} at (314.89,77.29) size 120.11x30.43
           RenderSVGContainer {g} at (314.89,77.29) size 120.11x30.43
             RenderPath {path} at (314.89,77.29) size 120.11x30.43 [transform={m=((0.15,0.00)(0.00,0.15)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M100.00,200.00C200.00,100.00,300.00,0.00,400.00,100.00C500.00,200.00,600.00,300.00,700.00,200.00C800.00,100.00,900.00,100.00,900.00,100.00"]
-        RenderSVGText {text} at (-5,17) size 87x170 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 87x170
-            RenderSVGInlineText {#text} at (1,-21) size 9x85
-              chunk 1 (end anchor, vertical) text run 1 at (-4.50,17.00) startOffset 0 endOffset 5 height 85.00: "Text "
-            RenderSVGTSpan {tspan} at (0,0) size 8x35
-              RenderSVGInlineText {#text} at (11,63) size 8x35
-                chunk 1 (end anchor, vertical) text run 2 at (-4.00,102.00) startOffset 0 endOffset 2 height 34.00: "on"
-            RenderSVGTSpan {tspan} at (0,0) size 86x160
-              RenderSVGInlineText {#text} at (2,-11) size 86x160
-                chunk 1 (end anchor, vertical) text run 3 at (-3.50,27.16) startOffset 0 endOffset 7 height 119.00: " a Path"
+        RenderSVGText {text} at (0,0) size 83x159 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 83x159
+            RenderSVGInlineText {#text} at (-8,-4) size 17x74
+              chunk 1 (end anchor, vertical) text run 1 at (0.00,0.00) startOffset 0 endOffset 5 height 85.00: "Text "
+            RenderSVGTSpan {tspan} at (0,0) size 17x26
+              RenderSVGInlineText {#text} at (-8,70) size 17x26
+                chunk 1 (end anchor, vertical) text run 2 at (0.00,85.00) startOffset 0 endOffset 2 height 34.00: "on"
+            RenderSVGTSpan {tspan} at (0,0) size 83x151
+              RenderSVGInlineText {#text} at (-8,4) size 83x151
+                chunk 1 (end anchor, vertical) text run 3 at (0.00,10.16) startOffset 0 endOffset 7 height 119.00: " a Path"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 73x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 73x13
@@ -81,20 +81,20 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (35,80) size 112x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 112x13
             chunk 1 text run 1 at (35.00,80.00) startOffset 0 endOffset 26 width 112.00: "glyph-orientation=\"180deg\""
-      RenderSVGContainer {g} at (14.89,177.29) size 132.11x192.71 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,170.00)}]
+      RenderSVGContainer {g} at (14.89,176) size 132.11x77 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,170.00)}]
         RenderSVGContainer {use} at (14.89,177.29) size 120.11x30.43
           RenderSVGContainer {g} at (14.89,177.29) size 120.11x30.43
             RenderPath {path} at (14.89,177.29) size 120.11x30.43 [transform={m=((0.15,0.00)(0.00,0.15)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M100.00,200.00C200.00,100.00,300.00,0.00,400.00,100.00C500.00,200.00,600.00,300.00,700.00,200.00C800.00,100.00,900.00,100.00,900.00,100.00"]
-        RenderSVGText {text} at (74,34) size 58x187 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 58x187
-            RenderSVGInlineText {#text} at (3,-21) size 47x37
-              chunk 1 (vertical) text run 1 at (74.72,34.60) startOffset 0 endOffset 5 height 85.00: "Text "
-            RenderSVGTSpan {tspan} at (0,0) size 14x36
-              RenderSVGInlineText {#text} at (47,8) size 14x36
-                chunk 1 (vertical) text run 2 at (119.61,68.60) startOffset 0 endOffset 2 height 34.00: "on"
-            RenderSVGTSpan {tspan} at (0,0) size 9x119
-              RenderSVGInlineText {#text} at (45,47) size 9x119
-                chunk 1 (vertical) text run 3 at (119.61,102.60) startOffset 0 endOffset 7 height 119.00: " a Path"
+        RenderSVGText {text} at (75,15) size 70x40 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 70x40
+            RenderSVGInlineText {#text} at (-5,7) size 39x24
+              chunk 1 (vertical) text run 1 at (75.93,29.60) startOffset 0 endOffset 5 height 85.00: "Text "
+            RenderSVGTSpan {tspan} at (0,0) size 25x24
+              RenderSVGInlineText {#text} at (16,-9) size 25x24
+                chunk 1 (vertical) text run 2 at (104.30,25.33) startOffset 0 endOffset 2 height 34.00: "on"
+            RenderSVGTSpan {tspan} at (0,0) size 28x37
+              RenderSVGInlineText {#text} at (37,-9) size 28x37
+                chunk 1 (vertical) text run 3 at (115.14,15.51) startOffset 0 endOffset 7 height 119.00: " a Path"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 73x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 73x13
@@ -105,20 +105,20 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (35,80) size 112x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 112x13
             chunk 1 text run 1 at (35.00,80.00) startOffset 0 endOffset 26 width 112.00: "glyph-orientation=\"270deg\""
-      RenderSVGContainer {g} at (146,166) size 141x87 [transform={m=((1.00,0.00)(0.00,1.00)) t=(150.00,170.00)}]
+      RenderSVGContainer {g} at (142,164) size 145x89 [transform={m=((1.00,0.00)(0.00,1.00)) t=(150.00,170.00)}]
         RenderSVGContainer {use} at (164.89,177.29) size 120.11x30.43
           RenderSVGContainer {g} at (164.89,177.29) size 120.11x30.43
             RenderPath {path} at (164.89,177.29) size 120.11x30.43 [transform={m=((0.15,0.00)(0.00,0.15)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M100.00,200.00C200.00,100.00,300.00,0.00,400.00,100.00C500.00,200.00,600.00,300.00,700.00,200.00C800.00,100.00,900.00,100.00,900.00,100.00"]
-        RenderSVGText {text} at (-5,17) size 129x85 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 129x85
-            RenderSVGInlineText {#text} at (1,-21) size 40x51
-              chunk 1 (middle anchor, vertical) text run 1 at (-4.50,17.00) startOffset 0 endOffset 5 height 85.00: "Text "
-            RenderSVGTSpan {tspan} at (0,0) size 30x36
-              RenderSVGInlineText {#text} at (65,-6) size 30x36
-                chunk 1 (middle anchor, vertical) text run 2 at (49.23,27.16) startOffset 0 endOffset 2 height 34.00: "on"
-            RenderSVGTSpan {tspan} at (0,0) size 46x70
-              RenderSVGInlineText {#text} at (84,-6) size 46x70
-                chunk 1 (middle anchor, vertical) text run 3 at (77.22,34.60) startOffset 0 endOffset 7 height 119.00: " a Path"
+        RenderSVGText {text} at (0,0) size 141x81 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 141x81
+            RenderSVGInlineText {#text} at (-8,-4) size 53x42
+              chunk 1 (middle anchor, vertical) text run 1 at (0.00,0.00) startOffset 0 endOffset 5 height 85.00: "Text "
+            RenderSVGTSpan {tspan} at (0,0) size 35x29
+              RenderSVGInlineText {#text} at (47,-6) size 35x29
+                chunk 1 (middle anchor, vertical) text run 2 at (53.23,10.16) startOffset 0 endOffset 2 height 34.00: "on"
+            RenderSVGTSpan {tspan} at (0,0) size 63x65
+              RenderSVGInlineText {#text} at (70,10) size 63x65
+                chunk 1 (middle anchor, vertical) text run 3 at (79.22,17.60) startOffset 0 endOffset 7 height 119.00: " a Path"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 73x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 73x13
@@ -129,20 +129,20 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (35,80) size 102x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 102x13
             chunk 1 text run 1 at (35.00,80.00) startOffset 0 endOffset 24 width 102.00: "glyph-orientation=\"0deg\""
-      RenderSVGContainer {g} at (296,166) size 146x102 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,170.00)}]
+      RenderSVGContainer {g} at (314.89,173) size 127.11x80 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,170.00)}]
         RenderSVGContainer {use} at (314.89,177.29) size 120.11x30.43
           RenderSVGContainer {g} at (314.89,177.29) size 120.11x30.43
             RenderPath {path} at (314.89,177.29) size 120.11x30.43 [transform={m=((0.15,0.00)(0.00,0.15)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M100.00,200.00C200.00,100.00,300.00,0.00,400.00,100.00C500.00,200.00,600.00,300.00,700.00,200.00C800.00,100.00,900.00,100.00,900.00,100.00"]
-        RenderSVGText {text} at (-5,17) size 133x102 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 133x102
-            RenderSVGInlineText {#text} at (1,-21) size 9x85
-              chunk 1 (end anchor, vertical) text run 1 at (-4.50,17.00) startOffset 0 endOffset 5 height 85.00: "Text "
-            RenderSVGTSpan {tspan} at (0,0) size 26x90
-              RenderSVGInlineText {#text} at (11,-9) size 26x90
-                chunk 1 (end anchor, vertical) text run 2 at (-4.00,36.62) startOffset 0 endOffset 2 height 34.00: "on"
-            RenderSVGTSpan {tspan} at (0,0) size 100x45
-              RenderSVGInlineText {#text} at (34,-12) size 100x45
-                chunk 1 (end anchor, vertical) text run 3 at (37.84,27.21) startOffset 0 endOffset 7 height 119.00: " a Path"
+        RenderSVGText {text} at (55,11) size 83x41 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 83x41
+            RenderSVGInlineText {#text} at (-5,-8) size 34x35
+              chunk 1 (end anchor, vertical) text run 1 at (55.21,11.19) startOffset 0 endOffset 5 height 85.00: "Text "
+            RenderSVGTSpan {tspan} at (0,0) size 20x21
+              RenderSVGInlineText {#text} at (25,4) size 20x21
+                chunk 1 (end anchor, vertical) text run 2 at (79.00,31.74) startOffset 0 endOffset 2 height 34.00: "on"
+            RenderSVGTSpan {tspan} at (0,0) size 40x38
+              RenderSVGInlineText {#text} at (38,-5) size 40x38
+                chunk 1 (end anchor, vertical) text run 3 at (92.05,18.07) startOffset 0 endOffset 7 height 119.00: " a Path"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 78x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 78x13
@@ -153,20 +153,20 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (35,80) size 107x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 107x13
             chunk 1 text run 1 at (35.00,80.00) startOffset 0 endOffset 25 width 107.00: "glyph-orientation=\"90deg\""
-      RenderSVGContainer {g} at (14.89,275) size 132.11x162 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,270.00)}]
+      RenderSVGContainer {g} at (14.89,272) size 132.11x156 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,270.00)}]
         RenderSVGContainer {use} at (14.89,277.29) size 120.11x30.43
           RenderSVGContainer {g} at (14.89,277.29) size 120.11x30.43
             RenderPath {path} at (14.89,277.29) size 120.11x30.43 [transform={m=((0.15,0.00)(0.00,0.15)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M100.00,200.00C200.00,100.00,300.00,0.00,400.00,100.00C500.00,200.00,600.00,300.00,700.00,200.00C800.00,100.00,900.00,100.00,900.00,100.00"]
-        RenderSVGText {text} at (46,26) size 85x162 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 85x162
-            RenderSVGInlineText {#text} at (1,-21) size 58x44
-              chunk 1 (vertical) text run 1 at (46.63,26.40) startOffset 0 endOffset 5 height 85.00: "Text "
-            RenderSVGTSpan {tspan} at (0,0) size 15x36
-              RenderSVGInlineText {#text} at (71,-18) size 15x36
-                chunk 1 (vertical) text run 2 at (117.54,35.46) startOffset 0 endOffset 2 height 34.00: "on"
-            RenderSVGTSpan {tspan} at (0,0) size 9x120
-              RenderSVGInlineText {#text} at (71,21) size 9x120
-                chunk 1 (vertical) text run 3 at (117.54,69.46) startOffset 0 endOffset 7 height 119.00: " a Path"
+        RenderSVGText {text} at (51,9) size 89x156 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 89x156
+            RenderSVGInlineText {#text} at (-10,-7) size 74x37
+              chunk 1 (vertical) text run 1 at (51.13,9.40) startOffset 0 endOffset 5 height 85.00: "Text "
+            RenderSVGTSpan {tspan} at (0,0) size 19x31
+              RenderSVGInlineText {#text} at (57,-7) size 19x31
+                chunk 1 (vertical) text run 2 at (121.54,18.46) startOffset 0 endOffset 2 height 34.00: "on"
+            RenderSVGTSpan {tspan} at (0,0) size 17x108
+              RenderSVGInlineText {#text} at (62,41) size 17x108
+                chunk 1 (vertical) text run 3 at (121.54,52.46) startOffset 0 endOffset 7 height 119.00: " a Path"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 65x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 65x13
@@ -177,20 +177,20 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (35,80) size 112x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 112x13
             chunk 1 text run 1 at (35.00,80.00) startOffset 0 endOffset 26 width 112.00: "glyph-orientation=\"180deg\""
-      RenderSVGContainer {g} at (146,266) size 139x85 [transform={m=((1.00,0.00)(0.00,1.00)) t=(150.00,270.00)}]
+      RenderSVGContainer {g} at (150,262) size 135x81 [transform={m=((1.00,0.00)(0.00,1.00)) t=(150.00,270.00)}]
         RenderSVGContainer {use} at (164.89,277.29) size 120.11x30.43
           RenderSVGContainer {g} at (164.89,277.29) size 120.11x30.43
             RenderPath {path} at (164.89,277.29) size 120.11x30.43 [transform={m=((0.15,0.00)(0.00,0.15)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M100.00,200.00C200.00,100.00,300.00,0.00,400.00,100.00C500.00,200.00,600.00,300.00,700.00,200.00C800.00,100.00,900.00,100.00,900.00,100.00"]
-        RenderSVGText {text} at (-5,17) size 127x85 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 127x85
-            RenderSVGInlineText {#text} at (1,-21) size 9x85
-              chunk 1 (middle anchor, vertical) text run 1 at (-4.50,17.00) startOffset 0 endOffset 5 height 85.00: "Text "
-            RenderSVGTSpan {tspan} at (0,0) size 34x29
-              RenderSVGInlineText {#text} at (15,-16) size 34x29
-                chunk 1 (middle anchor, vertical) text run 2 at (17.77,29.66) startOffset 0 endOffset 2 height 34.00: "on"
-            RenderSVGTSpan {tspan} at (0,0) size 73x44
-              RenderSVGInlineText {#text} at (55,-12) size 73x44
-                chunk 1 (middle anchor, vertical) text run 3 at (49.13,26.40) startOffset 0 endOffset 7 height 119.00: " a Path"
+        RenderSVGText {text} at (0,0) size 84x47 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 84x47
+            RenderSVGInlineText {#text} at (0,-8) size 37x41
+              chunk 1 (middle anchor, vertical) text run 1 at (0.00,0.00) startOffset 0 endOffset 5 height 85.00: "Text "
+            RenderSVGTSpan {tspan} at (0,0) size 24x23
+              RenderSVGInlineText {#text} at (20,-8) size 24x23
+                chunk 1 (middle anchor, vertical) text run 2 at (30.83,11.21) startOffset 0 endOffset 2 height 34.00: "on"
+            RenderSVGTSpan {tspan} at (0,0) size 41x39
+              RenderSVGInlineText {#text} at (43,0) size 41x39
+                chunk 1 (middle anchor, vertical) text run 3 at (43.21,8.90) startOffset 0 endOffset 7 height 119.00: " a Path"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 65x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 65x13
@@ -198,20 +198,20 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (35,70) size 86x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 86x13
             chunk 1 text run 1 at (35.00,70.00) startOffset 0 endOffset 20 width 86.00: "text-anchor=\"middle\""
-      RenderSVGContainer {g} at (296,266) size 146x204 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,270.00)}]
+      RenderSVGContainer {g} at (300,261) size 142x92 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,270.00)}]
         RenderSVGContainer {use} at (314.89,277.29) size 120.11x30.43
           RenderSVGContainer {g} at (314.89,277.29) size 120.11x30.43
             RenderPath {path} at (314.89,277.29) size 120.11x30.43 [transform={m=((0.15,0.00)(0.00,0.15)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M100.00,200.00C200.00,100.00,300.00,0.00,400.00,100.00C500.00,200.00,600.00,300.00,700.00,200.00C800.00,100.00,900.00,100.00,900.00,100.00"]
-        RenderSVGText {text} at (-5,17) size 39x204 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 39x204
-            RenderSVGInlineText {#text} at (1,-21) size 9x85
-              chunk 1 (end anchor, vertical) text run 1 at (-4.50,17.00) startOffset 0 endOffset 5 height 85.00: "Text "
-            RenderSVGTSpan {tspan} at (0,0) size 8x35
-              RenderSVGInlineText {#text} at (11,63) size 8x35
-                chunk 1 (end anchor, vertical) text run 2 at (-4.00,102.00) startOffset 0 endOffset 2 height 34.00: "on"
-            RenderSVGTSpan {tspan} at (0,0) size 39x193
-              RenderSVGInlineText {#text} at (1,-10) size 39x193
-                chunk 1 (end anchor, vertical) text run 3 at (-4.00,29.66) startOffset 0 endOffset 7 height 119.00: " a Path"
+        RenderSVGText {text} at (0,0) size 42x76 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 42x76
+            RenderSVGInlineText {#text} at (0,-9) size 9x45
+              chunk 1 (end anchor, vertical) text run 1 at (0.00,0.00) startOffset 0 endOffset 5 height 85.00: "Text "
+            RenderSVGTSpan {tspan} at (0,0) size 8x25
+              RenderSVGInlineText {#text} at (0,13) size 8x25
+                chunk 1 (end anchor, vertical) text run 2 at (0.00,32.00) startOffset 0 endOffset 2 height 34.00: "on"
+            RenderSVGTSpan {tspan} at (0,0) size 42x64
+              RenderSVGInlineText {#text} at (0,3) size 42x64
+                chunk 1 (end anchor, vertical) text run 3 at (0.00,15.18) startOffset 0 endOffset 7 height 119.00: " a Path"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 65x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 65x13
@@ -222,22 +222,22 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (35,80) size 107x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 107x13
             chunk 1 text run 1 at (35.00,80.00) startOffset 0 endOffset 25 width 107.00: "glyph-orientation=\"90deg\""
-      RenderSVGContainer {g} at (18,370.67) size 132x262.33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,370.00)}]
+      RenderSVGContainer {g} at (22,370.67) size 118x87.33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,370.00)}]
         RenderSVGContainer {use} at (39.70,370.67) size 90.60x49.33
           RenderSVGContainer {g} at (39.70,370.67) size 90.60x49.33
             RenderPath {path} at (39.70,370.67) size 90.60x49.33 [transform={m=((0.30,0.00)(0.00,0.50)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M100.00,100.00C100.00,0.00,400.00,0.00,400.00,100.00"]
-        RenderSVGText {text} at (27,29) size 132x257 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 132x257
-            RenderSVGTSpan {tspan} at (0,0) size 93x43
-              RenderSVGInlineText {#text} at (-19,-23) size 93x43
-                chunk 1 (vertical) text run 1 at (27.93,29.80) startOffset 0 endOffset 5 height 85.00: "super"
-            RenderSVGInlineText {#text} at (75,-12) size 38x84
-              chunk 1 (vertical) text run 2 at (99.82,36.19) startOffset 0 endOffset 5 height 85.00: " and "
-            RenderSVGTSpan {tspan} at (0,0) size 19x44
-              RenderSVGInlineText {#text} at (92,74) size 19x44
-                chunk 1 (vertical) text run 3 at (115.84,114.39) startOffset 0 endOffset 3 height 51.00: "sub"
-            RenderSVGInlineText {#text} at (97,114) size 8x120
-              chunk 1 (vertical) text run 4 at (124.34,165.39) startOffset 0 endOffset 7 height 119.00: "scripts"
+        RenderSVGText {text} at (30,12) size 118x48 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 118x48
+            RenderSVGTSpan {tspan} at (0,0) size 36x42
+              RenderSVGInlineText {#text} at (-18,-8) size 36x42
+                chunk 1 (vertical) text run 1 at (30.11,22.60) startOffset 0 endOffset 5 height 85.00: "super"
+            RenderSVGInlineText {#text} at (13,-9) size 36x23
+              chunk 1 (vertical) text run 2 at (46.80,12.55) startOffset 0 endOffset 5 height 85.00: " and "
+            RenderSVGTSpan {tspan} at (0,0) size 23x21
+              RenderSVGInlineText {#text} at (47,0) size 23x21
+                chunk 1 (vertical) text run 3 at (77.44,12.55) startOffset 0 endOffset 3 height 51.00: "sub"
+            RenderSVGInlineText {#text} at (66,-3) size 34x42
+              chunk 1 (vertical) text run 4 at (98.71,17.58) startOffset 0 endOffset 7 height 119.00: "scripts"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (20,65) size 88x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 88x13
@@ -248,20 +248,20 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (20,85) size 100x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 100x13
             chunk 1 text run 1 at (20.00,85.00) startOffset 0 endOffset 24 width 100.00: "glyph-orientation=\"auto\""
-      RenderSVGContainer {g} at (306,370.67) size 133x279.33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,370.00)}]
+      RenderSVGContainer {g} at (318,370.67) size 109x77.33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(300.00,370.00)}]
         RenderSVGContainer {use} at (329.70,370.67) size 90.60x49.33
           RenderSVGContainer {g} at (329.70,370.67) size 90.60x49.33
             RenderPath {path} at (329.70,370.67) size 90.60x49.33 [transform={m=((0.30,0.00)(0.00,0.50)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M100.00,100.00C100.00,0.00,400.00,0.00,400.00,100.00"]
-        RenderSVGText {text} at (26,29) size 133x273 contains 1 chunk(s)
-          RenderSVGTextPath {textPath} at (0,0) size 133x273
-            RenderSVGTSpan {tspan} at (0,0) size 133x66
-              RenderSVGInlineText {#text} at (-20,-22) size 133x66
-                chunk 1 (vertical) text run 1 at (26.93,29.80) startOffset 0 endOffset 8 height 136.00: "positive"
-            RenderSVGInlineText {#text} at (86,29) size 9x86
-              chunk 1 (vertical) text run 2 at (112.84,80.39) startOffset 0 endOffset 5 height 85.00: " and "
-            RenderSVGTSpan {tspan} at (0,0) size 9x137
-              RenderSVGInlineText {#text} at (83,114) size 9x137
-                chunk 1 (vertical) text run 3 at (112.84,165.39) startOffset 0 endOffset 8 height 136.00: "negative"
+        RenderSVGText {text} at (30,12) size 109x54 contains 1 chunk(s)
+          RenderSVGTextPath {textPath} at (0,0) size 109x54
+            RenderSVGTSpan {tspan} at (0,0) size 46x45
+              RenderSVGInlineText {#text} at (-12,-10) size 46x45
+                chunk 1 (vertical) text run 1 at (30.20,15.88) startOffset 0 endOffset 8 height 136.00: "positive"
+            RenderSVGInlineText {#text} at (30,-9) size 35x20
+              chunk 1 (vertical) text run 2 at (60.59,12.52) startOffset 0 endOffset 5 height 85.00: " and "
+            RenderSVGTSpan {tspan} at (0,0) size 38x47
+              RenderSVGInlineText {#text} at (59,-3) size 38x47
+                chunk 1 (vertical) text run 3 at (93.14,15.35) startOffset 0 endOffset 8 height 136.00: "negative"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (20,65) size 97x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 97x13
@@ -269,19 +269,19 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (20,75) size 100x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 100x13
             chunk 1 text run 1 at (20.00,75.00) startOffset 0 endOffset 24 width 100.00: "glyph-orientation=\"auto\""
-      RenderSVGContainer {g} at (180,358.75) size 108x266.25 [transform={m=((1.00,0.00)(0.00,1.00)) t=(180.00,370.00)}]
-        RenderSVGContainer {g} at (183.75,358.75) size 104.25x266.25 [transform={m=((0.75,0.00)(0.00,0.75)) t=(0.00,0.00)}]
+      RenderSVGContainer {g} at (180,359.50) size 100x123.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(180.00,370.00)}]
+        RenderSVGContainer {g} at (180,359.50) size 90.23x90 [transform={m=((0.75,0.00)(0.00,0.75)) t=(0.00,0.00)}]
           RenderSVGContainer {use} at (202.27,370.50) size 67.95x37
             RenderSVGContainer {g} at (202.27,370.50) size 67.95x37
               RenderPath {path} at (202.27,370.50) size 67.95x37 [transform={m=((0.30,0.00)(0.00,0.50)) t=(0.00,0.00)}] [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [data="M100.00,100.00C100.00,0.00,400.00,0.00,400.00,100.00"]
-          RenderSVGText {text} at (5,3) size 139x355 contains 1 chunk(s)
-            RenderSVGInlineText {#text} at (0,-18) size 10x276
-              chunk 1 (vertical) text run 1 at (5.00,3.00) startOffset 0 endOffset 12 height 276.00: "before path "
-            RenderSVGTextPath {textPath} at (0,0) size 134x106
-              RenderSVGInlineText {#text} at (5,3) size 134x106
-                chunk 1 (vertical) text run 2 at (33.14,35.71) startOffset 0 endOffset 7 height 161.00: "on path"
-            RenderSVGInlineText {#text} at (107,106) size 10x231
-              chunk 1 (vertical) text run 3 at (112.22,127.87) startOffset 0 endOffset 10 height 230.00: "after path"
+          RenderSVGText {text} at (-13,-15) size 91x120 contains 1 chunk(s)
+            RenderSVGInlineText {#text} at (13,1) size 23x96
+              chunk 1 (vertical) text run 1 at (-13.00,-15.00) startOffset 0 endOffset 12 height 276.00: "before path "
+            RenderSVGTextPath {textPath} at (0,0) size 65x38
+              RenderSVGInlineText {#text} at (36,15) size 65x38
+                chunk 1 (vertical) text run 2 at (34.39,12.55) startOffset 0 endOffset 7 height 161.00: "on path"
+            RenderSVGInlineText {#text} at (80,42) size 24x79
+              chunk 1 (vertical) text run 3 at (54.56,27.55) startOffset 0 endOffset 10 height 230.00: "after path"
         RenderSVGText {text} at (0,100) size 98x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 98x13
             chunk 1 text run 1 at (0.00,100.00) startOffset 0 endOffset 26 width 98.00: "text before/after textPath"
index eb370ad..a893cda 100644 (file)
@@ -2,27 +2,27 @@ layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderSVGRoot {svg} at (0.83,0.83) size 798.33x598.33
-    RenderSVGContainer {g} at (8.33,6.67) size 775x528.33
+    RenderSVGContainer {g} at (8.33,6.67) size 775x518.33
       RenderSVGText {text} at (5,40) size 465x44 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-36) size 465x44
           chunk 1 text run 1 at (5.00,40.00) startOffset 0 endOffset 29 width 465.00: "Test 'text-anchor' (vertical)"
-      RenderSVGContainer {g} at (253.33,95) size 195x440
-        RenderSVGContainer {g} at (253.33,95) size 195x440 [transform={m=((1.00,0.00)(0.00,1.00)) t=(160.00,150.00)}]
-          RenderSVGContainer {g} at (253.33,245) size 28.33x290
+      RenderSVGContainer {g} at (253.33,85) size 195x440
+        RenderSVGContainer {g} at (253.33,85) size 195x440 [transform={m=((1.00,0.00)(0.00,1.00)) t=(160.00,150.00)}]
+          RenderSVGContainer {g} at (253.33,245) size 28.33x280
             RenderPath {circle} at (261.67,245) size 10x10 [fill={[type=SOLID] [color=#000000]}] [data="M3.00,0.00L2.99,0.19L2.98,0.38L2.95,0.56L2.91,0.75L2.85,0.93L2.79,1.10L2.71,1.28L2.63,1.45L2.53,1.61L2.43,1.76L2.31,1.91L2.19,2.05L2.05,2.19L1.91,2.31L1.76,2.43L1.61,2.53L1.45,2.63L1.28,2.71L1.10,2.79L0.93,2.85L0.75,2.91L0.56,2.95L0.38,2.98L0.19,2.99L-0.00,3.00L-0.19,2.99L-0.38,2.98L-0.56,2.95L-0.75,2.91L-0.93,2.85L-1.10,2.79L-1.28,2.71L-1.45,2.63L-1.61,2.53L-1.76,2.43L-1.91,2.31L-2.05,2.19L-2.19,2.05L-2.31,1.91L-2.43,1.76L-2.53,1.61L-2.63,1.45L-2.71,1.28L-2.79,1.10L-2.85,0.93L-2.91,0.75L-2.95,0.56L-2.98,0.38L-2.99,0.19L-3.00,-0.00L-2.99,-0.19L-2.98,-0.38L-2.95,-0.56L-2.91,-0.75L-2.85,-0.93L-2.79,-1.10L-2.71,-1.28L-2.63,-1.45L-2.53,-1.61L-2.43,-1.76L-2.31,-1.91L-2.19,-2.05L-2.05,-2.19L-1.91,-2.31L-1.76,-2.43L-1.61,-2.53L-1.45,-2.63L-1.28,-2.71L-1.10,-2.79L-0.93,-2.85L-0.75,-2.91L-0.56,-2.95L-0.38,-2.98L-0.19,-2.99L0.00,-3.00L0.19,-2.99L0.38,-2.98L0.56,-2.95L0.75,-2.91L0.93,-2.85L1.10,-2.79L1.28,-2.71L1.45,-2.63L1.61,-2.53L1.76,-2.43L1.91,-2.31L2.05,-2.19L2.19,-2.05L2.31,-1.91L2.43,-1.76L2.53,-1.61L2.63,-1.45L2.71,-1.28L2.79,-1.10L2.85,-0.93L2.91,-0.75L2.95,-0.56L2.98,-0.38L2.99,-0.19"]
-            RenderSVGText {text} at (-9,33) size 17x165 contains 1 chunk(s)
+            RenderSVGText {text} at (-9,27) size 17x165 contains 1 chunk(s)
               RenderSVGInlineText {#text} at (1,-27) size 17x165
-                chunk 1 (vertical) text run 1 at (-8.50,33.00) startOffset 0 endOffset 5 height 165.00: "start"
-          RenderSVGContainer {g} at (330,95) size 41.67x330 [transform={m=((1.00,0.00)(0.00,1.00)) t=(50.00,0.00)}]
+                chunk 1 (vertical) text run 1 at (-8.50,27.00) startOffset 0 endOffset 5 height 165.00: "start"
+          RenderSVGContainer {g} at (330,85) size 41.67x330 [transform={m=((1.00,0.00)(0.00,1.00)) t=(50.00,0.00)}]
             RenderPath {circle} at (345,245) size 10x10 [fill={[type=SOLID] [color=#000000]}] [data="M3.00,0.00L2.99,0.19L2.98,0.38L2.95,0.56L2.91,0.75L2.85,0.93L2.79,1.10L2.71,1.28L2.63,1.45L2.53,1.61L2.43,1.76L2.31,1.91L2.19,2.05L2.05,2.19L1.91,2.31L1.76,2.43L1.61,2.53L1.45,2.63L1.28,2.71L1.10,2.79L0.93,2.85L0.75,2.91L0.56,2.95L0.38,2.98L0.19,2.99L-0.00,3.00L-0.19,2.99L-0.38,2.98L-0.56,2.95L-0.75,2.91L-0.93,2.85L-1.10,2.79L-1.28,2.71L-1.45,2.63L-1.61,2.53L-1.76,2.43L-1.91,2.31L-2.05,2.19L-2.19,2.05L-2.31,1.91L-2.43,1.76L-2.53,1.61L-2.63,1.45L-2.71,1.28L-2.79,1.10L-2.85,0.93L-2.91,0.75L-2.95,0.56L-2.98,0.38L-2.99,0.19L-3.00,-0.00L-2.99,-0.19L-2.98,-0.38L-2.95,-0.56L-2.91,-0.75L-2.85,-0.93L-2.79,-1.10L-2.71,-1.28L-2.63,-1.45L-2.53,-1.61L-2.43,-1.76L-2.31,-1.91L-2.19,-2.05L-2.05,-2.19L-1.91,-2.31L-1.76,-2.43L-1.61,-2.53L-1.45,-2.63L-1.28,-2.71L-1.10,-2.79L-0.93,-2.85L-0.75,-2.91L-0.56,-2.95L-0.38,-2.98L-0.19,-2.99L0.00,-3.00L0.19,-2.99L0.38,-2.98L0.56,-2.95L0.75,-2.91L0.93,-2.85L1.10,-2.79L1.28,-2.71L1.45,-2.63L1.61,-2.53L1.76,-2.43L1.91,-2.31L2.05,-2.19L2.19,-2.05L2.31,-1.91L2.43,-1.76L2.53,-1.61L2.63,-1.45L2.71,-1.28L2.79,-1.10L2.85,-0.93L2.91,-0.75L2.95,-0.56L2.98,-0.38L2.99,-0.19"]
-            RenderSVGText {text} at (-13,-66) size 25x198 contains 1 chunk(s)
+            RenderSVGText {text} at (-13,-72) size 25x198 contains 1 chunk(s)
               RenderSVGInlineText {#text} at (1,-27) size 25x198
-                chunk 1 (middle anchor, vertical) text run 1 at (-12.50,-66.00) startOffset 0 endOffset 6 height 198.00: "middle"
-          RenderSVGContainer {g} at (420.00,95) size 28.33x165 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,0.00)}]
+                chunk 1 (middle anchor, vertical) text run 1 at (-12.50,-72.00) startOffset 0 endOffset 6 height 198.00: "middle"
+          RenderSVGContainer {g} at (420.00,85) size 28.33x170 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,0.00)}]
             RenderPath {circle} at (428.33,245) size 10x10 [fill={[type=SOLID] [color=#000000]}] [data="M3.00,0.00L2.99,0.19L2.98,0.38L2.95,0.56L2.91,0.75L2.85,0.93L2.79,1.10L2.71,1.28L2.63,1.45L2.53,1.61L2.43,1.76L2.31,1.91L2.19,2.05L2.05,2.19L1.91,2.31L1.76,2.43L1.61,2.53L1.45,2.63L1.28,2.71L1.10,2.79L0.93,2.85L0.75,2.91L0.56,2.95L0.38,2.98L0.19,2.99L-0.00,3.00L-0.19,2.99L-0.38,2.98L-0.56,2.95L-0.75,2.91L-0.93,2.85L-1.10,2.79L-1.28,2.71L-1.45,2.63L-1.61,2.53L-1.76,2.43L-1.91,2.31L-2.05,2.19L-2.19,2.05L-2.31,1.91L-2.43,1.76L-2.53,1.61L-2.63,1.45L-2.71,1.28L-2.79,1.10L-2.85,0.93L-2.91,0.75L-2.95,0.56L-2.98,0.38L-2.99,0.19L-3.00,-0.00L-2.99,-0.19L-2.98,-0.38L-2.95,-0.56L-2.91,-0.75L-2.85,-0.93L-2.79,-1.10L-2.71,-1.28L-2.63,-1.45L-2.53,-1.61L-2.43,-1.76L-2.31,-1.91L-2.19,-2.05L-2.05,-2.19L-1.91,-2.31L-1.76,-2.43L-1.61,-2.53L-1.45,-2.63L-1.28,-2.71L-1.10,-2.79L-0.93,-2.85L-0.75,-2.91L-0.56,-2.95L-0.38,-2.98L-0.19,-2.99L0.00,-3.00L0.19,-2.99L0.38,-2.98L0.56,-2.95L0.75,-2.91L0.93,-2.85L1.10,-2.79L1.28,-2.71L1.45,-2.63L1.61,-2.53L1.76,-2.43L1.91,-2.31L2.05,-2.19L2.19,-2.05L2.31,-1.91L2.43,-1.76L2.53,-1.61L2.63,-1.45L2.71,-1.28L2.79,-1.10L2.85,-0.93L2.91,-0.75L2.95,-0.56L2.98,-0.38L2.99,-0.19"]
-            RenderSVGText {text} at (-9,-66) size 17x99 contains 1 chunk(s)
+            RenderSVGText {text} at (-9,-72) size 17x99 contains 1 chunk(s)
               RenderSVGInlineText {#text} at (1,-27) size 17x99
-                chunk 1 (end anchor, vertical) text run 1 at (-8.50,-66.00) startOffset 0 endOffset 3 height 99.00: "end"
+                chunk 1 (end anchor, vertical) text run 1 at (-8.50,-72.00) startOffset 0 endOffset 3 height 99.00: "end"
     RenderSVGText {text} at (10,340) size 264x46 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-36) size 264x46
         chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 264.00: "$Revision: 1.5 $"
index 7e55a91..71d5b4e 100644 (file)
@@ -1,51 +1,51 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0,0.83) size 801.67x604.17
-    RenderSVGContainer {g} at (0,6.67) size 801.67x598.33
+  RenderSVGRoot {svg} at (0,0.83) size 801.67x598.33
+    RenderSVGContainer {g} at (0,6.67) size 801.67x588.33
       RenderSVGText {text} at (0,40) size 481x44 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-36) size 481x44
           chunk 1 text run 1 at (0.00,40.00) startOffset 0 endOffset 31 width 481.00: "Test 'baseline-shift' (vertic.)"
-      RenderSVGContainer {g} at (136.67,110) size 488.33x495
-        RenderSVGContainer {g} at (136.67,110) size 488.33x495 [transform={m=((1.00,0.00)(0.00,1.00)) t=(90.00,60.00)}]
-          RenderSVGText {text} at (-9,33) size 24x165 contains 1 chunk(s)
+      RenderSVGContainer {g} at (136.67,100) size 488.33x495
+        RenderSVGContainer {g} at (136.67,100) size 488.33x495 [transform={m=((1.00,0.00)(0.00,1.00)) t=(90.00,60.00)}]
+          RenderSVGText {text} at (-9,27) size 24x165 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (1,-27) size 17x66
-              chunk 1 (vertical) text run 1 at (-8.50,33.00) startOffset 0 endOffset 2 height 66.00: "te"
+              chunk 1 (vertical) text run 1 at (-8.50,27.00) startOffset 0 endOffset 2 height 66.00: "te"
             RenderSVGTSpan {tspan} at (0,0) size 17x33
               RenderSVGInlineText {#text} at (8,39) size 17x33
-                chunk 1 (vertical) text run 2 at (-1.50,99.00) startOffset 0 endOffset 1 height 33.00: "7"
+                chunk 1 (vertical) text run 2 at (-1.50,93.00) startOffset 0 endOffset 1 height 33.00: "7"
             RenderSVGInlineText {#text} at (2,72) size 15x66
-              chunk 1 (vertical) text run 3 at (-7.50,132.00) startOffset 0 endOffset 2 height 66.00: "xt"
-          RenderSVGText {text} at (45,33) size 44x264 contains 1 chunk(s)
+              chunk 1 (vertical) text run 3 at (-7.50,126.00) startOffset 0 endOffset 2 height 66.00: "xt"
+          RenderSVGText {text} at (45,27) size 44x264 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (26,-27) size 18x66
-              chunk 1 (vertical) text run 1 at (71.50,33.00) startOffset 0 endOffset 2 height 66.00: "te"
+              chunk 1 (vertical) text run 1 at (71.50,27.00) startOffset 0 endOffset 2 height 66.00: "te"
             RenderSVGTSpan {tspan} at (0,0) size 28x132
               RenderSVGInlineText {#text} at (0,39) size 28x132
-                chunk 1 (vertical) text run 2 at (45.50,99.00) startOffset 0 endOffset 4 height 132.00: "-70%"
+                chunk 1 (vertical) text run 2 at (45.50,93.00) startOffset 0 endOffset 4 height 132.00: "-70%"
             RenderSVGInlineText {#text} at (27,171) size 16x66
-              chunk 1 (vertical) text run 3 at (72.50,231.00) startOffset 0 endOffset 2 height 66.00: "xt"
-          RenderSVGText {text} at (155,33) size 34x231 contains 1 chunk(s)
+              chunk 1 (vertical) text run 3 at (72.50,225.00) startOffset 0 endOffset 2 height 66.00: "xt"
+          RenderSVGText {text} at (155,27) size 34x231 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (16,-27) size 18x66
-              chunk 1 (vertical) text run 1 at (171.50,33.00) startOffset 0 endOffset 2 height 66.00: "te"
+              chunk 1 (vertical) text run 1 at (171.50,27.00) startOffset 0 endOffset 2 height 66.00: "te"
             RenderSVGTSpan {tspan} at (0,0) size 17x99
               RenderSVGInlineText {#text} at (0,39) size 17x99
-                chunk 1 (vertical) text run 2 at (155.00,99.00) startOffset 0 endOffset 3 height 99.00: "sub"
+                chunk 1 (vertical) text run 2 at (155.00,93.00) startOffset 0 endOffset 3 height 99.00: "sub"
             RenderSVGTSpan {tspan} at (0,0) size 16x33
               RenderSVGInlineText {#text} at (17,138) size 16x33
-                chunk 1 (vertical) text run 3 at (172.50,198.00) startOffset 0 endOffset 1 height 33.00: "x"
+                chunk 1 (vertical) text run 3 at (172.50,192.00) startOffset 0 endOffset 1 height 33.00: "x"
             RenderSVGInlineText {#text} at (21,171) size 8x33
-              chunk 1 (vertical) text run 4 at (176.00,231.00) startOffset 0 endOffset 1 height 33.00: "t"
-          RenderSVGText {text} at (251,33) size 34x297 contains 1 chunk(s)
+              chunk 1 (vertical) text run 4 at (176.00,225.00) startOffset 0 endOffset 1 height 33.00: "t"
+          RenderSVGText {text} at (251,27) size 34x297 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (0,-27) size 18x66
-              chunk 1 (vertical) text run 1 at (251.50,33.00) startOffset 0 endOffset 2 height 66.00: "te"
+              chunk 1 (vertical) text run 1 at (251.50,27.00) startOffset 0 endOffset 2 height 66.00: "te"
             RenderSVGTSpan {tspan} at (0,0) size 17x165
               RenderSVGInlineText {#text} at (17,39) size 17x165
-                chunk 1 (vertical) text run 2 at (268.00,99.00) startOffset 0 endOffset 5 height 165.00: "super"
+                chunk 1 (vertical) text run 2 at (268.00,93.00) startOffset 0 endOffset 5 height 165.00: "super"
             RenderSVGTSpan {tspan} at (0,0) size 16x33
               RenderSVGInlineText {#text} at (1,204) size 16x33
-                chunk 1 (vertical) text run 3 at (252.50,264.00) startOffset 0 endOffset 1 height 33.00: "x"
+                chunk 1 (vertical) text run 3 at (252.50,258.00) startOffset 0 endOffset 1 height 33.00: "x"
             RenderSVGInlineText {#text} at (5,237) size 8x33
-              chunk 1 (vertical) text run 4 at (256.00,297.00) startOffset 0 endOffset 1 height 33.00: "t"
+              chunk 1 (vertical) text run 4 at (256.00,291.00) startOffset 0 endOffset 1 height 33.00: "t"
     RenderSVGText {text} at (10,340) size 264x46 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-36) size 264x46
         chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 16 width 264.00: "$Revision: 1.5 $"
index 4329abd..a066711 100644 (file)
@@ -1 +1 @@
-1ef25584f31026a8a8473d7e34a6df93
\ No newline at end of file
+3d2b7f78eb78ba2c082b02f3e05feabd
\ No newline at end of file
index aaaf121..16b04ae 100644 (file)
Binary files a/LayoutTests/svg/text/text-path-01-b-expected.png and b/LayoutTests/svg/text/text-path-01-b-expected.png differ
index 2df4300..b4538dd 100644 (file)
@@ -1,3 +1,28 @@
+2007-11-10  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Eric.
+
+        Fixes: http://bugs.webkit.org/show_bug.cgi?id=15937 (Add glyph-orientation-horizontal/vertical support)
+        Fixes: http://bugs.webkit.org/show_bug.cgi?id=13971 (text-anchor support on vertical text seems slightly off)
+
+        Add glyph-orientation-* support for text & textPath. (90/180/270 and 'auto')
+        Also fix all vertical text handling - for text & textPath! (especially latin1 characters auto orientation in vertical writing modes)
+
+        * WebCore.pro: Add platform/UnicodeRange.cpp to build
+        * WebCore.xcodeproj/project.pbxproj: Dito.
+        * rendering/SVGCharacterLayoutInfo.cpp: Respect orientationShiftX/Y & angle in characterTransform()
+        (WebCore::SVGChar::characterTransform):
+        * rendering/SVGCharacterLayoutInfo.h: New variables.
+        (WebCore::SVGCharOnPath::SVGCharOnPath):
+        (WebCore::SVGChar::SVGChar):
+        * rendering/SVGRootInlineBox.cpp: Added glyph-orientation-* handling.
+        (WebCore::glyphOrientationToAngle):
+        (WebCore::glyphOrientationIsMultiplyOf180Degrees):
+        (WebCore::calculateGlyphAdvanceAndShiftRespectingOrientation):
+        (WebCore::cummulatedHeightOfInlineBoxCharacterRange):
+        (WebCore::cummulatedWidthOrHeightOfTextChunk):
+        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox):
+
 2007-11-10  Timothy Hatcher  <timothy@apple.com>
 
         Reviewed by Sam Weinig.
index 59b8fca..89a39f7 100644 (file)
@@ -700,6 +700,7 @@ SOURCES += \
     platform/TextEncodingRegistry.cpp \
     platform/TextStream.cpp \
     platform/Timer.cpp \
+    platform/UnicodeRange.cpp \
     platform/Widget.cpp \
     rendering/AutoTableLayout.cpp \
     rendering/bidi.cpp \
index f72af0d..ffdf93c 100644 (file)
                B27535820B053814002CE64F /* Pen.h in Headers */ = {isa = PBXBuildFile; fileRef = B27535550B053814002CE64F /* Pen.h */; };
                B275358E0B053A66002CE64F /* IconMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = B275358D0B053A66002CE64F /* IconMac.mm */; };
                B277B4040B22F37C0004BEC6 /* GraphicsContextMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = B277B4030B22F37C0004BEC6 /* GraphicsContextMac.mm */; };
+               B287B22E0CE66A820054D390 /* UnicodeRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B287B22C0CE66A820054D390 /* UnicodeRange.cpp */; };
+               B287B22F0CE66A820054D390 /* UnicodeRange.h in Headers */ = {isa = PBXBuildFile; fileRef = B287B22D0CE66A820054D390 /* UnicodeRange.h */; };
                B297BC700B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B297BC6F0B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp */; };
                B2A015A80AF6CD53006BCE0E /* GraphicsContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2A015920AF6CD53006BCE0E /* GraphicsContext.cpp */; };
                B2A015A90AF6CD53006BCE0E /* GraphicsContext.h in Headers */ = {isa = PBXBuildFile; fileRef = B2A015930AF6CD53006BCE0E /* GraphicsContext.h */; };
                B27535550B053814002CE64F /* Pen.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Pen.h; sourceTree = "<group>"; };
                B275358D0B053A66002CE64F /* IconMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = IconMac.mm; sourceTree = "<group>"; };
                B277B4030B22F37C0004BEC6 /* GraphicsContextMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = GraphicsContextMac.mm; sourceTree = "<group>"; };
+               B287B22C0CE66A820054D390 /* UnicodeRange.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = UnicodeRange.cpp; sourceTree = "<group>"; };
+               B287B22D0CE66A820054D390 /* UnicodeRange.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UnicodeRange.h; sourceTree = "<group>"; };
                B297BC6F0B3C14CF0045A590 /* JSSVGPathSegListCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGPathSegListCustom.cpp; sourceTree = "<group>"; };
                B2A015920AF6CD53006BCE0E /* GraphicsContext.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsContext.cpp; sourceTree = "<group>"; };
                B2A015930AF6CD53006BCE0E /* GraphicsContext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GraphicsContext.h; sourceTree = "<group>"; };
                                51E1ECB20C91C55600DC255B /* Threading.h */,
                                93309EA1099EB78C0056E581 /* Timer.cpp */,
                                9305B24C098F1B6B00C28855 /* Timer.h */,
+                               B287B22C0CE66A820054D390 /* UnicodeRange.cpp */,
+                               B287B22D0CE66A820054D390 /* UnicodeRange.h */,
                                9380F47109A11AB4001FDB34 /* Widget.cpp */,
                                9380F47209A11AB4001FDB34 /* Widget.h */,
                                93B780C909B3B7FE00690162 /* WidgetClient.h */,
                                BCB16C2D0979C3BD00467741 /* loader.h in Headers */,
                                93309DF8099E64920056E581 /* markup.h in Headers */,
                                93309E1E099E64920056E581 /* visible_units.h in Headers */,
+                               B287B22F0CE66A820054D390 /* UnicodeRange.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                0867D690FE84028FC02AAC07 /* Project object */ = {
                        isa = PBXProject;
                        buildConfigurationList = 149C284308902B11008A9EFC /* Build configuration list for PBXProject "WebCore" */;
-                       compatibilityVersion = "Xcode 2.4";
                        hasScannedForEncodings = 1;
                        knownRegions = (
                                English,
                                BCB16C2C0979C3BD00467741 /* loader.cpp in Sources */,
                                93309DF7099E64920056E581 /* markup.cpp in Sources */,
                                93309E1D099E64920056E581 /* visible_units.cpp in Sources */,
+                               B287B22E0CE66A820054D390 /* UnicodeRange.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
index 41f940f..9c01ef5 100644 (file)
@@ -515,16 +515,13 @@ AffineTransform SVGChar::characterTransform() const
     ctm.translate(x, y);
     ctm.rotate(angle);
 
-    if (pathData)
+    if (pathData) {
         ctm.scale(pathData->xScale, pathData->yScale);
-
-    ctm.translate(-x, -y);
-
-    // Apply transformations which have to be applied orthogonal to the path
-    // Only happens in textPath layouts.
-    if (pathData)
         ctm.translate(pathData->xShift, pathData->yShift);
+        ctm.rotate(pathData->orientationAngle);
+    }
 
+    ctm.translate(orientationShiftX - x, orientationShiftY - y);
     return ctm;
 }
 
index 019e764..2f1aac8 100644 (file)
@@ -183,6 +183,7 @@ struct SVGCharOnPath : Shared<SVGCharOnPath> {
         , yScale(1.0f)
         , xShift(0.0f)
         , yShift(0.0f)
+        , orientationAngle(0.0f)
         , visible(true)
     {
     }
@@ -193,6 +194,8 @@ struct SVGCharOnPath : Shared<SVGCharOnPath> {
     float xShift;
     float yShift;
 
+    float orientationAngle;
+
     // Determines wheter this char is visible (ie. false for chars "off" the text layout path)
     bool visible : 1;
 };
@@ -202,6 +205,8 @@ struct SVGChar {
         : x(0.0f)
         , y(0.0f)
         , angle(0.0f)
+        , orientationShiftX(0.0f)
+        , orientationShiftY(0.0f)
         , pathData()
         , drawnSeperated(false)
         , newTextChunk(false)
@@ -216,6 +221,9 @@ struct SVGChar {
     float y;
     float angle;
 
+    float orientationShiftX;
+    float orientationShiftY;
+
     RefPtr<SVGCharOnPath> pathData;
 
     // Determines wheter this char needs to be drawn seperated
index dae26fe..c6fa24d 100644 (file)
@@ -40,6 +40,7 @@
 #include "SVGURIReference.h"
 #include "Text.h"
 #include "TextStyle.h"
+#include "UnicodeRange.h"
 
 #include <float.h>
 
@@ -54,6 +55,99 @@ static inline bool isVerticalWritingMode(const SVGRenderStyle* style)
     return style->writingMode() == WM_TBRL || style->writingMode() == WM_TB; 
 }
 
+static inline float glyphOrientationToAngle(const SVGRenderStyle* svgStyle, bool isVerticalText, const UChar& character)
+{
+    switch (isVerticalText ? svgStyle->glyphOrientationVertical() : svgStyle->glyphOrientationHorizontal()) {
+    case GO_AUTO:
+    {
+        // Spec: Fullwidth ideographic and fullwidth Latin text will be set with a glyph-orientation of 0-degrees.
+        //       Text which is not fullwidth will be set with a glyph-orientation of 90-degrees.
+        unsigned int unicodeRange = findCharUnicodeRange(character);
+        if (unicodeRange == cRangeSetLatin || unicodeRange == cRangeArabic)
+            return 90.0f;
+
+        return 0.0f;
+    }
+    case GO_90DEG:
+        return 90.0f;
+    case GO_180DEG:
+        return 180.0f;
+    case GO_270DEG:
+        return 270.0f;
+    case GO_0DEG:
+    default:
+        return 0.0f;
+    }
+}
+
+static inline bool glyphOrientationIsMultiplyOf180Degrees(float orientationAngle)
+{
+    return fabsf(fmodf(orientationAngle, 180.0f)) == 0.0f;
+}
+
+static inline float calculateGlyphAdvanceAndShiftRespectingOrientation(bool isVerticalText, float orientationAngle, float glyphWidth, float glyphHeight, const Font& font, SVGChar& svgChar, float& xOrientationShift, float& yOrientationShift)
+{
+    bool orientationIsMultiplyOf180Degrees = glyphOrientationIsMultiplyOf180Degrees(orientationAngle);
+
+    // The function is based on spec requirements:
+    //
+    // Spec: If the 'glyph-orientation-horizontal' results in an orientation angle that is not a multiple of
+    // of 180 degrees, then the current text position is incremented according to the vertical metrics of the glyph.
+    //
+    // Spec: If if the 'glyph-orientation-vertical' results in an orientation angle that is not a multiple of
+    // 180 degrees,then the current text position is incremented according to the horizontal metrics of the glyph.
+
+    // vertical orientation handling
+    if (isVerticalText) {
+        if (orientationAngle == 0.0f) {
+            xOrientationShift = -glyphWidth / 2.0f;
+            yOrientationShift = font.ascent();
+        } else if (orientationAngle == 90.0f) {
+            xOrientationShift = -glyphHeight;
+            yOrientationShift = font.descent();
+            svgChar.orientationShiftY = -font.ascent();
+        } else if (orientationAngle == 270.0f) {
+            xOrientationShift = glyphHeight;
+            yOrientationShift = font.descent();
+            svgChar.orientationShiftX = -glyphWidth;
+            svgChar.orientationShiftY = -font.ascent();
+        } else if (orientationAngle == 180.0f) {
+            yOrientationShift = font.ascent();
+            svgChar.orientationShiftX = -glyphWidth / 2.0f;
+            svgChar.orientationShiftY = font.ascent() - font.descent();
+        }
+
+        // vertical advance calculation
+        if (orientationAngle != 0.0f && !orientationIsMultiplyOf180Degrees)
+            return glyphWidth;
+
+        return glyphHeight; 
+    }
+
+    // horizontal orientation handling
+    if (orientationAngle == 90.0f) {
+        xOrientationShift = glyphWidth / 2.0f;
+        yOrientationShift = -font.descent();
+        svgChar.orientationShiftX = -glyphWidth / 2.0f - font.descent(); 
+        svgChar.orientationShiftY = font.descent();
+    } else if (orientationAngle == 270.0f) {
+        xOrientationShift = -glyphWidth / 2.0f;
+        yOrientationShift = -font.descent();
+        svgChar.orientationShiftX = -glyphWidth / 2.0f + font.descent();
+        svgChar.orientationShiftY = glyphHeight;
+    } else if (orientationAngle == 180.0f) {
+        xOrientationShift = glyphWidth / 2.0f;
+        svgChar.orientationShiftX = -glyphWidth / 2.0f;
+        svgChar.orientationShiftY = font.ascent() - font.descent();
+    }
+
+    // horizontal advance calculation
+    if (orientationAngle != 0.0f && !orientationIsMultiplyOf180Degrees)
+        return glyphHeight;
+
+    return glyphWidth;
+}
+
 static inline void startTextChunk(SVGTextChunkLayoutInfo& info)
 {
     info.chunk.boxes.clear();
@@ -424,7 +518,6 @@ float cummulatedHeightOfInlineBoxCharacterRange(SVGInlineBoxCharacterRange& rang
     RenderText* text = textBox->textObject();
     const Font& font = text->style()->font();
 
-    // FIXME: Wild guess - works for the W3C 1.1 vertical text examples - not really heavily tested so far.
     return (range.endOffset - range.startOffset) * (font.ascent() + font.descent());
 }
 
@@ -489,7 +582,7 @@ static float cummulatedWidthOrHeightOfTextChunk(SVGTextChunk& chunk, bool calcWi
                 SVGChar& lastCharacter = *(itSearch - 1);
                 SVGChar& currentCharacter = *itSearch;
 
-                int offset = box->m_reversed ? box->end() - i - positionOffset + 1: box->start() + i + positionOffset - 1;
+                int offset = box->m_reversed ? box->end() - i - positionOffset + 1 : box->start() + i + positionOffset - 1;
 
                 if (calcWidthOnly) {
                     float lastGlyphWidth = box->calculateGlyphWidth(style, offset);
@@ -876,7 +969,9 @@ void SVGRootInlineBox::buildLayoutInformationForTextBox(SVGCharacterLayoutInfo&
     SVGInlineTextBox* svgTextBox = static_cast<SVGInlineTextBox*>(textBox);
 
     unsigned length = textBox->len();
-    bool isVerticalText = isVerticalWritingMode(style->svgStyle());
+
+    const SVGRenderStyle* svgStyle = style->svgStyle();
+    bool isVerticalText = isVerticalWritingMode(svgStyle);
 
     for (unsigned i = 0; i < length; ++i) {
         SVGChar svgChar;
@@ -967,11 +1062,16 @@ void SVGRootInlineBox::buildLayoutInformationForTextBox(SVGCharacterLayoutInfo&
                 info.nextDrawnSeperated = true;
         }
 
+        float orientationAngle = glyphOrientationToAngle(svgStyle, isVerticalText, *currentCharacter);
+
+        float xOrientationShift = 0.0f;
+        float yOrientationShift = 0.0f;
+        float glyphAdvance = calculateGlyphAdvanceAndShiftRespectingOrientation(isVerticalText, orientationAngle, glyphWidth, glyphHeight,
+                                                                                font, svgChar, xOrientationShift, yOrientationShift);
+
         // Handle textPath layout mode
         if (info.inPathLayout()) {
-            float glyphAdvance = isVerticalText ? glyphHeight : glyphWidth;
             float extraAdvance = isVerticalText ? dy : dx;
-
             float newOffset = FLT_MIN;
 
             if (assignedX && !isVerticalText)
@@ -979,16 +1079,18 @@ void SVGRootInlineBox::buildLayoutInformationForTextBox(SVGCharacterLayoutInfo&
             else if (assignedY && isVerticalText)
                 newOffset = info.cury;
 
+            float correctedGlyphAdvance = glyphAdvance;
+
             // Handle lengthAdjust="spacingAndGlyphs" by specifying per-character scale operations
             if (info.pathTextLength > 0.0f && info.pathChunkLength > 0.0f) { 
                 if (isVerticalText) {
                     svgChar.pathData->yScale = info.pathChunkLength / info.pathTextLength;
                     spacing *= svgChar.pathData->yScale;
-                    glyphAdvance *= svgChar.pathData->yScale;
+                    correctedGlyphAdvance *= svgChar.pathData->yScale;
                 } else {
                     svgChar.pathData->xScale = info.pathChunkLength / info.pathTextLength;
                     spacing *= svgChar.pathData->xScale;
-                    glyphAdvance *= svgChar.pathData->xScale;
+                    correctedGlyphAdvance *= svgChar.pathData->xScale;
                 }
             }
 
@@ -996,7 +1098,7 @@ void SVGRootInlineBox::buildLayoutInformationForTextBox(SVGCharacterLayoutInfo&
             float pathExtraAdvance = info.pathExtraAdvance;
             info.pathExtraAdvance += spacing;
 
-            svgChar.pathData->visible = info.nextPathLayoutPointAndAngle(glyphAdvance, extraAdvance, newOffset);
+            svgChar.pathData->visible = info.nextPathLayoutPointAndAngle(correctedGlyphAdvance, extraAdvance, newOffset);
             svgChar.drawnSeperated = true;
 
             info.pathExtraAdvance = pathExtraAdvance;
@@ -1019,42 +1121,43 @@ void SVGRootInlineBox::buildLayoutInformationForTextBox(SVGCharacterLayoutInfo&
 
         svgChar.x = info.curx;
         svgChar.y = info.cury;
+        svgChar.angle = info.angle;
 
         // For text paths any shift (dx/dy/baseline-shift) has to be applied after the rotation
         if (!info.inPathLayout()) {
-            svgChar.x += info.shiftx;
-            svgChar.y += info.shifty;
+            svgChar.x += info.shiftx + xOrientationShift;
+            svgChar.y += info.shifty + yOrientationShift;
+
+            if (orientationAngle != 0.0f)
+                svgChar.angle += orientationAngle;
+
+            if (svgChar.angle != 0.0f)
+                svgChar.drawnSeperated = true;
         } else {
-            svgChar.pathData->xShift = info.shiftx;
-            svgChar.pathData->yShift = info.shifty;
+            svgChar.pathData->orientationAngle = orientationAngle;
+
+            if (isVerticalText)
+                svgChar.angle -= 90.0f;
+
+            svgChar.pathData->xShift = info.shiftx + xOrientationShift;
+            svgChar.pathData->yShift = info.shifty + yOrientationShift;
 
             // Translate to glyph midpoint
             if (isVerticalText) {
                 svgChar.pathData->xShift += info.dx;
-                svgChar.pathData->yShift -= glyphHeight / 2.0f;
+                svgChar.pathData->yShift -= glyphAdvance / 2.0f;
             } else {
-                svgChar.pathData->xShift -= glyphWidth / 2.0f;
+                svgChar.pathData->xShift -= glyphAdvance / 2.0f;
                 svgChar.pathData->yShift += info.dy;
             }
         }
-        // Correct character position for vertical text layout
-        if (isVerticalText) {
-            svgChar.drawnSeperated = true;
-            svgChar.x -= glyphWidth / 2.0f;
-            svgChar.y += glyphHeight;
-        }
-
-        // Record angle if specified
-        svgChar.angle = info.angle;
-        if (svgChar.angle != 0.0f)
-            svgChar.drawnSeperated = true;
 
         // Advance to new position
-        if (isVerticalText)
-            info.cury += glyphHeight + spacing;
-        else
-            info.curx += glyphWidth + spacing;
+        if (isVerticalText) {
+            svgChar.drawnSeperated = true;
+            info.cury += glyphAdvance + spacing;
+        } else
+            info.curx += glyphAdvance + spacing;
 
         // Advance to next character
         info.svgChars.append(svgChar);