Reviewed by Oliver.
authoroliver <oliver@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Oct 2007 13:30:19 +0000 (13:30 +0000)
committeroliver <oliver@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Oct 2007 13:30:19 +0000 (13:30 +0000)
Fixes: http://bugs.webkit.org/show_bug.cgi?id=13909 (SVG text selection doesn't work with RTL text)

Use drawHighlightForText() to draw the selection, instead of my home-brewn solution.
Affected code in SVGRootInlineBox::paintSelectionForTextBox. Removed not anymore needed
helper function cummulatedWidthOfSelectionRange.

Dump all contained InlineTextBox(es) in SVGRenderTreeAsText, take into account multiple
child text boxes in ie. a RenderSVGInlineText objects (which happens for RTL text and
LTR text cases where newlines were involved - see changed testcase results.)
This affects a lot of LTR tests which actually had more than one child text box, that
wasn't taken properly into account before (in terms of selection, not rendering.)

Fix selection for RTL text by taking box start offsets into account in closestCharacterToPosition()
and by offering RTL text selection special cases in svgCharacterHitsPosition().

Centralized the creation of a TextStyle object for text selection/painting in a new helper function
svgTextStyleForInlineTextBox. Add new helper functions calculateGlyphWidth/calculateGlyphHeight to
centralize these calculations -> use these new helpers everywhere to avoid code duplication.

A single fix in bidi.cpp was needed to fix SVG's unicode-bidi/direction handling, to fix text-intro-02-b.svg.
SVG didacts that the 'direction' attribute is ignored if unicode-bidi is set to 'normal' (default).
Discussed with Mitz.

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

64 files changed:
LayoutTests/ChangeLog
LayoutTests/svg/batik/text/longTextOnPath-expected.txt
LayoutTests/svg/batik/text/textAnchor-expected.checksum
LayoutTests/svg/batik/text/textAnchor-expected.png
LayoutTests/svg/batik/text/textAnchor-expected.txt
LayoutTests/svg/batik/text/textBiDi-expected.checksum
LayoutTests/svg/batik/text/textBiDi-expected.png
LayoutTests/svg/batik/text/textBiDi-expected.txt
LayoutTests/svg/batik/text/textEffect-expected.checksum
LayoutTests/svg/batik/text/textEffect-expected.png
LayoutTests/svg/batik/text/textEffect-expected.txt
LayoutTests/svg/batik/text/textEffect3-expected.checksum
LayoutTests/svg/batik/text/textEffect3-expected.png
LayoutTests/svg/batik/text/textEffect3-expected.txt
LayoutTests/svg/batik/text/textFeatures-expected.checksum
LayoutTests/svg/batik/text/textFeatures-expected.png
LayoutTests/svg/batik/text/textFeatures-expected.txt
LayoutTests/svg/batik/text/textLayout-expected.checksum
LayoutTests/svg/batik/text/textLayout-expected.png
LayoutTests/svg/batik/text/textLayout-expected.txt
LayoutTests/svg/batik/text/textLayout2-expected.checksum
LayoutTests/svg/batik/text/textLayout2-expected.png
LayoutTests/svg/batik/text/textLayout2-expected.txt
LayoutTests/svg/batik/text/textOnPath2-expected.txt
LayoutTests/svg/batik/text/textProperties-expected.checksum
LayoutTests/svg/batik/text/textProperties-expected.png
LayoutTests/svg/batik/text/textProperties-expected.txt
LayoutTests/svg/batik/text/textProperties2-expected.checksum
LayoutTests/svg/batik/text/textProperties2-expected.png
LayoutTests/svg/batik/text/textProperties2-expected.txt
LayoutTests/svg/batik/text/textStyles-expected.checksum
LayoutTests/svg/batik/text/textStyles-expected.png
LayoutTests/svg/batik/text/textStyles-expected.txt
LayoutTests/svg/batik/text/xmlSpace-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-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-intro-05-t-expected.txt
LayoutTests/svg/text/text-path-01-b-expected.checksum
LayoutTests/svg/text/text-path-01-b-expected.png
LayoutTests/svg/text/text-spacing-01-b-expected.checksum
LayoutTests/svg/text/text-spacing-01-b-expected.png
LayoutTests/svg/text/text-spacing-01-b-expected.txt
LayoutTests/svg/text/text-text-05-t-expected.checksum
LayoutTests/svg/text/text-text-05-t-expected.png
LayoutTests/svg/text/text-tselect-02-f-expected.checksum
LayoutTests/svg/text/text-tselect-02-f-expected.png
LayoutTests/svg/text/text-tselect-02-f-expected.txt
LayoutTests/svg/text/text-tspan-01-b-expected.checksum
LayoutTests/svg/text/text-tspan-01-b-expected.png
WebCore/ChangeLog
WebCore/rendering/InlineBox.h
WebCore/rendering/RenderSVGInlineText.cpp
WebCore/rendering/SVGInlineTextBox.cpp
WebCore/rendering/SVGInlineTextBox.h
WebCore/rendering/SVGRenderTreeAsText.cpp
WebCore/rendering/SVGRootInlineBox.cpp
WebCore/rendering/SVGRootInlineBox.h
WebCore/rendering/bidi.cpp

index 006344c..f74fa97 100644 (file)
@@ -1,3 +1,97 @@
+2007-08-08  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Oliver.
+
+        Update test results after the SVG RTL text selection checkin.
+        Now dumps all contained inline text boxes, which affects a lot of tests.
+
+        * svg/W3C-SVG-1.1/animate-elem-04-t-expected.txt:
+        * svg/W3C-SVG-1.1/animate-elem-05-t-expected.txt:
+        * svg/W3C-SVG-1.1/animate-elem-06-t-expected.txt:
+        * svg/W3C-SVG-1.1/animate-elem-07-t-expected.txt:
+        * svg/W3C-SVG-1.1/animate-elem-44-t-expected.txt:
+        * svg/W3C-SVG-1.1/color-prof-01-f-expected.txt:
+        * svg/W3C-SVG-1.1/coords-viewattr-03-b-expected.checksum:
+        * svg/W3C-SVG-1.1/coords-viewattr-03-b-expected.png:
+        * svg/W3C-SVG-1.1/coords-viewattr-03-b-expected.txt:
+        * svg/W3C-SVG-1.1/extend-namespace-01-f-expected.checksum:
+        * svg/W3C-SVG-1.1/extend-namespace-01-f-expected.png:
+        * svg/W3C-SVG-1.1/extend-namespace-01-f-expected.txt:
+        * svg/W3C-SVG-1.1/interact-events-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/interact-order-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/interact-order-02-b-expected.txt:
+        * svg/W3C-SVG-1.1/interact-order-03-b-expected.txt:
+        * svg/W3C-SVG-1.1/linking-a-07-t-expected.txt:
+        * svg/W3C-SVG-1.1/script-handle-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/script-handle-02-b-expected.txt:
+        * svg/W3C-SVG-1.1/script-handle-03-b-expected.txt:
+        * svg/W3C-SVG-1.1/script-handle-04-b-expected.txt:
+        * svg/W3C-SVG-1.1/struct-frag-06-t-expected.txt:
+        * svg/W3C-SVG-1.1/styling-css-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/styling-css-03-b-expected.txt:
+        * svg/W3C-SVG-1.1/text-intro-05-t-expected.txt:
+        * svg/W3C-SVG-1.1/text-spacing-01-b-expected.txt:
+        * svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt:
+        * svg/batik/text/longTextOnPath-expected.txt:
+        * svg/batik/text/textAnchor-expected.checksum:
+        * svg/batik/text/textAnchor-expected.png:
+        * svg/batik/text/textAnchor-expected.txt:
+        * svg/batik/text/textBiDi-expected.checksum:
+        * svg/batik/text/textBiDi-expected.png:
+        * svg/batik/text/textBiDi-expected.txt:
+        * svg/batik/text/textEffect-expected.checksum:
+        * svg/batik/text/textEffect-expected.png:
+        * svg/batik/text/textEffect-expected.txt:
+        * svg/batik/text/textEffect3-expected.checksum:
+        * svg/batik/text/textEffect3-expected.png:
+        * svg/batik/text/textEffect3-expected.txt:
+        * svg/batik/text/textFeatures-expected.checksum:
+        * svg/batik/text/textFeatures-expected.png:
+        * svg/batik/text/textFeatures-expected.txt:
+        * svg/batik/text/textLayout-expected.checksum:
+        * svg/batik/text/textLayout-expected.png:
+        * svg/batik/text/textLayout-expected.txt:
+        * svg/batik/text/textLayout2-expected.checksum:
+        * svg/batik/text/textLayout2-expected.png:
+        * svg/batik/text/textLayout2-expected.txt:
+        * svg/batik/text/textOnPath2-expected.txt:
+        * svg/batik/text/textProperties-expected.checksum:
+        * svg/batik/text/textProperties-expected.png:
+        * svg/batik/text/textProperties-expected.txt:
+        * svg/batik/text/textProperties2-expected.checksum:
+        * svg/batik/text/textProperties2-expected.png:
+        * svg/batik/text/textProperties2-expected.txt:
+        * svg/batik/text/textStyles-expected.checksum:
+        * svg/batik/text/textStyles-expected.png:
+        * svg/batik/text/textStyles-expected.txt:
+        * svg/batik/text/xmlSpace-expected.txt:
+        * svg/carto.net/selectionlist-expected.txt:
+        * svg/custom/invalid-fill-expected.txt:
+        * svg/custom/invalid-fill-hex-expected.txt:
+        * svg/custom/marker-overflow-clip-expected.txt:
+        * svg/custom/text-whitespace-handling-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-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-intro-05-t-expected.txt:
+        * svg/text/text-path-01-b-expected.checksum:
+        * svg/text/text-path-01-b-expected.png:
+        * svg/text/text-spacing-01-b-expected.checksum:
+        * svg/text/text-spacing-01-b-expected.png:
+        * svg/text/text-spacing-01-b-expected.txt:
+        * svg/text/text-text-05-t-expected.checksum:
+        * svg/text/text-text-05-t-expected.png:
+        * svg/text/text-tselect-02-f-expected.checksum:
+        * svg/text/text-tselect-02-f-expected.png:
+        * svg/text/text-tselect-02-f-expected.txt:
+        * svg/text/text-tspan-01-b-expected.checksum:
+        * svg/text/text-tspan-01-b-expected.png:
+
 2007-07-29  Nikolas Zimmermann  <zimmermann@kde.org>
 
         Reviewed by Rob.
index fd9fd5c..ab2547f 100644 (file)
@@ -16,5 +16,8 @@ layer at (0,0) size 450x500
         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. "
+            chunk 1 text run 2 at (27.00,310.00) startOffset 0 endOffset 85 width 693.00: "However if it hasn't slowed down by now I'm guessing that it won't slow down at all. "
+            chunk 1 text run 3 at (22.00,330.00) startOffset 0 endOffset 79 width 613.00: "But you never know for sure until you try it, so I am, and here is the result. "
+            chunk 1 text run 4 at (25.00,370.00) startOffset 0 endOffset 70 width 551.00: "Selection does bog down a little near the end but it's redraw related."
         RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {use} at (0,0) size 0x0
index 9702c25..660cdac 100644 (file)
@@ -1 +1 @@
-5ae7a4f3ba6aa851936b940fe629c2bb
\ No newline at end of file
+29972ef68534a9eb7d763868059a70dd
\ No newline at end of file
index 8fd2f4d..90a64b1 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textAnchor-expected.png and b/LayoutTests/svg/batik/text/textAnchor-expected.png differ
index 628021f..e5e1c49 100644 (file)
@@ -1,11 +1,11 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 450x500
-  RenderSVGRoot {svg} at (51,26) size 343.12x431.88
+  RenderSVGRoot {svg} at (48,26) size 346.12x431.88
     RenderSVGText {text} at (144,40) size 162x17 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-14) size 162x17
         chunk 1 (middle anchor) text run 1 at (144.00,40.00) startOffset 0 endOffset 22 width 162.00: "text-anchor on <tspan>"
