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 006344c4a362dc7691e1319515d069409abd707c..f74fa978ea94a75d2e0d1a11a5d332eacf6bfc2a 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 fd9fd5c29e339385eca2b33252bbd86ec35aa749..ab2547fbee5904371677be7356201b9066f164ce 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 9702c2527ba33f071b03dae64ddc0c5e6f4fb74b..660cdac3e3a6c81aa741fa6faafbca7cf3ffe636 100644 (file)
@@ -1 +1 @@
-5ae7a4f3ba6aa851936b940fe629c2bb
\ No newline at end of file
+29972ef68534a9eb7d763868059a70dd
\ No newline at end of file
index 8fd2f4d59016c36437d3c9be6cd8d2d4591cb78f..90a64b136b6806a92b5493ed722e90629a011c66 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textAnchor-expected.png and b/LayoutTests/svg/batik/text/textAnchor-expected.png differ
index 628021f4b1658711d06e9762c875ec6441732c78..e5e1c4996b550df387395710184e2eed71fc1cc6 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 e5963ea7fe929d9d58a4d20cbe04b6f622cc818d..e09d7e58e926be4f70a192426bb397af754cb4d6 100644 (file)
@@ -1 +1 @@
-e7abe876a73123b10646e9294c628063
\ No newline at end of file
+b893044d459ee07c1e61c044065d3701
\ No newline at end of file
index c0627ee01b6c76d83fdf873b9de433ee1ea9a2e9..96b3eeffcb718f19160c233b633338251dd46e76 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textBiDi-expected.png and b/LayoutTests/svg/batik/text/textBiDi-expected.png differ
index ab53882487372f3619489d860dac790d991f3274..793aa4152ca9df42a227ba86f8eca5bde1de63a2 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 087f026b7d19a03247ef3dbdeb30ca8ad7c17e93..0de2d6a4a5e817b9d1ba3e20ea01956894385b1f 100644 (file)
@@ -1 +1 @@
-305078038afa3cb9ab1071f4988ff362
\ No newline at end of file
+414479a23d76f6f352114c595149adff
\ No newline at end of file
index b283e8ed54f4455e20361954653e698f4579c25e..693df6757d3823e575996eff82e62971bcecd0ea 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textEffect-expected.png and b/LayoutTests/svg/batik/text/textEffect-expected.png differ
index b59693f8e88deabde4216fd033cf4fbcfea7ec86..b22187bee8765d6871ec12601ae8b0b6f5d52ac3 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 ca59ebb1de26871348af2c0a7eecd37158ae7fc0..ecd3cd2b03259b33672de809bad3b5faef5b4993 100644 (file)
@@ -1 +1 @@
-050a3d2af3a89fd85557d727cc09f071
\ No newline at end of file
+c16e7ef8955cfd27217f81ea9de9722d
\ No newline at end of file
index 998e5ad5f28a9ee8e40b7c8b78a52592dbcc3814..09200ff0bf6913885c0a6c4d93b80485701554d2 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textEffect3-expected.png and b/LayoutTests/svg/batik/text/textEffect3-expected.png differ
index 80e8a69036da2925ecc71eb944520c7b9ac7210b..d9d3015c3af305efbd384d4af0c2b5ea449f9a6b 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 35da746204eb117c4a9f0f41dd3c2978c4b6bd4f..7c9bc597041ac8faeb7d54f6ad0a5787d0b38f38 100644 (file)
@@ -1 +1 @@
-7222bea5aee75c04b09925d7b86f938a
\ No newline at end of file
+9254b86390a67f60c297854bc98581f2
\ No newline at end of file
index 56016ce526501baac0dff107fdec16ce650cb19a..9da7a7df7281f23492e2c98472c32ba28b51d99f 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textFeatures-expected.png and b/LayoutTests/svg/batik/text/textFeatures-expected.png differ
index 66e161ba87c1452d625ea2243e9e229fbddcc80f..0b8a7a6db4f9a47ef583af1b7b0402b4a3a0e3f5 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 cd990f9c8df1768c4ae2b28d66a0b2bd6e9c1fd8..3e8bf1c239a0a2021e082ea616ae0687e4c6d25d 100644 (file)
@@ -1 +1 @@
-1ce0d925d95529e51d9b8b6da0f30afd
\ No newline at end of file
+d1a743c431f0f2de24ac21dd03891d46
\ No newline at end of file
index a20d650585870ed2efb967c75bd78f090842e6eb..efeac5b177f8d721a40f75cf319a907560a27a8d 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textLayout-expected.png and b/LayoutTests/svg/batik/text/textLayout-expected.png differ
index 3140a0c0c116941581f0e9ee9c0faa73793737d9..65ea49ce88964c0bd1f5f4ef231e3bac544d2d0e 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 4cf61176c8ba3a631160325016e81205ecae3bae..432a3cb64824a7fb1ad7ab0d25203deae82079b2 100644 (file)
@@ -1 +1 @@
-ed465935e9cb71745a453e7a87dc2af4
\ No newline at end of file
+f16cb802bc9b04fb1386172f7bd44c96
\ No newline at end of file
index 0be335d11bb29b4676ec7765c7455e2f9b8f4a7c..5716a4b6848553aa4f538186d2ebfaf35da71321 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textLayout2-expected.png and b/LayoutTests/svg/batik/text/textLayout2-expected.png differ
index 0987310554066aad971a1f1a092f8b4ef1214379..d50107e9a869e5202e2b1f0652b8c94b11029aa5 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 7136c05123ffca8cc4167e6cb0e86e3b578e8774..5e7d289f088ec1c058609b01704ebdfab2ffe342 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 d53f5480f44bd8066b183a4899faf1138291f3d9..0ca1827111bd58c26a26db6191c20f24e3c2d090 100644 (file)
@@ -1 +1 @@
-3afffe7d10473461bfc0eff1d6c111fd
\ No newline at end of file
+95b0e5e1abcf9f574f717ae77805bba6
\ No newline at end of file
index 4f45cc7b01f7a0b1d9f6012ef7458b00ad05af0a..38cc409cbfabb7db95063b040e546053247a7371 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textProperties-expected.png and b/LayoutTests/svg/batik/text/textProperties-expected.png differ
index 344e6561565ef824adea5f6a3d03e84ff811104d..1f75191510c6a8c04b5ac62e81d27c2edcd2e7ff 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 e3d8a6ea5919c38430dcc98ee19a303705ebe651..1b710d83e4fc6ca71b23d4e5c32ae83bcb9957a1 100644 (file)
@@ -1 +1 @@
-d1d774c2e97e3ea838ae86fb4ab41748
\ No newline at end of file
+9274d52374ee3fc651bea64bb04299a6
\ No newline at end of file
index b5068e175197341aba1b98f80e9f9663a908497c..e7e267281c8536afafab55bb5d42008a2c6a92b4 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textProperties2-expected.png and b/LayoutTests/svg/batik/text/textProperties2-expected.png differ
index d268a0033e0756e51e3177a3c2d5dba27017ffad..cfd9ef85e3893d8393947aae8f4f7ca6afd90795 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 e00b6e02920b62b2e5b9cbcf1384c3d8d39087bf..d61faa6778d0631d3b650bde4e76833671e11b01 100644 (file)
@@ -1 +1 @@
-caf2559181dfad15602793d63a11acf5
\ No newline at end of file
+2a554f0e682e7c1f485877cd95d896af
\ No newline at end of file
index a7f444720515763fa77eb831315d053136abc427..1c37a3bc1674b2ab82355e9ad0e90704718dac2a 100644 (file)
Binary files a/LayoutTests/svg/batik/text/textStyles-expected.png and b/LayoutTests/svg/batik/text/textStyles-expected.png differ
index f1152bf17fa58bf3b416ff8c3547bbd4f6757014..76f0a413a843e69d54d3b2b7a94c200730d4d0c0 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 215733eb98f8fc66d3e5db1473dc3a3fc61c361c..b915f794047b6a0a753c9bed88f2f82deff67bd3 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 d2cf1fe6269f2af0762a107d8c54c0f0b7beed17..9f483c3d5bbe11eac92e774871049cd73831775e 100644 (file)
@@ -1 +1 @@
-8e6a70af163a7808d980a8bca7a6d172
\ No newline at end of file
+8e2b08be77371c6473a6e710b039afcd
\ No newline at end of file
index f11844354a9efc806c0920d82beef50cbd5bb47c..04e462bf9cc57df4e2bab9ef0e5d76f186f41c02 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 228c220c637754f28637f40db49e949f51cac98f..2a101beb4fc7ee3130aaba6cbfc26e98ef13ad37 100644 (file)
@@ -1 +1 @@
-f7f4170c359af0eec99a4faa9802b3eb
\ No newline at end of file
+e4b836e5d629495bd8522838c209fbb2
\ No newline at end of file
index 293c3d9e8efa1426b3db888f0fba7e0aae990b91..e1e26dba8e39deb3754ad0c4017392db28baa3f4 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 b37b4cb5817b4a3b25b29282b9bd88ac7aeaf97f..f3e6527d5cee7401749d074c76b4441c38290e16 100644 (file)
@@ -1 +1 @@
-2612ace66227159723eecb180408084d
\ No newline at end of file
+814ea9e4be11a502fd4ce559a856becb
\ No newline at end of file
index 53c12d5f9abdc54d750ca55ab08766ea109c16d4..bfb1a62b2d165ae30f443efac2a862b7762d0f23 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 0ed8d3813017914544446bfb246f335a4d16f18a..0e187f38b029e228112491bdb576f88660843504 100644 (file)
@@ -1 +1 @@
-8ca024cde0e7c366d222db40536e2623
\ No newline at end of file
+8b8c774b6f148d51babc94195bcc6823
\ No newline at end of file
index 541706ff47adf0d443b9149648b5137153d7fd40..29fe5a95bd5674fa37f155747408d939b833e114 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 52a969c4c7d7e7ba4ec181765952e79fe0097ba8..1c419521d4791d3dbab3368f70c326b55e2ae492 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 f78bb70260f982264530b47b7aee3eb1bef784ba..6cc5ff7c221ca7b22a404ad1e5e32bda72f69873 100644 (file)
@@ -1 +1 @@
-a1b292729346bd1ff093e4cf701a4605
\ No newline at end of file
+87afb739dd957b5d9778af35ef0309b6
\ No newline at end of file
index edd430ab76935cfbf419e6c7815a4311e5ca1833..30e78b5e9b72de526be1abc9ac6d465bc4fd9988 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 f5fa0ac3f9246088c7e5ab75fc700cf025302e1e..2bc72ff0f48541cf51d1d68c1b368ae0f2be5ccc 100644 (file)
@@ -1 +1 @@
-6daff68c0c5f3fd0c65078ab7453a771
\ No newline at end of file
+cc817a6d98771186f913bdd816627b9d
\ No newline at end of file
index c47b2dce3f1fa9c060b38264dbdf6cfd13ad877e..d6af84d1faadec2d9e6675c3a60ed156b669b861 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 0a06e2e8c7f8a559bf234171a92a7ecf99420c25..75cce72708d7c6e0e93692ae78c3084a3263a4db 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 9013cd082cd491882bbd41de81cff5002b7cf5db..525244e1bfb02fe1cc7bccf96a3972156083f2ee 100644 (file)
@@ -1 +1 @@
-ca079fd04e880db097a58362cf079194
\ No newline at end of file
+79db9993a99642bedaceea4613524645
\ No newline at end of file
index 7a98bf5d6f406d448a1e185cc6c0baed1a807f25..3de04dc87da8910216e3482367917fd17a933ad5 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 5613f1fbf9c4b6e005d378f4fcbb89fdbb643973..b7f21f2b13389d944645a704bb8735da2ba8b9e5 100644 (file)
@@ -1 +1 @@
-aef793787a3d51b18b46be9ff3bd88f4
\ No newline at end of file
+8134633414eba4f7ed52a725056b17a3
\ No newline at end of file
index ea9b6b68fc198b9fe43f38141f1568b7715e51e8..53eaddc697fcc6bddc5e7b48e13aeb7d5c3eb58e 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 8ede2e94ab5c7310f02bbe5f562307879754768e..8fe480470c92fbf300e242884a0da17a4c60fc17 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 33f5331203477b99b5e7f9ef8129c546d457b023..ba92a92daf78fb8d413c15a9e862330287be7518 100644 (file)
@@ -1 +1 @@
-56d459c01fa89880151a05ed45db409f
\ No newline at end of file
+c2bb0197ee5fdb34d25f2a45c3400c0a
\ No newline at end of file
index 1a549b5c1fadc7ca4ba82afb0e57fdefba36d517..a74dba770aaed278b48488dbd877d0ff4c94a6b3 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 45f424f109e84307762989607b642cfca4ad4110..5411ab61a53f98c6ffe94a62be053b220f15bb4c 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 642cbf78b3fc86eb1e1d03928f28c11a4e02fc18..fc3cba798185019b2d78ca4648539b59a8e27a25 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 addda1174d3642503eec8e57a9753fa5eac760b4..d22a30672cd6d29e3517820fbd5a92d3531f3351 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 2556c3bd6a0f77131a504cec08c2681e9bf5ee7a..46411c4205d3011f205c3bacbccf165ecb785632 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 1402c2dd2bbefc72544cd03de588ccbe02325c89..32d76c71480dbe024fbecf20a4b3fc9fe8de3ba8 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 2ba12805c78fccade5940f80457c45d020011031..a5de8a17ef0f8bd85a1de96f445a7e4e19f19e1e 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 5ebdfa01af22ebb437b48992b19708e75d945722..1c0900399129c337687d3ec82918836bea797262 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 b2638bea5b0309cbfad8b8238dac6bc4bdb0e6ff..1e261346624a21d25ad215012f1de829df9f4dbe 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 759c38b9cd0a7baf6034eb8868afa81021ffad7b..f5548e4200d9c7b2c1c7ca93e14afeef507100af 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());