Reviewed by Oliver & Rob.
authoroliver <oliver@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Oct 2007 13:25:46 +0000 (13:25 +0000)
committeroliver <oliver@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Oct 2007 13:25:46 +0000 (13:25 +0000)
Enable SVG textPath selection. Actually build chunks for them instead of
ignoring them - was easier than I thought. Respect per-character transformation
when calculating the chunk boundaries for the selection rectangles. Also fixes
selection rect drawing of rotated characters.

Next thing todo is to unify the glyph size calculations, as per-glyph transformations
are not respected when calculating flow box sizes in SVGRootInlineBox.

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

70 files changed:
LayoutTests/ChangeLog
LayoutTests/svg/batik/text/longTextOnPath-expected.txt
LayoutTests/svg/batik/text/textGlyphOrientationHorizontal-expected.txt
LayoutTests/svg/batik/text/textOnPath-expected.txt
LayoutTests/svg/batik/text/textOnPath2-expected.txt
LayoutTests/svg/batik/text/textOnPath3-expected.txt
LayoutTests/svg/batik/text/textOnPathSpaces-expected.txt
LayoutTests/svg/batik/text/verticalText-expected.txt
LayoutTests/svg/batik/text/verticalTextOnPath-expected.txt
LayoutTests/svg/text/text-align-01-b-expected.checksum
LayoutTests/svg/text/text-align-01-b-expected.png
LayoutTests/svg/text/text-align-02-b-expected.checksum
LayoutTests/svg/text/text-align-02-b-expected.png
LayoutTests/svg/text/text-align-03-b-expected.checksum
LayoutTests/svg/text/text-align-03-b-expected.png
LayoutTests/svg/text/text-align-04-b-expected.checksum
LayoutTests/svg/text/text-align-04-b-expected.png
LayoutTests/svg/text/text-align-04-b-expected.txt
LayoutTests/svg/text/text-align-05-b-expected.checksum
LayoutTests/svg/text/text-align-05-b-expected.png
LayoutTests/svg/text/text-align-06-b-expected.checksum
LayoutTests/svg/text/text-align-06-b-expected.png
LayoutTests/svg/text/text-altglyph-01-b-expected.checksum
LayoutTests/svg/text/text-altglyph-01-b-expected.png
LayoutTests/svg/text/text-deco-01-b-expected.checksum
LayoutTests/svg/text/text-deco-01-b-expected.png
LayoutTests/svg/text/text-fonts-01-t-expected.checksum
LayoutTests/svg/text/text-fonts-01-t-expected.png
LayoutTests/svg/text/text-fonts-02-t-expected.checksum
LayoutTests/svg/text/text-fonts-02-t-expected.png
LayoutTests/svg/text/text-intro-05-t-expected.checksum
LayoutTests/svg/text/text-intro-05-t-expected.png
LayoutTests/svg/text/text-path-01-b-expected.checksum
LayoutTests/svg/text/text-path-01-b-expected.png
LayoutTests/svg/text/text-path-01-b-expected.txt
LayoutTests/svg/text/text-spacing-01-b-expected.checksum
LayoutTests/svg/text/text-spacing-01-b-expected.png
LayoutTests/svg/text/text-text-01-b-expected.checksum
LayoutTests/svg/text/text-text-01-b-expected.png
LayoutTests/svg/text/text-text-03-b-expected.checksum
LayoutTests/svg/text/text-text-03-b-expected.png
LayoutTests/svg/text/text-text-04-t-expected.checksum
LayoutTests/svg/text/text-text-04-t-expected.png
LayoutTests/svg/text/text-text-05-t-expected.checksum
LayoutTests/svg/text/text-text-05-t-expected.png
LayoutTests/svg/text/text-text-06-t-expected.checksum
LayoutTests/svg/text/text-text-06-t-expected.png
LayoutTests/svg/text/text-text-07-t-expected.checksum
LayoutTests/svg/text/text-text-07-t-expected.png
LayoutTests/svg/text/text-text-08-b-expected.checksum
LayoutTests/svg/text/text-text-08-b-expected.png
LayoutTests/svg/text/text-tref-01-b-expected.checksum
LayoutTests/svg/text/text-tref-01-b-expected.png
LayoutTests/svg/text/text-tselect-01-b-expected.checksum
LayoutTests/svg/text/text-tselect-01-b-expected.png
LayoutTests/svg/text/text-tselect-02-f-expected.checksum
LayoutTests/svg/text/text-tselect-02-f-expected.png
LayoutTests/svg/text/text-tspan-01-b-expected.checksum
LayoutTests/svg/text/text-tspan-01-b-expected.png
LayoutTests/svg/text/text-ws-01-t-expected.checksum
LayoutTests/svg/text/text-ws-01-t-expected.png
LayoutTests/svg/text/text-ws-02-t-expected.checksum
LayoutTests/svg/text/text-ws-02-t-expected.png
WebCore/ChangeLog
WebCore/rendering/RenderObject.h
WebCore/rendering/RenderSVGHiddenContainer.h
WebCore/rendering/RenderSVGInlineText.cpp
WebCore/rendering/SVGCharacterLayoutInfo.h
WebCore/rendering/SVGInlineTextBox.cpp
WebCore/rendering/SVGRootInlineBox.cpp

index ac0c2a9..006344c 100644 (file)
@@ -1,3 +1,75 @@
+2007-07-29  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Rob.
+
+        Update layout tests now that textPaths participate in
+        text chunk building and after the selection rect fixes.
+
+        * svg/W3C-SVG-1.1/text-align-04-b-expected.txt:
+        * svg/W3C-SVG-1.1/text-path-01-b-expected.txt:
+        * svg/batik/text/longTextOnPath-expected.txt:
+        * svg/batik/text/textGlyphOrientationHorizontal-expected.txt:
+        * svg/batik/text/textOnPath-expected.txt:
+        * svg/batik/text/textOnPath2-expected.txt:
+        * svg/batik/text/textOnPath3-expected.txt:
+        * svg/batik/text/textOnPathSpaces-expected.txt:
+        * svg/batik/text/verticalText-expected.txt:
+        * svg/batik/text/verticalTextOnPath-expected.txt:
+        * svg/text/text-align-01-b-expected.checksum:
+        * svg/text/text-align-01-b-expected.png:
+        * svg/text/text-align-02-b-expected.checksum:
+        * svg/text/text-align-02-b-expected.png:
+        * svg/text/text-align-03-b-expected.checksum:
+        * svg/text/text-align-03-b-expected.png:
+        * svg/text/text-align-04-b-expected.checksum:
+        * svg/text/text-align-04-b-expected.png:
+        * svg/text/text-align-04-b-expected.txt:
+        * svg/text/text-align-05-b-expected.checksum:
+        * svg/text/text-align-05-b-expected.png:
+        * svg/text/text-align-06-b-expected.checksum:
+        * svg/text/text-align-06-b-expected.png:
+        * svg/text/text-altglyph-01-b-expected.checksum:
+        * svg/text/text-altglyph-01-b-expected.png:
+        * svg/text/text-deco-01-b-expected.checksum:
+        * svg/text/text-deco-01-b-expected.png:
+        * svg/text/text-fonts-01-t-expected.checksum:
+        * svg/text/text-fonts-01-t-expected.png:
+        * svg/text/text-fonts-02-t-expected.checksum:
+        * svg/text/text-fonts-02-t-expected.png:
+        * svg/text/text-intro-05-t-expected.checksum:
+        * svg/text/text-intro-05-t-expected.png:
+        * svg/text/text-path-01-b-expected.checksum:
+        * svg/text/text-path-01-b-expected.png:
+        * svg/text/text-path-01-b-expected.txt:
+        * svg/text/text-spacing-01-b-expected.checksum:
+        * svg/text/text-spacing-01-b-expected.png:
+        * svg/text/text-text-01-b-expected.checksum:
+        * svg/text/text-text-01-b-expected.png:
+        * svg/text/text-text-03-b-expected.checksum:
+        * svg/text/text-text-03-b-expected.png:
+        * svg/text/text-text-04-t-expected.checksum:
+        * svg/text/text-text-04-t-expected.png:
+        * svg/text/text-text-05-t-expected.checksum:
+        * svg/text/text-text-05-t-expected.png:
+        * svg/text/text-text-06-t-expected.checksum:
+        * svg/text/text-text-06-t-expected.png:
+        * svg/text/text-text-07-t-expected.checksum:
+        * svg/text/text-text-07-t-expected.png:
+        * svg/text/text-text-08-b-expected.checksum:
+        * svg/text/text-text-08-b-expected.png:
+        * svg/text/text-tref-01-b-expected.checksum:
+        * svg/text/text-tref-01-b-expected.png:
+        * svg/text/text-tselect-01-b-expected.checksum:
+        * svg/text/text-tselect-01-b-expected.png:
+        * svg/text/text-tselect-02-f-expected.checksum:
+        * svg/text/text-tselect-02-f-expected.png:
+        * svg/text/text-tspan-01-b-expected.checksum:
+        * svg/text/text-tspan-01-b-expected.png:
+        * svg/text/text-ws-01-t-expected.checksum:
+        * svg/text/text-ws-01-t-expected.png:
+        * svg/text/text-ws-02-t-expected.checksum:
+        * svg/text/text-ws-02-t-expected.png:
+
 2007-07-26  Rob Buis  <buis@kde.org>
 
         Reviewed by Nikolas.