-    RenderSVGContainer {g} at (51,82.12) size 343.12x375.75 [transform={m=((0.75,0.00)(0.00,0.75)) t=(56.25,82.50)}]
+    RenderSVGContainer {g} at (48,82.12) size 346.12x375.75 [transform={m=((0.75,0.00)(0.00,0.75)) t=(56.25,82.50)}]
       RenderSVGContainer {g} at (55.88,82.12) size 338.25x375.75
         RenderPath {rect} at (56.25,82.50) size 337.50x125.25 [opacity=0.10] [fill={[type=SOLID] [color=#000000]}] [data="M0.00,0.00L450.00,0.00L450.00,167.00L0.00,167.00"]
         RenderPath {rect} at (56.25,207.75) size 337.50x125.25 [fill={[type=SOLID] [color=#FFFFFF]}] [data="M0.00,167.00L450.00,167.00L450.00,334.00L0.00,334.00"]
@@ -13,7 +13,7 @@ layer at (0,0) size 450x500
         RenderPath {line} at (168.38,82.50) size 0.75x375 [stroke={[type=SOLID] [color=#FF0000]}] [data="M150.00,0.00L150.00,500.00"]
         RenderPath {line} at (295.88,82.50) size 0.75x375 [stroke={[type=SOLID] [color=#FF0000]}] [data="M320.00,0.00L320.00,500.00"]
         RenderPath {rect} at (55.88,82.12) size 338.25x375.75 [stroke={[type=SOLID] [color=#FF0000]}] [data="M0.00,0.00L450.00,0.00L450.00,500.00L0.00,500.00"]
-      RenderSVGContainer {g} at (51,94.50) size 333x88.50
+      RenderSVGContainer {g} at (48,94.50) size 336x88.50
         RenderSVGContainer {g} at (168.75,94.50) size 215.25x28.50
           RenderSVGText {text} at (150,30) size 287x38 contains 2 chunk(s)
             RenderSVGTSpan {tspan} at (0,0) size 51x18
@@ -23,46 +23,46 @@ layer at (0,0) size 450x500
               chunk 1 text run 2 at (201.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 102x18 [color=#FF0000]
               RenderSVGInlineText {#text} at (55,6) size 102x18
-                chunk 1 text run 3 at (205.00,50.00) startOffset 0 endOffset 15 width 98.00: " same text chun"
+                chunk 1 text run 3 at (205.00,50.00) startOffset 0 endOffset 15 width 102.00: "same text chunk"
             RenderSVGInlineText {#text} at (157,6) size 4x18
               chunk 1 text run 4 at (307.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 117x18
               RenderSVGInlineText {#text} at (170,-14) size 117x18
                 chunk 2 text run 1 at (320.00,30.00) startOffset 0 endOffset 18 width 117.00: "another text chunk"
             RenderSVGInlineText {#text} at (0,0) size 0x0
-        RenderSVGContainer {g} at (109.50,124.50) size 274.50x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,40.00)}]
-          RenderSVGText {text} at (71,30) size 366x38 contains 2 chunk(s)
+        RenderSVGContainer {g} at (108,124.50) size 276x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,40.00)}]
+          RenderSVGText {text} at (69,30) size 368x38 contains 2 chunk(s)
             RenderSVGTSpan {tspan} at (0,0) size 51x18
               RenderSVGInlineText {#text} at (0,6) size 51x18
-                chunk 1 (middle anchor) text run 1 at (71.50,50.00) startOffset 0 endOffset 8 width 51.00: "I am the"
+                chunk 1 (middle anchor) text run 1 at (69.50,50.00) startOffset 0 endOffset 8 width 51.00: "I am the"
             RenderSVGInlineText {#text} at (51,6) size 4x18
-              chunk 1 (middle anchor) text run 2 at (122.50,50.00) startOffset 0 endOffset 1 width 4.00: " "
+              chunk 1 (middle anchor) text run 2 at (120.50,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 102x18 [color=#FF0000]
               RenderSVGInlineText {#text} at (55,6) size 102x18
-                chunk 1 (middle anchor) text run 3 at (126.50,50.00) startOffset 0 endOffset 15 width 98.00: " same text chun"
+                chunk 1 (middle anchor) text run 3 at (124.50,50.00) startOffset 0 endOffset 15 width 102.00: "same text chunk"
             RenderSVGInlineText {#text} at (157,6) size 4x18
-              chunk 1 (middle anchor) text run 4 at (228.50,50.00) startOffset 0 endOffset 1 width 4.00: " "
+              chunk 1 (middle anchor) text run 4 at (226.50,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 117x18
-              RenderSVGInlineText {#text} at (249,-14) size 117x18
+              RenderSVGInlineText {#text} at (251,-14) size 117x18
                 chunk 2 text run 1 at (320.00,30.00) startOffset 0 endOffset 18 width 117.00: "another text chunk"
             RenderSVGInlineText {#text} at (0,0) size 0x0
-        RenderSVGContainer {g} at (51,154.50) size 333x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,80.00)}]
-          RenderSVGText {text} at (-7,30) size 444x38 contains 2 chunk(s)
+        RenderSVGContainer {g} at (48,154.50) size 336x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,80.00)}]
+          RenderSVGText {text} at (-11,30) size 448x38 contains 2 chunk(s)
             RenderSVGTSpan {tspan} at (0,0) size 51x18
               RenderSVGInlineText {#text} at (0,6) size 51x18
-                chunk 1 (end anchor) text run 1 at (-7.00,50.00) startOffset 0 endOffset 8 width 51.00: "I am the"
+                chunk 1 (end anchor) text run 1 at (-11.00,50.00) startOffset 0 endOffset 8 width 51.00: "I am the"
             RenderSVGInlineText {#text} at (51,6) size 4x18
-              chunk 1 (end anchor) text run 2 at (44.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
+              chunk 1 (end anchor) text run 2 at (40.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 102x18 [color=#FF0000]
               RenderSVGInlineText {#text} at (55,6) size 102x18
-                chunk 1 (end anchor) text run 3 at (48.00,50.00) startOffset 0 endOffset 15 width 98.00: " same text chun"
+                chunk 1 (end anchor) text run 3 at (44.00,50.00) startOffset 0 endOffset 15 width 102.00: "same text chunk"
             RenderSVGInlineText {#text} at (157,6) size 4x18
-              chunk 1 (end anchor) text run 4 at (150.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
+              chunk 1 (end anchor) text run 4 at (146.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 117x18
-              RenderSVGInlineText {#text} at (327,-14) size 117x18
+              RenderSVGInlineText {#text} at (331,-14) size 117x18
                 chunk 2 text run 1 at (320.00,30.00) startOffset 0 endOffset 18 width 117.00: "another text chunk"
             RenderSVGInlineText {#text} at (0,0) size 0x0
-      RenderSVGContainer {g} at (51,222) size 288.75x88.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
+      RenderSVGContainer {g} at (48,222) size 291.75x88.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,50.00)}]
         RenderSVGContainer {g} at (168.75,222) size 171x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,120.00)}]
           RenderSVGText {text} at (150,30) size 228x38 contains 2 chunk(s)
             RenderSVGTSpan {tspan} at (0,0) size 51x18
@@ -72,46 +72,46 @@ layer at (0,0) size 450x500
               chunk 1 text run 2 at (201.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 102x18 [color=#FF0000]
               RenderSVGInlineText {#text} at (55,6) size 102x18
-                chunk 1 text run 3 at (205.00,50.00) startOffset 0 endOffset 15 width 98.00: " same text chun"
+                chunk 1 text run 3 at (205.00,50.00) startOffset 0 endOffset 15 width 102.00: "same text chunk"
             RenderSVGInlineText {#text} at (157,6) size 4x18
               chunk 1 text run 4 at (307.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 117x18
               RenderSVGInlineText {#text} at (111,-14) size 117x18
                 chunk 2 (middle anchor) text run 1 at (261.50,30.00) startOffset 0 endOffset 18 width 117.00: "another text chunk"
             RenderSVGInlineText {#text} at (0,0) size 0x0
-        RenderSVGContainer {g} at (109.50,252) size 230.25x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,160.00)}]
-          RenderSVGText {text} at (71,30) size 307x38 contains 2 chunk(s)
+        RenderSVGContainer {g} at (108,252) size 231.75x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,160.00)}]
+          RenderSVGText {text} at (69,30) size 309x38 contains 2 chunk(s)
             RenderSVGTSpan {tspan} at (0,0) size 51x18
               RenderSVGInlineText {#text} at (0,6) size 51x18
-                chunk 1 (middle anchor) text run 1 at (71.50,50.00) startOffset 0 endOffset 8 width 51.00: "I am the"
+                chunk 1 (middle anchor) text run 1 at (69.50,50.00) startOffset 0 endOffset 8 width 51.00: "I am the"
             RenderSVGInlineText {#text} at (51,6) size 4x18
-              chunk 1 (middle anchor) text run 2 at (122.50,50.00) startOffset 0 endOffset 1 width 4.00: " "
+              chunk 1 (middle anchor) text run 2 at (120.50,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 102x18 [color=#FF0000]
               RenderSVGInlineText {#text} at (55,6) size 102x18
-                chunk 1 (middle anchor) text run 3 at (126.50,50.00) startOffset 0 endOffset 15 width 98.00: " same text chun"
+                chunk 1 (middle anchor) text run 3 at (124.50,50.00) startOffset 0 endOffset 15 width 102.00: "same text chunk"
             RenderSVGInlineText {#text} at (157,6) size 4x18
-              chunk 1 (middle anchor) text run 4 at (228.50,50.00) startOffset 0 endOffset 1 width 4.00: " "
+              chunk 1 (middle anchor) text run 4 at (226.50,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 117x18
-              RenderSVGInlineText {#text} at (190,-14) size 117x18
+              RenderSVGInlineText {#text} at (192,-14) size 117x18
                 chunk 2 (middle anchor) text run 1 at (261.50,30.00) startOffset 0 endOffset 18 width 117.00: "another text chunk"
             RenderSVGInlineText {#text} at (0,0) size 0x0
-        RenderSVGContainer {g} at (51,282) size 288.75x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,200.00)}]
-          RenderSVGText {text} at (-7,30) size 385x38 contains 2 chunk(s)
+        RenderSVGContainer {g} at (48,282) size 291.75x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,200.00)}]
+          RenderSVGText {text} at (-11,30) size 389x38 contains 2 chunk(s)
             RenderSVGTSpan {tspan} at (0,0) size 51x18
               RenderSVGInlineText {#text} at (0,6) size 51x18
-                chunk 1 (end anchor) text run 1 at (-7.00,50.00) startOffset 0 endOffset 8 width 51.00: "I am the"
+                chunk 1 (end anchor) text run 1 at (-11.00,50.00) startOffset 0 endOffset 8 width 51.00: "I am the"
             RenderSVGInlineText {#text} at (51,6) size 4x18
-              chunk 1 (end anchor) text run 2 at (44.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
+              chunk 1 (end anchor) text run 2 at (40.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 102x18 [color=#FF0000]
               RenderSVGInlineText {#text} at (55,6) size 102x18
-                chunk 1 (end anchor) text run 3 at (48.00,50.00) startOffset 0 endOffset 15 width 98.00: " same text chun"
+                chunk 1 (end anchor) text run 3 at (44.00,50.00) startOffset 0 endOffset 15 width 102.00: "same text chunk"
             RenderSVGInlineText {#text} at (157,6) size 4x18
-              chunk 1 (end anchor) text run 4 at (150.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
+              chunk 1 (end anchor) text run 4 at (146.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 117x18
-              RenderSVGInlineText {#text} at (268,-14) size 117x18
+              RenderSVGInlineText {#text} at (272,-14) size 117x18
                 chunk 2 (middle anchor) text run 1 at (261.50,30.00) startOffset 0 endOffset 18 width 117.00: "another text chunk"
             RenderSVGInlineText {#text} at (0,0) size 0x0
-      RenderSVGContainer {g} at (51,349.50) size 245.25x88.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,80.00)}]
+      RenderSVGContainer {g} at (48,349.50) size 248.25x88.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,80.00)}]
         RenderSVGContainer {g} at (168.75,349.50) size 127.50x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,260.00)}]
           RenderSVGText {text} at (150,30) size 170x38 contains 2 chunk(s)
             RenderSVGTSpan {tspan} at (0,0) size 51x18
@@ -121,43 +121,43 @@ layer at (0,0) size 450x500
               chunk 1 text run 2 at (201.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 102x18 [color=#FF0000]
               RenderSVGInlineText {#text} at (55,6) size 102x18
-                chunk 1 text run 3 at (205.00,50.00) startOffset 0 endOffset 15 width 98.00: " same text chun"
+                chunk 1 text run 3 at (205.00,50.00) startOffset 0 endOffset 15 width 102.00: "same text chunk"
             RenderSVGInlineText {#text} at (157,6) size 4x18
               chunk 1 text run 4 at (307.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 117x18
               RenderSVGInlineText {#text} at (53,-14) size 117x18
                 chunk 2 (end anchor) text run 1 at (203.00,30.00) startOffset 0 endOffset 18 width 117.00: "another text chunk"
             RenderSVGInlineText {#text} at (0,0) size 0x0
-        RenderSVGContainer {g} at (109.50,379.50) size 186.75x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,300.00)}]
-          RenderSVGText {text} at (71,30) size 249x38 contains 2 chunk(s)
+        RenderSVGContainer {g} at (108,379.50) size 188.25x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,300.00)}]
+          RenderSVGText {text} at (69,30) size 251x38 contains 2 chunk(s)
             RenderSVGTSpan {tspan} at (0,0) size 51x18
               RenderSVGInlineText {#text} at (0,6) size 51x18
-                chunk 1 (middle anchor) text run 1 at (71.50,50.00) startOffset 0 endOffset 8 width 51.00: "I am the"
+                chunk 1 (middle anchor) text run 1 at (69.50,50.00) startOffset 0 endOffset 8 width 51.00: "I am the"
             RenderSVGInlineText {#text} at (51,6) size 4x18
-              chunk 1 (middle anchor) text run 2 at (122.50,50.00) startOffset 0 endOffset 1 width 4.00: " "
+              chunk 1 (middle anchor) text run 2 at (120.50,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 102x18 [color=#FF0000]
               RenderSVGInlineText {#text} at (55,6) size 102x18
-                chunk 1 (middle anchor) text run 3 at (126.50,50.00) startOffset 0 endOffset 15 width 98.00: " same text chun"
+                chunk 1 (middle anchor) text run 3 at (124.50,50.00) startOffset 0 endOffset 15 width 102.00: "same text chunk"
             RenderSVGInlineText {#text} at (157,6) size 4x18
-              chunk 1 (middle anchor) text run 4 at (228.50,50.00) startOffset 0 endOffset 1 width 4.00: " "
+              chunk 1 (middle anchor) text run 4 at (226.50,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 117x18
-              RenderSVGInlineText {#text} at (132,-14) size 117x18
+              RenderSVGInlineText {#text} at (134,-14) size 117x18
                 chunk 2 (end anchor) text run 1 at (203.00,30.00) startOffset 0 endOffset 18 width 117.00: "another text chunk"
             RenderSVGInlineText {#text} at (0,0) size 0x0
-        RenderSVGContainer {g} at (51,409.50) size 245.25x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,340.00)}]
-          RenderSVGText {text} at (-7,30) size 327x38 contains 2 chunk(s)
+        RenderSVGContainer {g} at (48,409.50) size 248.25x28.50 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,340.00)}]
+          RenderSVGText {text} at (-11,30) size 331x38 contains 2 chunk(s)
             RenderSVGTSpan {tspan} at (0,0) size 51x18
               RenderSVGInlineText {#text} at (0,6) size 51x18
-                chunk 1 (end anchor) text run 1 at (-7.00,50.00) startOffset 0 endOffset 8 width 51.00: "I am the"
+                chunk 1 (end anchor) text run 1 at (-11.00,50.00) startOffset 0 endOffset 8 width 51.00: "I am the"
             RenderSVGInlineText {#text} at (51,6) size 4x18
-              chunk 1 (end anchor) text run 2 at (44.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
+              chunk 1 (end anchor) text run 2 at (40.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 102x18 [color=#FF0000]
               RenderSVGInlineText {#text} at (55,6) size 102x18
-                chunk 1 (end anchor) text run 3 at (48.00,50.00) startOffset 0 endOffset 15 width 98.00: " same text chun"
+                chunk 1 (end anchor) text run 3 at (44.00,50.00) startOffset 0 endOffset 15 width 102.00: "same text chunk"
             RenderSVGInlineText {#text} at (157,6) size 4x18
-              chunk 1 (end anchor) text run 4 at (150.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
+              chunk 1 (end anchor) text run 4 at (146.00,50.00) startOffset 0 endOffset 1 width 4.00: " "
             RenderSVGTSpan {tspan} at (0,0) size 117x18
-              RenderSVGInlineText {#text} at (210,-14) size 117x18
+              RenderSVGInlineText {#text} at (214,-14) size 117x18
                 chunk 2 (end anchor) text run 1 at (203.00,30.00) startOffset 0 endOffset 18 width 117.00: "another text chunk"
             RenderSVGInlineText {#text} at (0,0) size 0x0
     RenderSVGContainer {use} at (0,0) size 0x0
index e5963ea..e09d7e5 100644 (file)
@@ -1 +1 @@
-e7abe876a73123b10646e9294c628063
\ No newline at end of file
+b893044d459ee07c1e61c044065d3701
\ No newline at end of file
index c0627ee..96b3eef 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textBiDi-expected.png and b/LayoutTests/svg/batik/text/textBiDi-expected.png differ
index ab53882..793aa41 100644 (file)
@@ -1,11 +1,11 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 450x500
-  RenderSVGRoot {svg} at (45,36) size 356x368
-    RenderSVGContainer {g} at (45,36) size 356x368
-      RenderSVGText {text} at (146,50) size 184x17 contains 1 chunk(s)
+  RenderSVGRoot {svg} at (45,36) size 343x368
+    RenderSVGContainer {g} at (45,36) size 343x368
+      RenderSVGText {text} at (133,50) size 184x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 184x17
-          chunk 1 (middle anchor) text run 1 at (146.50,50.00) startOffset 0 endOffset 30 width 157.00: "            BiDi Text / Intern"
+          chunk 1 (middle anchor) text run 1 at (133.00,50.00) startOffset 0 endOffset 30 width 184.00: "BiDi Text / International Text"
       RenderSVGText {text} at (67,125) size 315x15 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-12) size 85x15
           chunk 1 (middle anchor) text run 1 at (67.50,125.00) startOffset 0 endOffset 15 width 85.00: "Some text goes "
@@ -19,35 +19,45 @@ layer at (0,0) size 450x500
           chunk 1 (middle anchor) text run 1 at (150.50,150.00) startOffset 0 endOffset 5 width 33.00: "Some "
         RenderSVGTSpan {tspan} at (0,0) size 89x15 [color=#8B0000]
           RenderSVGInlineText {#text} at (33,-12) size 89x15
-            chunk 1 (middle anchor) text run 2 at (183.50,150.00) startOffset 0 endOffset 1 width 4.00 RTL: "("
+            chunk 1 (middle anchor) text run 2 at (183.50,150.00) startOffset 0 endOffset 1 width 4.00 RTL: ")"
+            chunk 1 (middle anchor) text run 3 at (187.50,150.00) startOffset 0 endOffset 13 width 81.00: "embedded bidi"
+            chunk 1 (middle anchor) text run 4 at (268.50,150.00) startOffset 0 endOffset 1 width 4.00 RTL: "("
         RenderSVGInlineText {#text} at (122,-12) size 27x15
           chunk 1 (middle anchor) text run 5 at (272.50,150.00) startOffset 0 endOffset 6 width 27.00: " text."
-      RenderSVGText {text} at (74,175) size 327x13 contains 1 chunk(s)
+      RenderSVGText {text} at (61,175) size 327x13 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-10) size 327x13
-          chunk 1 (middle anchor) text run 1 at (74.50,175.00) startOffset 0 endOffset 45 width 164.00: "               Text selection allows visually"
-      RenderSVGContainer {g} at (45,212) size 311x192
+          chunk 1 (middle anchor) text run 1 at (61.50,175.00) startOffset 0 endOffset 45 width 181.00: "Text selection allows visually discontiguous "
+          chunk 1 (middle anchor) text run 2 at (242.50,175.00) startOffset 0 endOffset 38 width 146.00: "selections across bi-directional text."
+      RenderSVGContainer {g} at (45,212) size 314x192
         RenderSVGText {text} at (45,225) size 296x17 contains 1 chunk(s) [color=#191970]
           RenderSVGInlineText {#text} at (0,-13) size 296x17
             chunk 1 text run 1 at (45.00,225.00) startOffset 0 endOffset 7 width 35.00: "latin: "
+            chunk 1 text run 2 at (80.00,225.00) startOffset 0 endOffset 8 width 74.00: "ABCDEFG "
+            chunk 1 text run 3 at (154.00,225.00) startOffset 0 endOffset 26 width 187.00: "abcdefghijklmnopqrstuvwxyz"
         RenderSVGText {text} at (45,250) size 198x17 contains 1 chunk(s) [color=#A0522D]
           RenderSVGInlineText {#text} at (0,-13) size 198x17
             chunk 1 text run 1 at (45.00,250.00) startOffset 0 endOffset 16 width 97.00: "latin-extended: "
+            chunk 1 text run 2 at (142.00,250.00) startOffset 0 endOffset 15 width 101.00: "\x{E6}\x{E7}\x{E8}\x{E9}\x{EA}\x{EB}\x{EC}\x{ED}\x{EE}\x{EF}\x{F0}\x{F1}\x{F2}\x{F3}\x{F4}"
         RenderSVGText {text} at (45,275) size 291x17 contains 1 chunk(s) [color=#4B0082]
           RenderSVGInlineText {#text} at (0,-13) size 291x17
             chunk 1 text run 1 at (45.00,275.00) startOffset 0 endOffset 10 width 51.00: "cyrillic: "
+            chunk 1 text run 2 at (96.00,275.00) startOffset 0 endOffset 23 width 240.00: "\x{411}\x{412}\x{413}\x{414}\x{415}\x{416}\x{417}\x{418}\x{419}\x{41A}\x{41B}\x{41C}\x{41D}\x{41E}\x{41F}\x{420}\x{421}\x{422}\x{423}\x{424}\x{425}\x{426}\x{427}"
         RenderSVGText {text} at (45,300) size 293x17 contains 1 chunk(s) [color=#800000]
           RenderSVGInlineText {#text} at (0,-13) size 293x17
             chunk 1 text run 1 at (45.00,300.00) startOffset 0 endOffset 7 width 43.00: "greek: "
-        RenderSVGText {text} at (45,325) size 289x17 contains 1 chunk(s) [color=#556B2F]
-          RenderSVGInlineText {#text} at (0,-13) size 289x17
+            chunk 1 text run 2 at (88.00,300.00) startOffset 0 endOffset 30 width 250.00: "\x{391}\x{392}\x{393}\x{394} \x{3B1}\x{3B2}\x{3B3}\x{3B4}\x{3B5}\x{3B6}\x{3B7}\x{3B8}\x{3B9}\x{3BA}\x{3BB}\x{3BC}\x{3BD}\x{3BE}\x{3BF}\x{3C0}\x{3C1}\x{3C2}\x{3C3}\x{3C4}\x{3C5}\x{3C6}\x{3C7}\x{3C8}\x{3C9}"
+        RenderSVGText {text} at (45,325) size 290x17 contains 1 chunk(s) [color=#556B2F]
+          RenderSVGInlineText {#text} at (0,-13) size 290x17
             chunk 1 text run 1 at (45.00,325.00) startOffset 0 endOffset 8 width 54.00: "hebrew: "
-        RenderSVGText {text} at (45,350) size 235x17 contains 1 chunk(s) [color=#556B2F]
-          RenderSVGInlineText {#text} at (0,-13) size 235x17
+            chunk 1 text run 2 at (99.00,325.00) startOffset 0 endOffset 27 width 225.00 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}\x{5D4}\x{5D5}\x{5D6}\x{5D7}\x{5D8}\x{5D9}\x{5DA}\x{5DB}\x{5DC}\x{5DD}\x{5DE}\x{5DF}\x{5E0}\x{5E1}\x{5E2}\x{5E3}\x{5E4}\x{5E5}\x{5E6}\x{5E7}\x{5E8}\x{5E9}\x{5EA}"
+        RenderSVGText {text} at (45,350) size 236x17 contains 1 chunk(s) [color=#556B2F]
+          RenderSVGInlineText {#text} at (0,-13) size 236x17
             chunk 1 text run 1 at (45.00,350.00) startOffset 0 endOffset 27 width 225.00 RTL: "\x{5D0}\x{5D1}\x{5D2}\x{5D3}\x{5D4}\x{5D5}\x{5D6}\x{5D7}\x{5D8}\x{5D9}\x{5DA}\x{5DB}\x{5DC}\x{5DD}\x{5DE}\x{5DF}\x{5E0}\x{5E1}\x{5E2}\x{5E3}\x{5E4}\x{5E5}\x{5E6}\x{5E7}\x{5E8}\x{5E9}\x{5EA}"
-        RenderSVGText {text} at (45,375) size 311x17 contains 1 chunk(s) [color=#8B0000]
-          RenderSVGInlineText {#text} at (0,-13) size 311x17
+        RenderSVGText {text} at (45,375) size 314x17 contains 1 chunk(s) [color=#8B0000]
+          RenderSVGInlineText {#text} at (0,-13) size 314x17
             chunk 1 text run 1 at (45.00,375.00) startOffset 0 endOffset 8 width 46.00: "arabic: "
-        RenderSVGText {text} at (45,400) size 265x17 contains 1 chunk(s) [color=#8B0000]
-          RenderSVGInlineText {#text} at (0,-13) size 265x17
+            chunk 1 text run 2 at (91.00,375.00) startOffset 0 endOffset 36 width 216.00 RTL: "\x{621}\x{623}\x{624}\x{625}\x{626}\x{627}\x{628}\x{629}\x{62A}\x{62B}\x{62C}\x{62D}\x{62E}\x{62F}\x{630}\x{631}\x{632}\x{633}\x{634}\x{635}\x{636}\x{637}\x{638}\x{639}\x{640}\x{641}\x{642}\x{643}\x{644}\x{645}\x{646}\x{647}\x{648}\x{649}\x{650}\x{676}"
+        RenderSVGText {text} at (45,400) size 268x17 contains 1 chunk(s) [color=#8B0000]
+          RenderSVGInlineText {#text} at (0,-13) size 268x17
             chunk 1 text run 1 at (45.00,400.00) startOffset 0 endOffset 36 width 216.00 RTL: "\x{621}\x{623}\x{624}\x{625}\x{626}\x{627}\x{628}\x{629}\x{62A}\x{62B}\x{62C}\x{62D}\x{62E}\x{62F}\x{630}\x{631}\x{632}\x{633}\x{634}\x{635}\x{636}\x{637}\x{638}\x{639}\x{640}\x{641}\x{642}\x{643}\x{644}\x{645}\x{646}\x{647}\x{648}\x{649}\x{650}\x{676}"
     RenderSVGContainer {use} at (0,0) size 0x0
index 087f026..0de2d6a 100644 (file)
@@ -1 +1 @@
-305078038afa3cb9ab1071f4988ff362
\ No newline at end of file
+414479a23d76f6f352114c595149adff
\ No newline at end of file
index b283e8e..693df67 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textEffect-expected.png and b/LayoutTests/svg/batik/text/textEffect-expected.png differ
index b59693f..b22187b 100644 (file)
@@ -4,8 +4,8 @@ KCanvasResource {id="dropShadow" [type=FILTER]  [bounding box=at (-10.00%,-10.00
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 450x500
-  RenderSVGRoot {svg} at (70,16) size 379x387
-    RenderSVGContainer {g} at (70,16) size 379x387
+  RenderSVGRoot {svg} at (42,16) size 370x387
+    RenderSVGContainer {g} at (42,16) size 370x387
       RenderSVGText {text} at (136,30) size 177x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 177x17
           chunk 1 (middle anchor) text run 1 at (136.50,30.00) startOffset 0 endOffset 27 width 177.00: "Gradient and filter on text"
@@ -21,24 +21,24 @@ layer at (0,0) size 450x500
           RenderSVGGradientStop {stop} at (0,0) size 0x0
           RenderSVGGradientStop {stop} at (0,0) size 0x0
           RenderSVGGradientStop {stop} at (0,0) size 0x0
-      RenderSVGText {text} at (72,160) size 152x59 contains 1 chunk(s)
+      RenderSVGText {text} at (44,160) size 152x59 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-48) size 152x59
-          chunk 1 (middle anchor) text run 1 at (72.50,160.00) startOffset 0 endOffset 5 width 95.00: "    B"
-      RenderSVGText {text} at (286,160) size 161x61 contains 1 chunk(s)
+          chunk 1 (middle anchor) text run 1 at (44.00,160.00) startOffset 0 endOffset 5 width 152.00: "BATIK"
+      RenderSVGText {text} at (249,160) size 161x61 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-48) size 161x61
-          chunk 1 (middle anchor) text run 1 at (286.50,160.00) startOffset 0 endOffset 5 width 87.00: "    B"
-      RenderSVGText {text} at (72,260) size 152x59 contains 1 chunk(s) [color=#FFFFFF]
+          chunk 1 (middle anchor) text run 1 at (249.50,160.00) startOffset 0 endOffset 5 width 161.00: "BATIK"
+      RenderSVGText {text} at (44,260) size 152x59 contains 1 chunk(s) [color=#FFFFFF]
         RenderSVGInlineText {#text} at (0,-48) size 152x59
-          chunk 1 (middle anchor) text run 1 at (72.50,260.00) startOffset 0 endOffset 5 width 95.00: "    B"
-      RenderSVGText {text} at (286,260) size 161x61 contains 1 chunk(s) [color=#FFFFFF]
+          chunk 1 (middle anchor) text run 1 at (44.00,260.00) startOffset 0 endOffset 5 width 152.00: "BATIK"
+      RenderSVGText {text} at (249,260) size 161x61 contains 1 chunk(s) [color=#FFFFFF]
         RenderSVGInlineText {#text} at (0,-48) size 161x61
-          chunk 1 (middle anchor) text run 1 at (286.50,260.00) startOffset 0 endOffset 5 width 87.00: "    B"
-      RenderSVGText {text} at (72,360) size 152x59 contains 1 chunk(s) [color=#FF0000]
+          chunk 1 (middle anchor) text run 1 at (249.50,260.00) startOffset 0 endOffset 5 width 161.00: "BATIK"
+      RenderSVGText {text} at (44,360) size 152x59 contains 1 chunk(s) [color=#FF0000]
         RenderSVGInlineText {#text} at (0,-48) size 152x59
-          chunk 1 (middle anchor) text run 1 at (72.50,360.00) startOffset 0 endOffset 5 width 95.00: "    B"
-      RenderSVGText {text} at (286,360) size 161x61 contains 1 chunk(s) [color=#FF0000]
+          chunk 1 (middle anchor) text run 1 at (44.00,360.00) startOffset 0 endOffset 5 width 152.00: "BATIK"
+      RenderSVGText {text} at (249,360) size 161x61 contains 1 chunk(s) [color=#FF0000]
         RenderSVGInlineText {#text} at (0,-48) size 161x61
-          chunk 1 (middle anchor) text run 1 at (286.50,360.00) startOffset 0 endOffset 5 width 87.00: "    B"
+          chunk 1 (middle anchor) text run 1 at (249.50,360.00) startOffset 0 endOffset 5 width 161.00: "BATIK"
       RenderSVGText {text} at (87,400) size 65x14 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-11) size 65x14
           chunk 1 (middle anchor) text run 1 at (87.50,400.00) startOffset 0 endOffset 13 width 65.00: "(System font)"
index ca59ebb..ecd3cd2 100644 (file)
@@ -1 +1 @@
-050a3d2af3a89fd85557d727cc09f071
\ No newline at end of file
+c16e7ef8955cfd27217f81ea9de9722d
\ No newline at end of file
index 998e5ad..09200ff 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textEffect3-expected.png and b/LayoutTests/svg/batik/text/textEffect3-expected.png differ
index 80e8a69..d9d3015 100644 (file)
@@ -4,8 +4,8 @@ KCanvasResource {id="dropShadow" [type=FILTER]  [bounding box=at (-10.00%,-10.00
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 450x500
-  RenderSVGRoot {svg} at (62,16) size 349x387
-    RenderSVGContainer {g} at (62,16) size 349x387
+  RenderSVGRoot {svg} at (52,16) size 348x387
+    RenderSVGContainer {g} at (52,16) size 348x387
       RenderSVGText {text} at (99,30) size 251x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 251x17
           chunk 1 (middle anchor) text run 1 at (99.50,30.00) startOffset 0 endOffset 37 width 251.00: "Gradient and filter on text and tspan"
@@ -21,95 +21,95 @@ layer at (0,0) size 450x500
           RenderSVGGradientStop {stop} at (0,0) size 0x0
           RenderSVGGradientStop {stop} at (0,0) size 0x0
           RenderSVGGradientStop {stop} at (0,0) size 0x0
-      RenderSVGText {text} at (64,140) size 131x79 contains 1 chunk(s)
+      RenderSVGText {text} at (54,140) size 131x79 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-28) size 35x59
-          chunk 1 (middle anchor) text run 1 at (64.50,160.00) startOffset 0 endOffset 1 width 15.00: " "
+          chunk 1 (middle anchor) text run 1 at (54.50,160.00) startOffset 0 endOffset 1 width 35.00: "B"
         RenderSVGTSpan {tspan} at (0,0) size 18x30
           RenderSVGInlineText {#text} at (35,-24) size 18x30
-            chunk 1 (middle anchor) text run 2 at (99.50,140.00) startOffset 0 endOffset 1 width 18.00: "A"
+            chunk 1 (middle anchor) text run 2 at (89.50,140.00) startOffset 0 endOffset 1 width 18.00: "A"
         RenderSVGInlineText {#text} at (53,-48) size 32x59
-          chunk 1 (middle anchor) text run 3 at (117.50,140.00) startOffset 0 endOffset 1 width 32.00: "T"
+          chunk 1 (middle anchor) text run 3 at (107.50,140.00) startOffset 0 endOffset 1 width 32.00: "T"
         RenderSVGTSpan {tspan} at (0,0) size 11x44
           RenderSVGInlineText {#text} at (85,-36) size 11x44
-            chunk 1 (middle anchor) text run 4 at (149.50,140.00) startOffset 0 endOffset 1 width 11.00: "I"
+            chunk 1 (middle anchor) text run 4 at (139.50,140.00) startOffset 0 endOffset 1 width 11.00: "I"
         RenderSVGTSpan {tspan} at (0,0) size 35x59
           RenderSVGInlineText {#text} at (96,-48) size 35x59
-            chunk 1 (middle anchor) text run 5 at (160.50,140.00) startOffset 0 endOffset 1 width 35.00: "K"
+            chunk 1 (middle anchor) text run 5 at (150.50,140.00) startOffset 0 endOffset 1 width 35.00: "K"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-      RenderSVGText {text} at (272,140) size 137x81 contains 1 chunk(s)
+      RenderSVGText {text} at (261,140) size 137x81 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-28) size 35x61
-          chunk 1 (middle anchor) text run 1 at (272.50,160.00) startOffset 0 endOffset 1 width 13.00: " "
+          chunk 1 (middle anchor) text run 1 at (261.50,160.00) startOffset 0 endOffset 1 width 35.00: "B"
         RenderSVGTSpan {tspan} at (0,0) size 19x31
           RenderSVGInlineText {#text} at (35,-24) size 19x31
-            chunk 1 (middle anchor) text run 2 at (307.50,140.00) startOffset 0 endOffset 1 width 19.00: "A"
+            chunk 1 (middle anchor) text run 2 at (296.50,140.00) startOffset 0 endOffset 1 width 19.00: "A"
         RenderSVGInlineText {#text} at (54,-48) size 32x61
-          chunk 1 (middle anchor) text run 3 at (326.50,140.00) startOffset 0 endOffset 1 width 32.00: "T"
+          chunk 1 (middle anchor) text run 3 at (315.50,140.00) startOffset 0 endOffset 1 width 32.00: "T"
         RenderSVGTSpan {tspan} at (0,0) size 13x46
           RenderSVGInlineText {#text} at (86,-36) size 13x46
-            chunk 1 (middle anchor) text run 4 at (358.50,140.00) startOffset 0 endOffset 1 width 13.00: "I"
+            chunk 1 (middle anchor) text run 4 at (347.50,140.00) startOffset 0 endOffset 1 width 13.00: "I"
         RenderSVGTSpan {tspan} at (0,0) size 38x61
           RenderSVGInlineText {#text} at (99,-48) size 38x61
-            chunk 1 (middle anchor) text run 5 at (371.50,140.00) startOffset 0 endOffset 1 width 38.00: "K"
+            chunk 1 (middle anchor) text run 5 at (360.50,140.00) startOffset 0 endOffset 1 width 38.00: "K"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-      RenderSVGText {text} at (64,240) size 131x79 contains 1 chunk(s) [color=#FFFFFF]
+      RenderSVGText {text} at (54,240) size 131x79 contains 1 chunk(s) [color=#FFFFFF]
         RenderSVGInlineText {#text} at (0,-28) size 35x59
-          chunk 1 (middle anchor) text run 1 at (64.50,260.00) startOffset 0 endOffset 1 width 15.00: " "
+          chunk 1 (middle anchor) text run 1 at (54.50,260.00) startOffset 0 endOffset 1 width 35.00: "B"
         RenderSVGTSpan {tspan} at (0,0) size 18x30
           RenderSVGInlineText {#text} at (35,-24) size 18x30
-            chunk 1 (middle anchor) text run 2 at (99.50,240.00) startOffset 0 endOffset 1 width 18.00: "A"
+            chunk 1 (middle anchor) text run 2 at (89.50,240.00) startOffset 0 endOffset 1 width 18.00: "A"
         RenderSVGInlineText {#text} at (53,-48) size 32x59
-          chunk 1 (middle anchor) text run 3 at (117.50,240.00) startOffset 0 endOffset 1 width 32.00: "T"
+          chunk 1 (middle anchor) text run 3 at (107.50,240.00) startOffset 0 endOffset 1 width 32.00: "T"
         RenderSVGTSpan {tspan} at (0,0) size 11x44
           RenderSVGInlineText {#text} at (85,-36) size 11x44
-            chunk 1 (middle anchor) text run 4 at (149.50,240.00) startOffset 0 endOffset 1 width 11.00: "I"
+            chunk 1 (middle anchor) text run 4 at (139.50,240.00) startOffset 0 endOffset 1 width 11.00: "I"
         RenderSVGTSpan {tspan} at (0,0) size 35x59
           RenderSVGInlineText {#text} at (96,-48) size 35x59
-            chunk 1 (middle anchor) text run 5 at (160.50,240.00) startOffset 0 endOffset 1 width 35.00: "K"
+            chunk 1 (middle anchor) text run 5 at (150.50,240.00) startOffset 0 endOffset 1 width 35.00: "K"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-      RenderSVGText {text} at (272,240) size 137x81 contains 1 chunk(s) [color=#FFFFFF]
+      RenderSVGText {text} at (261,240) size 137x81 contains 1 chunk(s) [color=#FFFFFF]
         RenderSVGInlineText {#text} at (0,-28) size 35x61
-          chunk 1 (middle anchor) text run 1 at (272.50,260.00) startOffset 0 endOffset 1 width 13.00: " "
+          chunk 1 (middle anchor) text run 1 at (261.50,260.00) startOffset 0 endOffset 1 width 35.00: "B"
         RenderSVGTSpan {tspan} at (0,0) size 19x31
           RenderSVGInlineText {#text} at (35,-24) size 19x31
-            chunk 1 (middle anchor) text run 2 at (307.50,240.00) startOffset 0 endOffset 1 width 19.00: "A"
+            chunk 1 (middle anchor) text run 2 at (296.50,240.00) startOffset 0 endOffset 1 width 19.00: "A"
         RenderSVGInlineText {#text} at (54,-48) size 32x61
-          chunk 1 (middle anchor) text run 3 at (326.50,240.00) startOffset 0 endOffset 1 width 32.00: "T"
+          chunk 1 (middle anchor) text run 3 at (315.50,240.00) startOffset 0 endOffset 1 width 32.00: "T"
         RenderSVGTSpan {tspan} at (0,0) size 13x46
           RenderSVGInlineText {#text} at (86,-36) size 13x46
-            chunk 1 (middle anchor) text run 4 at (358.50,240.00) startOffset 0 endOffset 1 width 13.00: "I"
+            chunk 1 (middle anchor) text run 4 at (347.50,240.00) startOffset 0 endOffset 1 width 13.00: "I"
         RenderSVGTSpan {tspan} at (0,0) size 38x61
           RenderSVGInlineText {#text} at (99,-48) size 38x61
-            chunk 1 (middle anchor) text run 5 at (371.50,240.00) startOffset 0 endOffset 1 width 38.00: "K"
+            chunk 1 (middle anchor) text run 5 at (360.50,240.00) startOffset 0 endOffset 1 width 38.00: "K"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-      RenderSVGText {text} at (64,340) size 131x79 contains 1 chunk(s) [color=#FF0000]
+      RenderSVGText {text} at (54,340) size 131x79 contains 1 chunk(s) [color=#FF0000]
         RenderSVGInlineText {#text} at (0,-28) size 35x59
-          chunk 1 (middle anchor) text run 1 at (64.50,360.00) startOffset 0 endOffset 1 width 15.00: " "
+          chunk 1 (middle anchor) text run 1 at (54.50,360.00) startOffset 0 endOffset 1 width 35.00: "B"
         RenderSVGTSpan {tspan} at (0,0) size 18x30
           RenderSVGInlineText {#text} at (35,-24) size 18x30
-            chunk 1 (middle anchor) text run 2 at (99.50,340.00) startOffset 0 endOffset 1 width 18.00: "A"
+            chunk 1 (middle anchor) text run 2 at (89.50,340.00) startOffset 0 endOffset 1 width 18.00: "A"
         RenderSVGInlineText {#text} at (53,-48) size 32x59
-          chunk 1 (middle anchor) text run 3 at (117.50,340.00) startOffset 0 endOffset 1 width 32.00: "T"
+          chunk 1 (middle anchor) text run 3 at (107.50,340.00) startOffset 0 endOffset 1 width 32.00: "T"
         RenderSVGTSpan {tspan} at (0,0) size 11x44
           RenderSVGInlineText {#text} at (85,-36) size 11x44
-            chunk 1 (middle anchor) text run 4 at (149.50,340.00) startOffset 0 endOffset 1 width 11.00: "I"
+            chunk 1 (middle anchor) text run 4 at (139.50,340.00) startOffset 0 endOffset 1 width 11.00: "I"
         RenderSVGTSpan {tspan} at (0,0) size 35x59
           RenderSVGInlineText {#text} at (96,-48) size 35x59
-            chunk 1 (middle anchor) text run 5 at (160.50,340.00) startOffset 0 endOffset 1 width 35.00: "K"
+            chunk 1 (middle anchor) text run 5 at (150.50,340.00) startOffset 0 endOffset 1 width 35.00: "K"
         RenderSVGInlineText {#text} at (0,0) size 0x0
-      RenderSVGText {text} at (272,340) size 137x81 contains 1 chunk(s) [color=#FF0000]
+      RenderSVGText {text} at (261,340) size 137x81 contains 1 chunk(s) [color=#FF0000]
         RenderSVGInlineText {#text} at (0,-28) size 35x61
-          chunk 1 (middle anchor) text run 1 at (272.50,360.00) startOffset 0 endOffset 1 width 13.00: " "
+          chunk 1 (middle anchor) text run 1 at (261.50,360.00) startOffset 0 endOffset 1 width 35.00: "B"
         RenderSVGTSpan {tspan} at (0,0) size 19x31
           RenderSVGInlineText {#text} at (35,-24) size 19x31
-            chunk 1 (middle anchor) text run 2 at (307.50,340.00) startOffset 0 endOffset 1 width 19.00: "A"
+            chunk 1 (middle anchor) text run 2 at (296.50,340.00) startOffset 0 endOffset 1 width 19.00: "A"
         RenderSVGInlineText {#text} at (54,-48) size 32x61
-          chunk 1 (middle anchor) text run 3 at (326.50,340.00) startOffset 0 endOffset 1 width 32.00: "T"
+          chunk 1 (middle anchor) text run 3 at (315.50,340.00) startOffset 0 endOffset 1 width 32.00: "T"
         RenderSVGTSpan {tspan} at (0,0) size 13x46
           RenderSVGInlineText {#text} at (86,-36) size 13x46
-            chunk 1 (middle anchor) text run 4 at (358.50,340.00) startOffset 0 endOffset 1 width 13.00: "I"
+            chunk 1 (middle anchor) text run 4 at (347.50,340.00) startOffset 0 endOffset 1 width 13.00: "I"
         RenderSVGTSpan {tspan} at (0,0) size 38x61
           RenderSVGInlineText {#text} at (99,-48) size 38x61
-            chunk 1 (middle anchor) text run 5 at (371.50,340.00) startOffset 0 endOffset 1 width 38.00: "K"
+            chunk 1 (middle anchor) text run 5 at (360.50,340.00) startOffset 0 endOffset 1 width 38.00: "K"
         RenderSVGInlineText {#text} at (0,0) size 0x0
       RenderSVGText {text} at (87,400) size 65x14 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-11) size 65x14
index 35da746..7c9bc59 100644 (file)
@@ -1 +1 @@
-7222bea5aee75c04b09925d7b86f938a
\ No newline at end of file
+9254b86390a67f60c297854bc98581f2
\ No newline at end of file
index 56016ce..9da7a7d 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textFeatures-expected.png and b/LayoutTests/svg/batik/text/textFeatures-expected.png differ
index 66e161b..0b8a7a6 100644 (file)
@@ -3,13 +3,13 @@ layer at (0,0) size 800x600
 layer at (0,0) size 450x500
   RenderSVGRoot {svg} at (45,36) size 349x449.20
     RenderSVGContainer {g} at (45,36) size 349x449.20
-      RenderSVGText {text} at (168,50) size 148x17 contains 1 chunk(s)
+      RenderSVGText {text} at (151,50) size 148x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 148x17
-          chunk 1 (middle anchor) text run 1 at (168.00,50.00) startOffset 0 endOffset 21 width 114.00: "            Text Elem"
+          chunk 1 (middle anchor) text run 1 at (151.00,50.00) startOffset 0 endOffset 21 width 148.00: "Text Element Features"
       RenderSVGContainer {g} at (45,72) size 349x413.20
         RenderSVGText {text} at (45,100) size 328x36 contains 1 chunk(s) [color=#191970]
           RenderSVGInlineText {#text} at (0,-13) size 107x17
-            chunk 1 text run 1 at (45.00,100.00) startOffset 0 endOffset 16 width 86.00: "        Text can"
+            chunk 1 text run 1 at (45.00,100.00) startOffset 0 endOffset 16 width 107.00: "Text can change "
           RenderSVGTSpan {tspan} at (0,0) size 54x36
             RenderSVGInlineText {#text} at (107,-28) size 54x36
               chunk 1 text run 2 at (152.00,100.00) startOffset 0 endOffset 5 width 54.00: "size,"
@@ -25,13 +25,14 @@ layer at (0,0) size 450x500
               chunk 1 text run 6 at (288.00,100.00) startOffset 0 endOffset 6 width 36.00: "color,"
           RenderSVGInlineText {#text} at (279,-13) size 21x17
             chunk 1 text run 7 at (324.00,100.00) startOffset 0 endOffset 1 width 4.00: " "
+            chunk 1 text run 8 at (328.00,100.00) startOffset 0 endOffset 3 width 17.00: "or "
           RenderSVGTSpan {tspan} at (0,0) size 28x17 [color=#FF0000]
             RenderSVGInlineText {#text} at (300,-13) size 28x17
               chunk 1 text run 9 at (345.00,100.00) startOffset 0 endOffset 5 width 28.00: "style"
           RenderSVGInlineText {#text} at (0,0) size 0x0
         RenderSVGText {text} at (45,125) size 175x17 contains 1 chunk(s) [color=#191970]
           RenderSVGInlineText {#text} at (0,-13) size 175x17
-            chunk 1 text run 1 at (45.00,125.00) startOffset 0 endOffset 29 width 154.00: "         within a single text"
+            chunk 1 text run 1 at (45.00,125.00) startOffset 0 endOffset 29 width 175.00: "within a single text element."
         RenderSVGText {text} at (45,175) size 341x17 contains 1 chunk(s) [color=#191970]
           RenderSVGInlineText {#text} at (0,-13) size 151x17
             chunk 1 text run 1 at (45.00,175.00) startOffset 0 endOffset 25 width 151.00: "Styling features include "
@@ -52,7 +53,7 @@ layer at (0,0) size 450x500
         RenderPath {rect} at (45,200) size 202.50x50 [fill={[type=SOLID] [color=#1E90FF]}] [data="M45.00,200.00L247.50,200.00L247.50,250.00L45.00,250.00"]
         RenderSVGText {text} at (45,225) size 316x17 contains 1 chunk(s) [color=#191970]
           RenderSVGInlineText {#text} at (0,-13) size 171x17
-            chunk 1 text run 1 at (45.00,225.00) startOffset 0 endOffset 28 width 153.00: "        Graphics attributes "
+            chunk 1 text run 1 at (45.00,225.00) startOffset 0 endOffset 28 width 171.00: "Graphics attributes such as "
           RenderSVGTSpan {tspan} at (0,0) size 46x17 [color=#FF0000]
             RenderSVGInlineText {#text} at (171,-13) size 46x17
               chunk 1 text run 2 at (216.00,225.00) startOffset 0 endOffset 7 width 46.00: "opacity"
@@ -87,6 +88,7 @@ layer at (0,0) size 450x500
               chunk 1 text run 5 at (198.00,306.50) startOffset 0 endOffset 3 width 16.00: "sub"
           RenderSVGInlineText {#text} at (169,-6) size 132x17
             chunk 1 text run 6 at (214.00,300.00) startOffset 0 endOffset 9 width 49.00: "-scripts "
+            chunk 1 text run 7 at (263.00,300.00) startOffset 0 endOffset 14 width 83.00: "are available."
         RenderSVGText {text} at (45,319) size 342x24 contains 1 chunk(s) [color=#191970]
           RenderSVGInlineText {#text} at (0,-7) size 177x17
             chunk 1 text run 1 at (45.00,325.00) startOffset 0 endOffset 29 width 177.00: "Baseline can also be shifted "
@@ -100,9 +102,10 @@ layer at (0,0) size 450x500
               chunk 1 text run 4 at (265.00,330.50) startOffset 0 endOffset 4 width 26.00: "down"
           RenderSVGInlineText {#text} at (246,-7) size 96x17
             chunk 1 text run 5 at (291.00,325.00) startOffset 0 endOffset 1 width 4.00: " "
+            chunk 1 text run 6 at (295.00,325.00) startOffset 0 endOffset 14 width 92.00: "by percentage."
         RenderSVGText {text} at (45,375) size 349x17 contains 1 chunk(s) [color=#191970]
           RenderSVGInlineText {#text} at (0,-13) size 53x17
-            chunk 1 text run 1 at (45.00,375.00) startOffset 0 endOffset 8 width 32.00: "        "
+            chunk 1 text run 1 at (45.00,375.00) startOffset 0 endOffset 8 width 53.00: "Various "
           RenderSVGTSpan {tspan} at (0,0) size 47x17 [color=#FF0000]
             RenderSVGInlineText {#text} at (53,-13) size 47x17
               chunk 1 text run 2 at (98.00,375.00) startOffset 0 endOffset 8 width 47.00: "outline "
@@ -126,6 +129,7 @@ layer at (0,0) size 450x500
               chunk 1 text run 2 at (266.00,400.00) startOffset 0 endOffset 7 width 52.00: "rounded"
           RenderSVGInlineText {#text} at (273,-13) size 21x17
             chunk 1 text run 3 at (318.00,400.00) startOffset 0 endOffset 1 width 4.00: " "
+            chunk 1 text run 4 at (322.00,400.00) startOffset 0 endOffset 3 width 17.00: "or "
           RenderSVGTSpan {tspan} at (0,0) size 51x17 [color=#000000]
             RenderSVGInlineText {#text} at (294,-13) size 51x17
               chunk 1 text run 5 at (339.00,400.00) startOffset 0 endOffset 8 width 51.00: "mitered."
@@ -139,8 +143,8 @@ layer at (0,0) size 450x500
         RenderSVGContainer {g} at (208.76,433) size 170.44x52.20 [transform={m=((1.00,0.00)(0.00,1.00)) t=(250.00,475.00)}]
           RenderSVGText {text} at (0,0) size 129x46 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (0,-36) size 129x46
-              chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 6 width 60.00: "      "
+              chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 6 width 129.00: "Shadow"
           RenderSVGText {text} at (0,0) size 129x46 contains 1 chunk(s)
             RenderSVGInlineText {#text} at (0,-36) size 129x46
-              chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 6 width 60.00: "      "
+              chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 6 width 129.00: "Shadow"
     RenderSVGContainer {use} at (0,0) size 0x0
index cd990f9..3e8bf1c 100644 (file)
@@ -1 +1 @@
-1ce0d925d95529e51d9b8b6da0f30afd
\ No newline at end of file
+d1a743c431f0f2de24ac21dd03891d46
\ No newline at end of file
index a20d650..efeac5b 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textLayout-expected.png and b/LayoutTests/svg/batik/text/textLayout-expected.png differ
index 3140a0c..65ea49c 100644 (file)
@@ -7,9 +7,9 @@ layer at (0,0) size 450x500
         RenderSVGInlineText {#text} at (0,-14) size 44x18
           chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 6 width 44.00: "sample"
     RenderSVGContainer {g} at (40,36) size 379x421
-      RenderSVGText {text} at (164,50) size 148x17 contains 1 chunk(s)
+      RenderSVGText {text} at (151,50) size 148x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 148x17
-          chunk 1 (middle anchor) text run 1 at (164.50,50.00) startOffset 0 endOffset 22 width 121.00: "            Text Layou"
+          chunk 1 (middle anchor) text run 1 at (151.00,50.00) startOffset 0 endOffset 22 width 148.00: "Text Layout Properties"
       RenderSVGText {text} at (170,75) size 110x13 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-10) size 110x13
           chunk 1 (middle anchor) text run 1 at (170.00,75.00) startOffset 0 endOffset 26 width 110.00: "Explicit Glyph Positioning"
index 4cf6117..432a3cb 100644 (file)
@@ -1 +1 @@
-ed465935e9cb71745a453e7a87dc2af4
\ No newline at end of file
+f16cb802bc9b04fb1386172f7bd44c96
\ No newline at end of file
index 0be335d..5716a4b 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textLayout2-expected.png and b/LayoutTests/svg/batik/text/textLayout2-expected.png differ
index 0987310..d50107e 100644 (file)
@@ -7,9 +7,9 @@ layer at (0,0) size 450x500
         RenderSVGInlineText {#text} at (0,-14) size 44x18
           chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 6 width 44.00: "sample"
     RenderSVGContainer {g} at (90,36) size 249x433
-      RenderSVGText {text} at (153,50) size 170x17 contains 1 chunk(s)
+      RenderSVGText {text} at (140,50) size 170x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 170x17
-          chunk 1 (middle anchor) text run 1 at (153.00,50.00) startOffset 0 endOffset 26 width 144.00: "            Text Layout Pr"
+          chunk 1 (middle anchor) text run 1 at (140.00,50.00) startOffset 0 endOffset 26 width 170.00: "Text Layout Properties (2)"
       RenderSVGText {text} at (186,75) size 77x13 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-10) size 77x13
           chunk 1 (middle anchor) text run 1 at (186.50,75.00) startOffset 0 endOffset 19 width 77.00: "Baseline Properties"
@@ -77,22 +77,22 @@ layer at (0,0) size 450x500
         RenderSVGInlineText {#text} at (0,0) size 0x0
       RenderSVGText {text} at (0,0) size 89x103 contains 16 chunk(s) [color=#008000]
         RenderSVGInlineText {#text} at (0,-18) size 89x103
-          chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 1 width 5.00: " "
-          chunk 2 text run 1 at (20.00,0.00) startOffset 1 endOffset 2 width 5.00: " "
-          chunk 3 text run 1 at (40.00,0.00) startOffset 2 endOffset 3 width 5.00: " "
-          chunk 4 text run 1 at (60.00,0.00) startOffset 3 endOffset 4 width 5.00: " "
-          chunk 5 text run 1 at (80.00,0.00) startOffset 4 endOffset 5 width 5.00: " "
-          chunk 6 text run 1 at (80.00,20.00) startOffset 5 endOffset 6 width 5.00: " "
-          chunk 7 text run 1 at (80.00,40.00) startOffset 6 endOffset 7 width 5.00: " "
-          chunk 8 text run 1 at (80.00,60.00) startOffset 7 endOffset 8 width 5.00: " "
-          chunk 9 text run 1 at (80.00,80.00) startOffset 8 endOffset 9 width 5.00: " "
-          chunk 10 text run 1 at (60.00,80.00) startOffset 9 endOffset 10 width 5.00: " "
-          chunk 11 text run 1 at (40.00,80.00) startOffset 10 endOffset 11 width 5.00: " "
-          chunk 12 text run 1 at (20.00,80.00) startOffset 11 endOffset 12 width 5.00: " "
-          chunk 13 text run 1 at (0.00,80.00) startOffset 12 endOffset 13 width 12.00: "T"
-          chunk 14 text run 1 at (0.00,60.00) startOffset 13 endOffset 14 width 9.00: "e"
-          chunk 15 text run 1 at (0.00,40.00) startOffset 14 endOffset 15 width 10.00: "x"
-          chunk 16 text run 1 at (0.00,20.00) startOffset 15 endOffset 16 width 6.00: "t"
+          chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 1 width 12.00: "T"
+          chunk 2 text run 1 at (20.00,0.00) startOffset 1 endOffset 2 width 9.00: "e"
+          chunk 3 text run 1 at (40.00,0.00) startOffset 2 endOffset 3 width 10.00: "x"
+          chunk 4 text run 1 at (60.00,0.00) startOffset 3 endOffset 4 width 6.00: "t"
+          chunk 5 text run 1 at (80.00,0.00) startOffset 4 endOffset 5 width 7.00: "-"
+          chunk 6 text run 1 at (80.00,20.00) startOffset 5 endOffset 6 width 6.00: "i"
+          chunk 7 text run 1 at (80.00,40.00) startOffset 6 endOffset 7 width 10.00: "n"
+          chunk 8 text run 1 at (80.00,60.00) startOffset 7 endOffset 8 width 7.00: "-"
+          chunk 9 text run 1 at (80.00,80.00) startOffset 8 endOffset 9 width 9.00: "a"
+          chunk 10 text run 1 at (60.00,80.00) startOffset 9 endOffset 10 width 7.00: "-"
+          chunk 11 text run 1 at (40.00,80.00) startOffset 10 endOffset 11 width 8.00: "s"
+          chunk 12 text run 1 at (20.00,80.00) startOffset 11 endOffset 12 width 10.00: "q"
+          chunk 13 text run 1 at (0.00,80.00) startOffset 12 endOffset 13 width 10.00: "u"
+          chunk 14 text run 1 at (0.00,60.00) startOffset 13 endOffset 14 width 9.00: "a"
+          chunk 15 text run 1 at (0.00,40.00) startOffset 14 endOffset 15 width 7.00: "r"
+          chunk 16 text run 1 at (0.00,20.00) startOffset 15 endOffset 16 width 9.00: "e"
       RenderSVGText {text} at (149,450) size 152x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-13) size 63x17
           chunk 1 (middle anchor) text run 1 at (149.00,450.00) startOffset 0 endOffset 10 width 63.00: "Text with "
index 7136c05..5e7d289 100644 (file)
@@ -44,7 +44,7 @@ layer at (0,0) size 450x500
           RenderSVGInlineText {#text} at (260,23) size 51x18
             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 7 at (321.78,-66.97) 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
@@ -67,7 +67,7 @@ layer at (0,0) size 450x500
           RenderSVGInlineText {#text} at (272,45) size 51x18
             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 7 at (333.96,-44.00) 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
@@ -90,4 +90,4 @@ layer at (0,0) size 450x500
           RenderSVGInlineText {#text} at (275,52) size 51x18
             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 7 at (336.21,-37.01) 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 d53f548..0ca1827 100644 (file)
@@ -1 +1 @@
-3afffe7d10473461bfc0eff1d6c111fd
\ No newline at end of file
+95b0e5e1abcf9f574f717ae77805bba6
\ No newline at end of file
index 4f45cc7..38cc409 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textProperties-expected.png and b/LayoutTests/svg/batik/text/textProperties-expected.png differ
index 344e656..1f75191 100644 (file)
@@ -10,20 +10,20 @@ layer at (0,0) size 450x500
         RenderSVGInlineText {#text} at (0,-14) size 44x18
           chunk 1 (middle anchor) text run 1 at (-22.00,0.00) startOffset 0 endOffset 6 width 44.00: "sample"
     RenderSVGContainer {g} at (15,36) size 415x433
-      RenderSVGText {text} at (78,50) size 332x17 contains 1 chunk(s)
+      RenderSVGText {text} at (59,50) size 332x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 332x17
-          chunk 1 (middle anchor) text run 1 at (78.00,50.00) startOffset 0 endOffset 47 width 294.00: "            Text Alignment, Geometry, Reference"
-      RenderSVGContainer {g} at (154,70) size 188x70
+          chunk 1 (middle anchor) text run 1 at (59.00,50.00) startOffset 0 endOffset 47 width 332.00: "Text Alignment, Geometry, References, and Spans"
+      RenderSVGContainer {g} at (111,70) size 231x70
         RenderPath {line} at (224.50,70) size 1x70 [stroke={[type=SOLID] [color=#808080]}] [fill={[type=SOLID] [color=#000000]}] [data="M225.00,70.00L225.00,140.00"]
         RenderSVGText {text} at (225,90) size 117x17 contains 1 chunk(s) [color=#191970]
           RenderSVGInlineText {#text} at (0,-13) size 117x17
-            chunk 1 text run 1 at (225.00,90.00) startOffset 0 endOffset 19 width 83.00: "               text"
-        RenderSVGText {text} at (181,110) size 134x17 contains 1 chunk(s) [color=#8B0000]
+            chunk 1 text run 1 at (225.00,90.00) startOffset 0 endOffset 19 width 117.00: "text-anchor=\"start\""
+        RenderSVGText {text} at (158,110) size 134x17 contains 1 chunk(s) [color=#8B0000]
           RenderSVGInlineText {#text} at (0,-13) size 134x17
-            chunk 1 (middle anchor) text run 1 at (181.00,110.00) startOffset 0 endOffset 20 width 88.00: "               text-"
-        RenderSVGText {text} at (154,130) size 114x17 contains 1 chunk(s) [color=#228B22]
+            chunk 1 (middle anchor) text run 1 at (158.00,110.00) startOffset 0 endOffset 20 width 134.00: "text-anchor=\"middle\""
+        RenderSVGText {text} at (111,130) size 114x17 contains 1 chunk(s) [color=#228B22]
           RenderSVGInlineText {#text} at (0,-13) size 114x17
-            chunk 1 (end anchor) text run 1 at (154.00,130.00) startOffset 0 endOffset 17 width 71.00: "               te"
+            chunk 1 (end anchor) text run 1 at (111.00,130.00) startOffset 0 endOffset 17 width 114.00: "text-anchor=\"end\""
       RenderSVGContainer {g} at (45,145) size 109x54 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,180.00)}]
         RenderSVGText {text} at (-55,0) size 108x45 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-35) size 109x45
@@ -53,15 +53,15 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (-80,15) size 158x18 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-14) size 159x18
             chunk 1 (middle anchor) text run 1 at (-79.50,15.00) startOffset 0 endOffset 26 width 159.00: "referenced text via <tref>"
-      RenderSVGContainer {g} at (178,197) size 94x47 [transform={m=((1.00,0.00)(0.00,1.00)) t=(225.00,225.00)}]
-        RenderSVGText {text} at (-39,0) size 85x36 contains 1 chunk(s)
+      RenderSVGContainer {g} at (178,197) size 93x47 [transform={m=((1.00,0.00)(0.00,1.00)) t=(225.00,225.00)}]
+        RenderSVGText {text} at (-43,0) size 86x36 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-28) size 25x36
-            chunk 1 (middle anchor) text run 1 at (-38.50,0.00) startOffset 0 endOffset 2 width 16.00: "  "
-          RenderSVGTSpan {tspan} at (0,0) size 24x36 [color=#8B0000]
+            chunk 1 (middle anchor) text run 1 at (-43.00,0.00) startOffset 0 endOffset 2 width 25.00: "sa"
+          RenderSVGTSpan {tspan} at (0,0) size 25x36 [color=#8B0000]
             RenderSVGInlineText {#text} at (25,-28) size 25x36
-              chunk 1 (middle anchor) text run 2 at (-13.50,0.00) startOffset 0 endOffset 1 width 25.00: "m"
+              chunk 1 (middle anchor) text run 2 at (-18.00,0.00) startOffset 0 endOffset 1 width 25.00: "m"
           RenderSVGInlineText {#text} at (50,-28) size 36x36
-            chunk 1 (middle anchor) text run 3 at (11.50,0.00) startOffset 0 endOffset 3 width 36.00: "ple"
+            chunk 1 (middle anchor) text run 3 at (7.00,0.00) startOffset 0 endOffset 3 width 36.00: "ple"
         RenderSVGText {text} at (-47,15) size 92x18 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-14) size 93x18
             chunk 1 (middle anchor) text run 1 at (-46.50,15.00) startOffset 0 endOffset 14 width 93.00: "use of <tspan>"
@@ -75,9 +75,9 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (-80,15) size 160x18 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-14) size 160x18
             chunk 1 (middle anchor) text run 1 at (-80.00,15.00) startOffset 0 endOffset 25 width 160.00: "predefined text via <use>"
-      RenderSVGText {text} at (156,280) size 163x17 contains 1 chunk(s)
+      RenderSVGText {text} at (143,280) size 163x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-13) size 163x17
-          chunk 1 (middle anchor) text run 1 at (156.50,280.00) startOffset 0 endOffset 25 width 137.00: "            Text Renderin"
+          chunk 1 (middle anchor) text run 1 at (143.50,280.00) startOffset 0 endOffset 25 width 163.00: "Text Rendering Properties"
       RenderSVGContainer {g} at (24,297) size 152x42 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,305.00)}]
         RenderSVGContainer {g} at (58.00,297) size 84x36 [transform={m=((-1.00,-0.00)(0.00,-1.00)) t=(0.00,0.00)}]
           RenderSVGContainer {use} at (58.00,297) size 84x36
@@ -140,18 +140,18 @@ layer at (0,0) size 450x500
         RenderSVGText {text} at (-50,15) size 98x18 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-14) size 99x18
             chunk 1 (middle anchor) text run 1 at (-49.50,15.00) startOffset 0 endOffset 17 width 99.00: "text as clip-path"
-      RenderSVGText {text} at (142,440) size 27x69 contains 1 chunk(s) [color=#8B0000]
+      RenderSVGText {text} at (136,440) size 27x69 contains 1 chunk(s) [color=#8B0000]
         RenderSVGInlineText {#text} at (0,-54) size 27x69
-          chunk 1 (middle anchor) text run 1 at (142.50,440.00) startOffset 0 endOffset 1 width 15.00: " "
+          chunk 1 (middle anchor) text run 1 at (136.50,440.00) startOffset 0 endOffset 1 width 27.00: "a"
       RenderSVGText {text} at (77,455) size 145x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 145x18
           chunk 1 (middle anchor) text run 1 at (77.50,455.00) startOffset 0 endOffset 23 width 145.00: "stroke-linejoin=\"miter\""
       RenderSVGText {text} at (74,465) size 152x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 152x18
           chunk 1 (middle anchor) text run 1 at (74.00,465.00) startOffset 0 endOffset 23 width 152.00: "stroke-linecap=\"square\""
-      RenderSVGText {text} at (292,440) size 27x69 contains 1 chunk(s) [color=#8B0000]
+      RenderSVGText {text} at (286,440) size 27x69 contains 1 chunk(s) [color=#8B0000]
         RenderSVGInlineText {#text} at (0,-54) size 27x69
-          chunk 1 (middle anchor) text run 1 at (292.50,440.00) startOffset 0 endOffset 1 width 15.00: " "
+          chunk 1 (middle anchor) text run 1 at (286.50,440.00) startOffset 0 endOffset 1 width 27.00: "a"
       RenderSVGText {text} at (225,455) size 150x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 150x18
           chunk 1 (middle anchor) text run 1 at (225.00,455.00) startOffset 0 endOffset 23 width 150.00: "stroke-linejoin=\"round\""
index e3d8a6e..1b710d8 100644 (file)
@@ -1 +1 @@
-d1d774c2e97e3ea838ae86fb4ab41748
\ No newline at end of file
+9274d52374ee3fc651bea64bb04299a6
\ No newline at end of file
index b5068e1..e7e2672 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textProperties2-expected.png and b/LayoutTests/svg/batik/text/textProperties2-expected.png differ
index d268a00..cfd9ef8 100644 (file)
@@ -4,9 +4,9 @@ layer at (0,0) size 450x500
   RenderSVGRoot {svg} at (12,26) size 469x306.50
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
     RenderSVGContainer {g} at (12,26) size 469x306.50
-      RenderSVGText {text} at (147,40) size 166x17 contains 1 chunk(s)
+      RenderSVGText {text} at (142,40) size 166x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 166x17
-          chunk 1 (middle anchor) text run 1 at (147.50,40.00) startOffset 0 endOffset 28 width 155.00: "            Text display and"
+          chunk 1 (middle anchor) text run 1 at (142.00,40.00) startOffset 0 endOffset 28 width 166.00: "Text display and visibility."
       RenderSVGText {text} at (143,74) size 164x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 164x18
           chunk 1 (middle anchor) text run 1 at (143.00,74.00) startOffset 0 endOffset 27 width 164.00: "Visibility on text & tspans"
@@ -61,7 +61,7 @@ layer at (0,0) size 450x500
               chunk 1 text run 2 at (53.00,70.00) startOffset 0 endOffset 8 width 49.00: "tspan 1 "
             RenderSVGTSpan {tspan} at (0,0) size 45x18 [color=#800080]
               RenderSVGInlineText {#text} at (82,-14) size 45x18
-                chunk 1 text run 3 at (102.00,70.00) startOffset 0 endOffset 7 width 41.00: " tspan "
+                chunk 1 text run 3 at (102.00,70.00) startOffset 0 endOffset 7 width 45.00: "tspan 2"
             RenderSVGInlineText {#text} at (127,-14) size 81x18
               chunk 1 text run 4 at (147.00,70.00) startOffset 0 endOffset 12 width 81.00: " more span 1"
           RenderSVGInlineText {#text} at (208,-14) size 66x18
@@ -74,7 +74,7 @@ layer at (0,0) size 450x500
               chunk 1 text run 2 at (53.00,90.00) startOffset 0 endOffset 8 width 49.00: "tspan 1 "
             RenderSVGTSpan {tspan} at (0,0) size 45x18 [color=#800080]
               RenderSVGInlineText {#text} at (82,-14) size 45x18
-                chunk 1 text run 3 at (102.00,90.00) startOffset 0 endOffset 7 width 41.00: " tspan "
+                chunk 1 text run 3 at (102.00,90.00) startOffset 0 endOffset 7 width 45.00: "tspan 2"
             RenderSVGInlineText {#text} at (127,-14) size 81x18
               chunk 1 text run 4 at (147.00,90.00) startOffset 0 endOffset 12 width 81.00: " more span 1"
           RenderSVGInlineText {#text} at (208,-14) size 66x18
@@ -87,7 +87,7 @@ layer at (0,0) size 450x500
               chunk 1 text run 2 at (53.00,110.00) startOffset 0 endOffset 8 width 49.00: "tspan 1 "
             RenderSVGTSpan {tspan} at (0,0) size 45x18 [color=#800080]
               RenderSVGInlineText {#text} at (82,-14) size 45x18
-                chunk 1 text run 3 at (102.00,110.00) startOffset 0 endOffset 7 width 41.00: " tspan "
+                chunk 1 text run 3 at (102.00,110.00) startOffset 0 endOffset 7 width 45.00: "tspan 2"
             RenderSVGInlineText {#text} at (127,-14) size 81x18
               chunk 1 text run 4 at (147.00,110.00) startOffset 0 endOffset 12 width 81.00: " more span 1"
           RenderSVGInlineText {#text} at (208,-14) size 66x18
@@ -100,7 +100,7 @@ layer at (0,0) size 450x500
               chunk 1 text run 2 at (53.00,130.00) startOffset 0 endOffset 8 width 49.00: "tspan 1 "
             RenderSVGTSpan {tspan} at (0,0) size 45x18 [color=#800080]
               RenderSVGInlineText {#text} at (82,-14) size 45x18
-                chunk 1 text run 3 at (102.00,130.00) startOffset 0 endOffset 7 width 41.00: " tspan "
+                chunk 1 text run 3 at (102.00,130.00) startOffset 0 endOffset 7 width 45.00: "tspan 2"
             RenderSVGInlineText {#text} at (127,-14) size 81x18
               chunk 1 text run 4 at (147.00,130.00) startOffset 0 endOffset 12 width 81.00: " more span 1"
           RenderSVGInlineText {#text} at (208,-14) size 66x18
@@ -125,19 +125,19 @@ layer at (0,0) size 450x500
             RenderSVGInlineText {#text} at (33,-14) size 49x18
               chunk 1 text run 2 at (53.00,190.00) startOffset 0 endOffset 8 width 49.00: "tspan 1 "
             RenderSVGInlineText {#text} at (82,-14) size 77x18
-              chunk 1 text run 3 at (102.00,190.00) startOffset 0 endOffset 11 width 73.00: " more span "
+              chunk 1 text run 3 at (102.00,190.00) startOffset 0 endOffset 11 width 77.00: "more span 1"
           RenderSVGInlineText {#text} at (159,-14) size 66x18
             chunk 1 text run 4 at (179.00,190.00) startOffset 0 endOffset 12 width 66.00: " finish text"
         RenderSVGText {text} at (20,210) size 95x18 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-14) size 33x18
             chunk 1 text run 1 at (20.00,210.00) startOffset 0 endOffset 5 width 33.00: "Text "
           RenderSVGInlineText {#text} at (33,-14) size 62x18
-            chunk 1 text run 2 at (53.00,210.00) startOffset 0 endOffset 11 width 62.00: " finish tex"
+            chunk 1 text run 2 at (53.00,210.00) startOffset 0 endOffset 11 width 62.00: "finish text"
         RenderSVGText {text} at (20,230) size 95x18 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-14) size 33x18
             chunk 1 text run 1 at (20.00,230.00) startOffset 0 endOffset 5 width 33.00: "Text "
           RenderSVGInlineText {#text} at (33,-14) size 62x18
-            chunk 1 text run 2 at (53.00,230.00) startOffset 0 endOffset 11 width 62.00: " finish tex"
+            chunk 1 text run 2 at (53.00,230.00) startOffset 0 endOffset 11 width 62.00: "finish text"
         RenderSVGText {text} at (20,250) size 225x18 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-14) size 33x18
             chunk 1 text run 1 at (20.00,250.00) startOffset 0 endOffset 5 width 33.00: "Text "
@@ -145,7 +145,7 @@ layer at (0,0) size 450x500
             RenderSVGInlineText {#text} at (33,-14) size 49x18
               chunk 1 text run 2 at (53.00,250.00) startOffset 0 endOffset 8 width 49.00: "tspan 1 "
             RenderSVGInlineText {#text} at (82,-14) size 77x18
-              chunk 1 text run 3 at (102.00,250.00) startOffset 0 endOffset 11 width 73.00: " more span "
+              chunk 1 text run 3 at (102.00,250.00) startOffset 0 endOffset 11 width 77.00: "more span 1"
           RenderSVGInlineText {#text} at (159,-14) size 66x18
             chunk 1 text run 4 at (179.00,250.00) startOffset 0 endOffset 12 width 66.00: " finish text"
     RenderSVGContainer {use} at (0,0) size 0x0
index e00b6e0..d61faa6 100644 (file)
@@ -1 +1 @@
-caf2559181dfad15602793d63a11acf5
\ No newline at end of file
+2a554f0e682e7c1f485877cd95d896af
\ No newline at end of file
index a7f4447..1c37a3b 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textStyles-expected.png and b/LayoutTests/svg/batik/text/textStyles-expected.png differ
index f1152bf..76f0a41 100644 (file)
@@ -7,9 +7,9 @@ layer at (0,0) size 450x500
         RenderSVGInlineText {#text} at (0,-14) size 44x18
           chunk 1 (middle anchor) text run 1 at (-22.00,0.00) startOffset 0 endOffset 6 width 44.00: "sample"
     RenderSVGContainer {g} at (-71,36) size 581x397
-      RenderSVGText {text} at (151,50) size 180x17 contains 1 chunk(s)
+      RenderSVGText {text} at (135,50) size 180x17 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 180x17
-          chunk 1 (middle anchor) text run 1 at (151.50,50.00) startOffset 0 endOffset 26 width 147.00: "            Text Font Face"
+          chunk 1 (middle anchor) text run 1 at (135.00,50.00) startOffset 0 endOffset 26 width 180.00: "Text Font Faces and Styles"
       RenderSVGText {text} at (184,75) size 82x13 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-10) size 82x13
           chunk 1 (middle anchor) text run 1 at (184.00,75.00) startOffset 0 endOffset 19 width 82.00: "Standard Font Faces"
@@ -124,9 +124,9 @@ layer at (0,0) size 450x500
       RenderSVGText {text} at (181,310) size 88x13 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-10) size 88x13
           chunk 1 (middle anchor) text run 1 at (181.00,310.00) startOffset 0 endOffset 19 width 88.00: "Named Font Families"
-      RenderSVGText {text} at (133,325) size 193x13 contains 1 chunk(s)
+      RenderSVGText {text} at (128,325) size 193x13 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-10) size 193x13
-          chunk 1 (middle anchor) text run 1 at (133.00,325.00) startOffset 0 endOffset 49 width 184.00: "            (Not all typefaces are available on a"
+          chunk 1 (middle anchor) text run 1 at (128.50,325.00) startOffset 0 endOffset 49 width 193.00: "(Not all typefaces are available on all systems.)"
       RenderSVGContainer {g} at (58,332) size 84x51 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,360.00)}]
         RenderSVGContainer {use} at (58,332) size 84x36
           RenderSVGContainer {g} at (58,332) size 84x36
index 215733e..b915f79 100644 (file)
@@ -8,13 +8,15 @@ layer at (0,0) size 450x500
     RenderSVGContainer {g} at (10,-14) size 2147483648.00x2147483648.00
       RenderSVGText {text} at (10,0) size 28x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 28x18
-          chunk 1 text run 1 at (10.00,0.00) startOffset 0 endOffset 2 width 8.00: "  "
+          chunk 1 text run 1 at (10.00,0.00) startOffset 0 endOffset 2 width 16.00: "X "
+          chunk 1 text run 2 at (26.00,0.00) startOffset 0 endOffset 1 width 12.00: "X"
       RenderSVGText {text} at (120,75) size 107x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 107x18
           chunk 1 text run 1 at (120.00,75.00) startOffset 0 endOffset 17 width 107.00: "no xml:space attr"
       RenderSVGText {text} at (10,100) size 28x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 28x18
-          chunk 1 text run 1 at (10.00,100.00) startOffset 0 endOffset 2 width 8.00: "  "
+          chunk 1 text run 1 at (10.00,100.00) startOffset 0 endOffset 2 width 16.00: "X "
+          chunk 1 text run 2 at (26.00,100.00) startOffset 0 endOffset 1 width 12.00: "X"
       RenderSVGText {text} at (120,100) size 129x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 129x18
           chunk 1 text run 1 at (120.00,100.00) startOffset 0 endOffset 19 width 129.00: "xml:space=\"default\""
@@ -144,7 +146,8 @@ layer at (0,0) size 450x500
           chunk 1 text run 1 at (345.00,100.00) startOffset 0 endOffset 20 width 139.00: "xml:space=\"preserve\""
       RenderSVGText {text} at (235,150) size 28x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 28x18
-          chunk 1 text run 1 at (235.00,150.00) startOffset 0 endOffset 2 width 8.00: "  "
+          chunk 1 text run 1 at (235.00,150.00) startOffset 0 endOffset 2 width 16.00: "X "
+          chunk 1 text run 2 at (251.00,150.00) startOffset 0 endOffset 1 width 12.00: "X"
         RenderSVGTSpan {tspan} at (0,0) size 0x0 [color=#FF0000]
       RenderSVGText {text} at (345,140) size 139x37 contains 2 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 125x18
@@ -154,7 +157,8 @@ layer at (0,0) size 450x500
             chunk 2 text run 1 at (345.00,159.20) startOffset 0 endOffset 20 width 139.00: "xml:space=\"preserve\""
       RenderSVGText {text} at (235,175) size 36x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 28x18
-          chunk 1 text run 1 at (235.00,175.00) startOffset 0 endOffset 2 width 8.00: "  "
+          chunk 1 text run 1 at (235.00,175.00) startOffset 0 endOffset 2 width 16.00: "X "
+          chunk 1 text run 2 at (251.00,175.00) startOffset 0 endOffset 1 width 12.00: "X"
         RenderSVGTSpan {tspan} at (0,0) size 8x18 [color=#FF0000]
           RenderSVGInlineText {#text} at (28,-14) size 8x18
             chunk 1 text run 3 at (263.00,175.00) startOffset 0 endOffset 2 width 8.00: "  "
@@ -166,7 +170,8 @@ layer at (0,0) size 450x500
             chunk 2 text run 1 at (345.00,184.20) startOffset 0 endOffset 20 width 139.00: "xml:space=\"preserve\""
       RenderSVGText {text} at (235,200) size 36x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 32x18
-          chunk 1 text run 1 at (235.00,200.00) startOffset 0 endOffset 2 width 8.00: "  "
+          chunk 1 text run 1 at (235.00,200.00) startOffset 0 endOffset 2 width 16.00: "X "
+          chunk 1 text run 2 at (251.00,200.00) startOffset 0 endOffset 2 width 16.00: "X "
         RenderSVGTSpan {tspan} at (0,0) size 4x18 [color=#FF0000]
           RenderSVGInlineText {#text} at (32,-14) size 4x18
             chunk 1 text run 3 at (267.00,200.00) startOffset 0 endOffset 1 width 4.00: " "
@@ -182,6 +187,7 @@ layer at (0,0) size 450x500
             chunk 1 text run 1 at (235.00,225.00) startOffset 0 endOffset 1 width 4.00: " "
         RenderSVGInlineText {#text} at (4,-14) size 32x18
           chunk 1 text run 2 at (239.00,225.00) startOffset 0 endOffset 3 width 20.00: " X "
+          chunk 1 text run 3 at (259.00,225.00) startOffset 0 endOffset 1 width 12.00: "X"
       RenderSVGText {text} at (345,215) size 139x37 contains 2 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 67x18
           chunk 1 text run 1 at (345.00,215.00) startOffset 0 endOffset 12 width 67.00: "tspan start "
@@ -194,6 +200,7 @@ layer at (0,0) size 450x500
             chunk 1 text run 1 at (235.00,250.00) startOffset 0 endOffset 1 width 4.00: " "
         RenderSVGInlineText {#text} at (4,-14) size 28x18
           chunk 1 text run 2 at (239.00,250.00) startOffset 0 endOffset 2 width 16.00: "X "
+          chunk 1 text run 3 at (255.00,250.00) startOffset 0 endOffset 1 width 12.00: "X"
       RenderSVGText {text} at (345,240) size 139x37 contains 2 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 98x18
           chunk 1 text run 1 at (345.00,240.00) startOffset 0 endOffset 17 width 98.00: "tspan near start "
@@ -202,7 +209,7 @@ layer at (0,0) size 450x500
             chunk 2 text run 1 at (345.00,259.20) startOffset 0 endOffset 20 width 139.00: "xml:space=\"preserve\""
       RenderSVGText {text} at (235,275) size 32x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 12x18
-          chunk 1 text run 1 at (235.00,275.00) startOffset 0 endOffset 1 width 4.00: " "
+          chunk 1 text run 1 at (235.00,275.00) startOffset 0 endOffset 1 width 12.00: "X"
         RenderSVGTSpan {tspan} at (0,0) size 4x18 [color=#FF0000]
           RenderSVGInlineText {#text} at (12,-14) size 4x18
             chunk 1 text run 2 at (247.00,275.00) startOffset 0 endOffset 1 width 4.00: " "
@@ -216,7 +223,7 @@ layer at (0,0) size 450x500
             chunk 2 text run 1 at (345.00,284.20) startOffset 0 endOffset 20 width 139.00: "xml:space=\"preserve\""
       RenderSVGText {text} at (235,300) size 32x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 16x18
-          chunk 1 text run 1 at (235.00,300.00) startOffset 0 endOffset 2 width 8.00: "  "
+          chunk 1 text run 1 at (235.00,300.00) startOffset 0 endOffset 2 width 16.00: "X "
         RenderSVGTSpan {tspan} at (0,0) size 4x18 [color=#FF0000]
           RenderSVGInlineText {#text} at (16,-14) size 4x18
             chunk 1 text run 2 at (251.00,300.00) startOffset 0 endOffset 1 width 4.00: " "
@@ -230,7 +237,8 @@ layer at (0,0) size 450x500
             chunk 2 text run 1 at (345.00,309.20) startOffset 0 endOffset 20 width 139.00: "xml:space=\"preserve\""
       RenderSVGText {text} at (235,325) size 28x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 28x18
-          chunk 1 text run 1 at (235.00,325.00) startOffset 0 endOffset 2 width 16.00: " X"
+          chunk 1 text run 1 at (235.00,325.00) startOffset 0 endOffset 2 width 16.00: "X "
+          chunk 1 text run 2 at (251.00,325.00) startOffset 0 endOffset 1 width 12.00: "X"
       RenderSVGText {text} at (345,315) size 117x37 contains 2 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 117x18
           chunk 1 text run 1 at (345.00,315.00) startOffset 0 endOffset 16 width 117.00: "unknown element "
@@ -239,9 +247,9 @@ layer at (0,0) size 450x500
             chunk 2 text run 1 at (345.00,334.20) startOffset 0 endOffset 5 width 26.00: "start"
       RenderSVGText {text} at (235,350) size 28x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 16x18
-          chunk 1 text run 1 at (235.00,350.00) startOffset 0 endOffset 2 width 8.00: "  "
+          chunk 1 text run 1 at (235.00,350.00) startOffset 0 endOffset 2 width 16.00: "X "
         RenderSVGInlineText {#text} at (16,-14) size 12x18
-          chunk 1 text run 2 at (251.00,350.00) startOffset 0 endOffset 1 width 4.00: " "
+          chunk 1 text run 2 at (251.00,350.00) startOffset 0 endOffset 1 width 12.00: "X"
       RenderSVGText {text} at (345,340) size 117x37 contains 2 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 117x18
           chunk 1 text run 1 at (345.00,340.00) startOffset 0 endOffset 16 width 117.00: "unknown element "
@@ -250,7 +258,8 @@ layer at (0,0) size 450x500
             chunk 2 text run 1 at (345.00,359.20) startOffset 0 endOffset 6 width 43.00: "middle"
       RenderSVGText {text} at (236,375) size 28x18 contains 1 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 28x18
-          chunk 1 text run 1 at (236.00,375.00) startOffset 0 endOffset 2 width 8.00: "  "
+          chunk 1 text run 1 at (236.00,375.00) startOffset 0 endOffset 2 width 16.00: "X "
+          chunk 1 text run 2 at (252.00,375.00) startOffset 0 endOffset 1 width 12.00: "X"
         RenderSVGInlineText {#text} at (0,0) size 0x0
       RenderSVGText {text} at (345,365) size 117x37 contains 2 chunk(s)
         RenderSVGInlineText {#text} at (0,-14) size 117x18
index d2cf1fe..9f483c3 100644 (file)
@@ -1 +1 @@
-8e6a70af163a7808d980a8bca7a6d172
\ No newline at end of file
+8e2b08be77371c6473a6e710b039afcd
\ No newline at end of file
index f118443..04e462b 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 228c220..2a101be 100644 (file)
@@ -1 +1 @@
-f7f4170c359af0eec99a4faa9802b3eb
\ No newline at end of file
+e4b836e5d629495bd8522838c209fbb2
\ No newline at end of file
index 293c3d9..e1e26db 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 b37b4cb..f3e6527 100644 (file)
@@ -1 +1 @@
-2612ace66227159723eecb180408084d
\ No newline at end of file
+814ea9e4be11a502fd4ce559a856becb
\ No newline at end of file
index 53c12d5..bfb1a62 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 0ed8d38..0e187f3 100644 (file)
@@ -1 +1 @@
-8ca024cde0e7c366d222db40536e2623
\ No newline at end of file
+8b8c774b6f148d51babc94195bcc6823
\ No newline at end of file
index 541706f..29fe5a9 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 52a969c..1c41952 100644 (file)
@@ -1,16 +1,16 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 800x600
-  RenderSVGRoot {svg} at (0.83,0.83) size 989.17x598.33
-    RenderSVGContainer {g} at (80,86.67) size 910x326.67
-      RenderSVGText {text} at (119,80) size 458x36 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-28) size 458x36
+  RenderSVGRoot {svg} at (0.83,0.83) size 982.50x598.33
+    RenderSVGContainer {g} at (80,86.67) size 903.33x326.67
+      RenderSVGText {text} at (119,80) size 455x36 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,-28) size 455x36
           chunk 1 (end anchor) text run 1 at (119.00,80.00) startOffset 0 endOffset 37 width 341.00 RTL: "\x{644}\x{645}\x{627}\x{630}\x{627} \x{644}\x{627} \x{64A}\x{62A}\x{643}\x{644}\x{645}\x{648}\x{646} \x{627}\x{644}\x{644}\x{651}\x{63A}\x{629} \x{627}\x{644}\x{639}\x{631}\x{628}\x{64A}\x{629} \x{641}\x{62D}\x{633}\x{628}\x{61F}"
-      RenderSVGText {text} at (48,160) size 546x41 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-32) size 546x41
+      RenderSVGText {text} at (48,160) size 542x41 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,-32) size 542x41
           chunk 1 (end anchor) text run 1 at (48.00,160.00) startOffset 0 endOffset 37 width 412.00 RTL: "\x{644}\x{645}\x{627}\x{630}\x{627} \x{644}\x{627} \x{64A}\x{62A}\x{643}\x{644}\x{645}\x{648}\x{646} \x{627}\x{644}\x{644}\x{651}\x{63A}\x{629} \x{627}\x{644}\x{639}\x{631}\x{628}\x{64A}\x{629} \x{641}\x{62D}\x{633}\x{628}\x{61F}"
-      RenderSVGText {text} at (119,240) size 458x36 contains 1 chunk(s)
-        RenderSVGInlineText {#text} at (0,-28) size 458x36
+      RenderSVGText {text} at (119,240) size 455x36 contains 1 chunk(s)
+        RenderSVGInlineText {#text} at (0,-28) size 455x36
           chunk 1 (end anchor) text run 1 at (119.00,240.00) startOffset 0 endOffset 37 width 341.00 RTL: "\x{644}\x{645}\x{627}\x{630}\x{627} \x{644}\x{627} \x{64A}\x{62A}\x{643}\x{644}\x{645}\x{648}\x{646} \x{627}\x{644}\x{644}\x{651}\x{63A}\x{629} \x{627}\x{644}\x{639}\x{631}\x{628}\x{64A}\x{629} \x{641}\x{62D}\x{633}\x{628}\x{61F}"
     RenderSVGText {text} at (10,340) size 264x46 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,-36) size 264x46
index f78bb70..6cc5ff7 100644 (file)
@@ -1 +1 @@
-a1b292729346bd1ff093e4cf701a4605
\ No newline at end of file
+87afb739dd957b5d9778af35ef0309b6
\ No newline at end of file
index edd430a..30e78b5 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 f5fa0ac..2bc72ff 100644 (file)
@@ -1 +1 @@
-6daff68c0c5f3fd0c65078ab7453a771
\ No newline at end of file
+cc817a6d98771186f913bdd816627b9d
\ No newline at end of file
index c47b2dc..d6af84d 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 0a06e2e..75cce72 100644 (file)
@@ -6,7 +6,7 @@ layer at (0,0) size 800x600
       RenderSVGContainer {g} at (30,10) size 660x500
         RenderSVGText {text} at (3,8) size 52x9 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-7) size 52x9
-            chunk 1 text run 1 at (3.00,8.00) startOffset 0 endOffset 16 width 50.00: " letter-spacing:"
+            chunk 1 text run 1 at (3.00,8.00) startOffset 0 endOffset 16 width 52.00: "letter-spacing:0"
         RenderSVGText {text} at (3,16) size 38x9 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-7) size 38x9
             chunk 1 text run 1 at (3.00,16.00) startOffset 0 endOffset 17 width 38.00: "letter-spacing:-1"
index 9013cd0..525244e 100644 (file)
@@ -1 +1 @@
-ca079fd04e880db097a58362cf079194
\ No newline at end of file
+79db9993a99642bedaceea4613524645
\ No newline at end of file
index 7a98bf5..3de04dc 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 5613f1f..b7f21f2 100644 (file)
@@ -1 +1 @@
-aef793787a3d51b18b46be9ff3bd88f4
\ No newline at end of file
+8134633414eba4f7ed52a725056b17a3
\ No newline at end of file
index ea9b6b6..53eaddc 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 8ede2e9..8fe4804 100644 (file)
@@ -10,7 +10,11 @@ layer at (0,0) size 800x600
             chunk 1 text run 1 at (10.00,70.00) startOffset 0 endOffset 26 width 174.00: "StartIndex: 0. NumChars: 9"
         RenderSVGText {text} at (10,128) size 403x55 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,-43) size 403x55
-            chunk 1 text run 1 at (10.00,128.00) startOffset 0 endOffset 4 width 57.00: "   a"
+            chunk 1 text run 1 at (10.00,128.00) startOffset 0 endOffset 4 width 78.00: "abc "
+            chunk 1 text run 2 at (88.00,128.00) startOffset 0 endOffset 4 width 86.00 RTL: " \x{5D3}\x{5D4}\x{5D5}"
+            chunk 1 text run 3 at (176.00,128.00) startOffset 0 endOffset 3 width 72.00: "123"
+            chunk 1 text run 4 at (248.00,128.00) startOffset 0 endOffset 4 width 91.00 RTL: "\x{5D0}\x{5D1}\x{5D2} "
+            chunk 1 text run 5 at (340.00,128.00) startOffset 0 endOffset 4 width 73.00: " def"
         RenderSVGContainer {g} at (16.67,366.67) size 716.67x33.33
           RenderPath {rect} at (16.67,366.67) size 166.67x33.33 [fill={[type=SOLID] [color=#0000FF]}] [data="M10.00,160.00L110.00,160.00L110.00,180.00L10.00,180.00"]
           RenderSVGText {text} at (20,175) size 80x18 contains 1 chunk(s) [color=#FFFFFF]
index 33f5331..ba92a92 100644 (file)
@@ -1 +1 @@
-56d459c01fa89880151a05ed45db409f
\ No newline at end of file
+c2bb0197ee5fdb34d25f2a45c3400c0a
\ No newline at end of file
index 1a549b5..a74dba7 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 45f424f..5411ab6 100644 (file)
@@ -1,3 +1,54 @@
+2007-08-08  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Oliver.
+
+        Fixes: http://bugs.webkit.org/show_bug.cgi?id=13909 (SVG text selection doesn't work with RTL text)
+
+        Use drawHighlightForText() to draw the selection, instead of my home-brewn solution.
+        Affected code in SVGRootInlineBox::paintSelectionForTextBox. Removed not anymore needed
+        helper function cummulatedWidthOfSelectionRange.
+
+        Dump all contained InlineTextBox(es) in SVGRenderTreeAsText, take into account multiple
+        child text boxes in ie. a RenderSVGInlineText objects (which happens for RTL text and
+        LTR text cases where newlines were involved - see changed testcase results.)
+        This affects a lot of LTR tests which actually had more than one child text box, that
+        wasn't taken properly into account before (in terms of selection, not rendering.)
+
+        Fix selection for RTL text by taking box start offsets into account in closestCharacterToPosition()
+        and by offering RTL text selection special cases in svgCharacterHitsPosition().
+
+        Centralized the creation of a TextStyle object for text selection/painting in a new helper function
+        svgTextStyleForInlineTextBox. Add new helper functions calculateGlyphWidth/calculateGlyphHeight to
+        centralize these calculations -> use these new helpers everywhere to avoid code duplication.
+
+        A single fix in bidi.cpp was needed to fix SVG's unicode-bidi/direction handling, to fix text-intro-02-b.svg.
+        SVG didacts that the 'direction' attribute is ignored if unicode-bidi is set to 'normal' (default).
+        Discussed with Mitz.
+
+        * rendering/RenderSVGInlineText.cpp:
+        (WebCore::RenderSVGInlineText::positionForCoordinates):
+        * rendering/SVGInlineTextBox.cpp:
+        (WebCore::SVGInlineTextBox::calculateGlyphWidth):
+        (WebCore::SVGInlineTextBox::calculateGlyphHeight):
+        (WebCore::SVGInlineTextBox::closestCharacterToPosition):
+        (WebCore::SVGInlineTextBox::svgCharacterHitsPosition):
+        (WebCore::SVGInlineTextBox::nodeAtPoint):
+        (WebCore::SVGInlineTextBox::selectionRect):
+        * rendering/SVGInlineTextBox.h:
+        * rendering/SVGRenderTreeAsText.cpp:
+        (WebCore::writeSVGInlineTextBox):
+        (WebCore::writeSVGInlineText):
+        * rendering/SVGRootInlineBox.cpp:
+        (WebCore::cummulatedWidthOfInlineBoxCharacterRange): Take box start offset into account.
+        (WebCore::svgTextStyleForInlineTextBox): New helper function.
+        (WebCore::totalAdvanceOfInlineTextBox): Take box start offset into account.
+        (WebCore::SVGRootInlineBox::buildLayoutInformationForTextBox): Ditto. (correctly calculate advance values in RTL mode!)
+        (WebCore::SVGRootInlineBox::paintSelectionForTextBox): Use GraphicsContext drawHighlightForText() instead of self-made hacks.
+        (WebCore::SVGRootInlineBox::paintCharacterRangeForTextBox): Use new helper function svgTextStyleForInlineTextBox.
+        * rendering/SVGRootInlineBox.h:
+        * rendering/bidi.cpp: Add special case for SVG.
+        (WebCore::RenderBlock::layoutInlineChildren):
+
 2007-07-30  Nikolas Zimmermann  <zimmermann@kde.org>
 
         Reviewed by Oliver & Rob.
index 642cbf7..fc3cba7 100644 (file)
@@ -224,7 +224,7 @@ public:
 
     void setHasBadParent();
 
-    int toAdd() { return m_toAdd; }
+    int toAdd() const { return m_toAdd; }
     
 public:
     RenderObject* m_object;
index addda11..d22a306 100644 (file)
@@ -143,7 +143,20 @@ VisiblePosition RenderSVGInlineText::positionForCoordinates(int x, int y)
         return VisiblePosition(element(), 0, DOWNSTREAM);
 
     int offset = 0;
-    textBox->svgCharacterHitsPosition(x + object->xPos(), y + object->yPos(), offset);
+
+    for (SVGInlineTextBox* box = textBox; box; box = static_cast<SVGInlineTextBox*>(box->nextTextBox())) {
+        if (box->svgCharacterHitsPosition(x + object->xPos(), y + object->yPos(), offset)) {
+            // If we're not at the end/start of the box, stop looking for other selected boxes.
+            if (!box->m_reversed) {
+                if (offset <= (int) box->end() + 1)
+                    break;
+            } else {
+                if (offset > (int) box->start())
+                    break;
+            }
+        }
+    }
+
     return VisiblePosition(element(), offset, DOWNSTREAM);
 }
 
index 2556c3b..46411c4 100644 (file)
@@ -64,6 +64,20 @@ SVGRootInlineBox* SVGInlineTextBox::svgRootInlineBox() const
     return static_cast<SVGRootInlineBox*>(parentBox);
 }
 
+float SVGInlineTextBox::calculateGlyphWidth(RenderStyle* style, int offset) const
+{
+    return style->font().floatWidth(TextRun(textObject()->text()->characters() + offset, 1), svgTextStyleForInlineTextBox(style, this, 0));
+}
+
+float SVGInlineTextBox::calculateGlyphHeight(RenderStyle* style, int offset) const
+{
+    ASSERT(style);
+
+    // This is just a guess, and the only purpose of this function is to centralize this hack.
+    // In real-life top-top-bottom scripts this won't be enough, I fear.
+    return style->font().ascent() + style->font().descent();
+}
+
 SVGChar* SVGInlineTextBox::closestCharacterToPosition(int x, int y, int& offset) const
 {
     // Find corresponding text chunk for our inline box & reference x position
@@ -73,15 +87,15 @@ SVGChar* SVGInlineTextBox::closestCharacterToPosition(int x, int y, int& offset)
     // Iterate through the characters, respecting their individual placement
     // Find the character within the chunk with the smallest diagonal distance
     // to the current position. Check whether the passed x value hits that character.
-    SVGTextChunk chunk;
+    Vector<SVGChar>::iterator character = 0;
     float distance = FLT_MAX;
 
-    const Font& font = textObject()->style()->font();
+    RenderStyle* style = textObject()->style();
 
     Vector<SVGTextChunk>::iterator it = chunks.begin();
-    Vector<SVGTextChunk>::iterator end = chunks.end();
+    Vector<SVGTextChunk>::iterator itEnd = chunks.end();
 
-    for (; it != end; ++it) {
+    for (; it != itEnd; ++it) {
         SVGTextChunk& curChunk = *it;
 
         Vector<SVGInlineBoxCharacterRange>::iterator boxIt = curChunk.boxes.begin();
@@ -89,7 +103,7 @@ SVGChar* SVGInlineTextBox::closestCharacterToPosition(int x, int y, int& offset)
 
         unsigned int chunkOffset = 0;        
         unsigned int firstRangeInFirstChunkStartOffset = 0;
-
+    
         for (; boxIt != boxEnd; ++boxIt) {
             SVGInlineBoxCharacterRange& range = *boxIt;
 
@@ -101,6 +115,7 @@ SVGChar* SVGInlineTextBox::closestCharacterToPosition(int x, int y, int& offset)
                 continue;
             }
 
+            Vector<SVGChar>::iterator closestCharacter = 0;
             unsigned int closestOffset = UINT_MAX;
 
             // Walk chunk finding closest character
@@ -109,10 +124,20 @@ SVGChar* SVGInlineTextBox::closestCharacterToPosition(int x, int y, int& offset)
             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();
+                unsigned int newOffset = start() + (itChar - itCharBegin) + firstRangeInFirstChunkStartOffset;
+
+                // Take RTL text into account and pick right glyph width/height.
+                float glyphWidth = 0.0;
+                float glyphHeight = 0.0;
+
+                if (!m_reversed) {
+                    glyphWidth = calculateGlyphWidth(style, newOffset);
+                    glyphHeight = calculateGlyphHeight(style, newOffset);
+                } else {    
+                    glyphWidth = calculateGlyphWidth(style, start() + end() - newOffset);
+                    glyphHeight = calculateGlyphHeight(style, start() + end() - newOffset);
+                    newOffset = start() + end() - newOffset;
+                }
 
                 // Calculate distances relative to the glyph mid-point. I hope this is accurate enough.
                 float xDistance = (*itChar).x + glyphWidth / 2.0 - x;
@@ -122,6 +147,7 @@ SVGChar* SVGInlineTextBox::closestCharacterToPosition(int x, int y, int& offset)
                 if (newDistance <= distance) {
                     distance = newDistance;
                     closestOffset = newOffset;
+                    closestCharacter = itChar;
                 }
             }
 
@@ -130,22 +156,17 @@ SVGChar* SVGInlineTextBox::closestCharacterToPosition(int x, int y, int& offset)
                 continue;
 
             // Record current chunk, if it contains the current closest character next to the mouse.
-            chunk = curChunk;
+            character = closestCharacter;
             offset = closestOffset;
         }
     }
 
-    if (!chunk.start) {
+    if (!character) {
         offset = 0;
         return 0;
     }
 
-    // Be very careful here! The chunk.start offset already takes the first range's
-    // startOffset into account! Need to subtract it here.
-    ASSERT(!chunk.boxes.isEmpty());
-    Vector<SVGInlineBoxCharacterRange>::iterator boxStart = chunk.boxes.begin();
-
-    return (chunk.start + offset - (*boxStart).startOffset);
+    return character;
 }
 
 bool SVGInlineTextBox::svgCharacterHitsPosition(int x, int y, int& offset) const
@@ -157,25 +178,36 @@ bool SVGInlineTextBox::svgCharacterHitsPosition(int x, int y, int& offset) const
     SVGChar& charAtPos = *charAtPosPtr;
     RenderStyle* style = textObject()->style(m_firstLine);
 
-    float glyphHeight = style->font().ascent() + style->font().descent();
+    float glyphWidth = calculateGlyphWidth(style, offset);
+    float glyphHeight = calculateGlyphHeight(style, offset);
+
+    if (m_reversed)
+        offset++;
 
-    // FIXME: Several things need to be done:
-    // (#13909) This code does not handle bottom-to-top vertical text (low priority).
-    // (#13909) This code does not handle top-to-bottom vertical text (higher priority).
-    // (#13010) This code does not handle right-to-left selection yet (highest priority).
+    // FIXME: todo list
+    // (#13910) This code does not handle bottom-to-top/top-to-bottom vertical text.
 
     // Check whether y position hits the current character 
     if (y < charAtPos.y - glyphHeight || y > charAtPos.y)
         return false;
 
     // Check whether x position hits the current character
-    float glyphWidth = style->font().floatWidth(TextRun(textObject()->text()->characters() + offset, 1), TextStyle(0, 0));
-    if (x < charAtPos.x)
+    if (x < charAtPos.x) {
+        if (offset > 0 && !m_reversed)
+            return true;
+        else if (offset < (int) end() && m_reversed)
+            return true;
+
+        return false;
+    }
+
+    // If we are past the last glyph of this box, don't mark it as 'hit' anymore.
+    if (x >= charAtPos.x + glyphWidth && offset == (int) end())
         return false;
 
     // Snap to character at half of it's advance
     if (x >= charAtPos.x + glyphWidth / 2.0)
-        offset++;
+        offset += m_reversed ? -1 : 1;
 
     return true;
 }
@@ -200,6 +232,7 @@ bool SVGInlineTextBox::nodeAtPoint(const HitTestRequest& request, HitTestResult&
 
     RenderStyle* style = textObject()->style(m_firstLine);
     IntRect rect = selectionRect(0, -style->font().ascent(), 0, len());
+
     if (object()->style()->visibility() == VISIBLE && rect.contains(x, y)) {
         object()->updateHitTestResult(result, IntPoint(x - tx, y - ty));
         return true;
@@ -220,14 +253,15 @@ IntRect SVGInlineTextBox::selectionRect(int tx, int ty, int startPos, int endPos
     SVGRootInlineBox* rootBox = svgRootInlineBox();
     Vector<SVGTextChunk>& chunks = const_cast<Vector<SVGTextChunk>& >(rootBox->svgTextChunks());
 
-    const Font& font = textObject()->style()->font();
+    RenderStyle* style = textObject()->style();
+    const Font& font = style->font();
 
     FloatRect selectionRect;
     
     Vector<SVGTextChunk>::iterator it = chunks.begin();
-    Vector<SVGTextChunk>::iterator end = chunks.end();
+    Vector<SVGTextChunk>::iterator itEnd = chunks.end();
 
-    for (; it != end; ++it) {
+    for (; it != itEnd; ++it) {
         SVGTextChunk& curChunk = *it;
 
         Vector<SVGInlineBoxCharacterRange>::iterator boxIt = curChunk.boxes.begin();
@@ -235,7 +269,7 @@ IntRect SVGInlineTextBox::selectionRect(int tx, int ty, int startPos, int endPos
 
         unsigned int chunkOffset = 0;        
         unsigned int firstRangeInFirstChunkStartOffset = 0;
-
+    
         for (; boxIt != boxEnd; ++boxIt) {
             SVGInlineBoxCharacterRange& range = *boxIt;
 
@@ -247,15 +281,26 @@ IntRect SVGInlineTextBox::selectionRect(int tx, int ty, int startPos, int endPos
                 continue;
             }
 
-            // Figure out chunk size
+            // Walk chunk finding closest character
             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));
+                unsigned int newOffset = start() + (itChar - itCharBegin) + firstRangeInFirstChunkStartOffset;
+
+                // Take RTL text into account and pick right glyph width/height.
+                float glyphWidth = 0.0;
+                float glyphHeight = 0.0;
+
+                if (!m_reversed) {
+                    glyphWidth = calculateGlyphWidth(style, newOffset);
+                    glyphHeight = calculateGlyphHeight(style, newOffset);
+                } else {    
+                    glyphWidth = calculateGlyphWidth(style, start() + end() - newOffset);
+                    glyphHeight = calculateGlyphHeight(style, start() + end() - newOffset);
+                }
+
                 float x1 = (*itChar).x;
                 float x2 = (*itChar).x + glyphWidth;
 
@@ -270,6 +315,8 @@ IntRect SVGInlineTextBox::selectionRect(int tx, int ty, int startPos, int endPos
 
                 selectionRect.unite(glyphRect);
             }
+
+            chunkOffset += range.endOffset - range.startOffset;
         }
     }
 
index 1402c2d..32d76c7 100644 (file)
@@ -47,8 +47,12 @@ namespace WebCore {
         virtual IntRect selectionRect(int absx, int absy, int startPos, int endPos);
 
         SVGRootInlineBox* svgRootInlineBox() const;
-    protected:
+
+        // Helper functions shared with SVGRootInlineBox     
+        float calculateGlyphWidth(RenderStyle*, int offset) const;
+        float calculateGlyphHeight(RenderStyle*, int offset) const;
+
+    private:
         friend class RenderSVGInlineText;
         bool svgCharacterHitsPosition(int x, int y, int& offset) const;
 
index 2ba1280..a5de8a1 100644 (file)
@@ -355,16 +355,11 @@ static inline bool containsInlineTextBox(SVGTextChunk& chunk, SVGInlineTextBox*
     return found;
 }
 
-static inline void writeSVGInlineText(TextStream& ts, const RenderSVGInlineText& text, int indent)
+static inline void writeSVGInlineTextBox(TextStream& ts, SVGInlineTextBox* textBox, int indent)
 {
-    SVGInlineTextBox* textBox = static_cast<SVGInlineTextBox*>(text.firstTextBox());
-
-    if (!textBox)
-        return;
-
     SVGRootInlineBox* rootBox = textBox->svgRootInlineBox();
     ASSERT(rootBox);
-    
+
     if (!rootBox)
         return;
 
@@ -437,7 +432,7 @@ static inline void writeSVGInlineText(TextStream& ts, const RenderSVGInlineText&
                     ts << " override";
             }
 
-            ts << ": " << quoteAndEscapeNonPrintables(String(textBox->textObject()->text()).substring(range.startOffset, offset)) << endl;
+            ts << ": " << quoteAndEscapeNonPrintables(String(textBox->textObject()->text()).substring(textBox->start() + range.startOffset, offset)) << endl;
 
             j++;
         }
@@ -446,6 +441,12 @@ static inline void writeSVGInlineText(TextStream& ts, const RenderSVGInlineText&
     }
 }
 
+static inline void writeSVGInlineText(TextStream& ts, const RenderSVGInlineText& text, int indent)
+{
+    for (InlineTextBox* box = text.firstTextBox(); box; box = box->nextTextBox())
+        writeSVGInlineTextBox(ts, static_cast<SVGInlineTextBox*>(box), indent);
+}
+
 static String getTagName(SVGStyledElement* elem)
 {
     if (elem)
index 5ebdfa0..1c09003 100644 (file)
@@ -35,6 +35,7 @@
 #include "Range.h"
 #include "RenderSVGRoot.h"
 #include "SVGInlineFlowBox.h"
+#include "SVGInlineTextBox.h"
 #include "SVGPaintServer.h"
 #include "SVGRenderSupport.h"
 #include "SVGResourceClipper.h"
@@ -196,31 +197,6 @@ void SVGRootInlineBox::verticallyAlignBoxes(int& heightOfBlock)
     heightOfBlock = height();
 }
 
-float SVGRootInlineBox::cummulatedWidthOfSelectionRange(InlineTextBox* textBox, int startPos, int endPos, int length, int boxStartOffset)
-{
-    int chunkStartPos = boxStartOffset;
-    int chunkEndPos = chunkStartPos + length;
-
-    if ((startPos > chunkStartPos && endPos > chunkEndPos) || chunkStartPos >= endPos)
-        return FLT_MAX;
-
-    if (endPos > chunkEndPos)
-        endPos = chunkEndPos;
-
-    if (startPos < chunkStartPos)
-        startPos = chunkStartPos;
-
-    ASSERT(startPos >= chunkStartPos);
-    ASSERT(endPos <= chunkEndPos);
-
-    ASSERT(startPos < endPos);
-
-    RenderText* text = textBox->textObject();
-    const Font& font = text->style()->font();
-
-    return font.floatWidth(TextRun(text->characters() + startPos, endPos - startPos), TextStyle(0, 0));
-}
-
 float cummulatedWidthOfInlineBoxCharacterRange(SVGInlineBoxCharacterRange& range)
 {
     ASSERT(!range.isOpen());
@@ -229,9 +205,9 @@ float cummulatedWidthOfInlineBoxCharacterRange(SVGInlineBoxCharacterRange& range
 
     InlineTextBox* textBox = static_cast<InlineTextBox*>(range.box);
     RenderText* text = textBox->textObject();
-    const Font& font = text->style()->font();
+    RenderStyle* style = text->style();
 
-    return font.floatWidth(TextRun(text->characters() + range.startOffset, range.endOffset - range.startOffset), TextStyle(0, 0));
+    return style->font().floatWidth(TextRun(text->characters() + textBox->start() + range.startOffset, range.endOffset - range.startOffset), svgTextStyleForInlineTextBox(style, textBox, 0));
 }
 
 float cummulatedHeightOfInlineBoxCharacterRange(SVGInlineBoxCharacterRange& range)
@@ -248,6 +224,14 @@ float cummulatedHeightOfInlineBoxCharacterRange(SVGInlineBoxCharacterRange& rang
     return (range.endOffset - range.startOffset) * (font.ascent() + font.descent());
 }
 
+TextStyle svgTextStyleForInlineTextBox(RenderStyle* style, const InlineTextBox* textBox, float xPos)
+{
+    ASSERT(textBox);
+    ASSERT(style);
+
+    return TextStyle(false, xPos, textBox->toAdd(), textBox->m_reversed, textBox->m_dirOverride || style->visuallyOrdered());
+}
+
 static float cummulatedWidthOfTextChunk(SVGTextChunk& chunk)
 {
     float width = 0.0;
@@ -374,14 +358,16 @@ static void totalAdvanceOfInlineTextBox(InlineTextBox* textBox, int from, int to
     if (to > 0 && (unsigned int) to > textBox->len())
         to = textBox->len();
 
-    RenderText* text = static_cast<RenderText*>(textBox->object());
-    const Font& font = text->style()->font();
+    RenderStyle* style = textBox->object()->style();
+    SVGInlineTextBox* svgTextBox = static_cast<SVGInlineTextBox*>(textBox);
 
     for (int i = from; i < to; ++i) {
+        int offset = textBox->m_reversed ? textBox->end() - i : textBox->start() + i;
+
         if (!isVerticalText)
-            totalAdvance += font.floatWidth(TextRun(text->text()->characters() + i, 1), TextStyle(0, 0));
+            totalAdvance += svgTextBox->calculateGlyphWidth(style, offset);
         else
-            totalAdvance += font.ascent() + font.descent();
+            totalAdvance += svgTextBox->calculateGlyphHeight(style, offset);
     }
 }
 
@@ -597,7 +583,8 @@ void SVGRootInlineBox::buildLayoutInformationForTextBox(SVGCharacterLayoutInfo&
     RenderStyle* style = text->style(textBox->isFirstLineStyle());
     ASSERT(style);
 
-    const Font& font = style->font();
+    SVGInlineTextBox* svgTextBox = static_cast<SVGInlineTextBox*>(textBox);
+
     unsigned length = textBox->len();
     bool isVerticalText = isVerticalWritingMode(style->svgStyle());
 
@@ -607,8 +594,16 @@ void SVGRootInlineBox::buildLayoutInformationForTextBox(SVGCharacterLayoutInfo&
         svgChar.newTextChunk = false;
 
         float angle = 0.0;
-        float glyphWidth = font.floatWidth(TextRun(text->text()->characters() + textBox->start() + i, 1), TextStyle(0, 0));
-        float glyphHeight = font.ascent() + font.descent();
+        float glyphWidth = 0.0;
+        float glyphHeight = 0.0;
+
+        if (!textBox->m_reversed) {
+            glyphWidth = svgTextBox->calculateGlyphWidth(style, textBox->start() + i);
+            glyphHeight = svgTextBox->calculateGlyphHeight(style, textBox->start() + i);
+        } else {
+            glyphWidth = svgTextBox->calculateGlyphWidth(style, textBox->end() - i);
+            glyphHeight = svgTextBox->calculateGlyphHeight(style, textBox->end() - i);
+        }
 
         bool assignedX = false;
         bool assignedY = false;
@@ -773,7 +768,8 @@ void SVGRootInlineBox::buildTextChunks(InlineFlowBox* start, SVGTextChunkLayoutI
                 continue;
 
 #if DEBUG_CHUNK_BUILDING > 1
-            fprintf(stderr, " -> Handle inline text box (%p) with %i characters, handlingTextPath=%i\n", textBox, length, (int) info.handlingTextPath);
+            fprintf(stderr, " -> Handle inline text box (%p) with %i characters (start: %i, end: %i), handlingTextPath=%i\n",
+                            textBox, length, textBox->start(), textBox->end(), (int) info.handlingTextPath);
 #endif
 
             RenderText* text = textBox->textObject();
@@ -826,7 +822,7 @@ void SVGRootInlineBox::buildTextChunks(InlineFlowBox* start, SVGTextChunkLayoutI
                     fprintf(stderr, " | -> Close mid-text chunk, at endOffset: %i and starting new mid chunk!\n", range.endOffset);
 #endif
     
-                    // Prepare for next chunk, if we're not at the end    
+                    // Prepare for next chunk, if we're not at the end
                     startTextChunk(info);
                     if (i + 1 == length) {
 #if DEBUG_CHUNK_BUILDING > 1
@@ -939,7 +935,7 @@ void SVGRootInlineBox::layoutTextChunks()
         applyTextAnchorToTextChunk(*it);
 }
 
-void SVGRootInlineBox::paintSelectionForTextBox(InlineTextBox* textBox, int boxStartOffset, SVGChar* svgCharPtr, const UChar* chars, int length, GraphicsContext* p, RenderStyle* style, const Font* f)
+void SVGRootInlineBox::paintSelectionForTextBox(InlineTextBox* textBox, int boxStartOffset, const SVGChar& svgChar, const UChar* chars, int length, GraphicsContext* p, RenderStyle* style, const Font* f)
 {
     if (textBox->selectionState() == RenderObject::SelectionNone)
         return;
@@ -950,10 +946,6 @@ void SVGRootInlineBox::paintSelectionForTextBox(InlineTextBox* textBox, int boxS
     if (startPos >= endPos)
         return;
 
-    float width = cummulatedWidthOfSelectionRange(textBox, startPos, endPos, length, boxStartOffset);
-    if (width == FLT_MAX)
-        return;
-
     Color textColor = style->color();
     Color color = textBox->object()->selectionBackgroundColor();
     if (!color.isValid() || color.alpha() == 0)
@@ -964,14 +956,31 @@ void SVGRootInlineBox::paintSelectionForTextBox(InlineTextBox* textBox, int boxS
     if (textColor == color)
         color = Color(0xff - color.red(), 0xff - color.green(), 0xff - color.blue());
 
+    // Map from text box positions and a given start offset to chunk positions
+    // 'boxStartOffset' represents the beginning of the text chunk.
+    if ((startPos > boxStartOffset && endPos > boxStartOffset + length) || boxStartOffset >= endPos)
+        return;
+
+    if (endPos > boxStartOffset + length)
+        endPos = boxStartOffset + length;
+
+    if (startPos < boxStartOffset)
+        startPos = boxStartOffset;
+
+    ASSERT(startPos >= boxStartOffset);
+    ASSERT(endPos <= boxStartOffset + length);
+    ASSERT(startPos < endPos);
+
     p->save();
 
-    SVGChar firstChar = *(svgCharPtr + (startPos > boxStartOffset ? startPos - boxStartOffset : 0));
-    if (!firstChar.transform.isIdentity())
-        p->concatCTM(firstChar.transform);
+    if (!svgChar.transform.isIdentity())
+        p->concatCTM(svgChar.transform);
 
-    FloatRect selectionRect(firstChar.x, firstChar.y - f->ascent(), width, f->ascent() + f->descent());
-    p->fillRect(selectionRect, color);
+    int adjust = startPos >= boxStartOffset ? boxStartOffset : 0;
+    p->drawHighlightForText(TextRun(textBox->textObject()->text()->characters() + textBox->start() + boxStartOffset, length),
+                            IntPoint((int) svgChar.x, (int) svgChar.y - f->ascent()), f->ascent() + f->descent(),
+                            svgTextStyleForInlineTextBox(style, textBox, svgChar.x), color,
+                            startPos - adjust, endPos - adjust);
 
     p->restore();
 }
@@ -1129,7 +1138,7 @@ void SVGRootInlineBox::paintCharacterRangeForTextBox(RenderObject::PaintInfo& pa
         
         if (haveSelection && !useCustomUnderlines) {
             int boxStartOffset = chars - text->characters() - textBox->start();
-            paintSelectionForTextBox(textBox, boxStartOffset, const_cast<SVGChar*>(&svgChar), chars, length, paintInfo.context, styleToUse, font);
+            paintSelectionForTextBox(textBox, boxStartOffset, svgChar, chars, length, paintInfo.context, styleToUse, font);
         }
     }
 
@@ -1221,10 +1230,8 @@ void SVGRootInlineBox::paintCharacterRangeForTextBox(RenderObject::PaintInfo& pa
         }
     }
 
-    TextStyle textStyle(0, svgChar.x, textBox->toAdd(), textBox->m_reversed, textBox->m_dirOverride || styleToUse->visuallyOrdered());
-
     ASSERT(!paintSelectedTextOnly && !paintSelectedTextSeparately);
-    paintInfo.context->drawText(TextRun(chars, length), IntPoint(svgChar.x, svgChar.y), textStyle);
+    paintInfo.context->drawText(TextRun(chars, length), IntPoint((int) svgChar.x, (int) svgChar.y), svgTextStyleForInlineTextBox(styleToUse, textBox, svgChar.x));
 
     // Paint decorations
     if (d != TDNONE && paintInfo.phase != PaintPhaseSelection) {
index b2638be..1e26134 100644 (file)
@@ -50,7 +50,6 @@ public:
 
     // Used by SVGInlineTextBox
     const Vector<SVGTextChunk>& svgTextChunks() const;
-    float cummulatedWidthOfSelectionRange(InlineTextBox*, int startPos, int endPos, int length, int boxStartOffset = 0);
 
 private:
     void layoutInlineBoxes();
@@ -63,7 +62,7 @@ private:
     void buildTextChunks(InlineFlowBox* start, SVGTextChunkLayoutInfo&);
     void layoutTextChunks();
 
-    void paintSelectionForTextBox(InlineTextBox*, int boxStartOffset, SVGChar*, const UChar*, int length, GraphicsContext*, RenderStyle*, const Font*);
+    void paintSelectionForTextBox(InlineTextBox*, int boxStartOffset, const SVGChar&, const UChar*, int length, GraphicsContext*, RenderStyle*, const Font*);
 
     void paintInlineBoxes(RenderObject::PaintInfo&, int tx, int ty, InlineFlowBox* start, Vector<SVGChar>::iterator&);
     void paintChildInlineTextBox(RenderObject::PaintInfo&, int tx, int ty, InlineTextBox*, Vector<SVGChar>::iterator&);
@@ -75,7 +74,8 @@ private:
     Vector<SVGTextChunk> m_svgTextChunks;
 };
 
-// Shared with SVGRenderTreeAsText
+// Shared with SVGRenderTreeAsText / SVGInlineTextBox
+TextStyle svgTextStyleForInlineTextBox(RenderStyle* style, const InlineTextBox* textBox, float xPos);
 FloatPoint topLeftPositionOfCharacterRange(Vector<SVGChar>::iterator start, Vector<SVGChar>::iterator end);
 float cummulatedWidthOfInlineBoxCharacterRange(SVGInlineBoxCharacterRange& range);
 float cummulatedHeightOfInlineBoxCharacterRange(SVGInlineBoxCharacterRange& range);
index 759c38b..f5548e4 100644 (file)
@@ -902,11 +902,16 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintTop, i
             }
         }
 
-        BidiContext* startEmbed;
-        if (style()->direction() == LTR)
+        BidiContext *startEmbed;
+        if (style()->direction() == LTR
+#if ENABLE(SVG)   
+            || (style()->unicodeBidi() == UBNormal && isSVGText())
+#endif
+           ) {
             startEmbed = new BidiContext(0, LeftToRight, style()->unicodeBidi() == Override);
-        else
+        } else {
             startEmbed = new BidiContext(1, RightToLeft, style()->unicodeBidi() == Override);
+        }
 
         bidi.setLastStrongDir(startEmbed->dir());
         bidi.setLastDir(startEmbed->dir());