index 18b32af..fd9fd5c 100644 (file)
@@ -12,8 +12,9 @@ layer at (0,0) size 450x500
         RenderSVGContainer {g} at (25,149.50) size 400x281
           RenderPath {path} at (25,149.50) size 400x281 [stroke={[type=SOLID] [color=#0000FF]}] [data="M25.00,150.00L425.00,150.00M25.00,170.00L425.00,170.00M25.00,190.00L425.00,190.00M25.00,210.00L425.00,210.00M25.00,230.00L425.00,230.00M25.00,250.00L425.00,250.00M25.00,270.00L425.00,270.00M25.00,290.00L425.00,290.00M25.00,310.00L425.00,310.00M25.00,330.00L425.00,330.00M25.00,350.00L425.00,350.00M25.00,370.00L425.00,370.00M25.00,390.00L425.00,390.00M25.00,410.00L425.00,410.00M25.00,430.00L425.00,430.00M25.00,450.00"]
       RenderPath {rect} at (20,100) size 205x375 [fill={[type=SOLID] [color=#C8C8FF]}] [data="M20.00,100.00L225.00,100.00L225.00,475.00L20.00,475.00"]
-      RenderSVGText {text} at (21,150) size 406x263 contains 0 chunk(s)
+      RenderSVGText {text} at (21,150) size 406x263 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 406x263
           RenderSVGInlineText {#text} at (0,-18) size 406x263
+            chunk 1 text run 1 at (21.00,150.00) startOffset 0 endOffset 410 width 3210.00: "This is an example of a very long string that is split across multiple lines via the textPath tag. The purpose of this test is to ensure that text-selection can keep up even when relatively large numbers of characters are part of the selection. Since I haven't reached the end yet, let me keep going with more really quite useless text just to see if we hit a limit where it really starts to slow things down. "
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {use} at (0,0) size 0x0
index d21bc4b..a94b141 100644 (file)
@@ -17,13 +17,16 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (239.29,68.42) size 160.71x43.16
           RenderSVGContainer {g} at (239.29,68.42) size 160.71x43.16
             RenderPath {path} at (239.29,68.42) size 160.71x43.16 [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [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"]
-        RenderSVGText {text} at (17,4) size 122x71 contains 0 chunk(s)
+        RenderSVGText {text} at (17,4) size 122x71 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 122x71
             RenderSVGInlineText {#text} at (0,-13) size 52x49
+              chunk 1 text run 1 at (17.67,12.16) startOffset 0 endOffset 6 width 60.00: "Batik "
             RenderSVGTSpan {tspan} at (0,0) size 16x32 [color=#FF0000]
               RenderSVGInlineText {#text} at (52,-21) size 15x31
+                chunk 1 text run 2 at (69.83,4.21) startOffset 0 endOffset 2 width 17.00: "is"
             RenderSVGTSpan {tspan} at (0,0) size 57x50
               RenderSVGInlineText {#text} at (65,0) size 57x49
+                chunk 1 text run 3 at (82.43,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)
@@ -33,13 +36,16 @@ layer at (0,0) size 450x500
         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 (19,3) size 135x60 contains 0 chunk(s)
+        RenderSVGText {text} at (19,3) size 135x60 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 135x60
             RenderSVGInlineText {#text} at (0,-7) size 56x46
+              chunk 1 text run 1 at (19.16,17.35) startOffset 0 endOffset 6 width 60.00: "Batik "
             RenderSVGTSpan {tspan} at (0,0) size 17x29 [color=#FF0000]
               RenderSVGInlineText {#text} at (55,-21) size 16x28
+                chunk 1 text run 2 at (74.95,3.71) startOffset 0 endOffset 2 width 17.00: "is"
             RenderSVGTSpan {tspan} at (0,0) size 63x39
               RenderSVGInlineText {#text} at (72,-13) size 62x39
+                chunk 1 text run 3 at (91.61,11.78) 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)
@@ -49,13 +55,16 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (239.29,228.42) size 160.71x43.16
           RenderSVGContainer {g} at (239.29,228.42) size 160.71x43.16
             RenderPath {path} at (239.29,228.42) size 160.71x43.16 [stroke={[type=SOLID] [color=#0000FF] [stroke width=2.00]}] [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"]
-        RenderSVGText {text} at (17,4) size 122x71 contains 0 chunk(s)
+        RenderSVGText {text} at (17,4) size 122x71 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 122x71
             RenderSVGInlineText {#text} at (0,-13) size 52x49
+              chunk 1 text run 1 at (17.67,12.16) startOffset 0 endOffset 6 width 60.00: "Batik "
             RenderSVGTSpan {tspan} at (0,0) size 16x32 [color=#FF0000]
               RenderSVGInlineText {#text} at (52,-21) size 15x31
+                chunk 1 text run 2 at (69.83,4.21) startOffset 0 endOffset 2 width 17.00: "is"
             RenderSVGTSpan {tspan} at (0,0) size 57x50
               RenderSVGInlineText {#text} at (65,0) size 57x49
+                chunk 1 text run 3 at (82.43,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)
@@ -65,11 +74,14 @@ layer at (0,0) size 450x500
         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 (19,3) size 135x60 contains 0 chunk(s)
+        RenderSVGText {text} at (19,3) size 135x60 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 135x60
             RenderSVGInlineText {#text} at (0,-7) size 56x46
+              chunk 1 text run 1 at (19.16,17.35) startOffset 0 endOffset 6 width 60.00: "Batik "
             RenderSVGTSpan {tspan} at (0,0) size 17x29 [color=#FF0000]
               RenderSVGInlineText {#text} at (55,-21) size 16x28
+                chunk 1 text run 2 at (74.95,3.71) startOffset 0 endOffset 2 width 17.00: "is"
             RenderSVGTSpan {tspan} at (0,0) size 63x39
               RenderSVGInlineText {#text} at (72,-13) size 62x39
+                chunk 1 text run 3 at (91.61,11.78) startOffset 0 endOffset 5 width 65.00: " Good"
           RenderSVGInlineText {#text} at (0,0) size 0x0
index 64c7077..6ed5443 100644 (file)
@@ -13,13 +13,16 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (29.70,70.67) size 90.60x49.33
           RenderSVGContainer {g} at (29.70,70.67) size 90.60x49.33
             RenderPath {path} at (29.70,70.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 (24,3) size 96x64 contains 0 chunk(s)
+        RenderSVGText {text} at (24,3) size 96x64 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 96x64
             RenderSVGInlineText {#text} at (0,-2) size 27x48
+              chunk 1 text run 1 at (24.45,18.29) startOffset 0 endOffset 5 width 42.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 20x25 [color=#FF0000]
               RenderSVGInlineText {#text} at (27,-17) size 19x25
+                chunk 1 text run 2 at (51.75,3.11) startOffset 0 endOffset 2 width 20.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 49x42
               RenderSVGInlineText {#text} at (47,-8) size 48x42
+                chunk 1 text run 3 at (71.44,12.51) startOffset 0 endOffset 7 width 55.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
@@ -31,13 +34,16 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (179.70,70.67) size 90.60x49.33
           RenderSVGContainer {g} at (179.70,70.67) size 90.60x49.33
             RenderPath {path} at (179.70,70.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 (-6,-10) size 74x77 contains 0 chunk(s)
+        RenderSVGText {text} at (-6,-10) size 74x77 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 74x77
             RenderSVGInlineText {#text} at (0,-8) size 45x23
+              chunk 1 (middle anchor) text run 1 at (-6.00,0.00) startOffset 0 endOffset 5 width 42.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 20x23 [color=#FF0000]
               RenderSVGInlineText {#text} at (43,-18) size 20x23
+                chunk 1 (middle anchor) text run 2 at (37.00,-10.00) startOffset 0 endOffset 2 width 20.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 41x54
               RenderSVGInlineText {#text} at (33,5) size 40x53
+                chunk 1 (middle anchor) text run 3 at (27.72,13.71) startOffset 0 endOffset 7 width 55.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
@@ -49,13 +55,16 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (329.70,70.67) size 90.60x49.33
           RenderSVGContainer {g} at (329.70,70.67) size 90.60x49.33
             RenderPath {path} at (329.70,70.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 (-6,-10) size 81x70 contains 0 chunk(s)
+        RenderSVGText {text} at (-6,-10) size 81x70 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 81x70
             RenderSVGInlineText {#text} at (0,-8) size 45x23
+              chunk 1 (end anchor) text run 1 at (-6.00,0.00) startOffset 0 endOffset 5 width 42.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 22x67 [color=#FF0000]
               RenderSVGInlineText {#text} at (31,-18) size 21x67
+                chunk 1 (end anchor) text run 2 at (25.39,-10.00) startOffset 0 endOffset 2 width 20.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 46x48
               RenderSVGInlineText {#text} at (35,4) size 45x47
+                chunk 1 (end anchor) text run 3 at (29.74,12.71) startOffset 0 endOffset 7 width 55.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
@@ -67,13 +76,16 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (29.70,170.67) size 90.60x49.33
           RenderSVGContainer {g} at (29.70,170.67) size 90.60x49.33
             RenderPath {path} at (29.70,170.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 (74,12) size 95x59 contains 0 chunk(s)
+        RenderSVGText {text} at (74,12) size 95x59 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 95x59
             RenderSVGInlineText {#text} at (0,-17) size 38x36
+              chunk 1 text run 1 at (74.99,12.80) startOffset 0 endOffset 5 width 42.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 14x32 [color=#FF0000]
               RenderSVGInlineText {#text} at (36,-7) size 13x32
+                chunk 1 text run 2 at (110.39,22.26) startOffset 0 endOffset 2 width 20.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 52x23
               RenderSVGInlineText {#text} at (43,18) size 52x23
+                chunk 1 text run 3 at (117.49,48.94) startOffset 0 endOffset 7 width 55.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
@@ -85,13 +97,16 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (179.70,170.67) size 90.60x49.33
           RenderSVGContainer {g} at (179.70,170.67) size 90.60x49.33
             RenderPath {path} at (179.70,170.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,2) size 97x59 contains 0 chunk(s)
+        RenderSVGText {text} at (26,2) size 97x59 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 97x59
             RenderSVGInlineText {#text} at (0,-4) size 32x44
+              chunk 1 (middle anchor) text run 1 at (26.24,15.53) startOffset 0 endOffset 5 width 42.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 20x24 [color=#FF0000]
               RenderSVGInlineText {#text} at (32,-17) size 19x24
+                chunk 1 (middle anchor) text run 2 at (58.57,2.52) startOffset 0 endOffset 2 width 20.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 45x49
               RenderSVGInlineText {#text} at (52,-7) size 44x48
+                chunk 1 (middle anchor) text run 3 at (78.49,12.80) startOffset 0 endOffset 7 width 55.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
@@ -103,13 +118,16 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (329.70,170.67) size 90.60x49.33
           RenderSVGContainer {g} at (329.70,170.67) size 90.60x49.33
             RenderPath {path} at (329.70,170.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 (29,2) size 95x66 contains 0 chunk(s)
+        RenderSVGText {text} at (29,2) size 95x66 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 95x66
             RenderSVGInlineText {#text} at (0,-6) size 36x40
+              chunk 1 (end anchor) text run 1 at (29.43,13.68) startOffset 0 endOffset 5 width 42.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 20x23 [color=#FF0000]
               RenderSVGInlineText {#text} at (36,-17) size 19x23
+                chunk 1 (end anchor) text run 2 at (65.56,2.66) startOffset 0 endOffset 2 width 20.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 39x55
               RenderSVGInlineText {#text} at (56,-6) size 39x54
+                chunk 1 (end anchor) text run 3 at (85.45,13.92) startOffset 0 endOffset 7 width 55.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
@@ -121,13 +139,16 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (29.70,270.67) size 90.60x49.33
           RenderSVGContainer {g} at (29.70,270.67) size 90.60x49.33
             RenderPath {path} at (29.70,270.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 (45,4) size 104x59 contains 0 chunk(s)
+        RenderSVGText {text} at (45,4) size 104x59 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 104x59
             RenderSVGInlineText {#text} at (0,-9) size 41x28
+              chunk 1 text run 1 at (45.19,12.60) startOffset 0 endOffset 5 width 42.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 19x27 [color=#FF0000]
               RenderSVGInlineText {#text} at (41,-17) size 19x26
+                chunk 1 text run 2 at (86.23,4.76) startOffset 0 endOffset 2 width 20.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 45x41
               RenderSVGInlineText {#text} at (59,0) size 45x40
+                chunk 1 text run 3 at (104.30,22.53) startOffset 0 endOffset 7 width 55.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
@@ -139,13 +160,16 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (179.70,270.67) size 90.60x49.33
           RenderSVGContainer {g} at (179.70,270.67) size 90.60x49.33
             RenderPath {path} at (179.70,270.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 (-6,0) size 108x70 contains 0 chunk(s)
+        RenderSVGText {text} at (-6,0) size 108x70 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 108x70
             RenderSVGInlineText {#text} at (0,-18) size 41x70
+              chunk 1 (middle anchor) text run 1 at (-6.00,0.00) startOffset 0 endOffset 5 width 42.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 17x30 [color=#FF0000]
               RenderSVGInlineText {#text} at (38,-6) size 17x29
+                chunk 1 (middle anchor) text run 2 at (32.42,11.40) startOffset 0 endOffset 2 width 20.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 54x28
               RenderSVGInlineText {#text} at (54,-5) size 53x28
+                chunk 1 (middle anchor) text run 3 at (48.69,12.55) startOffset 0 endOffset 7 width 55.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
@@ -157,13 +181,16 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (329.70,270.67) size 90.60x49.33
           RenderSVGContainer {g} at (329.70,270.67) size 90.60x49.33
             RenderPath {path} at (329.70,270.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 (-6,-10) size 89x78 contains 0 chunk(s)
+        RenderSVGText {text} at (-6,-10) size 89x78 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 89x78
             RenderSVGInlineText {#text} at (0,-8) size 45x23
+              chunk 1 (end anchor) text run 1 at (-6.00,0.00) startOffset 0 endOffset 5 width 42.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 20x23 [color=#FF0000]
               RenderSVGInlineText {#text} at (43,-18) size 20x23
+                chunk 1 (end anchor) text run 2 at (37.00,-10.00) startOffset 0 endOffset 2 width 20.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 59x68
               RenderSVGInlineText {#text} at (30,-8) size 58x68
+                chunk 1 (end anchor) text run 3 at (24.75,0.00) startOffset 0 endOffset 7 width 55.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
@@ -175,14 +202,18 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (24.89,377.29) size 120.11x30.43
           RenderSVGContainer {g} at (24.89,377.29) size 120.11x30.43
             RenderPath {path} at (24.89,377.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 (14,8) size 106x44 contains 0 chunk(s)
+        RenderSVGText {text} at (14,8) size 106x44 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 106x44
             RenderSVGTSpan {tspan} at (0,0) size 27x29 [color=#008000]
               RenderSVGInlineText {#text} at (0,-10) size 27x29
+                chunk 1 text run 1 at (14.12,10.38) startOffset 0 endOffset 5 width 34.00: "super"
             RenderSVGInlineText {#text} at (27,-12) size 26x29
+              chunk 1 text run 2 at (41.70,8.97) startOffset 0 endOffset 5 width 31.00: " and "
             RenderSVGTSpan {tspan} at (0,0) size 20x21 [color=#FF0000]
               RenderSVGInlineText {#text} at (52,8) size 19x21
+                chunk 1 text run 3 at (66.99,29.16) startOffset 0 endOffset 3 width 22.00: "sub"
             RenderSVGInlineText {#text} at (71,0) size 34x32
+              chunk 1 text run 4 at (85.60,20.46) startOffset 0 endOffset 7 width 40.00: "scripts"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (20,60) size 88x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 88x13
@@ -194,13 +225,16 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (169.89,377.29) size 120.11x30.43
           RenderSVGContainer {g} at (169.89,377.29) size 120.11x30.43
             RenderPath {path} at (169.89,377.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 (13,8) size 112x45 contains 0 chunk(s)
+        RenderSVGText {text} at (13,8) size 112x45 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 112x45
             RenderSVGTSpan {tspan} at (0,0) size 43x33 [color=#008000]
               RenderSVGInlineText {#text} at (0,-12) size 42x32
+                chunk 1 text run 1 at (13.83,8.83) startOffset 0 endOffset 8 width 49.00: "positive"
             RenderSVGInlineText {#text} at (42,-8) size 24x34
+              chunk 1 text run 2 at (55.69,12.92) startOffset 0 endOffset 5 width 31.00: " and "
             RenderSVGTSpan {tspan} at (0,0) size 47x35 [color=#FF0000]
               RenderSVGInlineText {#text} at (65,-2) size 47x35
+                chunk 1 text run 3 at (78.94,18.06) startOffset 0 endOffset 8 width 53.00: "negative"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (20,60) size 97x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 97x13
@@ -215,8 +249,9 @@ layer at (0,0) size 450x500
               chunk 1 text run 1 at (30.00,-20.00) startOffset 0 endOffset 12 width 143.00: "before path "
             RenderSVGTextPath {textPath} at (0,0) size 82x54 [color=#FF0000]
               RenderSVGInlineText {#text} at (0,4) size 82x53
+                chunk 1 text run 2 at (28.21,12.90) startOffset 0 endOffset 7 width 89.00: "on path"
             RenderSVGInlineText {#text} at (89,11) size 120x36
-              chunk 1 text run 2 at (28.21,12.90) startOffset 0 endOffset 11 width 121.00: " after path"
+              chunk 1 text run 3 at (117.77,19.76) startOffset 0 endOffset 11 width 121.00: " after path"
         RenderSVGText {text} at (15,40) size 98x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 98x13
             chunk 1 text run 1 at (15.00,40.00) startOffset 0 endOffset 26 width 98.00: "text before/after textPath"
index 6fec3aa..7136c05 100644 (file)
@@ -31,17 +31,20 @@ layer at (0,0) size 450x500
           chunk 1 text run 1 at (10.00,0.00) startOffset 0 endOffset 14 width 87.00: "This is simple"
         RenderSVGTextPath {textPath} at (0,0) size 128x119 [color=#DC143C]
           RenderSVGInlineText {#text} at (86,15) size 33x90
+            chunk 1 text run 2 at (96.67,-74.64) startOffset 0 endOffset 14 width 85.00: "text on a path"
           RenderSVGTSpan {tspan} at (0,0) size 69x30 [color=#FFA500]
             RenderSVGInlineText {#text} at (117,-13) size 68x30
+              chunk 1 text run 3 at (127.33,-103.72) startOffset 0 endOffset 11 width 72.00: "with nested"
           RenderSVGTSpan {tspan} at (0,0) size 29x39 [color=#008000]
             RenderSVGInlineText {#text} at (185,2) size 29x38
+              chunk 1 text run 4 at (195.48,-87.01) startOffset 0 endOffset 6 width 37.00: " tspan"
         RenderSVGInlineText {#text} at (218,23) size 32x18
-          chunk 1 text run 2 at (96.67,-24.89) startOffset 0 endOffset 5 width 32.00: " xxx "
+          chunk 1 text run 5 at (228.78,-66.97) startOffset 0 endOffset 5 width 32.00: " xxx "
         RenderSVGTSpan {tspan} at (0,0) size 51x18 [color=#0000FF]
           RenderSVGInlineText {#text} at (260,23) size 51x18
-            chunk 1 text run 3 at (99.21,-74.64) startOffset 0 endOffset 9 width 51.00: "all with "
+            chunk 1 text run 6 at (270.78,-66.97) startOffset 0 endOffset 9 width 51.00: "all with "
         RenderSVGInlineText {#text} at (311,23) size 91x18
-          chunk 1 text run 4 at (127.33,-103.72) startOffset 0 endOffset 16 width 91.00: " different links"
+          chunk 1 text run 7 at (321.78,-66.97) startOffset 0 endOffset 16 width 91.00: " different links"
     RenderSVGContainer {g} at (50,204.33) size 414x129.67 [transform={m=((1.00,0.00)(0.00,1.00)) t=(40.00,330.00)}]
       RenderSVGContainer {use} at (139.50,204.33) size 141x125.67
         RenderSVGContainer {g} at (139.50,204.33) size 141x125.67
@@ -51,17 +54,20 @@ layer at (0,0) size 450x500
           chunk 1 text run 1 at (10.00,0.00) startOffset 0 endOffset 14 width 87.00: "This is simple"
         RenderSVGTextPath {textPath} at (0,0) size 136x94 [color=#DC143C]
           RenderSVGInlineText {#text} at (90,0) size 50x79
+            chunk 1 text run 2 at (100.31,-89.20) startOffset 0 endOffset 14 width 85.00: "text on a path"
           RenderSVGTSpan {tspan} at (0,0) size 67x36 [color=#FFA500]
             RenderSVGInlineText {#text} at (140,-13) size 66x36
+              chunk 1 text run 3 at (150.76,-103.73) startOffset 0 endOffset 11 width 72.00: "with nested"
           RenderSVGTSpan {tspan} at (0,0) size 21x44 [color=#008000]
             RenderSVGInlineText {#text} at (205,19) size 21x44
+              chunk 1 text run 4 at (215.71,-70.80) startOffset 0 endOffset 6 width 37.00: " tspan"
         RenderSVGInlineText {#text} at (230,45) size 31x18
-          chunk 1 text run 2 at (100.31,-49.86) startOffset 0 endOffset 5 width 32.00: " xxx "
+          chunk 1 text run 5 at (240.96,-44.00) startOffset 0 endOffset 5 width 32.00: " xxx "
         RenderSVGTSpan {tspan} at (0,0) size 51x18 [color=#0000FF]
           RenderSVGInlineText {#text} at (272,45) size 51x18
-            chunk 1 text run 3 at (107.94,-89.20) startOffset 0 endOffset 9 width 51.00: "all with "
+            chunk 1 text run 6 at (282.96,-44.00) startOffset 0 endOffset 9 width 51.00: "all with "
         RenderSVGInlineText {#text} at (323,45) size 91x18
-          chunk 1 text run 4 at (150.76,-103.73) startOffset 0 endOffset 16 width 91.00: " different links"
+          chunk 1 text run 7 at (333.96,-44.00) startOffset 0 endOffset 16 width 91.00: " different links"
     RenderSVGContainer {g} at (50,349.33) size 417x129.67 [transform={m=((1.00,0.00)(0.00,1.00)) t=(40.00,475.00)}]
       RenderSVGContainer {use} at (139.50,349.33) size 141x125.67
         RenderSVGContainer {g} at (139.50,349.33) size 141x125.67
@@ -71,14 +77,17 @@ layer at (0,0) size 450x500
           chunk 1 text run 1 at (10.00,0.00) startOffset 0 endOffset 14 width 87.00: "This is simple"
         RenderSVGTextPath {textPath} at (0,0) size 137x86 [color=#DC143C]
           RenderSVGInlineText {#text} at (92,-1) size 55x74
+            chunk 1 text run 2 at (102.26,-91.59) startOffset 0 endOffset 14 width 85.00: "text on a path"
           RenderSVGTSpan {tspan} at (0,0) size 64x42 [color=#FFA500]
             RenderSVGInlineText {#text} at (148,-13) size 64x41
+              chunk 1 text run 3 at (158.01,-103.72) startOffset 0 endOffset 11 width 72.00: "with nested"
           RenderSVGTSpan {tspan} at (0,0) size 19x45 [color=#008000]
             RenderSVGInlineText {#text} at (210,25) size 18x45
+              chunk 1 text run 4 at (220.21,-64.99) startOffset 0 endOffset 6 width 37.00: " tspan"
         RenderSVGInlineText {#text} at (233,52) size 32x18
-          chunk 1 text run 2 at (102.26,-56.47) startOffset 0 endOffset 5 width 32.00: " xxx "
+          chunk 1 text run 5 at (243.21,-37.01) startOffset 0 endOffset 5 width 32.00: " xxx "
         RenderSVGTSpan {tspan} at (0,0) size 51x18 [color=#0000FF]
           RenderSVGInlineText {#text} at (275,52) size 51x18
-            chunk 1 text run 3 at (111.58,-91.59) startOffset 0 endOffset 9 width 51.00: "all with "
+            chunk 1 text run 6 at (285.21,-37.01) startOffset 0 endOffset 9 width 51.00: "all with "
         RenderSVGInlineText {#text} at (326,52) size 91x18
-          chunk 1 text run 4 at (158.01,-103.72) startOffset 0 endOffset 16 width 91.00: " different links"
+          chunk 1 text run 7 at (336.21,-37.01) startOffset 0 endOffset 16 width 91.00: " different links"
index a5f6bab..c4af427 100644 (file)
@@ -16,9 +16,10 @@ layer at (0,0) size 450x500
       RenderSVGContainer {use} at (139.50,59.33) size 141x125.67
         RenderSVGContainer {g} at (139.50,59.33) size 141x125.67
           RenderPath {path} at (139.50,59.33) size 141x125.67 [stroke={[type=SOLID] [color=#0000FF]}] [data="M100.00,0.00C100.00,-125.00,240.00,-125.00,240.00,0.00"]
-      RenderSVGText {text} at (105,-94) size 133x80 contains 0 chunk(s)
+      RenderSVGText {text} at (105,-94) size 133x80 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 133x80 [color=#DC143C]
           RenderSVGInlineText {#text} at (0,-13) size 132x80
+            chunk 1 (middle anchor) text run 1 at (105.76,-93.75) startOffset 0 endOffset 31 width 182.00: "Text on a path for text w/ 'x'."
     RenderSVGContainer {g} at (29.50,194.50) size 391x141 [transform={m=((1.00,0.00)(0.00,1.00)) t=(40.00,330.00)}]
       RenderPath {rect} at (29.50,194.50) size 391x21 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#000000]}] [data="M-10.00,-135.00L380.00,-135.00L380.00,-115.00L-10.00,-115.00"]
       RenderPath {rect} at (29.50,214.50) size 391x121 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#FFFFFF]}] [data="M-10.00,-115.00L380.00,-115.00L380.00,5.00L-10.00,5.00"]
@@ -28,9 +29,10 @@ layer at (0,0) size 450x500
       RenderSVGContainer {use} at (139.50,204.33) size 141x125.67
         RenderSVGContainer {g} at (139.50,204.33) size 141x125.67
           RenderPath {path} at (139.50,204.33) size 141x125.67 [stroke={[type=SOLID] [color=#0000FF]}] [data="M100.00,0.00C100.00,-125.00,240.00,-125.00,240.00,0.00"]
-      RenderSVGText {text} at (178,-93) size 124x107 contains 0 chunk(s)
+      RenderSVGText {text} at (178,-93) size 124x107 contains 1 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 124x107 [color=#DC143C]
           RenderSVGInlineText {#text} at (0,-13) size 124x107
+            chunk 1 (middle anchor) text run 1 at (178.87,-92.10) startOffset 0 endOffset 31 width 182.00: "Text on a path for text w/ 'x'."
     RenderSVGContainer {g} at (-65,339.50) size 485.50x141 [transform={m=((1.00,0.00)(0.00,1.00)) t=(40.00,475.00)}]
       RenderPath {rect} at (29.50,339.50) size 391x21 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#000000]}] [data="M-10.00,-135.00L380.00,-135.00L380.00,-115.00L-10.00,-115.00"]
       RenderPath {rect} at (29.50,359.50) size 391x121 [stroke={[type=SOLID] [color=#000000]}] [fill={[type=SOLID] [color=#FFFFFF]}] [data="M-10.00,-115.00L380.00,-115.00L380.00,5.00L-10.00,5.00"]
@@ -40,8 +42,10 @@ layer at (0,0) size 450x500
       RenderSVGContainer {use} at (139.50,349.33) size 141x125.67
         RenderSVGContainer {g} at (139.50,349.33) size 141x125.67
           RenderPath {path} at (139.50,349.33) size 141x125.67 [stroke={[type=SOLID] [color=#0000FF]}] [data="M100.00,0.00C100.00,-125.00,240.00,-125.00,240.00,0.00"]
-      RenderSVGText {text} at (-105,-94) size 335x111 contains 0 chunk(s)
+      RenderSVGText {text} at (-105,-94) size 335x111 contains 2 chunk(s)
         RenderSVGTextPath {textPath} at (0,0) size 335x111 [color=#DC143C]
           RenderSVGInlineText {#text} at (0,78) size 207x19
+            chunk 1 (middle anchor) text run 1 at (-105.00,-1.44) startOffset 0 endOffset 10 width 64.00: "Text on a "
           RenderSVGTSpan {tspan} at (0,0) size 99x58
             RenderSVGInlineText {#text} at (236,-13) size 99x57
+              chunk 2 (middle anchor) text run 1 at (131.30,-93.74) startOffset 0 endOffset 21 width 118.00: "path for text w/ 'x'."
index ba4ba58..fadfbed 100644 (file)
@@ -13,10 +13,11 @@ layer at (0,0) size 450x500
         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 (13,8) size 51x42 contains 0 chunk(s)
+        RenderSVGText {text} at (13,8) size 51x42 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 51x42
             RenderSVGTSpan {tspan} at (0,0) size 51x42
               RenderSVGInlineText {#text} at (0,-17) size 50x41
+                chunk 1 text run 1 at (13.83,8.83) startOffset 0 endOffset 6 width 58.00: "sample"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 60x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 60x13
@@ -25,10 +26,16 @@ layer at (0,0) size 450x500
         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 (21,9) size 93x49 contains 0 chunk(s)
+        RenderSVGText {text} at (21,9) size 93x49 contains 6 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 93x49
             RenderSVGTSpan {tspan} at (0,0) size 93x49
               RenderSVGInlineText {#text} at (0,-17) size 93x49
+                chunk 1 text run 1 at (21.07,20.27) startOffset 0 endOffset 1 width 8.00: "s"
+                chunk 2 text run 1 at (37.74,9.42) startOffset 1 endOffset 2 width 9.00: "a"
+                chunk 3 text run 1 at (54.76,17.75) startOffset 2 endOffset 3 width 16.00: "m"
+                chunk 4 text run 1 at (74.44,32.02) startOffset 3 endOffset 4 width 10.00: "p"
+                chunk 5 text run 1 at (93.50,35.49) startOffset 4 endOffset 5 width 6.00: "l"
+                chunk 6 text run 1 at (105.16,25.79) startOffset 5 endOffset 6 width 9.00: "e"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (15,60) size 123x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 123x13
@@ -40,10 +47,11 @@ layer at (0,0) size 450x500
         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 (13,8) size 101x42 contains 0 chunk(s)
+        RenderSVGText {text} at (13,8) size 101x42 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 101x42
             RenderSVGTSpan {tspan} at (0,0) size 101x42
               RenderSVGInlineText {#text} at (0,-17) size 100x41
+                chunk 1 text run 1 at (13.83,8.83) startOffset 0 endOffset 6 width 58.00: "sample"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (15,60) size 118x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 118x13
@@ -52,9 +60,10 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (14.89,167.29) size 120.11x30.43
           RenderSVGContainer {g} at (14.89,167.29) size 120.11x30.43
             RenderPath {path} at (14.89,167.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 (13,8) size 51x42 contains 0 chunk(s)
+        RenderSVGText {text} at (13,8) size 51x42 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 51x42
             RenderSVGInlineText {#text} at (0,-17) size 50x41
+              chunk 1 text run 1 at (13.83,8.83) startOffset 0 endOffset 6 width 58.00: "sample"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 72x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 72x13
@@ -63,9 +72,10 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (164.89,167.29) size 120.11x30.43
           RenderSVGContainer {g} at (164.89,167.29) size 120.11x30.43
             RenderPath {path} at (164.89,167.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 (13,8) size 51x42 contains 0 chunk(s)
+        RenderSVGText {text} at (13,8) size 51x42 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 51x42
             RenderSVGInlineText {#text} at (0,-17) size 50x41
+              chunk 1 text run 1 at (13.83,8.83) startOffset 0 endOffset 6 width 58.00: "sample"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 67x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 67x13
@@ -74,9 +84,10 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (314.89,167.29) size 120.11x30.43
           RenderSVGContainer {g} at (314.89,167.29) size 120.11x30.43
             RenderPath {path} at (314.89,167.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 (13,8) size 51x42 contains 0 chunk(s)
+        RenderSVGText {text} at (13,8) size 51x42 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 51x42
             RenderSVGInlineText {#text} at (0,-17) size 50x41
+              chunk 1 text run 1 at (13.83,8.83) startOffset 0 endOffset 6 width 58.00: "sample"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 54x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 54x13
@@ -85,9 +96,10 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (14.89,257.29) size 120.11x30.43
           RenderSVGContainer {g} at (14.89,257.29) size 120.11x30.43
             RenderPath {path} at (14.89,257.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 (13,8) size 51x42 contains 0 chunk(s)
+        RenderSVGText {text} at (13,8) size 51x42 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 51x42
             RenderSVGInlineText {#text} at (0,-17) size 50x41
+              chunk 1 text run 1 at (13.83,8.83) startOffset 0 endOffset 6 width 58.00: "sample"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 72x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 72x13
@@ -102,9 +114,10 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (164.89,257.29) size 120.11x30.43
           RenderSVGContainer {g} at (164.89,257.29) size 120.11x30.43
             RenderPath {path} at (164.89,257.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 (13,8) size 51x42 contains 0 chunk(s)
+        RenderSVGText {text} at (13,8) size 51x42 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 51x42
             RenderSVGInlineText {#text} at (0,-17) size 50x41
+              chunk 1 text run 1 at (13.83,8.83) startOffset 0 endOffset 6 width 58.00: "sample"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 67x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 67x13
@@ -119,9 +132,10 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (314.89,257.29) size 120.11x30.43
           RenderSVGContainer {g} at (314.89,257.29) size 120.11x30.43
             RenderPath {path} at (314.89,257.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 (13,8) size 51x42 contains 0 chunk(s)
+        RenderSVGText {text} at (13,8) size 51x42 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 51x42
             RenderSVGInlineText {#text} at (0,-17) size 50x41
+              chunk 1 text run 1 at (13.83,8.83) startOffset 0 endOffset 6 width 58.00: "sample"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (5,60) size 132x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 132x13
@@ -136,9 +150,10 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (14.89,357.29) size 120.11x30.43
           RenderSVGContainer {g} at (14.89,357.29) size 120.11x30.43
             RenderPath {path} at (14.89,357.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 (14,8) size 33x43 contains 0 chunk(s)
+        RenderSVGText {text} at (14,8) size 33x43 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 33x43
             RenderSVGInlineText {#text} at (0,-17) size 33x42
+              chunk 1 text run 1 at (14.27,8.93) startOffset 0 endOffset 6 width 40.00: "sample"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 75x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 75x13
@@ -147,9 +162,10 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (164.89,357.29) size 120.11x30.43
           RenderSVGContainer {g} at (164.89,357.29) size 120.11x30.43
             RenderPath {path} at (164.89,357.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 (13,8) size 102x50 contains 0 chunk(s)
+        RenderSVGText {text} at (13,8) size 102x50 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 102x50
             RenderSVGInlineText {#text} at (0,-17) size 101x49
+              chunk 1 text run 1 at (13.83,8.83) startOffset 0 endOffset 13 width 161.00: "sample sample"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 72x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 72x13
@@ -161,9 +177,10 @@ layer at (0,0) size 450x500
         RenderSVGContainer {use} at (314.89,357.29) size 120.11x30.43
           RenderSVGContainer {g} at (314.89,357.29) size 120.11x30.43
             RenderPath {path} at (314.89,357.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 (13,8) size 102x50 contains 0 chunk(s)
+        RenderSVGText {text} at (13,8) size 102x50 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 102x50
             RenderSVGInlineText {#text} at (0,-17) size 101x49
+              chunk 1 text run 1 at (13.83,8.83) startOffset 0 endOffset 13 width 116.00: "sample sample"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (35,60) size 72x13 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-10) size 72x13
index 9a2c2eb..01a369a 100644 (file)
@@ -64,8 +64,9 @@ layer at (0,0) size 450x500
         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,15) size 289x42 contains 0 chunk(s)
+        RenderSVGText {text} at (15,15) size 289x42 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 289x42
             RenderSVGInlineText {#text} at (0,-10) size 288x41
+              chunk 1 (vertical) text run 1 at (15.47,15.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 b445546..c7b756e 100644 (file)
@@ -13,13 +13,16 @@ layer at (0,0) size 450x500
         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,17) size 110x129 contains 0 chunk(s)
+        RenderSVGText {text} at (16,17) size 110x129 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 110x129
             RenderSVGInlineText {#text} at (0,-12) size 61x37
+              chunk 1 (vertical) text run 1 at (16.55,17.65) startOffset 0 endOffset 5 height 85.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 22x25 [color=#FF0000]
               RenderSVGInlineText {#text} at (82,6) size 22x24
+                chunk 1 (vertical) text run 2 at (98.08,36.91) startOffset 0 endOffset 2 height 34.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 10x119
               RenderSVGInlineText {#text} at (100,-2) size 10x119
+                chunk 1 (vertical) text run 3 at (116.63,27.37) 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
@@ -34,13 +37,16 @@ layer at (0,0) size 450x500
         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,8) size 114x119 contains 0 chunk(s)
+        RenderSVGText {text} at (-5,8) size 114x119 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 114x119
             RenderSVGInlineText {#text} at (0,-12) size 6x85
+              chunk 1 (middle anchor, vertical) text run 1 at (-4.50,8.50) startOffset 0 endOffset 5 height 85.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 8x34 [color=#FF0000]
               RenderSVGInlineText {#text} at (11,72) size 8x34
+                chunk 1 (middle anchor, vertical) text run 2 at (6.00,93.50) startOffset 0 endOffset 2 height 34.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 91x44
               RenderSVGInlineText {#text} at (24,-3) size 91x44
+                chunk 1 (middle anchor, vertical) text run 3 at (19.05,17.65) 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
@@ -55,13 +61,16 @@ layer at (0,0) size 450x500
         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,8) size 74x170 contains 0 chunk(s)
+        RenderSVGText {text} at (-5,8) size 74x170 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 74x170
             RenderSVGInlineText {#text} at (0,-12) size 6x85
+              chunk 1 (end anchor, vertical) text run 1 at (-4.50,8.50) startOffset 0 endOffset 5 height 85.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 8x34 [color=#FF0000]
               RenderSVGInlineText {#text} at (11,72) size 8x34
+                chunk 1 (end anchor, vertical) text run 2 at (6.00,93.50) startOffset 0 endOffset 2 height 34.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 73x160
               RenderSVGInlineText {#text} at (1,-2) size 73x159
+                chunk 1 (end anchor, vertical) text run 3 at (-3.50,18.66) 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
@@ -76,13 +85,16 @@ layer at (0,0) size 450x500
         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,26) size 63x187 contains 0 chunk(s)
+        RenderSVGText {text} at (74,26) size 63x187 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 63x187
             RenderSVGInlineText {#text} at (0,-12) size 50x35
+              chunk 1 (vertical) text run 1 at (74.72,26.10) startOffset 0 endOffset 5 height 85.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 8x34 [color=#FF0000]
               RenderSVGInlineText {#text} at (55,21) size 8x34
+                chunk 1 (vertical) text run 2 at (129.61,60.10) startOffset 0 endOffset 2 height 34.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 10x119
               RenderSVGInlineText {#text} at (45,55) size 9x119
+                chunk 1 (vertical) text run 3 at (119.61,94.10) 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
@@ -97,13 +109,16 @@ layer at (0,0) size 450x500
         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,8) size 133x86 contains 0 chunk(s)
+        RenderSVGText {text} at (-5,8) size 133x86 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 133x86
             RenderSVGInlineText {#text} at (0,-12) size 43x51
+              chunk 1 (middle anchor, vertical) text run 1 at (-4.50,8.50) startOffset 0 endOffset 5 height 85.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 21x28 [color=#FF0000]
               RenderSVGInlineText {#text} at (64,-2) size 20x27
+                chunk 1 (middle anchor, vertical) text run 2 at (59.23,18.66) startOffset 0 endOffset 2 height 34.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 52x68
               RenderSVGInlineText {#text} at (82,5) size 52x68
+                chunk 1 (middle anchor, vertical) text run 3 at (77.22,26.10) 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
@@ -118,13 +133,16 @@ layer at (0,0) size 450x500
         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,8) size 134x102 contains 0 chunk(s)
+        RenderSVGText {text} at (-5,8) size 134x102 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 134x102
             RenderSVGInlineText {#text} at (0,-12) size 6x85
+              chunk 1 (end anchor, vertical) text run 1 at (-4.50,8.50) startOffset 0 endOffset 5 height 85.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 33x82 [color=#FF0000]
               RenderSVGInlineText {#text} at (11,7) size 33x82
+                chunk 1 (end anchor, vertical) text run 2 at (6.00,28.12) startOffset 0 endOffset 2 height 34.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 93x42
               RenderSVGInlineText {#text} at (42,-2) size 92x41
+                chunk 1 (end anchor, vertical) text run 3 at (37.84,18.71) 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
@@ -139,13 +157,16 @@ layer at (0,0) size 450x500
         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,17) size 89x162 contains 0 chunk(s)
+        RenderSVGText {text} at (46,17) size 89x162 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 89x162
             RenderSVGInlineText {#text} at (0,-12) size 62x43
+              chunk 1 (vertical) text run 1 at (46.63,17.90) startOffset 0 endOffset 5 height 85.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 8x34 [color=#FF0000]
               RenderSVGInlineText {#text} at (81,-3) size 8x34
+                chunk 1 (vertical) text run 2 at (127.54,26.96) startOffset 0 endOffset 2 height 34.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 10x119
               RenderSVGInlineText {#text} at (71,30) size 10x119
+                chunk 1 (vertical) text run 3 at (117.54,60.96) 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
@@ -160,13 +181,16 @@ layer at (0,0) size 450x500
         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,8) size 131x85 contains 0 chunk(s)
+        RenderSVGText {text} at (-5,8) size 131x85 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 131x85
             RenderSVGInlineText {#text} at (0,-12) size 6x85
+              chunk 1 (middle anchor, vertical) text run 1 at (-4.50,8.50) startOffset 0 endOffset 5 height 85.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 21x27 [color=#FF0000]
               RenderSVGInlineText {#text} at (32,0) size 21x27
+                chunk 1 (middle anchor, vertical) text run 2 at (27.77,21.16) startOffset 0 endOffset 2 height 34.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 78x44
               RenderSVGInlineText {#text} at (54,-3) size 78x43
+                chunk 1 (middle anchor, vertical) text run 3 at (49.13,17.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
@@ -178,13 +202,16 @@ layer at (0,0) size 450x500
         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,8) size 42x204 contains 0 chunk(s)
+        RenderSVGText {text} at (-5,8) size 42x204 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 42x204
             RenderSVGInlineText {#text} at (0,-12) size 6x85
+              chunk 1 (end anchor, vertical) text run 1 at (-4.50,8.50) startOffset 0 endOffset 5 height 85.00: "Text "
             RenderSVGTSpan {tspan} at (0,0) size 8x34 [color=#FF0000]
               RenderSVGInlineText {#text} at (11,72) size 8x34
+                chunk 1 (end anchor, vertical) text run 2 at (6.00,93.50) startOffset 0 endOffset 2 height 34.00: "on"
             RenderSVGTSpan {tspan} at (0,0) size 42x191
               RenderSVGInlineText {#text} at (1,0) size 42x191
+                chunk 1 (end anchor, vertical) text run 3 at (-4.00,21.16) 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
@@ -199,14 +226,18 @@ layer at (0,0) size 450x500
         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 (34,21) size 89x254 contains 0 chunk(s)
+        RenderSVGText {text} at (34,21) size 89x254 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 89x254
             RenderSVGTSpan {tspan} at (0,0) size 54x46 [color=#008000]
               RenderSVGInlineText {#text} at (0,-12) size 53x45
+                chunk 1 (vertical) text run 1 at (34.73,21.30) startOffset 0 endOffset 5 height 85.00: "super"
             RenderSVGInlineText {#text} at (65,-6) size 22x78
+              chunk 1 (vertical) text run 2 at (99.82,27.69) startOffset 0 endOffset 5 height 85.00: " and "
             RenderSVGTSpan {tspan} at (0,0) size 9x51 [color=#FF0000]
               RenderSVGInlineText {#text} at (73,71) size 9x51
+                chunk 1 (vertical) text run 3 at (107.34,105.89) startOffset 0 endOffset 3 height 51.00: "sub"
             RenderSVGInlineText {#text} at (81,122) size 8x119
+              chunk 1 (vertical) text run 4 at (115.84,156.89) 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
@@ -221,13 +252,16 @@ layer at (0,0) size 450x500
         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 (29,21) size 94x271 contains 0 chunk(s)
+        RenderSVGText {text} at (29,21) size 94x271 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 94x271
             RenderSVGTSpan {tspan} at (0,0) size 94x50 [color=#008000]
               RenderSVGInlineText {#text} at (0,-12) size 93x50
+                chunk 1 (vertical) text run 1 at (29.93,21.30) startOffset 0 endOffset 8 height 136.00: "positive"
             RenderSVGInlineText {#text} at (83,37) size 6x85
+              chunk 1 (vertical) text run 2 at (112.84,71.89) startOffset 0 endOffset 5 height 85.00: " and "
             RenderSVGTSpan {tspan} at (0,0) size 9x136 [color=#FF0000]
               RenderSVGInlineText {#text} at (80,122) size 9x136
+                chunk 1 (vertical) text run 3 at (109.84,156.89) 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
@@ -245,8 +279,9 @@ layer at (0,0) size 450x500
               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 91x92 [color=#FF0000]
               RenderSVGInlineText {#text} at (28,3) size 91x92
+                chunk 1 (vertical) text run 2 at (33.14,24.21) startOffset 0 endOffset 7 height 161.00: "on path"
             RenderSVGInlineText {#text} at (107,106) size 12x230
-              chunk 1 (vertical) text run 2 at (33.14,24.21) startOffset 0 endOffset 10 height 230.00: "after path"
+              chunk 1 (vertical) text run 3 at (112.22,127.87) 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 7c38802..d2cf1fe 100644 (file)
@@ -1 +1 @@
-f2aa5926e0ed54cb112b83071a3fb142
\ No newline at end of file
+8e6a70af163a7808d980a8bca7a6d172
\ No newline at end of file
index c3fa921..f118443 100644 (file)
Binary files a/LayoutTests/svg/text/text-align-01-b-expected.png and b/LayoutTests/svg/text/text-align-01-b-expected.png differ
index 38bff81..228c220 100644 (file)
@@ -1 +1 @@
-48d6172c306fa90bc2c36c943341cd3c
\ No newline at end of file
+f7f4170c359af0eec99a4faa9802b3eb
\ No newline at end of file
index e5e7b52..293c3d9 100644 (file)
Binary files a/LayoutTests/svg/text/text-align-02-b-expected.png and b/LayoutTests/svg/text/text-align-02-b-expected.png differ
index 3b2c564..c2aab4a 100644 (file)
@@ -1 +1 @@
-22635d02eddb02adb4d18a1870561e79
\ No newline at end of file
+b0732f962c16beec2a37e85365d66f3c
\ No newline at end of file
index 6c83660..170f0a6 100644 (file)
Binary files a/LayoutTests/svg/text/text-align-03-b-expected.png and b/LayoutTests/svg/text/text-align-03-b-expected.png differ
index d9fa9a1..b2db32c 100644 (file)
@@ -1 +1 @@
-ace28c381e95e966adfe3b1f5f98eb53
\ No newline at end of file
+424445b808cc8200dd55418a0e7e5512
\ No newline at end of file
index d095300..4aa8059 100644 (file)
Binary files a/LayoutTests/svg/text/text-align-04-b-expected.png and b/LayoutTests/svg/text/text-align-04-b-expected.png differ
index 88e4680..55e00c2 100644 (file)
@@ -33,9 +33,10 @@ layer at (0,0) size 800x600
             RenderSVGInlineText {#text} at (0,-27) size 158x33
               chunk 1 (end anchor) text run 1 at (62.00,220.00) startOffset 0 endOffset 13 width 158.00: "end text tref"
           RenderSVGInlineText {#text} at (0,0) size 0x0
-        RenderSVGText {text} at (-9,0) size 229x293 contains 0 chunk(s) [color=#0000FF]
+        RenderSVGText {text} at (-9,0) size 229x293 contains 1 chunk(s) [color=#0000FF]
           RenderSVGTextPath {textPath} at (0,0) size 229x293
             RenderSVGInlineText {#text} at (0,-27) size 229x293
+              chunk 1 (end anchor) text run 1 at (-9.00,0.00) startOffset 0 endOffset 29 width 393.00: "Text-anchor: end text on path"
           RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGText {text} at (10,340) size 264x46 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-36) size 264x46
index eb7e2ce..b37b4cb 100644 (file)
@@ -1 +1 @@
-56fe9073442ccf4de3670b663c02b5e8
\ No newline at end of file
+2612ace66227159723eecb180408084d
\ No newline at end of file
index 99c33b9..53c12d5 100644 (file)
Binary files a/LayoutTests/svg/text/text-align-05-b-expected.png and b/LayoutTests/svg/text/text-align-05-b-expected.png differ
index 106628b..0ed8d38 100644 (file)
@@ -1 +1 @@
-c7b1b273333e0c4cd36de5b8b15c6b55
\ No newline at end of file
+8ca024cde0e7c366d222db40536e2623
\ No newline at end of file
index 0d3c4a6..541706f 100644 (file)
Binary files a/LayoutTests/svg/text/text-align-06-b-expected.png and b/LayoutTests/svg/text/text-align-06-b-expected.png differ
index 17ba0f2..cc161d4 100644 (file)
@@ -1 +1 @@
-6e47249c1601a74c4aa4746baf61a996
\ No newline at end of file
+9f512e9fb4206e05dd950bb584547c49
\ No newline at end of file
index eac0395..256f6af 100644 (file)
Binary files a/LayoutTests/svg/text/text-altglyph-01-b-expected.png and b/LayoutTests/svg/text/text-altglyph-01-b-expected.png differ
index b6bf6eb..c91826f 100644 (file)
@@ -1 +1 @@
-eb2f0f20402786e382d2a996bfa88eb8
\ No newline at end of file
+306b3a9db7a0357a624a04261c9c886d
\ No newline at end of file
index c72fdc2..f780954 100644 (file)
Binary files a/LayoutTests/svg/text/text-deco-01-b-expected.png and b/LayoutTests/svg/text/text-deco-01-b-expected.png differ
index 4c6f43c..170fe28 100644 (file)
@@ -1 +1 @@
-c80a5e85745b732e468da13f0db9d963
\ No newline at end of file
+42e6e41c7617f96abc9ce36b6f1de2d2
\ No newline at end of file
index de94a33..485529e 100644 (file)
Binary files a/LayoutTests/svg/text/text-fonts-01-t-expected.png and b/LayoutTests/svg/text/text-fonts-01-t-expected.png differ
index 49a6ef0..54a6a55 100644 (file)
@@ -1 +1 @@
-81d9ef9cebbbcd20545d94f0f37f8e36
\ No newline at end of file
+006b2abf4e7801c76530efee8d9d00bb
\ No newline at end of file
index fd911a2..481e67c 100644 (file)
Binary files a/LayoutTests/svg/text/text-fonts-02-t-expected.png and b/LayoutTests/svg/text/text-fonts-02-t-expected.png differ
index 9792328..479becd 100644 (file)
@@ -1 +1 @@
-0d022ea68455f6579e9a15c7f7f20183
\ No newline at end of file
+e201ca3fd1b3cfb372d61a5a26a80bd2
\ No newline at end of file
index 426703d..df46391 100644 (file)
Binary files a/LayoutTests/svg/text/text-intro-05-t-expected.png and b/LayoutTests/svg/text/text-intro-05-t-expected.png differ
index 7fa4784..f78bb70 100644 (file)
@@ -1 +1 @@
-0032aa46aee79839662a1dbc49534952
\ No newline at end of file
+a1b292729346bd1ff093e4cf701a4605
\ No newline at end of file
index 74f2f73..edd430a 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 1cc9443..51709b5 100644 (file)
@@ -11,21 +11,25 @@ layer at (0,0) size 800x600
         RenderSVGContainer {use} at (330.88,36.70) size 366.29x140.92
           RenderSVGContainer {g} at (330.88,36.70) size 366.29x140.92
             RenderPath {path} at (330.88,36.70) size 366.29x140.92 [stroke={[type=SOLID] [color=#0000FF]}] [data="M199.00,89.30C206.60,66.60,235.80,13.20,270.00,30.30C286.60,38.60,298.90,59.40,310.00,73.30C321.70,87.90,338.60,99.00,356.00,103.30C387.30,111.10,396.60,90.40,418.00,74.30"]
-        RenderSVGText {text} at (192,27) size 171x116 contains 0 chunk(s)
+        RenderSVGText {text} at (192,27) size 171x116 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 171x116
             RenderSVGInlineText {#text} at (0,-32) size 171x116
+              chunk 1 text run 1 at (192.04,27.04) startOffset 0 endOffset 14 width 226.00: "Text on a path"
           RenderSVGInlineText {#text} at (0,0) size 0x0
       RenderSVGContainer {g} at (27.50,83.33) size 458.33x268.33
         RenderSVGContainer {use} at (55.04,130.86) size 366.29x140.91
           RenderSVGContainer {g} at (55.04,130.86) size 366.29x140.91
             RenderPath {path} at (55.04,130.86) size 366.29x140.91 [stroke={[type=SOLID] [color=#0000FF]}] [data="M33.50,145.80C41.00,123.00,70.30,69.70,104.50,86.80C121.00,95.00,133.00,116.00,144.50,129.80C156.20,144.40,173.00,155.50,190.50,159.80C221.80,167.60,231.00,146.90,252.50,130.80"]
-        RenderSVGText {text} at (26,83) size 172x117 contains 0 chunk(s)
+        RenderSVGText {text} at (26,83) size 172x117 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 172x117
             RenderSVGTSpan {tspan} at (0,0) size 29x58 [color=#FF0000]
               RenderSVGInlineText {#text} at (0,-9) size 28x58
+                chunk 1 text run 1 at (26.50,106.31) startOffset 0 endOffset 2 width 39.00: "Te"
             RenderSVGTSpan {tspan} at (0,0) size 18x41
               RenderSVGInlineText {#text} at (21,-11) size 18x41
+                chunk 1 text run 2 at (47.67,104.04) startOffset 0 endOffset 1 width 18.00: "x"
             RenderSVGInlineText {#text} at (35,-32) size 136x116
+              chunk 1 text run 3 at (61.18,83.54) startOffset 0 endOffset 11 width 169.00: "t on a path"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderPath {rect} at (27.50,280.83) size 458.33x70 [stroke={[type=SOLID] [color=#000000]}] [data="M17.00,169.00L291.00,169.00L291.00,210.00L17.00,210.00"]
         RenderSVGText {text} at (19,185) size 223x22 contains 1 chunk(s)
@@ -38,9 +42,10 @@ layer at (0,0) size 800x600
         RenderSVGContainer {use} at (188.33,385) size 500x6.67
           RenderSVGContainer {g} at (188.33,385) size 500x6.67
             RenderPath {path} at (188.33,385) size 500x6.67 [stroke={[type=SOLID] [color=#0000FF] [stroke width=4.00]}] [data="M113.00,233.00L413.00,233.00"]
-        RenderSVGText {text} at (212,233) size 181x27 contains 0 chunk(s)
+        RenderSVGText {text} at (212,233) size 181x27 contains 1 chunk(s)
           RenderSVGTextPath {textPath} at (0,0) size 181x27
             RenderSVGInlineText {#text} at (0,-22) size 181x27
+              chunk 1 text run 1 at (212.00,233.00) startOffset 0 endOffset 16 width 181.00: "The Text on path"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderPath {rect} at (195.83,415.83) size 435x70 [stroke={[type=SOLID] [color=#000000]}] [data="M118.00,250.00L378.00,250.00L378.00,291.00L118.00,291.00"]
         RenderSVGText {text} at (120,267) size 239x22 contains 1 chunk(s)
index 19b2b24..f5fa0ac 100644 (file)
@@ -1 +1 @@
-cfc2f6242af0d7310907e0b037651bc4
\ No newline at end of file
+6daff68c0c5f3fd0c65078ab7453a771
\ No newline at end of file
index 0877296..c47b2dc 100644 (file)
Binary files a/LayoutTests/svg/text/text-spacing-01-b-expected.png and b/LayoutTests/svg/text/text-spacing-01-b-expected.png differ
index 84f4a86..39ae0fc 100644 (file)
@@ -1 +1 @@
-3a5423c6749fd2192063255cdce84fab
\ No newline at end of file
+0bb60b52fc5e3563650aabc77576d0ab
\ No newline at end of file
index 54a1da6..80dabae 100644 (file)
Binary files a/LayoutTests/svg/text/text-text-01-b-expected.png and b/LayoutTests/svg/text/text-text-01-b-expected.png differ
index e532ff5..249a616 100644 (file)
@@ -1 +1 @@
-b500f16a0c456da1df43a87e84c3a975
\ No newline at end of file
+17c241ca70bc498226f93539a3798a59
\ No newline at end of file
index 6aa41ac..3cd1108 100644 (file)
Binary files a/LayoutTests/svg/text/text-text-03-b-expected.png and b/LayoutTests/svg/text/text-text-03-b-expected.png differ
index 22519a2..e268a1d 100644 (file)
@@ -1 +1 @@
-a95321586d52c3bd0bd89a734214a303
\ No newline at end of file
+de102875f3fd077b90f46f452763bffb
\ No newline at end of file
index 0ea6950..140a864 100644 (file)
Binary files a/LayoutTests/svg/text/text-text-04-t-expected.png and b/LayoutTests/svg/text/text-text-04-t-expected.png differ
index 643b843..9013cd0 100644 (file)
@@ -1 +1 @@
-a2ebbe6fff7a96003af36921ba78498c
\ No newline at end of file
+ca079fd04e880db097a58362cf079194
\ No newline at end of file
index 8dde931..7a98bf5 100644 (file)
Binary files a/LayoutTests/svg/text/text-text-05-t-expected.png and b/LayoutTests/svg/text/text-text-05-t-expected.png differ
index faad28d..920e4a8 100644 (file)
@@ -1 +1 @@
-499bb4186eb7c3430df9f178ebc63529
\ No newline at end of file
+5cbf94c96d80d1e3ee1b5d69893df4eb
\ No newline at end of file
index 19c5b6c..74349ff 100644 (file)
Binary files a/LayoutTests/svg/text/text-text-06-t-expected.png and b/LayoutTests/svg/text/text-text-06-t-expected.png differ
index 246e09f..478a3be 100644 (file)
@@ -1 +1 @@
-19914efd47b3875144595ecd71ebe9dc
\ No newline at end of file
+e5759e5ce1f896dc382e930688c3bf58
\ No newline at end of file
index b92f7c6..214b886 100644 (file)
Binary files a/LayoutTests/svg/text/text-text-07-t-expected.png and b/LayoutTests/svg/text/text-text-07-t-expected.png differ
index 1fa3b84..0a0f1f5 100644 (file)
@@ -1 +1 @@
-8b9db6d7a439d65c2bbe412f2491a25e
\ No newline at end of file
+4eb6dcfe4ea554d8d768d14b14e141c3
\ No newline at end of file
index 16b545e..3b75a44 100644 (file)
Binary files a/LayoutTests/svg/text/text-text-08-b-expected.png and b/LayoutTests/svg/text/text-text-08-b-expected.png differ
index 5b4bb12..9e9d4e5 100644 (file)
@@ -1 +1 @@
-874c7d5a9f63d4d302f3f599a8c78f81
\ No newline at end of file
+87bdfc86ae9a32c94ffdb324ae891e87
\ No newline at end of file
index a3bddc9..6d67589 100644 (file)
Binary files a/LayoutTests/svg/text/text-tref-01-b-expected.png and b/LayoutTests/svg/text/text-tref-01-b-expected.png differ
index dabfc08..de37ddb 100644 (file)
@@ -1 +1 @@
-9dd40058b514beca91ea3024d30dc15e
\ No newline at end of file
+c5ff33314697f6e16997cb78422d1a63
\ No newline at end of file
index 22c5fc3..db2a217 100644 (file)
Binary files a/LayoutTests/svg/text/text-tselect-01-b-expected.png and b/LayoutTests/svg/text/text-tselect-01-b-expected.png differ
index 517ddd4..5613f1f 100644 (file)
@@ -1 +1 @@
-e8e8c264109e5a6324e270e28960e13b
\ No newline at end of file
+aef793787a3d51b18b46be9ff3bd88f4
\ No newline at end of file
index f18a5ee..ea9b6b6 100644 (file)
Binary files a/LayoutTests/svg/text/text-tselect-02-f-expected.png and b/LayoutTests/svg/text/text-tselect-02-f-expected.png differ
index bf0def7..33f5331 100644 (file)
@@ -1 +1 @@
-f389a70ba2c698da0b4babb6935a34bc
\ No newline at end of file
+56d459c01fa89880151a05ed45db409f
\ No newline at end of file
index 0827afe..1a549b5 100644 (file)
Binary files a/LayoutTests/svg/text/text-tspan-01-b-expected.png and b/LayoutTests/svg/text/text-tspan-01-b-expected.png differ
index eee9335..3798605 100644 (file)
@@ -1 +1 @@
-6d6993a00459eca31a70b7a989625957
\ No newline at end of file
+69b14183e02268560e558e744c66560b
\ No newline at end of file
index 269ceb4..9bae4cc 100644 (file)
Binary files a/LayoutTests/svg/text/text-ws-01-t-expected.png and b/LayoutTests/svg/text/text-ws-01-t-expected.png differ
index b43671b..8275795 100644 (file)
@@ -1 +1 @@
-603c75fd04ded0b2d63d61fc9b4ba772
\ No newline at end of file
+68067dec249294ed6362c92adfe81684
\ No newline at end of file
index 543959c..d1a477e 100644 (file)
Binary files a/LayoutTests/svg/text/text-ws-02-t-expected.png and b/LayoutTests/svg/text/text-ws-02-t-expected.png differ
index 1693a29..45f424f 100644 (file)
@@ -1,3 +1,32 @@
+2007-07-30  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Oliver & Rob.
+
+        Enable SVG textPath selection. Actually build chunks for them instead of
+        ignoring them - was easier than I thought. Respect per-character transformation
+        when calculating the chunk boundaries for the selection rectangles. Also fixes
+        selection rect drawing of rotated characters.
+
+        Next thing todo is to unify the glyph size calculations, as per-glyph transformations
+        are not respected when calculating flow box sizes in SVGRootInlineBox.
+        * rendering/RenderObject.h:
+        (WebCore::RenderObject::isSVGHiddenContainer):
+        * rendering/RenderSVGHiddenContainer.h:
+        (WebCore::RenderSVGHiddenContainer::isSVGHiddenContainer):
+        * rendering/RenderSVGInlineText.cpp:
+        (WebCore::isChildOfHiddenContainer):
+        (WebCore::RenderSVGInlineText::selectionRect):
+        (WebCore::RenderSVGInlineText::computeAbsoluteRectForRange):
+        * rendering/SVGCharacterLayoutInfo.h:
+        (WebCore::SVGTextChunk::SVGTextChunk):
+        (WebCore::SVGTextChunkLayoutInfo::SVGTextChunkLayoutInfo):
+        * rendering/SVGInlineTextBox.cpp:
+        (WebCore::SVGInlineTextBox::selectionRect):
+        * rendering/SVGRootInlineBox.cpp:
+        (WebCore::applyTextAnchorToTextChunk):
+        (WebCore::SVGRootInlineBox::buildTextChunks):
+
 2007-07-25  Rob Buis  <buis@kde.org>
 
         Reviewed by Nikolas.
index 4d40fac..eeac52e 100644 (file)
@@ -288,6 +288,7 @@ public:
 #if ENABLE(SVG)
     virtual bool isSVGRoot() const { return false; }
     virtual bool isSVGContainer() const { return false; }
+    virtual bool isSVGHiddenContainer() const { return false; }
     virtual bool isRenderPath() const { return false; }
     virtual bool isSVGText() const { return false; }
 
index d7664c0..5416f31 100644 (file)
@@ -39,6 +39,8 @@ namespace WebCore {
         virtual ~RenderSVGHiddenContainer();
         
         virtual bool isSVGContainer() const { return true; }
+        virtual bool isSVGHiddenContainer() const { return true; }
+
         virtual const char* renderName() const { return "RenderSVGHiddenContainer"; }
         
         virtual bool requiresLayer();
index f98a024..addda11 100644 (file)
 
 namespace WebCore {
 
+static inline bool isChildOfHiddenContainer(RenderObject* start)
+{
+    while (start) {
+        if (start->isSVGHiddenContainer())
+            return true;
+
+        start = start->parent();
+    }
+
+    return false;
+}
+
 RenderSVGInlineText::RenderSVGInlineText(Node* n, StringImpl* str) 
     : RenderText(n, str)
 {
@@ -54,6 +66,10 @@ IntRect RenderSVGInlineText::selectionRect(bool)
     if (selectionState() == SelectionNone)
         return rect;
 
+    // Early exit if we're ie. a <text> within a <defs> section.
+    if (isChildOfHiddenContainer(this))
+        return rect;
+
     // Now calculate startPos and endPos for painting selection.
     // We include a selection while endPos > 0
     int startPos, endPos;
@@ -80,7 +96,7 @@ IntRect RenderSVGInlineText::computeAbsoluteRectForRange(int startPos, int endPo
     IntRect rect;
 
     RenderBlock* cb = containingBlock();
-    if (!cb)
+    if (!cb || !cb->container())
         return rect;
 
     RenderSVGRoot* root = findSVGRootObject(parent());
@@ -92,16 +108,14 @@ IntRect RenderSVGInlineText::computeAbsoluteRectForRange(int startPos, int endPo
 
     // Mimic RenderBox::computeAbsoluteRepaintRect() functionality. But only the subset needed for SVG and respecting SVG transformations.
     int x, y;
-    cb->absolutePosition(x, y);
+    cb->container()->absolutePosition(x, y);
 
     // Remove HTML parent translation offsets here! These need to be retrieved from the RenderSVGRoot object.
+    // But do take the containingBlocks's container position into account, ie. SVG text in scrollable <div>.
     AffineTransform htmlParentCtm = root->RenderContainer::absoluteTransform();
-    FloatRect fixedRect = FloatRect(x - htmlParentCtm.e(), y - htmlParentCtm.f(), rect.width(), rect.height());
-    rect = enclosingIntRect(absoluteTransform().mapRect(fixedRect));
 
-    // Work around rounding issues which may occour above!
-    rect.inflate(1);
-    return rect;
+    FloatRect fixedRect(rect.x() + x - xPos() - htmlParentCtm.e(), rect.y() + y - yPos() - htmlParentCtm.f(), rect.width(), rect.height());
+    return enclosingIntRect(absoluteTransform().mapRect(fixedRect));
 }
 
 InlineTextBox* RenderSVGInlineText::createInlineTextBox()
index 4064d20..d755682 100644 (file)
@@ -196,12 +196,14 @@ struct SVGTextChunk {
     SVGTextChunk()
         : anchor(TA_START)
         , isVerticalText(false)
+        , isTextPath(false)
         , start(0)
         , end(0)
     { }
 
     ETextAnchor anchor;
     bool isVerticalText : 1;
+    bool isTextPath : 1;
 
     Vector<SVGChar>::iterator start;
     Vector<SVGChar>::iterator end;
@@ -212,12 +214,12 @@ struct SVGTextChunk {
 struct SVGTextChunkLayoutInfo {
     SVGTextChunkLayoutInfo()
         : assignChunkProperties(true)
-        , advanceOnly(false)
+        , handlingTextPath(false)
     {
     }
 
     bool assignChunkProperties : 1;
-    bool advanceOnly : 1;
+    bool handlingTextPath : 1;
 
     SVGTextChunk chunk;
     Vector<SVGChar>::iterator it;
index ac38c25..2556c3b 100644 (file)
@@ -222,9 +222,8 @@ IntRect SVGInlineTextBox::selectionRect(int tx, int ty, int startPos, int endPos
 
     const Font& font = textObject()->style()->font();
 
-    float lowX = FLT_MAX, lowY = FLT_MAX;
-    float highX = FLT_MIN, highY = FLT_MIN;
-
+    FloatRect selectionRect;
+    
     Vector<SVGTextChunk>::iterator it = chunks.begin();
     Vector<SVGTextChunk>::iterator end = chunks.end();
 
@@ -248,36 +247,33 @@ IntRect SVGInlineTextBox::selectionRect(int tx, int ty, int startPos, int endPos
                 continue;
             }
 
-            // Walk chunk finding closest character
+            // Figure out chunk size
             Vector<SVGChar>::iterator itCharBegin = curChunk.start + chunkOffset - firstRangeInFirstChunkStartOffset + range.startOffset;
             Vector<SVGChar>::iterator itCharEnd = curChunk.start + chunkOffset - firstRangeInFirstChunkStartOffset + range.endOffset;
             ASSERT(itCharEnd <= curChunk.end);
 
             for (Vector<SVGChar>::iterator itChar = itCharBegin; itChar != itCharEnd; ++itChar) {
                 unsigned int newOffset = (itChar - itCharBegin) + firstRangeInFirstChunkStartOffset;
-
                 float glyphWidth = font.floatWidth(TextRun(textObject()->text()->characters() + newOffset, 1), TextStyle(0, 0));
-                float glyphHeight = font.ascent() + font.descent();
-
-                float x = (*itChar).x;
-                float y = (*itChar).y;
+                float x1 = (*itChar).x;
+                float x2 = (*itChar).x + glyphWidth;
 
-                if (x < lowX)
-                    lowX = x;
+                float y1 = (*itChar).y - font.ascent();
+                float y2 = (*itChar).y + font.descent();
 
-                if (x + glyphWidth > highX)
-                    highX = x + glyphWidth;
+                FloatRect glyphRect(x1, y1, x2 - x1, y2 - y1);
 
-                if (y < lowY)
-                    lowY = y;
+                // Take per-character transformations into account
+                if (!(*itChar).transform.isIdentity())
+                    glyphRect = (*itChar).transform.mapRect(glyphRect);
 
-                if (y + glyphHeight > highY)
-                    highY = y + glyphHeight;
+                selectionRect.unite(glyphRect);
             }
         }
     }
 
-    return enclosingIntRect(FloatRect(tx + lowX, ty + lowY, highX - lowX, highY - lowY));
+    return enclosingIntRect(selectionRect);
 }
 
 } // namespace WebCore
index fb553d0..d157f69 100644 (file)
@@ -278,7 +278,8 @@ static void applyTextAnchorToTextChunk(SVGTextChunk& chunk)
 {
 #if DEBUG_CHUNK_BUILDING > 0
     {
-        fprintf(stderr, "Handle TEXT CHUNK! anchor=%i, isVerticalText=%i, start=%p, end=%p -> dist: %i\n", (int) chunk.anchor, (int) chunk.isVerticalText, chunk.start, chunk.end, (unsigned int) (chunk.end-chunk.start));
+        fprintf(stderr, "Handle TEXT CHUNK! anchor=%i, isVerticalText=%i, isTextPath=%i start=%p, end=%p -> dist: %i\n",
+                (int) chunk.anchor, (int) chunk.isVerticalText, (int) chunk.isTextPath, chunk.start, chunk.end, (unsigned int) (chunk.end-chunk.start));
 
         Vector<SVGInlineBoxCharacterRange>::iterator boxIt = chunk.boxes.begin();
         Vector<SVGInlineBoxCharacterRange>::iterator boxEnd = chunk.boxes.end();
@@ -291,7 +292,7 @@ static void applyTextAnchorToTextChunk(SVGTextChunk& chunk)
     }
 #endif
 
-    if (chunk.anchor == TA_START)
+    if (chunk.anchor == TA_START || chunk.isTextPath)
         return;
 
     float shift = 0.0;
@@ -772,14 +773,9 @@ void SVGRootInlineBox::buildTextChunks(InlineFlowBox* start, SVGTextChunkLayoutI
                 continue;
 
 #if DEBUG_CHUNK_BUILDING > 1
-            fprintf(stderr, " -> Handle inline text box (%p) with %i characters, advanceOnly=%i\n", textBox, length, (int) info.advanceOnly);
+            fprintf(stderr, " -> Handle inline text box (%p) with %i characters, handlingTextPath=%i\n", textBox, length, (int) info.handlingTextPath);
 #endif
 
-            if (info.advanceOnly) {
-                info.it += length;
-                continue;
-            }
-
             RenderText* text = textBox->textObject();
             ASSERT(text);
 
@@ -810,6 +806,7 @@ void SVGRootInlineBox::buildTextChunks(InlineFlowBox* start, SVGTextChunkLayoutI
                     info.assignChunkProperties = false;
 
                     info.chunk.isVerticalText = isVerticalWritingMode(text->style()->svgStyle());
+                    info.chunk.isTextPath = info.handlingTextPath;
                     info.chunk.anchor = text->style()->svgStyle()->textAnchor();
 
 #if DEBUG_CHUNK_BUILDING > 1
@@ -841,6 +838,7 @@ void SVGRootInlineBox::buildTextChunks(InlineFlowBox* start, SVGTextChunkLayoutI
 
                         info.assignChunkProperties = false;
                         info.chunk.isVerticalText = isVerticalWritingMode(text->style()->svgStyle());
+                        info.chunk.isTextPath = info.handlingTextPath;
                         info.chunk.anchor = text->style()->svgStyle()->textAnchor();
 
                         range.box = curr;
@@ -906,7 +904,6 @@ void SVGRootInlineBox::buildTextChunks(InlineFlowBox* start, SVGTextChunkLayoutI
             ASSERT(curr->isInlineFlowBox());
             InlineFlowBox* flowBox = static_cast<InlineFlowBox*>(curr);
 
-            // <textPath> doesn't need this chunk logic. FIXME: It's needed for text selection! (not for text-anchor though)
             bool isTextPath = flowBox->object()->element()->hasTagName(SVGNames::textPathTag);
 
 #if DEBUG_CHUNK_BUILDING > 1
@@ -914,12 +911,12 @@ void SVGRootInlineBox::buildTextChunks(InlineFlowBox* start, SVGTextChunkLayoutI
 #endif
 
             if (isTextPath)
-                info.advanceOnly = true;
+                info.handlingTextPath = true;
 
             buildTextChunks(flowBox, info);
 
             if (isTextPath)
-                info.advanceOnly = false;
+                info.handlingTextPath = false;
         }
     }