Changeset 89311 in webkit


Ignore:
Timestamp:
Jun 20, 2011 4:29:57 PM (13 years ago)
Author:
kbr@google.com
Message:

2011-06-20 Kenneth Russell <kbr@google.com>

Unreviewed.

Rolled out r89233 and r89235 because of crashes in http/tests/misc/acid3.html on Snow Leopard and other platforms
https://bugs.webkit.org/show_bug.cgi?id=63022

  • platform/mac/svg/W3C-SVG-1.1-SE/coords-units-03-b-expected.png:
  • platform/mac/svg/W3C-SVG-1.1-SE/coords-units-03-b-expected.txt:
  • platform/mac/svg/W3C-SVG-1.1/fonts-glyph-03-t-expected.png:
  • platform/mac/svg/W3C-SVG-1.1/fonts-glyph-03-t-expected.txt:
  • platform/mac/svg/W3C-SVG-1.1/fonts-glyph-04-t-expected.png:
  • platform/mac/svg/W3C-SVG-1.1/fonts-glyph-04-t-expected.txt:
  • platform/mac/svg/W3C-SVG-1.1/pservers-grad-08-b-expected.png:
  • platform/mac/svg/W3C-SVG-1.1/pservers-grad-08-b-expected.txt:
  • platform/mac/svg/W3C-SVG-1.1/text-altglyph-01-b-expected.png:
  • platform/mac/svg/W3C-SVG-1.1/text-altglyph-01-b-expected.txt:
  • platform/mac/svg/batik/text/textEffect-expected.png:
  • platform/mac/svg/batik/text/textEffect-expected.txt:
  • platform/mac/svg/batik/text/textEffect3-expected.png:
  • platform/mac/svg/batik/text/textEffect3-expected.txt:
  • platform/mac/svg/batik/text/xmlSpace-expected.png:
  • platform/mac/svg/batik/text/xmlSpace-expected.txt:
  • platform/mac/svg/custom/glyph-selection-lang-attribute-expected.png:
  • platform/mac/svg/custom/glyph-selection-lang-attribute-expected.txt:
  • platform/mac/svg/custom/svg-fonts-fallback-expected.png: Removed.
  • platform/mac/svg/custom/svg-fonts-fallback-expected.txt: Removed.
  • platform/mac/svg/custom/svg-fonts-segmented-expected.png: Removed.
  • platform/mac/svg/custom/svg-fonts-segmented-expected.txt: Removed.
  • platform/mac/svg/custom/svg-fonts-with-no-element-reference-expected.png:
  • platform/mac/svg/custom/svg-fonts-with-no-element-reference-expected.txt:
  • platform/mac/svg/custom/svg-fonts-without-missing-glyph-expected.png:
  • platform/mac/svg/custom/svg-fonts-without-missing-glyph-expected.txt:
  • platform/mac/svg/custom/svg-fonts-word-spacing-expected.png: Removed.
  • platform/mac/svg/custom/svg-fonts-word-spacing-expected.txt: Removed.
  • platform/mac/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-preserveAlpha-attr-expected.png:
  • platform/mac/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-preserveAlpha-prop-expected.png:
  • platform/mac/svg/foreignObject/text-tref-02-b-expected.png:
  • platform/mac/svg/foreignObject/text-tref-02-b-expected.txt:
  • platform/mac/svg/text/text-altglyph-01-b-expected.png:
  • platform/mac/svg/text/text-altglyph-01-b-expected.txt:
  • platform/mac/svg/text/text-overflow-ellipsis-svgfont-expected.png: Removed.
  • platform/mac/svg/text/text-overflow-ellipsis-svgfont-expected.txt: Removed.
  • platform/mac/svg/text/text-text-04-t-expected.png:
  • platform/mac/svg/text/text-text-04-t-expected.txt:
  • platform/mac/svg/text/text-text-05-t-expected.png:
  • platform/mac/svg/text/text-text-05-t-expected.txt:
  • platform/mac/svg/text/text-text-06-t-expected.png:
  • platform/mac/svg/text/text-text-06-t-expected.txt:
  • platform/mac/svg/transforms/text-with-mask-with-svg-transform-expected.png:
  • platform/mac/svg/transforms/text-with-mask-with-svg-transform-expected.txt:
  • platform/mac/svg/wicd/test-rightsizing-b-expected.png:
  • platform/mac/svg/wicd/test-rightsizing-b-expected.txt:
  • svg/custom/resources/ABCFont.svg:
  • svg/custom/svg-fonts-fallback.xhtml: Removed.
  • svg/custom/svg-fonts-segmented.xhtml: Removed.
  • svg/custom/svg-fonts-word-spacing.html: Removed.
  • svg/text/select-text-svgfont-expected.txt: Removed.
  • svg/text/select-text-svgfont.html: Removed.
  • svg/text/text-overflow-ellipsis-svgfont.html: Removed.

2011-06-20 Kenneth Russell <kbr@google.com>

Unreviewed.

Rolled out r89233 and r89235 because of crashes in http/tests/misc/acid3.html on Snow Leopard and other platforms
https://bugs.webkit.org/show_bug.cgi?id=63022

  • wtf/Platform.h:

2011-06-20 Kenneth Russell <kbr@google.com>

Unreviewed.

Rolled out r89233 and r89235 because of crashes in http/tests/misc/acid3.html on Snow Leopard and other platforms
https://bugs.webkit.org/show_bug.cgi?id=63022

  • features.pri:
  • page/DOMWindow.idl:
  • platform/graphics/Font.cpp: (WebCore::Font::drawText): (WebCore::Font::drawEmphasisMarks): (WebCore::Font::width): (WebCore::Font::selectionRectForText): (WebCore::Font::offsetForPosition): (WebCore::Font::codePath):
  • platform/graphics/Font.h:
  • platform/graphics/FontFallbackList.h:
  • platform/graphics/FontFastPath.cpp: (WebCore::Font::glyphDataForCharacter): (WebCore::Font::getEmphasisMarkGlyphData): (WebCore::Font::drawGlyphBuffer):
  • platform/graphics/FontMetrics.h:
  • platform/graphics/GlyphPageTreeNode.cpp: (WebCore::fill):
  • platform/graphics/SVGGlyph.h: (WebCore::SVGGlyph::SVGGlyph): (WebCore::SVGGlyph::operator==):
  • platform/graphics/SimpleFontData.cpp: (WebCore::SimpleFontData::SimpleFontData):
  • platform/graphics/SimpleFontData.h: (WebCore::SimpleFontData::widthForGlyph):
  • platform/graphics/TextRun.h:
  • platform/graphics/WidthIterator.cpp: (WebCore::WidthIterator::advance):
  • platform/graphics/WidthIterator.h:
  • platform/graphics/chromium/SimpleFontDataChromiumWin.cpp: (WebCore::scaleEmToUnits):
  • platform/graphics/mac/SimpleFontDataMac.mm: (WebCore::scaleEmToUnits):
  • platform/graphics/win/SimpleFontDataCGWin.cpp: (WebCore::scaleEmToUnits):
  • rendering/svg/SVGTextMetrics.cpp: (WebCore::SVGTextMetrics::SVGTextMetrics): (WebCore::constructTextRun): (WebCore::SVGTextMetrics::measureCharacterRange):
  • rendering/svg/SVGTextMetrics.h:
  • rendering/svg/SVGTextRunRenderingContext.cpp: (WebCore::convertEmUnitToPixel): (WebCore::isVerticalWritingMode): (WebCore::firstParentRendererForNonTextNode): (WebCore::referencingRenderObjectFromRun): (WebCore::SVGTextRunWalker::SVGTextRunWalker): (WebCore::SVGTextRunWalker::walk): (WebCore::floatWidthUsingSVGFontCallback): (WebCore::floatWidthMissingGlyphCallback): (WebCore::floatWidthOfSubStringUsingSVGFont): (WebCore::SVGTextRunRenderingContext::floatWidthUsingSVGFont): (WebCore::drawTextUsingSVGFontCallback): (WebCore::drawTextMissingGlyphCallback): (WebCore::SVGTextRunRenderingContext::drawTextUsingSVGFont): (WebCore::SVGTextRunRenderingContext::selectionRectForTextUsingSVGFont): (WebCore::SVGTextRunRenderingContext::offsetForPositionForTextUsingSVGFont):
  • rendering/svg/SVGTextRunRenderingContext.h:
  • svg/SVGAltGlyphElement.cpp: (WebCore::SVGAltGlyphElement::glyphElement):
  • svg/SVGAltGlyphElement.h:
  • svg/SVGFontData.cpp: (WebCore::SVGFontData::initializeFontData):
  • svg/SVGFontData.h:
  • svg/SVGFontElement.cpp: (WebCore::SVGFontElement::registerLigaturesInGlyphCache): (WebCore::SVGFontElement::ensureGlyphCache):
  • svg/SVGGlyphMap.h: (WebCore::SVGGlyphMap::addGlyphByUnicodeString):
  • svg/svgtags.in:
Location:
trunk
Files:
14 deleted
71 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r89301 r89311  
     12011-06-20  Kenneth Russell  <kbr@google.com>
     2
     3        Unreviewed.
     4
     5        Rolled out r89233 and r89235 because of crashes in http/tests/misc/acid3.html on Snow Leopard and other platforms
     6        https://bugs.webkit.org/show_bug.cgi?id=63022
     7
     8        * platform/mac/svg/W3C-SVG-1.1-SE/coords-units-03-b-expected.png:
     9        * platform/mac/svg/W3C-SVG-1.1-SE/coords-units-03-b-expected.txt:
     10        * platform/mac/svg/W3C-SVG-1.1/fonts-glyph-03-t-expected.png:
     11        * platform/mac/svg/W3C-SVG-1.1/fonts-glyph-03-t-expected.txt:
     12        * platform/mac/svg/W3C-SVG-1.1/fonts-glyph-04-t-expected.png:
     13        * platform/mac/svg/W3C-SVG-1.1/fonts-glyph-04-t-expected.txt:
     14        * platform/mac/svg/W3C-SVG-1.1/pservers-grad-08-b-expected.png:
     15        * platform/mac/svg/W3C-SVG-1.1/pservers-grad-08-b-expected.txt:
     16        * platform/mac/svg/W3C-SVG-1.1/text-altglyph-01-b-expected.png:
     17        * platform/mac/svg/W3C-SVG-1.1/text-altglyph-01-b-expected.txt:
     18        * platform/mac/svg/batik/text/textEffect-expected.png:
     19        * platform/mac/svg/batik/text/textEffect-expected.txt:
     20        * platform/mac/svg/batik/text/textEffect3-expected.png:
     21        * platform/mac/svg/batik/text/textEffect3-expected.txt:
     22        * platform/mac/svg/batik/text/xmlSpace-expected.png:
     23        * platform/mac/svg/batik/text/xmlSpace-expected.txt:
     24        * platform/mac/svg/custom/glyph-selection-lang-attribute-expected.png:
     25        * platform/mac/svg/custom/glyph-selection-lang-attribute-expected.txt:
     26        * platform/mac/svg/custom/svg-fonts-fallback-expected.png: Removed.
     27        * platform/mac/svg/custom/svg-fonts-fallback-expected.txt: Removed.
     28        * platform/mac/svg/custom/svg-fonts-segmented-expected.png: Removed.
     29        * platform/mac/svg/custom/svg-fonts-segmented-expected.txt: Removed.
     30        * platform/mac/svg/custom/svg-fonts-with-no-element-reference-expected.png:
     31        * platform/mac/svg/custom/svg-fonts-with-no-element-reference-expected.txt:
     32        * platform/mac/svg/custom/svg-fonts-without-missing-glyph-expected.png:
     33        * platform/mac/svg/custom/svg-fonts-without-missing-glyph-expected.txt:
     34        * platform/mac/svg/custom/svg-fonts-word-spacing-expected.png: Removed.
     35        * platform/mac/svg/custom/svg-fonts-word-spacing-expected.txt: Removed.
     36        * platform/mac/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-preserveAlpha-attr-expected.png:
     37        * platform/mac/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-preserveAlpha-prop-expected.png:
     38        * platform/mac/svg/foreignObject/text-tref-02-b-expected.png:
     39        * platform/mac/svg/foreignObject/text-tref-02-b-expected.txt:
     40        * platform/mac/svg/text/text-altglyph-01-b-expected.png:
     41        * platform/mac/svg/text/text-altglyph-01-b-expected.txt:
     42        * platform/mac/svg/text/text-overflow-ellipsis-svgfont-expected.png: Removed.
     43        * platform/mac/svg/text/text-overflow-ellipsis-svgfont-expected.txt: Removed.
     44        * platform/mac/svg/text/text-text-04-t-expected.png:
     45        * platform/mac/svg/text/text-text-04-t-expected.txt:
     46        * platform/mac/svg/text/text-text-05-t-expected.png:
     47        * platform/mac/svg/text/text-text-05-t-expected.txt:
     48        * platform/mac/svg/text/text-text-06-t-expected.png:
     49        * platform/mac/svg/text/text-text-06-t-expected.txt:
     50        * platform/mac/svg/transforms/text-with-mask-with-svg-transform-expected.png:
     51        * platform/mac/svg/transforms/text-with-mask-with-svg-transform-expected.txt:
     52        * platform/mac/svg/wicd/test-rightsizing-b-expected.png:
     53        * platform/mac/svg/wicd/test-rightsizing-b-expected.txt:
     54        * svg/custom/resources/ABCFont.svg:
     55        * svg/custom/svg-fonts-fallback.xhtml: Removed.
     56        * svg/custom/svg-fonts-segmented.xhtml: Removed.
     57        * svg/custom/svg-fonts-word-spacing.html: Removed.
     58        * svg/text/select-text-svgfont-expected.txt: Removed.
     59        * svg/text/select-text-svgfont.html: Removed.
     60        * svg/text/text-overflow-ellipsis-svgfont.html: Removed.
     61
    1622011-06-20  Ryosuke Niwa  <rniwa@webkit.org>
    263
  • trunk/LayoutTests/platform/mac/svg/W3C-SVG-1.1-SE/coords-units-03-b-expected.txt

    r89233 r89311  
    1111        RenderSVGInlineText {#text} at (0,0) size 181x14
    1212          chunk 1 text run 1 at (125.00,20.00) startOffset 0 endOffset 35 width 181.00: "Initial viewport and CSS units test"
    13       RenderSVGContainer {g} at (20,67) size 386x196 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,60.00)}]
    14         RenderSVGText {text} at (20,7) size 22x14 contains 1 chunk(s)
    15           RenderSVGInlineText {#text} at (0,0) size 22x14
    16             chunk 1 text run 1 at (20.00,18.00) startOffset 0 endOffset 3 width 21.68: "200"
    17         RenderSVGText {text} at (230,9) size 176x14 contains 1 chunk(s)
    18           RenderSVGInlineText {#text} at (0,0) size 176x14
    19             chunk 1 text run 1 at (230.00,20.00) startOffset 0 endOffset 27 width 156.78: "User space units (no specif"
    20             chunk 1 text run 2 at (386.75,20.00) startOffset 27 endOffset 31 width 18.77: "ier)"
     13      RenderSVGContainer {g} at (20,67) size 391x196 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,60.00)}]
     14        RenderSVGText {text} at (20,7) size 23x14 contains 1 chunk(s)
     15          RenderSVGInlineText {#text} at (0,0) size 23x14
     16            chunk 1 text run 1 at (20.00,18.00) startOffset 0 endOffset 3 width 22.24: "200"
     17        RenderSVGText {text} at (230,9) size 181x14 contains 1 chunk(s)
     18          RenderSVGInlineText {#text} at (0,0) size 181x14
     19            chunk 1 text run 1 at (230.00,20.00) startOffset 0 endOffset 27 width 160.80: "User space units (no specif"
     20            chunk 1 text run 2 at (390.77,20.00) startOffset 27 endOffset 31 width 19.25: "ier)"
    2121        RenderSVGPath {rect} at (20,80) size 200x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=20.00] [width=200.00] [height=1.00]
    22         RenderSVGText {text} at (20,27) size 40x14 contains 1 chunk(s)
    23           RenderSVGInlineText {#text} at (0,0) size 40x14
    24             chunk 1 text run 1 at (20.00,38.00) startOffset 0 endOffset 6 width 39.03: "200 px"
    25         RenderSVGText {text} at (230,29) size 61x14 contains 1 chunk(s)
    26           RenderSVGInlineText {#text} at (0,0) size 61x14
    27             chunk 1 text run 1 at (230.00,40.00) startOffset 0 endOffset 3 width 18.06: "Pix"
    28             chunk 1 text run 2 at (247.68,40.00) startOffset 3 endOffset 11 width 42.61: "els (px)"
     22        RenderSVGText {text} at (20,27) size 41x14 contains 1 chunk(s)
     23          RenderSVGInlineText {#text} at (0,0) size 41x14
     24            chunk 1 text run 1 at (20.00,38.00) startOffset 0 endOffset 6 width 40.03: "200 px"
     25        RenderSVGText {text} at (230,29) size 62x14 contains 1 chunk(s)
     26          RenderSVGInlineText {#text} at (0,0) size 62x14
     27            chunk 1 text run 1 at (230.00,40.00) startOffset 0 endOffset 3 width 18.52: "Pix"
     28            chunk 1 text run 2 at (248.15,40.00) startOffset 3 endOffset 11 width 43.71: "els (px)"
    2929        RenderSVGPath {rect} at (20,100) size 200x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=40.00] [width=200.00] [height=1.00]
    30         RenderSVGText {text} at (20,47) size 187x14 contains 1 chunk(s)
    31           RenderSVGInlineText {#text} at (0,0) size 187x14
    32             chunk 1 text run 1 at (20.00,58.00) startOffset 0 endOffset 17 width 101.53: "20 em = 200 px (f"
    33             chunk 1 text run 2 at (121.40,58.00) startOffset 17 endOffset 27 width 60.33: "ont-size=1"
    34             chunk 1 text run 3 at (180.90,58.00) startOffset 27 endOffset 31 width 25.28: "0px)"
    35         RenderSVGText {text} at (230,49) size 144x14 contains 1 chunk(s)
    36           RenderSVGInlineText {#text} at (0,0) size 144x14
    37             chunk 1 text run 1 at (230.00,60.00) startOffset 0 endOffset 1 width 9.39: "R"
    38             chunk 1 text run 2 at (239.23,60.00) startOffset 1 endOffset 7 width 30.34: "elativ"
    39             chunk 1 text run 3 at (269.29,60.00) startOffset 7 endOffset 10 width 14.46: "e t"
    40             chunk 1 text run 4 at (283.58,60.00) startOffset 10 endOffset 13 width 14.46: "o f"
    41             chunk 1 text run 5 at (297.91,60.00) startOffset 13 endOffset 26 width 75.13: "ont size (em)"
     30        RenderSVGText {text} at (20,47) size 191x14 contains 1 chunk(s)
     31          RenderSVGInlineText {#text} at (0,0) size 191x14
     32            chunk 1 text run 1 at (20.00,58.00) startOffset 0 endOffset 17 width 104.13: "20 em = 200 px (f"
     33            chunk 1 text run 2 at (124.00,58.00) startOffset 17 endOffset 27 width 61.88: "ont-size=1"
     34            chunk 1 text run 3 at (185.05,58.00) startOffset 27 endOffset 31 width 25.93: "0px)"
     35        RenderSVGText {text} at (230,49) size 147x14 contains 1 chunk(s)
     36          RenderSVGInlineText {#text} at (0,0) size 147x14
     37            chunk 1 text run 1 at (230.00,60.00) startOffset 0 endOffset 1 width 9.63: "R"
     38            chunk 1 text run 2 at (239.47,60.00) startOffset 1 endOffset 7 width 31.12: "elativ"
     39            chunk 1 text run 3 at (270.31,60.00) startOffset 7 endOffset 10 width 14.83: "e t"
     40            chunk 1 text run 4 at (284.97,60.00) startOffset 10 endOffset 13 width 14.83: "o f"
     41            chunk 1 text run 5 at (299.67,60.00) startOffset 13 endOffset 26 width 77.05: "ont size (em)"
    4242        RenderSVGContainer {g} at (20,120) size 200x1
    4343          RenderSVGPath {rect} at (20,120) size 200x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=60.00] [width=200.00] [height=1.00]
    44         RenderSVGText {text} at (20,67) size 32x14 contains 1 chunk(s)
    45           RenderSVGInlineText {#text} at (0,0) size 32x14
    46             chunk 1 text run 1 at (20.00,78.00) startOffset 0 endOffset 4 width 25.30: "40 e"
    47             chunk 1 text run 2 at (44.94,78.00) startOffset 4 endOffset 5 width 6.50: "x"
    48         RenderSVGText {text} at (230,69) size 162x14 contains 1 chunk(s)
    49           RenderSVGInlineText {#text} at (0,0) size 162x14
    50             chunk 1 text run 1 at (230.00,80.00) startOffset 0 endOffset 1 width 9.39: "R"
    51             chunk 1 text run 2 at (239.23,80.00) startOffset 1 endOffset 7 width 30.34: "elativ"
    52             chunk 1 text run 3 at (269.29,80.00) startOffset 7 endOffset 10 width 14.46: "e t"
    53             chunk 1 text run 4 at (283.58,80.00) startOffset 10 endOffset 13 width 14.46: "o f"
    54             chunk 1 text run 5 at (297.91,80.00) startOffset 13 endOffset 28 width 83.10: "ont x-height (e"
    55             chunk 1 text run 6 at (380.64,80.00) startOffset 28 endOffset 30 width 10.83: "x)"
     44        RenderSVGText {text} at (20,67) size 33x14 contains 1 chunk(s)
     45          RenderSVGInlineText {#text} at (0,0) size 33x14
     46            chunk 1 text run 1 at (20.00,78.00) startOffset 0 endOffset 4 width 25.95: "40 e"
     47            chunk 1 text run 2 at (45.59,78.00) startOffset 4 endOffset 5 width 6.67: "x"
     48        RenderSVGText {text} at (230,69) size 166x14 contains 1 chunk(s)
     49          RenderSVGInlineText {#text} at (0,0) size 166x14
     50            chunk 1 text run 1 at (230.00,80.00) startOffset 0 endOffset 1 width 9.63: "R"
     51            chunk 1 text run 2 at (239.47,80.00) startOffset 1 endOffset 7 width 31.12: "elativ"
     52            chunk 1 text run 3 at (270.31,80.00) startOffset 7 endOffset 10 width 14.83: "e t"
     53            chunk 1 text run 4 at (284.97,80.00) startOffset 10 endOffset 13 width 14.83: "o f"
     54            chunk 1 text run 5 at (299.67,80.00) startOffset 13 endOffset 28 width 85.23: "ont x-height (e"
     55            chunk 1 text run 6 at (384.53,80.00) startOffset 28 endOffset 30 width 11.11: "x)"
    5656        RenderSVGContainer {g} at (20,140) size 200x1
    5757          RenderSVGPath {rect} at (20,140) size 200x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=80.00] [width=200.00] [height=1.00]
    58         RenderSVGText {text} at (20,87) size 96x14 contains 1 chunk(s)
    59           RenderSVGInlineText {#text} at (0,0) size 96x14
    60             chunk 1 text run 1 at (20.00,98.00) startOffset 0 endOffset 1 width 7.23: "4"
    61             chunk 1 text run 2 at (26.11,98.00) startOffset 1 endOffset 2 width 7.23: "1"
    62             chunk 1 text run 3 at (32.35,98.00) startOffset 2 endOffset 4 width 10.84: ".6"
    63             chunk 1 text run 4 at (42.79,98.00) startOffset 4 endOffset 15 width 72.63: "7% = 200 px"
    64         RenderSVGText {text} at (230,89) size 90x14 contains 1 chunk(s)
    65           RenderSVGInlineText {#text} at (0,0) size 90x14
    66             chunk 1 text run 1 at (230.00,100.00) startOffset 0 endOffset 1 width 8.67: "P"
    67             chunk 1 text run 2 at (238.26,100.00) startOffset 1 endOffset 3 width 11.56: "er"
    68             chunk 1 text run 3 at (249.73,100.00) startOffset 3 endOffset 7 width 24.57: "cent"
    69             chunk 1 text run 4 at (274.29,100.00) startOffset 7 endOffset 14 width 45.51: "age (%)"
     58        RenderSVGText {text} at (20,87) size 98x14 contains 1 chunk(s)
     59          RenderSVGInlineText {#text} at (0,0) size 98x14
     60            chunk 1 text run 1 at (20.00,98.00) startOffset 0 endOffset 1 width 7.41: "4"
     61            chunk 1 text run 2 at (26.29,98.00) startOffset 1 endOffset 2 width 7.41: "1"
     62            chunk 1 text run 3 at (32.72,98.00) startOffset 2 endOffset 4 width 11.12: ".6"
     63            chunk 1 text run 4 at (43.44,98.00) startOffset 4 endOffset 15 width 74.49: "7% = 200 px"
     64        RenderSVGText {text} at (230,89) size 93x14 contains 1 chunk(s)
     65          RenderSVGInlineText {#text} at (0,0) size 93x14
     66            chunk 1 text run 1 at (230.00,100.00) startOffset 0 endOffset 1 width 8.89: "P"
     67            chunk 1 text run 2 at (238.48,100.00) startOffset 1 endOffset 3 width 11.85: "er"
     68            chunk 1 text run 3 at (250.25,100.00) startOffset 3 endOffset 7 width 25.20: "cent"
     69            chunk 1 text run 4 at (275.44,100.00) startOffset 7 endOffset 14 width 46.68: "age (%)"
    7070        RenderSVGPath {rect} at (20,160) size 201x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=100.00] [width=200.02] [height=1.00]
    71         RenderSVGText {text} at (20,107) size 21x14 contains 1 chunk(s)
    72           RenderSVGInlineText {#text} at (0,0) size 21x14
    73             chunk 1 text run 1 at (20.00,118.00) startOffset 0 endOffset 4 width 20.96: "1 in"
    74         RenderSVGText {text} at (230,109) size 61x14 contains 1 chunk(s)
     71        RenderSVGText {text} at (20,107) size 22x14 contains 1 chunk(s)
     72          RenderSVGInlineText {#text} at (0,0) size 22x14
     73            chunk 1 text run 1 at (20.00,118.00) startOffset 0 endOffset 4 width 21.49: "1 in"
     74        RenderSVGText {text} at (230,109) size 63x14 contains 1 chunk(s)
     75          RenderSVGInlineText {#text} at (0,0) size 63x14
     76            chunk 1 text run 1 at (230.00,120.00) startOffset 0 endOffset 3 width 17.79: "Inc"
     77            chunk 1 text run 2 at (247.80,120.00) startOffset 3 endOffset 11 width 44.45: "hes (in)"
     78        RenderSVGPath {rect} at (20,180) size 96x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=120.00] [width=96.00] [height=1.00]
     79        RenderSVGText {text} at (20,127) size 85x14 contains 1 chunk(s)
     80          RenderSVGInlineText {#text} at (0,0) size 85x14
     81            chunk 1 text run 1 at (20.00,138.00) startOffset 0 endOffset 3 width 18.53: "2.5"
     82            chunk 1 text run 2 at (38.55,138.00) startOffset 3 endOffset 14 width 65.59: "4 cm = 1 in"
     83        RenderSVGText {text} at (230,129) size 102x14 contains 1 chunk(s)
     84          RenderSVGInlineText {#text} at (0,0) size 102x14
     85            chunk 1 text run 1 at (230.00,140.00) startOffset 0 endOffset 7 width 49.64: "Centime"
     86            chunk 1 text run 2 at (279.51,140.00) startOffset 7 endOffset 8 width 3.71: "t"
     87            chunk 1 text run 3 at (283.03,140.00) startOffset 8 endOffset 10 width 11.85: "er"
     88            chunk 1 text run 4 at (294.93,140.00) startOffset 10 endOffset 16 width 37.03: "s (cm)"
     89        RenderSVGPath {rect} at (20,200) size 96x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=140.00] [width=96.00] [height=1.00]
     90        RenderSVGText {text} at (20,147) size 89x14 contains 1 chunk(s)
     91          RenderSVGInlineText {#text} at (0,0) size 89x14
     92            chunk 1 text run 1 at (20.00,158.00) startOffset 0 endOffset 14 width 88.56: "25.4 mm = 1 in"
     93        RenderSVGText {text} at (230,149) size 99x14 contains 1 chunk(s)
     94          RenderSVGInlineText {#text} at (0,0) size 99x14
     95            chunk 1 text run 1 at (230.00,160.00) startOffset 0 endOffset 7 width 41.47: "Millime"
     96            chunk 1 text run 2 at (271.33,160.00) startOffset 7 endOffset 8 width 3.71: "t"
     97            chunk 1 text run 3 at (274.85,160.00) startOffset 8 endOffset 10 width 11.85: "er"
     98            chunk 1 text run 4 at (286.76,160.00) startOffset 10 endOffset 16 width 41.47: "s (mm)"
     99        RenderSVGPath {rect} at (20,220) size 96x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=160.00] [width=96.00] [height=1.00]
     100        RenderSVGText {text} at (20,167) size 63x14 contains 1 chunk(s)
     101          RenderSVGInlineText {#text} at (0,0) size 63x14
     102            chunk 1 text run 1 at (20.00,178.00) startOffset 0 endOffset 1 width 7.41: "7"
     103            chunk 1 text run 2 at (27.04,178.00) startOffset 1 endOffset 3 width 14.83: "2p"
     104            chunk 1 text run 3 at (41.81,178.00) startOffset 3 endOffset 11 width 40.40: "t = 1 in"
     105        RenderSVGText {text} at (230,169) size 61x14 contains 1 chunk(s)
    75106          RenderSVGInlineText {#text} at (0,0) size 61x14
    76             chunk 1 text run 1 at (230.00,120.00) startOffset 0 endOffset 3 width 17.34: "Inc"
    77             chunk 1 text run 2 at (247.36,120.00) startOffset 3 endOffset 11 width 43.34: "hes (in)"
    78         RenderSVGPath {rect} at (20,180) size 96x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=120.00] [width=96.00] [height=1.00]
    79         RenderSVGText {text} at (20,127) size 83x14 contains 1 chunk(s)
    80           RenderSVGInlineText {#text} at (0,0) size 83x14
    81             chunk 1 text run 1 at (20.00,138.00) startOffset 0 endOffset 3 width 18.07: "2.5"
    82             chunk 1 text run 2 at (38.08,138.00) startOffset 3 endOffset 14 width 63.95: "4 cm = 1 in"
    83         RenderSVGText {text} at (230,129) size 100x14 contains 1 chunk(s)
    84           RenderSVGInlineText {#text} at (0,0) size 100x14
    85             chunk 1 text run 1 at (230.00,140.00) startOffset 0 endOffset 7 width 48.40: "Centime"
    86             chunk 1 text run 2 at (278.27,140.00) startOffset 7 endOffset 8 width 3.61: "t"
    87             chunk 1 text run 3 at (281.69,140.00) startOffset 8 endOffset 10 width 11.56: "er"
    88             chunk 1 text run 4 at (293.30,140.00) startOffset 10 endOffset 16 width 36.10: "s (cm)"
    89         RenderSVGPath {rect} at (20,200) size 96x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=140.00] [width=96.00] [height=1.00]
    90         RenderSVGText {text} at (20,147) size 87x14 contains 1 chunk(s)
    91           RenderSVGInlineText {#text} at (0,0) size 87x14
    92             chunk 1 text run 1 at (20.00,158.00) startOffset 0 endOffset 14 width 86.35: "25.4 mm = 1 in"
    93         RenderSVGText {text} at (230,149) size 96x14 contains 1 chunk(s)
    94           RenderSVGInlineText {#text} at (0,0) size 96x14
    95             chunk 1 text run 1 at (230.00,160.00) startOffset 0 endOffset 7 width 40.43: "Millime"
    96             chunk 1 text run 2 at (270.30,160.00) startOffset 7 endOffset 8 width 3.61: "t"
    97             chunk 1 text run 3 at (273.72,160.00) startOffset 8 endOffset 10 width 11.56: "er"
    98             chunk 1 text run 4 at (285.33,160.00) startOffset 10 endOffset 16 width 40.43: "s (mm)"
    99         RenderSVGPath {rect} at (20,220) size 96x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=160.00] [width=96.00] [height=1.00]
    100         RenderSVGText {text} at (20,167) size 61x14 contains 1 chunk(s)
    101           RenderSVGInlineText {#text} at (0,0) size 61x14
    102             chunk 1 text run 1 at (20.00,178.00) startOffset 0 endOffset 1 width 7.23: "7"
    103             chunk 1 text run 2 at (26.85,178.00) startOffset 1 endOffset 3 width 14.46: "2p"
    104             chunk 1 text run 3 at (41.26,178.00) startOffset 3 endOffset 11 width 39.39: "t = 1 in"
    105         RenderSVGText {text} at (230,169) size 59x14 contains 1 chunk(s)
     107            chunk 1 text run 1 at (230.00,180.00) startOffset 0 endOffset 1 width 8.89: "P"
     108            chunk 1 text run 2 at (238.53,180.00) startOffset 1 endOffset 9 width 43.72: "oints (p"
     109            chunk 1 text run 3 at (282.20,180.00) startOffset 9 endOffset 11 width 8.15: "t)"
     110        RenderSVGPath {rect} at (20,240) size 96x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=180.00] [width=96.00] [height=1.00]
     111        RenderSVGText {text} at (20,187) size 59x14 contains 1 chunk(s)
    106112          RenderSVGInlineText {#text} at (0,0) size 59x14
    107             chunk 1 text run 1 at (230.00,180.00) startOffset 0 endOffset 1 width 8.67: "P"
    108             chunk 1 text run 2 at (238.31,180.00) startOffset 1 endOffset 9 width 42.63: "oints (p"
    109             chunk 1 text run 3 at (280.88,180.00) startOffset 9 endOffset 11 width 7.94: "t)"
    110         RenderSVGPath {rect} at (20,240) size 96x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=180.00] [width=96.00] [height=1.00]
    111         RenderSVGText {text} at (20,187) size 57x14 contains 1 chunk(s)
    112           RenderSVGInlineText {#text} at (0,0) size 57x14
    113             chunk 1 text run 1 at (20.00,198.00) startOffset 0 endOffset 10 width 56.73: "6pc = 1 in"
    114         RenderSVGText {text} at (230,189) size 58x14 contains 1 chunk(s)
    115           RenderSVGInlineText {#text} at (0,0) size 58x14
    116             chunk 1 text run 1 at (230.00,200.00) startOffset 0 endOffset 10 width 57.78: "Picas (pc)"
     113            chunk 1 text run 1 at (20.00,198.00) startOffset 0 endOffset 10 width 58.19: "6pc = 1 in"
     114        RenderSVGText {text} at (230,189) size 60x14 contains 1 chunk(s)
     115          RenderSVGInlineText {#text} at (0,0) size 60x14
     116            chunk 1 text run 1 at (230.00,200.00) startOffset 0 endOffset 10 width 59.27: "Picas (pc)"
    117117        RenderSVGPath {rect} at (20,260) size 96x1 [fill={[type=SOLID] [color=#000000]}] [x=20.00] [y=200.00] [width=96.00] [height=1.00]
    118118    RenderSVGContainer {g} at (10,314) size 227x33
  • trunk/LayoutTests/platform/mac/svg/W3C-SVG-1.1/fonts-glyph-03-t-expected.txt

    r89233 r89311  
    33layer at (0,0) size 480x360
    44  RenderSVGRoot {svg} at (0,0) size 480x360
    5     RenderSVGContainer {g} at (50,10) size 28x260
     5    RenderSVGContainer {g} at (50,10) size 25x260
    66      RenderSVGHiddenContainer {defs} at (0,0) size 0x0
    7       RenderSVGContainer {g} at (50,10) size 28x260
     7      RenderSVGContainer {g} at (50,10) size 25x260
    88        RenderSVGText {text} at (50,10) size 25x50 contains 1 chunk(s)
    99          RenderSVGInlineText {#text} at (0,0) size 25x50
     
    1515          RenderSVGInlineText {#text} at (0,0) size 25x50
    1616            chunk 1 text run 1 at (50.00,190.00) startOffset 0 endOffset 1 width 25.00: "a"
    17         RenderSVGText {text} at (50,220) size 28x50 contains 1 chunk(s)
    18           RenderSVGInlineText {#text} at (0,0) size 28x50
    19             chunk 1 text run 1 at (50.00,260.00) startOffset 0 endOffset 1 width 28.00: "a"
     17        RenderSVGText {text} at (50,220) size 25x50 contains 1 chunk(s)
     18          RenderSVGInlineText {#text} at (0,0) size 25x50
     19            chunk 1 text run 1 at (50.00,260.00) startOffset 0 endOffset 1 width 25.00: "a"
    2020    RenderSVGText {text} at (10,304) size 284x46 contains 1 chunk(s)
    2121      RenderSVGInlineText {#text} at (0,0) size 284x46
  • trunk/LayoutTests/platform/mac/svg/W3C-SVG-1.1/fonts-glyph-04-t-expected.txt

    r89233 r89311  
    33layer at (0,0) size 480x360
    44  RenderSVGRoot {svg} at (0,0) size 480x360
    5     RenderSVGContainer {g} at (100,60) size 61x150
     5    RenderSVGContainer {g} at (100,60) size 64x150
    66      RenderSVGHiddenContainer {defs} at (0,0) size 0x0
    7       RenderSVGText {text} at (100,60) size 61x50 contains 1 chunk(s)
    8         RenderSVGInlineText {#text} at (0,0) size 61x50
    9           chunk 1 text run 1 at (100.00,100.00) startOffset 0 endOffset 3 width 61.00: "ffl"
     7      RenderSVGText {text} at (100,60) size 64x50 contains 1 chunk(s)
     8        RenderSVGInlineText {#text} at (0,0) size 64x50
     9          chunk 1 text run 1 at (100.00,100.00) startOffset 0 endOffset 3 width 64.00: "ffl"
    1010      RenderSVGText {text} at (100,160) size 25x50 contains 1 chunk(s)
    1111        RenderSVGInlineText {#text} at (0,0) size 25x50
  • trunk/LayoutTests/platform/mac/svg/W3C-SVG-1.1/pservers-grad-08-b-expected.txt

    r89233 r89311  
    44  RenderSVGRoot {svg} at (0,0) size 480x360
    55    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
    6     RenderSVGContainer {g} at (17,33) size 451x222 [transform={m=((1.00,0.00)(0.00,1.50)) t=(0.00,0.00)}]
     6    RenderSVGContainer {g} at (17,33) size 450x222 [transform={m=((1.00,0.00)(0.00,1.50)) t=(0.00,0.00)}]
    77      RenderSVGResourceLinearGradient {linearGradient} [id="Gradient"] [gradientUnits=userSpaceOnUse] [start=(10,10)] [end=(440,10)]
    88        RenderSVGGradientStop {stop} [offset=0.00] [color=#0000FF]
    99        RenderSVGGradientStop {stop} [offset=1.00] [color=#FF0000]
    10       RenderSVGText {text} at (20,22) size 448x57 contains 1 chunk(s)
    11         RenderSVGInlineText {#text} at (0,0) size 448x57
    12           chunk 1 text run 1 at (20.00,70.00) startOffset 0 endOffset 16 width 447.91: "Gradient on fill"
     10      RenderSVGText {text} at (20,22) size 447x57 contains 1 chunk(s)
     11        RenderSVGInlineText {#text} at (0,0) size 447x57
     12          chunk 1 text run 1 at (20.00,70.00) startOffset 0 endOffset 16 width 446.28: "Gradient on fill"
    1313      RenderSVGText {text} at (20,121) size 430x46 contains 1 chunk(s)
    1414        RenderSVGInlineText {#text} at (0,0) size 430x46
    15           chunk 1 text run 1 at (20.00,160.00) startOffset 0 endOffset 18 width 429.20: "Gradient on stroke"
     15          chunk 1 text run 1 at (20.00,160.00) startOffset 0 endOffset 18 width 429.88: "Gradient on stroke"
    1616    RenderSVGText {text} at (40,117) size 342x36 contains 1 chunk(s)
    1717      RenderSVGInlineText {#text} at (0,0) size 342x36
  • trunk/LayoutTests/platform/mac/svg/W3C-SVG-1.1/text-altglyph-01-b-expected.txt

    r89233 r89311  
    1212      RenderSVGHiddenContainer {defs} at (0,0) size 0x0
    1313      RenderSVGContainer {g} at (45,125) size 398x165
    14         RenderSVGText {text} at (140,130) size 198x75 contains 1 chunk(s)
    15           RenderSVGTSpan {altGlyph} at (0,0) size 43x75
    16             RenderSVGInlineText {#text} at (0,0) size 43x75
    17               chunk 1 text run 1 at (140.00,190.00) startOffset 0 endOffset 1 width 43.00: "H"
     14        RenderSVGText {text} at (140,130) size 188x75 contains 1 chunk(s)
     15          RenderSVGTSpan {altGlyph} at (0,0) size 38x75
     16            RenderSVGInlineText {#text} at (0,0) size 38x75
     17              chunk 1 text run 1 at (140.00,190.00) startOffset 0 endOffset 1 width 37.50: "H"
    1818          RenderSVGInlineText {#text} at (0,0) size 0x0
    1919          RenderSVGTSpan {altGlyph} at (0,0) size 38x75
    20             RenderSVGInlineText {#text} at (43,0) size 38x75
    21               chunk 1 text run 1 at (183.00,190.00) startOffset 0 endOffset 1 width 37.50: "A"
    22           RenderSVGInlineText {#text} at (0,0) size 0x0
    23           RenderSVGTSpan {altGlyph} at (0,0) size 41x75
    24             RenderSVGInlineText {#text} at (80,0) size 41x75
    25               chunk 1 text run 1 at (220.50,190.00) startOffset 0 endOffset 1 width 40.00: "P"
    26           RenderSVGInlineText {#text} at (0,0) size 0x0
    27           RenderSVGTSpan {altGlyph} at (0,0) size 41x75
    28             RenderSVGInlineText {#text} at (120,0) size 41x75
    29               chunk 1 text run 1 at (260.50,190.00) startOffset 0 endOffset 1 width 40.00: "P"
     20            RenderSVGInlineText {#text} at (37,0) size 38x75
     21              chunk 1 text run 1 at (177.50,190.00) startOffset 0 endOffset 1 width 37.50: "A"
    3022          RenderSVGInlineText {#text} at (0,0) size 0x0
    3123          RenderSVGTSpan {altGlyph} at (0,0) size 38x75
    32             RenderSVGInlineText {#text} at (160,0) size 38x75
    33               chunk 1 text run 1 at (300.50,190.00) startOffset 0 endOffset 1 width 37.50: "Y"
     24            RenderSVGInlineText {#text} at (75,0) size 38x75
     25              chunk 1 text run 1 at (215.00,190.00) startOffset 0 endOffset 1 width 37.50: "P"
     26          RenderSVGInlineText {#text} at (0,0) size 0x0
     27          RenderSVGTSpan {altGlyph} at (0,0) size 38x75
     28            RenderSVGInlineText {#text} at (112,0) size 38x75
     29              chunk 1 text run 1 at (252.50,190.00) startOffset 0 endOffset 1 width 37.50: "P"
     30          RenderSVGInlineText {#text} at (0,0) size 0x0
     31          RenderSVGTSpan {altGlyph} at (0,0) size 38x75
     32            RenderSVGInlineText {#text} at (150,0) size 38x75
     33              chunk 1 text run 1 at (290.00,190.00) startOffset 0 endOffset 1 width 37.50: "Y"
    3434          RenderSVGInlineText {#text} at (0,0) size 0x0
    3535        RenderSVGText {text} at (50,210) size 113x75 contains 1 chunk(s)
  • trunk/LayoutTests/platform/mac/svg/batik/text/textEffect-expected.txt

    r89233 r89311  
    22  RenderView at (0,0) size 800x600
    33layer at (0,0) size 450x500
    4   RenderSVGRoot {svg} at (28,15) size 395x388
    5     RenderSVGContainer {g} at (28,15) size 395x388
     4  RenderSVGRoot {svg} at (28,15) size 396x388
     5    RenderSVGContainer {g} at (28,15) size 396x388
    66      RenderSVGText {text} at (136,15) size 178x19 contains 1 chunk(s)
    77        RenderSVGInlineText {#text} at (0,0) size 178x19
     
    2525        RenderSVGInlineText {#text} at (0,0) size 152x60
    2626          chunk 1 (middle anchor) text run 1 at (44.00,160.00) startOffset 0 endOffset 5 width 152.00: "BATIK"
    27       RenderSVGText {text} at (253,112) size 154x60 contains 1 chunk(s)
    28         RenderSVGInlineText {#text} at (0,0) size 154x60
    29           chunk 1 (middle anchor) text run 1 at (253.42,160.00) startOffset 0 endOffset 5 width 153.15: "BATIK"
     27      RenderSVGText {text} at (252,112) size 156x60 contains 1 chunk(s)
     28        RenderSVGInlineText {#text} at (0,0) size 156x60
     29          chunk 1 (middle anchor) text run 1 at (252.94,160.00) startOffset 0 endOffset 5 width 154.11: "BATIK"
    3030      RenderSVGText {text} at (44,212) size 152x60 contains 1 chunk(s)
    3131        RenderSVGInlineText {#text} at (0,0) size 152x60
    3232          chunk 1 (middle anchor) text run 1 at (44.00,260.00) startOffset 0 endOffset 5 width 152.00: "BATIK"
    33       RenderSVGText {text} at (253,212) size 154x60 contains 1 chunk(s)
    34         RenderSVGInlineText {#text} at (0,0) size 154x60
    35           chunk 1 (middle anchor) text run 1 at (253.42,260.00) startOffset 0 endOffset 5 width 153.15: "BATIK"
     33      RenderSVGText {text} at (252,212) size 156x60 contains 1 chunk(s)
     34        RenderSVGInlineText {#text} at (0,0) size 156x60
     35          chunk 1 (middle anchor) text run 1 at (252.94,260.00) startOffset 0 endOffset 5 width 154.11: "BATIK"
    3636      RenderSVGText {text} at (44,312) size 152x60 contains 1 chunk(s)
    3737        [filter="dropShadow"] RenderSVGResourceFilter {filter} at (28.80,306) size 182.40x72
     
    3939          [filter="dropShadow"] RenderSVGResourceFilter {filter} at (0,0) size 0x0
    4040          chunk 1 (middle anchor) text run 1 at (44.00,360.00) startOffset 0 endOffset 5 width 152.00: "BATIK"
    41       RenderSVGText {text} at (253,312) size 154x60 contains 1 chunk(s)
    42         [filter="dropShadow"] RenderSVGResourceFilter {filter} at (237.60,306) size 184.80x72
    43         RenderSVGInlineText {#text} at (0,0) size 154x60
     41      RenderSVGText {text} at (252,312) size 156x60 contains 1 chunk(s)
     42        [filter="dropShadow"] RenderSVGResourceFilter {filter} at (236.40,306) size 187.20x72
     43        RenderSVGInlineText {#text} at (0,0) size 156x60
    4444          [filter="dropShadow"] RenderSVGResourceFilter {filter} at (0,0) size 0x0
    45           chunk 1 (middle anchor) text run 1 at (253.42,360.00) startOffset 0 endOffset 5 width 153.15: "BATIK"
     45          chunk 1 (middle anchor) text run 1 at (252.94,360.00) startOffset 0 endOffset 5 width 154.11: "BATIK"
    4646      RenderSVGText {text} at (87,389) size 66x14 contains 1 chunk(s)
    4747        RenderSVGInlineText {#text} at (0,0) size 66x14
  • trunk/LayoutTests/platform/mac/svg/batik/text/textEffect3-expected.txt

    r89233 r89311  
    3939      RenderSVGText {text} at (263,92) size 148x80 contains 1 chunk(s)
    4040        RenderSVGInlineText {#text} at (0,20) size 37x60
    41           chunk 1 (middle anchor) text run 1 at (263.90,160.00) startOffset 0 endOffset 1 width 35.35: "B"
     41          chunk 1 (middle anchor) text run 1 at (263.69,160.00) startOffset 0 endOffset 1 width 35.57: "B"
    4242        RenderSVGTSpan {tspan} at (0,0) size 19x31
    4343          RenderSVGInlineText {#text} at (36,23) size 19x31
    44             chunk 1 (middle anchor) text run 1 at (299.25,140.00) startOffset 0 endOffset 1 width 18.01: "A"
     44            chunk 1 (middle anchor) text run 1 at (299.26,140.00) startOffset 0 endOffset 1 width 17.79: "A"
    4545        RenderSVGInlineText {#text} at (54,0) size 33x60
    46           chunk 1 (middle anchor) text run 1 at (317.26,140.00) startOffset 0 endOffset 1 width 32.37: "T"
     46          chunk 1 (middle anchor) text run 1 at (317.05,140.00) startOffset 0 endOffset 1 width 32.58: "T"
    4747        RenderSVGTSpan {tspan} at (0,0) size 12x46
    4848          RenderSVGInlineText {#text} at (86,11) size 12x46
    49             chunk 1 (middle anchor) text run 1 at (349.64,140.00) startOffset 0 endOffset 1 width 11.11: "I"
     49            chunk 1 (middle anchor) text run 1 at (349.63,140.00) startOffset 0 endOffset 1 width 11.11: "I"
    5050        RenderSVGTSpan {tspan} at (0,0) size 55x69
    5151          RenderSVGInlineText {#text} at (93,2) size 55x69
    52             chunk 1 (middle anchor) text run 1 at (360.75,140.00) startOffset 0 endOffset 1 width 35.35: "K"
     52            chunk 1 (middle anchor) text run 1 at (360.74,140.00) startOffset 0 endOffset 1 width 35.57: "K"
    5353        RenderSVGInlineText {#text} at (0,0) size 0x0
    5454      RenderSVGText {text} at (54,192) size 146x80 contains 1 chunk(s)
     
    6969      RenderSVGText {text} at (263,192) size 148x80 contains 1 chunk(s)
    7070        RenderSVGInlineText {#text} at (0,20) size 37x60
    71           chunk 1 (middle anchor) text run 1 at (263.90,260.00) startOffset 0 endOffset 1 width 35.35: "B"
     71          chunk 1 (middle anchor) text run 1 at (263.69,260.00) startOffset 0 endOffset 1 width 35.57: "B"
    7272        RenderSVGTSpan {tspan} at (0,0) size 19x31
    7373          RenderSVGInlineText {#text} at (36,23) size 19x31
    74             chunk 1 (middle anchor) text run 1 at (299.25,240.00) startOffset 0 endOffset 1 width 18.01: "A"
     74            chunk 1 (middle anchor) text run 1 at (299.26,240.00) startOffset 0 endOffset 1 width 17.79: "A"
    7575        RenderSVGInlineText {#text} at (54,0) size 33x60
    76           chunk 1 (middle anchor) text run 1 at (317.26,240.00) startOffset 0 endOffset 1 width 32.37: "T"
     76          chunk 1 (middle anchor) text run 1 at (317.05,240.00) startOffset 0 endOffset 1 width 32.58: "T"
    7777        RenderSVGTSpan {tspan} at (0,0) size 12x46
    7878          RenderSVGInlineText {#text} at (86,11) size 12x46
    79             chunk 1 (middle anchor) text run 1 at (349.64,240.00) startOffset 0 endOffset 1 width 11.11: "I"
     79            chunk 1 (middle anchor) text run 1 at (349.63,240.00) startOffset 0 endOffset 1 width 11.11: "I"
    8080        RenderSVGTSpan {tspan} at (0,0) size 55x69
    8181          RenderSVGInlineText {#text} at (93,2) size 55x69
    82             chunk 1 (middle anchor) text run 1 at (360.75,240.00) startOffset 0 endOffset 1 width 35.35: "K"
     82            chunk 1 (middle anchor) text run 1 at (360.74,240.00) startOffset 0 endOffset 1 width 35.57: "K"
    8383        RenderSVGInlineText {#text} at (0,0) size 0x0
    8484      RenderSVGText {text} at (54,292) size 146x80 contains 1 chunk(s)
     
    105105        RenderSVGInlineText {#text} at (0,20) size 37x60
    106106          [filter="dropShadow"] RenderSVGResourceFilter {filter} at (0,0) size 0x0
    107           chunk 1 (middle anchor) text run 1 at (263.90,360.00) startOffset 0 endOffset 1 width 35.35: "B"
     107          chunk 1 (middle anchor) text run 1 at (263.69,360.00) startOffset 0 endOffset 1 width 35.57: "B"
    108108        RenderSVGTSpan {tspan} at (0,0) size 19x31
    109109          RenderSVGInlineText {#text} at (36,23) size 19x31
    110             chunk 1 (middle anchor) text run 1 at (299.25,340.00) startOffset 0 endOffset 1 width 18.01: "A"
     110            chunk 1 (middle anchor) text run 1 at (299.26,340.00) startOffset 0 endOffset 1 width 17.79: "A"
    111111        RenderSVGInlineText {#text} at (54,0) size 33x60
    112112          [filter="dropShadow"] RenderSVGResourceFilter {filter} at (0,0) size 0x0
    113           chunk 1 (middle anchor) text run 1 at (317.26,340.00) startOffset 0 endOffset 1 width 32.37: "T"
     113          chunk 1 (middle anchor) text run 1 at (317.05,340.00) startOffset 0 endOffset 1 width 32.58: "T"
    114114        RenderSVGTSpan {tspan} at (0,0) size 12x46
    115115          RenderSVGInlineText {#text} at (86,11) size 12x46
    116             chunk 1 (middle anchor) text run 1 at (349.64,340.00) startOffset 0 endOffset 1 width 11.11: "I"
     116            chunk 1 (middle anchor) text run 1 at (349.63,340.00) startOffset 0 endOffset 1 width 11.11: "I"
    117117        RenderSVGTSpan {tspan} at (0,0) size 55x69
    118118          RenderSVGInlineText {#text} at (93,2) size 55x69
    119             chunk 1 (middle anchor) text run 1 at (360.75,340.00) startOffset 0 endOffset 1 width 35.35: "K"
     119            chunk 1 (middle anchor) text run 1 at (360.74,340.00) startOffset 0 endOffset 1 width 35.57: "K"
    120120        RenderSVGInlineText {#text} at (0,0) size 0x0
    121121          [filter="dropShadow"] RenderSVGResourceFilter {filter} at (0,0) size 0x0
  • trunk/LayoutTests/platform/mac/svg/batik/text/xmlSpace-expected.txt

    r89233 r89311  
    77        chunk 1 (middle anchor) text run 1 at (130.00,40.00) startOffset 0 endOffset 26 width 190.00: "Test of xml:space handling"
    88    RenderSVGContainer {g} at (10,55) size 435x325
    9       RenderSVGText {text} at (10,55) size 38x25 contains 1 chunk(s)
    10         RenderSVGInlineText {#text} at (0,0) size 38x25
    11           chunk 1 text run 1 at (10.00,75.00) startOffset 0 endOffset 2 width 25.00: "X "
    12           chunk 1 text run 1 at (35.00,75.00) startOffset 0 endOffset 1 width 13.00: "X"
     9      RenderSVGText {text} at (10,55) size 36x25 contains 1 chunk(s)
     10        RenderSVGInlineText {#text} at (0,0) size 36x25
     11          chunk 1 text run 1 at (10.00,75.00) startOffset 0 endOffset 2 width 24.00: "X "
     12          chunk 1 text run 1 at (34.00,75.00) startOffset 0 endOffset 1 width 12.00: "X"
    1313      RenderSVGText {text} at (120,67) size 85x10 contains 1 chunk(s)
    1414        RenderSVGInlineText {#text} at (0,0) size 85x10
    1515          chunk 1 text run 1 at (120.00,75.00) startOffset 0 endOffset 17 width 85.00: "no xml:space attr"
    16       RenderSVGText {text} at (10,80) size 38x25 contains 1 chunk(s)
    17         RenderSVGInlineText {#text} at (0,0) size 38x25
    18           chunk 1 text run 1 at (10.00,100.00) startOffset 0 endOffset 2 width 25.00: "X "
    19           chunk 1 text run 1 at (35.00,100.00) startOffset 0 endOffset 1 width 13.00: "X"
     16      RenderSVGText {text} at (10,80) size 36x25 contains 1 chunk(s)
     17        RenderSVGInlineText {#text} at (0,0) size 36x25
     18          chunk 1 text run 1 at (10.00,100.00) startOffset 0 endOffset 2 width 24.00: "X "
     19          chunk 1 text run 1 at (34.00,100.00) startOffset 0 endOffset 1 width 12.00: "X"
    2020      RenderSVGText {text} at (120,92) size 95x10 contains 1 chunk(s)
    2121        RenderSVGInlineText {#text} at (0,0) size 95x10
    2222          chunk 1 text run 1 at (120.00,100.00) startOffset 0 endOffset 19 width 95.00: "xml:space=\"default\""
    23       RenderSVGText {text} at (10,130) size 98x25 contains 1 chunk(s)
    24         RenderSVGInlineText {#text} at (0,0) size 98x25
    25           chunk 1 text run 1 at (10.00,150.00) startOffset 0 endOffset 8 width 98.00: "  X  X  "
     23      RenderSVGText {text} at (10,130) size 96x25 contains 1 chunk(s)
     24        RenderSVGInlineText {#text} at (0,0) size 96x25
     25          chunk 1 text run 1 at (10.00,150.00) startOffset 0 endOffset 8 width 96.00: "  X  X  "
    2626        RenderSVGTSpan {tspan} at (0,0) size 0x0
    2727      RenderSVGText {text} at (120,132) size 95x20 contains 1 chunk(s)
     
    3131          RenderSVGInlineText {#text} at (0,10) size 95x10
    3232            chunk 1 text run 1 at (120.00,149.60) startOffset 0 endOffset 19 width 95.00: "xml:space=\"default\""
    33       RenderSVGText {text} at (10,155) size 74x25 contains 1 chunk(s)
    34         RenderSVGInlineText {#text} at (0,0) size 74x25
    35           chunk 1 text run 1 at (10.00,175.00) startOffset 0 endOffset 6 width 74.00: "  X  X"
     33      RenderSVGText {text} at (10,155) size 72x25 contains 1 chunk(s)
     34        RenderSVGInlineText {#text} at (0,0) size 72x25
     35          chunk 1 text run 1 at (10.00,175.00) startOffset 0 endOffset 6 width 72.00: "  X  X"
    3636        RenderSVGTSpan {tspan} at (0,0) size 0x0
    3737          RenderSVGInlineText {#text} at (0,0) size 0x0
     
    4242          RenderSVGInlineText {#text} at (0,10) size 95x10
    4343            chunk 1 text run 1 at (120.00,174.60) startOffset 0 endOffset 19 width 95.00: "xml:space=\"default\""
    44       RenderSVGText {text} at (10,180) size 86x25 contains 1 chunk(s)
    45         RenderSVGInlineText {#text} at (0,0) size 86x25
    46           chunk 1 text run 1 at (10.00,200.00) startOffset 0 endOffset 7 width 86.00: "  X  X "
     44      RenderSVGText {text} at (10,180) size 84x25 contains 1 chunk(s)
     45        RenderSVGInlineText {#text} at (0,0) size 84x25
     46          chunk 1 text run 1 at (10.00,200.00) startOffset 0 endOffset 7 width 84.00: "  X  X "
    4747        RenderSVGTSpan {tspan} at (0,0) size 0x0
    4848          RenderSVGInlineText {#text} at (-10,-180) size 0x0
     
    5353          RenderSVGInlineText {#text} at (0,10) size 95x10
    5454            chunk 1 text run 1 at (120.00,199.60) startOffset 0 endOffset 19 width 95.00: "xml:space=\"default\""
    55       RenderSVGText {text} at (10,205) size 86x25 contains 1 chunk(s)
     55      RenderSVGText {text} at (10,205) size 84x25 contains 1 chunk(s)
    5656        RenderSVGTSpan {tspan} at (0,0) size 0x0
    5757          RenderSVGInlineText {#text} at (0,0) size 0x0
    58         RenderSVGInlineText {#text} at (0,0) size 86x25
    59           chunk 1 text run 1 at (10.00,225.00) startOffset 0 endOffset 7 width 86.00: " X  X  "
     58        RenderSVGInlineText {#text} at (0,0) size 84x25
     59          chunk 1 text run 1 at (10.00,225.00) startOffset 0 endOffset 7 width 84.00: " X  X  "
    6060      RenderSVGText {text} at (120,207) size 95x20 contains 1 chunk(s)
    6161        RenderSVGInlineText {#text} at (0,0) size 60x10
     
    6464          RenderSVGInlineText {#text} at (0,10) size 95x10
    6565            chunk 1 text run 1 at (120.00,224.60) startOffset 0 endOffset 19 width 95.00: "xml:space=\"default\""
    66       RenderSVGText {text} at (10,230) size 86x25 contains 1 chunk(s)
     66      RenderSVGText {text} at (10,230) size 84x25 contains 1 chunk(s)
    6767        RenderSVGInlineText {#text} at (0,0) size 12x25
    6868          chunk 1 text run 1 at (10.00,250.00) startOffset 0 endOffset 1 width 12.00: " "
    6969        RenderSVGTSpan {tspan} at (0,0) size 0x0
    7070          RenderSVGInlineText {#text} at (-10,-230) size 0x0
    71         RenderSVGInlineText {#text} at (12,0) size 74x25
    72           chunk 1 text run 1 at (22.00,250.00) startOffset 0 endOffset 6 width 74.00: "X  X  "
     71        RenderSVGInlineText {#text} at (12,0) size 72x25
     72          chunk 1 text run 1 at (22.00,250.00) startOffset 0 endOffset 6 width 72.00: "X  X  "
    7373      RenderSVGText {text} at (120,232) size 95x20 contains 1 chunk(s)
    7474        RenderSVGInlineText {#text} at (0,0) size 85x10
     
    7777          RenderSVGInlineText {#text} at (0,10) size 95x10
    7878            chunk 1 text run 1 at (120.00,249.60) startOffset 0 endOffset 19 width 95.00: "xml:space=\"default\""
    79       RenderSVGText {text} at (10,255) size 98x25 contains 1 chunk(s)
    80         RenderSVGInlineText {#text} at (0,0) size 37x25
    81           chunk 1 text run 1 at (10.00,275.00) startOffset 0 endOffset 3 width 37.00: "  X"
    82         RenderSVGTSpan {tspan} at (0,0) size 12x25
    83           RenderSVGInlineText {#text} at (37,0) size 12x25
    84             chunk 1 text run 1 at (47.00,275.00) startOffset 0 endOffset 1 width 12.00: " "
    85         RenderSVGInlineText {#text} at (49,0) size 49x25
    86           chunk 1 text run 1 at (59.00,275.00) startOffset 0 endOffset 4 width 49.00: " X  "
     79      RenderSVGText {text} at (10,255) size 96x25 contains 1 chunk(s)
     80        RenderSVGInlineText {#text} at (0,0) size 36x25
     81          chunk 1 text run 1 at (10.00,275.00) startOffset 0 endOffset 3 width 36.00: "  X"
     82        RenderSVGTSpan {tspan} at (0,0) size 12x25
     83          RenderSVGInlineText {#text} at (36,0) size 12x25
     84            chunk 1 text run 1 at (46.00,275.00) startOffset 0 endOffset 1 width 12.00: " "
     85        RenderSVGInlineText {#text} at (48,0) size 48x25
     86          chunk 1 text run 1 at (58.00,275.00) startOffset 0 endOffset 4 width 48.00: " X  "
    8787      RenderSVGText {text} at (120,257) size 95x20 contains 1 chunk(s)
    8888        RenderSVGInlineText {#text} at (0,0) size 95x10
     
    9191          RenderSVGInlineText {#text} at (0,10) size 95x10
    9292            chunk 1 text run 1 at (120.00,274.60) startOffset 0 endOffset 19 width 95.00: "xml:space=\"default\""
    93       RenderSVGText {text} at (10,280) size 86x25 contains 1 chunk(s)
    94         RenderSVGInlineText {#text} at (0,0) size 49x25
    95           chunk 1 text run 1 at (10.00,300.00) startOffset 0 endOffset 4 width 49.00: "  X "
     93      RenderSVGText {text} at (10,280) size 84x25 contains 1 chunk(s)
     94        RenderSVGInlineText {#text} at (0,0) size 48x25
     95          chunk 1 text run 1 at (10.00,300.00) startOffset 0 endOffset 4 width 48.00: "  X "
    9696        RenderSVGTSpan {tspan} at (0,0) size 0x0
    9797          RenderSVGInlineText {#text} at (-10,-280) size 0x0
    98         RenderSVGInlineText {#text} at (49,0) size 37x25
    99           chunk 1 text run 1 at (59.00,300.00) startOffset 0 endOffset 3 width 37.00: "X  "
     98        RenderSVGInlineText {#text} at (48,0) size 36x25
     99          chunk 1 text run 1 at (58.00,300.00) startOffset 0 endOffset 3 width 36.00: "X  "
    100100      RenderSVGText {text} at (120,282) size 95x20 contains 1 chunk(s)
    101101        RenderSVGInlineText {#text} at (0,0) size 85x10
     
    104104          RenderSVGInlineText {#text} at (0,10) size 95x10
    105105            chunk 1 text run 1 at (120.00,299.60) startOffset 0 endOffset 19 width 95.00: "xml:space=\"default\""
    106       RenderSVGText {text} at (10,305) size 98x25 contains 1 chunk(s)
     106      RenderSVGText {text} at (10,305) size 96x25 contains 1 chunk(s)
    107107        RenderSVGInlineText {#text} at (0,0) size 12x25
    108108          chunk 1 text run 1 at (10.00,325.00) startOffset 0 endOffset 1 width 12.00: " "
    109         RenderSVGInlineText {#text} at (12,0) size 86x25
    110           chunk 1 text run 1 at (22.00,325.00) startOffset 0 endOffset 7 width 86.00: " X  X  "
     109        RenderSVGInlineText {#text} at (12,0) size 84x25
     110          chunk 1 text run 1 at (22.00,325.00) startOffset 0 endOffset 7 width 84.00: " X  X  "
    111111      RenderSVGText {text} at (120,307) size 80x20 contains 1 chunk(s)
    112112        RenderSVGInlineText {#text} at (0,0) size 80x10
     
    115115          RenderSVGInlineText {#text} at (0,10) size 25x10
    116116            chunk 1 text run 1 at (120.00,324.60) startOffset 0 endOffset 5 width 25.00: "start"
    117       RenderSVGText {text} at (10,330) size 98x25 contains 1 chunk(s)
    118         RenderSVGInlineText {#text} at (0,0) size 49x25
    119           chunk 1 text run 1 at (10.00,350.00) startOffset 0 endOffset 4 width 49.00: "  X "
    120         RenderSVGInlineText {#text} at (49,0) size 49x25
    121           chunk 1 text run 1 at (59.00,350.00) startOffset 0 endOffset 4 width 49.00: " X  "
     117      RenderSVGText {text} at (10,330) size 96x25 contains 1 chunk(s)
     118        RenderSVGInlineText {#text} at (0,0) size 48x25
     119          chunk 1 text run 1 at (10.00,350.00) startOffset 0 endOffset 4 width 48.00: "  X "
     120        RenderSVGInlineText {#text} at (48,0) size 48x25
     121          chunk 1 text run 1 at (58.00,350.00) startOffset 0 endOffset 4 width 48.00: " X  "
    122122      RenderSVGText {text} at (120,332) size 80x20 contains 1 chunk(s)
    123123        RenderSVGInlineText {#text} at (0,0) size 80x10
     
    126126          RenderSVGInlineText {#text} at (0,10) size 30x10
    127127            chunk 1 text run 1 at (120.00,349.60) startOffset 0 endOffset 6 width 30.00: "middle"
    128       RenderSVGText {text} at (10,355) size 98x25 contains 1 chunk(s)
    129         RenderSVGInlineText {#text} at (0,0) size 86x25
    130           chunk 1 text run 1 at (10.00,375.00) startOffset 0 endOffset 7 width 86.00: "  X  X "
    131         RenderSVGInlineText {#text} at (86,0) size 12x25
    132           chunk 1 text run 1 at (96.00,375.00) startOffset 0 endOffset 1 width 12.00: " "
     128      RenderSVGText {text} at (10,355) size 96x25 contains 1 chunk(s)
     129        RenderSVGInlineText {#text} at (0,0) size 84x25
     130          chunk 1 text run 1 at (10.00,375.00) startOffset 0 endOffset 7 width 84.00: "  X  X "
     131        RenderSVGInlineText {#text} at (84,0) size 12x25
     132          chunk 1 text run 1 at (94.00,375.00) startOffset 0 endOffset 1 width 12.00: " "
    133133      RenderSVGText {text} at (120,357) size 80x20 contains 1 chunk(s)
    134134        RenderSVGInlineText {#text} at (0,0) size 80x10
     
    137137          RenderSVGInlineText {#text} at (0,10) size 15x10
    138138            chunk 1 text run 1 at (120.00,374.60) startOffset 0 endOffset 3 width 15.00: "end"
    139       RenderSVGText {text} at (235,80) size 98x25 contains 1 chunk(s)
    140         RenderSVGInlineText {#text} at (0,0) size 98x25
    141           chunk 1 text run 1 at (235.00,100.00) startOffset 0 endOffset 8 width 98.00: "  X  X  "
     139      RenderSVGText {text} at (235,80) size 96x25 contains 1 chunk(s)
     140        RenderSVGInlineText {#text} at (0,0) size 96x25
     141          chunk 1 text run 1 at (235.00,100.00) startOffset 0 endOffset 8 width 96.00: "  X  X  "
    142142      RenderSVGText {text} at (345,92) size 100x10 contains 1 chunk(s)
    143143        RenderSVGInlineText {#text} at (0,0) size 100x10
    144144          chunk 1 text run 1 at (345.00,100.00) startOffset 0 endOffset 20 width 100.00: "xml:space=\"preserve\""
    145       RenderSVGText {text} at (235,130) size 38x25 contains 1 chunk(s)
    146         RenderSVGInlineText {#text} at (0,0) size 38x25
    147           chunk 1 text run 1 at (235.00,150.00) startOffset 0 endOffset 2 width 25.00: "X "
    148           chunk 1 text run 1 at (260.00,150.00) startOffset 0 endOffset 1 width 13.00: "X"
     145      RenderSVGText {text} at (235,130) size 36x25 contains 1 chunk(s)
     146        RenderSVGInlineText {#text} at (0,0) size 36x25
     147          chunk 1 text run 1 at (235.00,150.00) startOffset 0 endOffset 2 width 24.00: "X "
     148          chunk 1 text run 1 at (259.00,150.00) startOffset 0 endOffset 1 width 12.00: "X"
    149149        RenderSVGTSpan {tspan} at (0,0) size 0x0
    150150      RenderSVGText {text} at (345,132) size 100x20 contains 1 chunk(s)
     
    154154          RenderSVGInlineText {#text} at (0,10) size 100x10
    155155            chunk 1 text run 1 at (345.00,149.60) startOffset 0 endOffset 20 width 100.00: "xml:space=\"preserve\""
    156       RenderSVGText {text} at (235,155) size 62x25 contains 1 chunk(s)
    157         RenderSVGInlineText {#text} at (0,0) size 38x25
    158           chunk 1 text run 1 at (235.00,175.00) startOffset 0 endOffset 2 width 25.00: "X "
    159           chunk 1 text run 1 at (260.00,175.00) startOffset 0 endOffset 1 width 13.00: "X"
     156      RenderSVGText {text} at (235,155) size 60x25 contains 1 chunk(s)
     157        RenderSVGInlineText {#text} at (0,0) size 36x25
     158          chunk 1 text run 1 at (235.00,175.00) startOffset 0 endOffset 2 width 24.00: "X "
     159          chunk 1 text run 1 at (259.00,175.00) startOffset 0 endOffset 1 width 12.00: "X"
    160160        RenderSVGTSpan {tspan} at (0,0) size 24x25
    161           RenderSVGInlineText {#text} at (38,0) size 24x25
    162             chunk 1 text run 1 at (273.00,175.00) startOffset 0 endOffset 2 width 24.00: "  "
     161          RenderSVGInlineText {#text} at (36,0) size 24x25
     162            chunk 1 text run 1 at (271.00,175.00) startOffset 0 endOffset 2 width 24.00: "  "
    163163      RenderSVGText {text} at (345,157) size 100x20 contains 1 chunk(s)
    164164        RenderSVGInlineText {#text} at (0,0) size 75x10
     
    167167          RenderSVGInlineText {#text} at (0,10) size 100x10
    168168            chunk 1 text run 1 at (345.00,174.60) startOffset 0 endOffset 20 width 100.00: "xml:space=\"preserve\""
    169       RenderSVGText {text} at (235,180) size 62x25 contains 1 chunk(s)
    170         RenderSVGInlineText {#text} at (0,0) size 50x25
    171           chunk 1 text run 1 at (235.00,200.00) startOffset 0 endOffset 2 width 25.00: "X "
    172           chunk 1 text run 1 at (260.00,200.00) startOffset 0 endOffset 2 width 25.00: "X "
    173         RenderSVGTSpan {tspan} at (0,0) size 12x25
    174           RenderSVGInlineText {#text} at (50,0) size 12x25
    175             chunk 1 text run 1 at (285.00,200.00) startOffset 0 endOffset 1 width 12.00: " "
     169      RenderSVGText {text} at (235,180) size 60x25 contains 1 chunk(s)
     170        RenderSVGInlineText {#text} at (0,0) size 48x25
     171          chunk 1 text run 1 at (235.00,200.00) startOffset 0 endOffset 2 width 24.00: "X "
     172          chunk 1 text run 1 at (259.00,200.00) startOffset 0 endOffset 2 width 24.00: "X "
     173        RenderSVGTSpan {tspan} at (0,0) size 12x25
     174          RenderSVGInlineText {#text} at (48,0) size 12x25
     175            chunk 1 text run 1 at (283.00,200.00) startOffset 0 endOffset 1 width 12.00: " "
    176176      RenderSVGText {text} at (345,182) size 100x20 contains 1 chunk(s)
    177177        RenderSVGInlineText {#text} at (0,0) size 50x10
     
    180180          RenderSVGInlineText {#text} at (0,10) size 100x10
    181181            chunk 1 text run 1 at (345.00,199.60) startOffset 0 endOffset 20 width 100.00: "xml:space=\"preserve\""
    182       RenderSVGText {text} at (235,205) size 50x25 contains 1 chunk(s)
     182      RenderSVGText {text} at (235,205) size 48x25 contains 1 chunk(s)
    183183        RenderSVGTSpan {tspan} at (0,0) size 12x25
    184184          RenderSVGInlineText {#text} at (0,0) size 12x25
    185185            chunk 1 text run 1 at (235.00,225.00) startOffset 0 endOffset 1 width 12.00: " "
    186         RenderSVGInlineText {#text} at (12,0) size 38x25
    187           chunk 1 text run 1 at (247.00,225.00) startOffset 1 endOffset 3 width 25.00: "X "
    188           chunk 1 text run 1 at (272.00,225.00) startOffset 0 endOffset 1 width 13.00: "X"
     186        RenderSVGInlineText {#text} at (12,0) size 36x25
     187          chunk 1 text run 1 at (247.00,225.00) startOffset 1 endOffset 3 width 24.00: "X "
     188          chunk 1 text run 1 at (271.00,225.00) startOffset 0 endOffset 1 width 12.00: "X"
    189189      RenderSVGText {text} at (345,207) size 100x20 contains 1 chunk(s)
    190190        RenderSVGInlineText {#text} at (0,0) size 60x10
     
    193193          RenderSVGInlineText {#text} at (0,10) size 100x10
    194194            chunk 1 text run 1 at (345.00,224.60) startOffset 0 endOffset 20 width 100.00: "xml:space=\"preserve\""
    195       RenderSVGText {text} at (235,230) size 50x25 contains 1 chunk(s)
     195      RenderSVGText {text} at (235,230) size 48x25 contains 1 chunk(s)
    196196        RenderSVGTSpan {tspan} at (0,0) size 12x25
    197197          RenderSVGInlineText {#text} at (0,0) size 12x25
    198198            chunk 1 text run 1 at (235.00,250.00) startOffset 0 endOffset 1 width 12.00: " "
    199         RenderSVGInlineText {#text} at (12,0) size 38x25
    200           chunk 1 text run 1 at (247.00,250.00) startOffset 0 endOffset 2 width 25.00: "X "
    201           chunk 1 text run 1 at (272.00,250.00) startOffset 0 endOffset 1 width 13.00: "X"
     199        RenderSVGInlineText {#text} at (12,0) size 36x25
     200          chunk 1 text run 1 at (247.00,250.00) startOffset 0 endOffset 2 width 24.00: "X "
     201          chunk 1 text run 1 at (271.00,250.00) startOffset 0 endOffset 1 width 12.00: "X"
    202202      RenderSVGText {text} at (345,232) size 100x20 contains 1 chunk(s)
    203203        RenderSVGInlineText {#text} at (0,0) size 85x10
     
    206206          RenderSVGInlineText {#text} at (0,10) size 100x10
    207207            chunk 1 text run 1 at (345.00,249.60) startOffset 0 endOffset 20 width 100.00: "xml:space=\"preserve\""
    208       RenderSVGText {text} at (235,255) size 38x25 contains 1 chunk(s)
    209         RenderSVGInlineText {#text} at (0,0) size 13x25
    210           chunk 1 text run 1 at (235.00,275.00) startOffset 0 endOffset 1 width 13.00: "X"
    211         RenderSVGTSpan {tspan} at (0,0) size 12x25
    212           RenderSVGInlineText {#text} at (13,0) size 12x25
    213             chunk 1 text run 1 at (248.00,275.00) startOffset 0 endOffset 1 width 12.00: " "
    214         RenderSVGInlineText {#text} at (25,0) size 13x25
    215           chunk 1 text run 1 at (260.00,275.00) startOffset 1 endOffset 2 width 13.00: "X"
     208      RenderSVGText {text} at (235,255) size 36x25 contains 1 chunk(s)
     209        RenderSVGInlineText {#text} at (0,0) size 12x25
     210          chunk 1 text run 1 at (235.00,275.00) startOffset 0 endOffset 1 width 12.00: "X"
     211        RenderSVGTSpan {tspan} at (0,0) size 12x25
     212          RenderSVGInlineText {#text} at (12,0) size 12x25
     213            chunk 1 text run 1 at (247.00,275.00) startOffset 0 endOffset 1 width 12.00: " "
     214        RenderSVGInlineText {#text} at (24,0) size 12x25
     215          chunk 1 text run 1 at (259.00,275.00) startOffset 1 endOffset 2 width 12.00: "X"
    216216      RenderSVGText {text} at (345,257) size 100x20 contains 1 chunk(s)
    217217        RenderSVGInlineText {#text} at (0,0) size 95x10
     
    220220          RenderSVGInlineText {#text} at (0,10) size 100x10
    221221            chunk 1 text run 1 at (345.00,274.60) startOffset 0 endOffset 20 width 100.00: "xml:space=\"preserve\""
    222       RenderSVGText {text} at (235,280) size 50x25 contains 1 chunk(s)
    223         RenderSVGInlineText {#text} at (0,0) size 25x25
    224           chunk 1 text run 1 at (235.00,300.00) startOffset 0 endOffset 2 width 25.00: "X "
    225         RenderSVGTSpan {tspan} at (0,0) size 12x25
    226           RenderSVGInlineText {#text} at (25,0) size 12x25
    227             chunk 1 text run 1 at (260.00,300.00) startOffset 0 endOffset 1 width 12.00: " "
    228         RenderSVGInlineText {#text} at (37,0) size 13x25
    229           chunk 1 text run 1 at (272.00,300.00) startOffset 0 endOffset 1 width 13.00: "X"
     222      RenderSVGText {text} at (235,280) size 48x25 contains 1 chunk(s)
     223        RenderSVGInlineText {#text} at (0,0) size 24x25
     224          chunk 1 text run 1 at (235.00,300.00) startOffset 0 endOffset 2 width 24.00: "X "
     225        RenderSVGTSpan {tspan} at (0,0) size 12x25
     226          RenderSVGInlineText {#text} at (24,0) size 12x25
     227            chunk 1 text run 1 at (259.00,300.00) startOffset 0 endOffset 1 width 12.00: " "
     228        RenderSVGInlineText {#text} at (36,0) size 12x25
     229          chunk 1 text run 1 at (271.00,300.00) startOffset 0 endOffset 1 width 12.00: "X"
    230230      RenderSVGText {text} at (345,282) size 100x20 contains 1 chunk(s)
    231231        RenderSVGInlineText {#text} at (0,0) size 85x10
     
    234234          RenderSVGInlineText {#text} at (0,10) size 100x10
    235235            chunk 1 text run 1 at (345.00,299.60) startOffset 0 endOffset 20 width 100.00: "xml:space=\"preserve\""
    236       RenderSVGText {text} at (235,305) size 38x25 contains 1 chunk(s)
    237         RenderSVGInlineText {#text} at (0,0) size 38x25
    238           chunk 1 text run 1 at (235.00,325.00) startOffset 0 endOffset 2 width 25.00: "X "
    239           chunk 1 text run 1 at (260.00,325.00) startOffset 0 endOffset 1 width 13.00: "X"
     236      RenderSVGText {text} at (235,305) size 36x25 contains 1 chunk(s)
     237        RenderSVGInlineText {#text} at (0,0) size 36x25
     238          chunk 1 text run 1 at (235.00,325.00) startOffset 0 endOffset 2 width 24.00: "X "
     239          chunk 1 text run 1 at (259.00,325.00) startOffset 0 endOffset 1 width 12.00: "X"
    240240      RenderSVGText {text} at (345,307) size 80x20 contains 1 chunk(s)
    241241        RenderSVGInlineText {#text} at (0,0) size 80x10
     
    244244          RenderSVGInlineText {#text} at (0,10) size 25x10
    245245            chunk 1 text run 1 at (345.00,324.60) startOffset 0 endOffset 5 width 25.00: "start"
    246       RenderSVGText {text} at (235,330) size 38x25 contains 1 chunk(s)
    247         RenderSVGInlineText {#text} at (0,0) size 25x25
    248           chunk 1 text run 1 at (235.00,350.00) startOffset 0 endOffset 2 width 25.00: "X "
    249         RenderSVGInlineText {#text} at (25,0) size 13x25
    250           chunk 1 text run 1 at (260.00,350.00) startOffset 0 endOffset 1 width 13.00: "X"
     246      RenderSVGText {text} at (235,330) size 36x25 contains 1 chunk(s)
     247        RenderSVGInlineText {#text} at (0,0) size 24x25
     248          chunk 1 text run 1 at (235.00,350.00) startOffset 0 endOffset 2 width 24.00: "X "
     249        RenderSVGInlineText {#text} at (24,0) size 12x25
     250          chunk 1 text run 1 at (259.00,350.00) startOffset 0 endOffset 1 width 12.00: "X"
    251251      RenderSVGText {text} at (345,332) size 80x20 contains 1 chunk(s)
    252252        RenderSVGInlineText {#text} at (0,0) size 80x10
     
    255255          RenderSVGInlineText {#text} at (0,10) size 30x10
    256256            chunk 1 text run 1 at (345.00,349.60) startOffset 0 endOffset 6 width 30.00: "middle"
    257       RenderSVGText {text} at (236,355) size 38x25 contains 1 chunk(s)
    258         RenderSVGInlineText {#text} at (0,0) size 38x25
    259           chunk 1 text run 1 at (236.00,375.00) startOffset 0 endOffset 2 width 25.00: "X "
    260           chunk 1 text run 1 at (261.00,375.00) startOffset 0 endOffset 1 width 13.00: "X"
     257      RenderSVGText {text} at (236,355) size 36x25 contains 1 chunk(s)
     258        RenderSVGInlineText {#text} at (0,0) size 36x25
     259          chunk 1 text run 1 at (236.00,375.00) startOffset 0 endOffset 2 width 24.00: "X "
     260          chunk 1 text run 1 at (260.00,375.00) startOffset 0 endOffset 1 width 12.00: "X"
    261261        RenderSVGInlineText {#text} at (0,0) size 0x0
    262262      RenderSVGText {text} at (345,357) size 80x20 contains 1 chunk(s)
  • trunk/LayoutTests/platform/mac/svg/custom/glyph-selection-lang-attribute-expected.txt

    r89233 r89311  
    44  RenderSVGRoot {svg} at (0,0) size 800x600
    55    RenderSVGHiddenContainer {defs} at (0,0) size 0x0
    6     RenderSVGContainer {g} at (83,16) size 47x551
     6    RenderSVGContainer {g} at (83,16) size 42x551
    77      RenderSVGText {text} at (50,10) size 25x50 contains 1 chunk(s)
    88        RenderSVGInlineText {#text} at (0,0) size 25x50
    9           chunk 1 text run 1 at (50.00,50.00) startOffset 0 endOffset 1 width 24.90: "a"
     9          chunk 1 text run 1 at (50.00,50.00) startOffset 0 endOffset 1 width 25.00: "a"
    1010      RenderSVGText {text} at (50,80) size 25x50 contains 1 chunk(s)
    1111        RenderSVGInlineText {#text} at (0,0) size 25x50
    12           chunk 1 text run 1 at (50.00,120.00) startOffset 0 endOffset 1 width 24.90: "a"
    13       RenderSVGText {text} at (50,150) size 28x50 contains 1 chunk(s)
    14         RenderSVGInlineText {#text} at (0,0) size 28x50
    15           chunk 1 text run 1 at (50.00,190.00) startOffset 0 endOffset 1 width 27.60: "a"
    16       RenderSVGText {text} at (50,220) size 28x50 contains 1 chunk(s)
    17         RenderSVGInlineText {#text} at (0,0) size 28x50
    18           chunk 1 text run 1 at (50.00,260.00) startOffset 0 endOffset 1 width 27.60: "a"
    19       RenderSVGText {text} at (50,290) size 28x50 contains 1 chunk(s)
    20         RenderSVGInlineText {#text} at (0,0) size 28x50
    21           chunk 1 text run 1 at (50.00,330.00) startOffset 0 endOffset 1 width 27.60: "a"
     12          chunk 1 text run 1 at (50.00,120.00) startOffset 0 endOffset 1 width 25.00: "a"
     13      RenderSVGText {text} at (50,150) size 25x50 contains 1 chunk(s)
     14        RenderSVGInlineText {#text} at (0,0) size 25x50
     15          chunk 1 text run 1 at (50.00,190.00) startOffset 0 endOffset 1 width 25.00: "a"
     16      RenderSVGText {text} at (50,220) size 25x50 contains 1 chunk(s)
     17        RenderSVGInlineText {#text} at (0,0) size 25x50
     18          chunk 1 text run 1 at (50.00,260.00) startOffset 0 endOffset 1 width 25.00: "a"
     19      RenderSVGText {text} at (50,290) size 25x50 contains 1 chunk(s)
     20        RenderSVGInlineText {#text} at (0,0) size 25x50
     21          chunk 1 text run 1 at (50.00,330.00) startOffset 0 endOffset 1 width 25.00: "a"
    2222    RenderSVGContainer {g} at (250,16) size 42x551 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,0.00)}]
    2323      RenderSVGText {text} at (50,10) size 25x50 contains 1 chunk(s)
    2424        RenderSVGInlineText {#text} at (0,0) size 25x50
    25           chunk 1 text run 1 at (50.00,50.00) startOffset 0 endOffset 1 width 24.90: "a"
     25          chunk 1 text run 1 at (50.00,50.00) startOffset 0 endOffset 1 width 25.00: "a"
    2626      RenderSVGText {text} at (50,80) size 25x50 contains 1 chunk(s)
    2727        RenderSVGInlineText {#text} at (0,0) size 25x50
    28           chunk 1 text run 1 at (50.00,120.00) startOffset 0 endOffset 1 width 24.90: "a"
     28          chunk 1 text run 1 at (50.00,120.00) startOffset 0 endOffset 1 width 25.00: "a"
    2929      RenderSVGText {text} at (50,150) size 25x50 contains 1 chunk(s)
    3030        RenderSVGInlineText {#text} at (0,0) size 25x50
    31           chunk 1 text run 1 at (50.00,190.00) startOffset 0 endOffset 1 width 24.90: "a"
     31          chunk 1 text run 1 at (50.00,190.00) startOffset 0 endOffset 1 width 25.00: "a"
    3232      RenderSVGText {text} at (50,220) size 25x50 contains 1 chunk(s)
    3333        RenderSVGInlineText {#text} at (0,0) size 25x50
    34           chunk 1 text run 1 at (50.00,260.00) startOffset 0 endOffset 1 width 24.90: "a"
     34          chunk 1 text run 1 at (50.00,260.00) startOffset 0 endOffset 1 width 25.00: "a"
    3535      RenderSVGText {text} at (50,290) size 25x50 contains 1 chunk(s)
    3636        RenderSVGInlineText {#text} at (0,0) size 25x50
    37           chunk 1 text run 1 at (50.00,330.00) startOffset 0 endOffset 1 width 24.90: "a"
     37          chunk 1 text run 1 at (50.00,330.00) startOffset 0 endOffset 1 width 25.00: "a"
    3838    RenderSVGPath {rect} at (0,0) size 800x600 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
  • trunk/LayoutTests/platform/mac/svg/custom/svg-fonts-with-no-element-reference-expected.txt

    r89233 r89311  
    55    RenderBody {BODY} at (8,18) size 784x60
    66      RenderBlock {P} at (0,0) size 784x21
    7         RenderText {#text} at (0,1) size 277x19
    8           text run at (0,1) width 277: "This text should be rendered with a first font."
     7        RenderText {#text} at (0,1) size 275x19
     8          text run at (0,1) width 275: "This text should be rendered with a first font."
    99      RenderBlock {P} at (0,39) size 784x21
    10         RenderText {#text} at (0,1) size 285x19
    11           text run at (0,1) width 285: "This text should be rendered with a second font."
     10        RenderText {#text} at (0,1) size 284x19
     11          text run at (0,1) width 284: "This text should be rendered with a second font."
  • trunk/LayoutTests/platform/mac/svg/custom/svg-fonts-without-missing-glyph-expected.txt

    r89233 r89311  
    1414          text run at (0,0) width 506: "Following text should be rendered as usual. Only \"A\" has a glyph in SVG Font."
    1515      RenderBlock {p} at (0,92) size 784x18
    16         RenderText {#text} at (0,1) size 35x16
    17           text run at (0,1) width 35: "XXA"
     16        RenderText {#text} at (0,1) size 37x16
     17          text run at (0,1) width 37: "XXA"
    1818      RenderBlock {p} at (0,126) size 784x18
    19         RenderText {#text} at (0,1) size 35x16
    20           text run at (0,1) width 35: "XAX"
     19        RenderText {#text} at (0,1) size 37x16
     20          text run at (0,1) width 37: "XAX"
    2121      RenderBlock {p} at (0,160) size 784x18
    22         RenderText {#text} at (0,1) size 35x16
    23           text run at (0,1) width 35: "AXX"
     22        RenderText {#text} at (0,1) size 37x16
     23          text run at (0,1) width 37: "AXX"
    2424      RenderBlock {p} at (0,194) size 784x18
    25         RenderText {#text} at (0,1) size 33x16
    26           text run at (0,1) width 33: "XXX"
     25        RenderText {#text} at (0,1) size 36x16
     26          text run at (0,1) width 36: "XXX"
    2727      RenderBlock {p} at (0,228) size 784x18
    2828        RenderText {#text} at (0,1) size 39x16
  • trunk/LayoutTests/platform/mac/svg/foreignObject/text-tref-02-b-expected.txt

    r89233 r89311  
    2727                chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 5 width 41.00: "Hello"
    2828          RenderText {#text} at (0,0) size 0x0
    29     RenderSVGContainer {g} at (16,523) size 376x56
    30       RenderSVGText {text} at (10,314) size 225x33 contains 1 chunk(s)
    31         RenderSVGInlineText {#text} at (0,0) size 225x33
    32           chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 2 width 40.64: "$R"
    33           chunk 1 text run 2 at (50.26,340.00) startOffset 2 endOffset 3 width 17.68: "e"
    34           chunk 1 text run 3 at (67.46,340.00) startOffset 3 endOffset 12 width 116.64: "vision: 1"
    35           chunk 1 text run 4 at (181.73,340.00) startOffset 12 endOffset 16 width 53.04: ".5 $"
     29    RenderSVGContainer {g} at (16,523) size 379x56
     30      RenderSVGText {text} at (10,314) size 227x33 contains 1 chunk(s)
     31        RenderSVGInlineText {#text} at (0,0) size 227x33
     32          chunk 1 text run 1 at (10.00,340.00) startOffset 0 endOffset 2 width 40.90: "$R"
     33          chunk 1 text run 2 at (50.51,340.00) startOffset 2 endOffset 3 width 17.79: "e"
     34          chunk 1 text run 3 at (67.82,340.00) startOffset 3 endOffset 12 width 117.38: "vision: 1"
     35          chunk 1 text run 4 at (182.83,340.00) startOffset 12 endOffset 16 width 53.38: ".5 $"
    3636    RenderSVGPath {rect} at (0,0) size 800x600 [stroke={[type=SOLID] [color=#000000]}] [x=1.00] [y=1.00] [width=478.00] [height=358.00]
  • trunk/LayoutTests/platform/mac/svg/text/text-altglyph-01-b-expected.txt

    r89233 r89311  
    1212      RenderSVGHiddenContainer {defs} at (0,0) size 0x0
    1313      RenderSVGContainer {g} at (75,208) size 664x276
    14         RenderSVGText {text} at (140,130) size 199x75 contains 1 chunk(s)
    15           RenderSVGTSpan {altGlyph} at (0,0) size 44x75
    16             RenderSVGInlineText {#text} at (0,0) size 44x75
    17               chunk 1 text run 1 at (140.00,190.00) startOffset 0 endOffset 1 width 43.20: "H"
     14        RenderSVGText {text} at (140,130) size 188x75 contains 1 chunk(s)
     15          RenderSVGTSpan {altGlyph} at (0,0) size 38x75
     16            RenderSVGInlineText {#text} at (0,0) size 38x75
     17              chunk 1 text run 1 at (140.00,190.00) startOffset 0 endOffset 1 width 37.50: "H"
    1818          RenderSVGInlineText {#text} at (0,0) size 0x0
    1919          RenderSVGTSpan {altGlyph} at (0,0) size 38x75
    20             RenderSVGInlineText {#text} at (43,0) size 38x75
    21               chunk 1 text run 1 at (183.20,190.00) startOffset 0 endOffset 1 width 37.50: "A"
    22           RenderSVGInlineText {#text} at (0,0) size 0x0
    23           RenderSVGTSpan {altGlyph} at (0,0) size 41x75
    24             RenderSVGInlineText {#text} at (80,0) size 41x75
    25               chunk 1 text run 1 at (220.70,190.00) startOffset 0 endOffset 1 width 40.20: "P"
    26           RenderSVGInlineText {#text} at (0,0) size 0x0
    27           RenderSVGTSpan {altGlyph} at (0,0) size 42x75
    28             RenderSVGInlineText {#text} at (120,0) size 42x75
    29               chunk 1 text run 1 at (260.90,190.00) startOffset 0 endOffset 1 width 40.20: "P"
     20            RenderSVGInlineText {#text} at (37,0) size 38x75
     21              chunk 1 text run 1 at (177.50,190.00) startOffset 0 endOffset 1 width 37.50: "A"
    3022          RenderSVGInlineText {#text} at (0,0) size 0x0
    3123          RenderSVGTSpan {altGlyph} at (0,0) size 38x75
    32             RenderSVGInlineText {#text} at (161,0) size 38x75
    33               chunk 1 text run 1 at (301.10,190.00) startOffset 0 endOffset 1 width 37.50: "Y"
     24            RenderSVGInlineText {#text} at (75,0) size 38x75
     25              chunk 1 text run 1 at (215.00,190.00) startOffset 0 endOffset 1 width 37.50: "P"
     26          RenderSVGInlineText {#text} at (0,0) size 0x0
     27          RenderSVGTSpan {altGlyph} at (0,0) size 38x75
     28            RenderSVGInlineText {#text} at (112,0) size 38x75
     29              chunk 1 text run 1 at (252.50,190.00) startOffset 0 endOffset 1 width 37.50: "P"
     30          RenderSVGInlineText {#text} at (0,0) size 0x0
     31          RenderSVGTSpan {altGlyph} at (0,0) size 38x75
     32            RenderSVGInlineText {#text} at (150,0) size 38x75
     33              chunk 1 text run 1 at (290.00,190.00) startOffset 0 endOffset 1 width 37.50: "Y"
    3434          RenderSVGInlineText {#text} at (0,0) size 0x0
    3535        RenderSVGText {text} at (50,210) size 113x75 contains 1 chunk(s)
  • trunk/LayoutTests/platform/mac/svg/text/text-text-04-t-expected.txt

    r89233 r89311  
    2424          RenderSVGText {text} at (0,-20) size 60x25 contains 1 chunk(s)
    2525            RenderSVGInlineText {#text} at (0,0) size 60x25
    26               chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 4 width 59.40: "1234"
     26              chunk 1 text run 1 at (0.00,0.00) startOffset 0 endOffset 4 width 60.00: "1234"
    2727      RenderSVGHiddenContainer {defs} at (0,0) size 0x0
    2828        RenderSVGPath {rect} at (0,0) size 7x7 [fill={[type=SOLID] [color=#000000]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
     
    4848        RenderSVGText {text} at (20,-20) size 75x25 contains 1 chunk(s)
    4949          RenderSVGInlineText {#text} at (0,0) size 75x25
    50             chunk 1 text run 1 at (20.00,0.00) startOffset 0 endOffset 1 width 14.85: "1"
    51             chunk 1 text run 1 at (40.00,0.00) startOffset 0 endOffset 1 width 14.85: "2"
    52             chunk 1 text run 1 at (60.00,0.00) startOffset 0 endOffset 1 width 14.85: "3"
    53             chunk 1 text run 1 at (80.00,0.00) startOffset 0 endOffset 1 width 14.85: "4"
     50            chunk 1 text run 1 at (20.00,0.00) startOffset 0 endOffset 1 width 15.00: "1"
     51            chunk 1 text run 1 at (40.00,0.00) startOffset 0 endOffset 1 width 15.00: "2"
     52            chunk 1 text run 1 at (60.00,0.00) startOffset 0 endOffset 1 width 15.00: "3"
     53            chunk 1 text run 1 at (80.00,0.00) startOffset 0 endOffset 1 width 15.00: "4"
    5454      RenderSVGContainer {g} at (88,166) size 302x43 [transform={m=((1.00,0.00)(0.00,1.00)) t=(130.00,120.00)}]
    5555        RenderSVGText {text} at (-77,-15) size 48x20 contains 1 chunk(s)
     
    7676        RenderSVGText {text} at (20,-20) size 75x25 contains 1 chunk(s)
    7777          RenderSVGInlineText {#text} at (0,0) size 75x25
    78             chunk 1 text run 1 at (20.00,0.00) startOffset 0 endOffset 1 width 14.85: "1"
    79             chunk 1 text run 1 at (40.00,0.00) startOffset 0 endOffset 1 width 14.85: "2"
    80             chunk 1 text run 1 at (60.00,0.00) startOffset 0 endOffset 1 width 14.85: "3"
    81             chunk 1 text run 1 at (80.00,0.00) startOffset 0 endOffset 1 width 14.85: "4"
     78            chunk 1 text run 1 at (20.00,0.00) startOffset 0 endOffset 1 width 15.00: "1"
     79            chunk 1 text run 1 at (40.00,0.00) startOffset 0 endOffset 1 width 15.00: "2"
     80            chunk 1 text run 1 at (60.00,0.00) startOffset 0 endOffset 1 width 15.00: "3"
     81            chunk 1 text run 1 at (80.00,0.00) startOffset 0 endOffset 1 width 15.00: "4"
    8282      RenderSVGContainer {g} at (83,233) size 284x42 [transform={m=((1.00,0.00)(0.00,1.00)) t=(130.00,160.00)}]
    8383        RenderSVGText {text} at (-80,-15) size 51x20 contains 1 chunk(s)
     
    101101        RenderSVGText {text} at (20,-20) size 70x25 contains 1 chunk(s)
    102102          RenderSVGInlineText {#text} at (0,0) size 70x25
    103             chunk 1 text run 1 at (20.00,0.00) startOffset 0 endOffset 1 width 14.85: "1"
    104             chunk 1 text run 1 at (40.00,0.00) startOffset 0 endOffset 1 width 14.85: "2"
    105             chunk 1 text run 1 at (60.00,0.00) startOffset 0 endOffset 2 width 29.70: "34"
     103            chunk 1 text run 1 at (20.00,0.00) startOffset 0 endOffset 1 width 15.00: "1"
     104            chunk 1 text run 1 at (40.00,0.00) startOffset 0 endOffset 1 width 15.00: "2"
     105            chunk 1 text run 1 at (60.00,0.00) startOffset 0 endOffset 2 width 30.00: "34"
    106106      RenderSVGContainer {g} at (116,283) size 201x76 [transform={m=((1.00,0.00)(0.00,1.00)) t=(130.00,200.00)}]
    107107        RenderSVGText {text} at (-60,-15) size 30x20 contains 1 chunk(s)
     
    122122        RenderSVGText {text} at (0,-30) size 60x45 contains 1 chunk(s)
    123123          RenderSVGInlineText {#text} at (0,0) size 60x45
    124             chunk 1 text run 1 at (0.00,-10.00) startOffset 0 endOffset 1 width 14.85: "1"
    125             chunk 1 text run 1 at (14.85,-5.00) startOffset 0 endOffset 1 width 14.85: "2"
    126             chunk 1 text run 1 at (29.70,5.00) startOffset 0 endOffset 1 width 14.85: "3"
    127             chunk 1 text run 1 at (44.55,10.00) startOffset 0 endOffset 1 width 14.85: "4"
     124            chunk 1 text run 1 at (0.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     125            chunk 1 text run 1 at (15.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     126            chunk 1 text run 1 at (30.00,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     127            chunk 1 text run 1 at (45.00,10.00) startOffset 0 endOffset 1 width 15.00: "4"
    128128      RenderSVGContainer {g} at (88,366) size 229x76 [transform={m=((1.00,0.00)(0.00,1.00)) t=(130.00,250.00)}]
    129129        RenderSVGText {text} at (-77,-15) size 48x20 contains 1 chunk(s)
     
    144144        RenderSVGText {text} at (0,-30) size 60x45 contains 1 chunk(s)
    145145          RenderSVGInlineText {#text} at (0,0) size 60x45
    146             chunk 1 text run 1 at (0.00,-10.00) startOffset 0 endOffset 1 width 14.85: "1"
    147             chunk 1 text run 1 at (14.85,-5.00) startOffset 0 endOffset 1 width 14.85: "2"
    148             chunk 1 text run 1 at (29.70,5.00) startOffset 0 endOffset 1 width 14.85: "3"
    149             chunk 1 text run 1 at (44.55,10.00) startOffset 0 endOffset 1 width 14.85: "4"
     146            chunk 1 text run 1 at (0.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     147            chunk 1 text run 1 at (15.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     148            chunk 1 text run 1 at (30.00,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     149            chunk 1 text run 1 at (45.00,10.00) startOffset 0 endOffset 1 width 15.00: "4"
    150150      RenderSVGContainer {g} at (83,450) size 234x67 [transform={m=((1.00,0.00)(0.00,1.00)) t=(130.00,300.00)}]
    151151        RenderSVGText {text} at (-80,-15) size 51x20 contains 1 chunk(s)
     
    166166        RenderSVGText {text} at (0,-30) size 60x40 contains 1 chunk(s)
    167167          RenderSVGInlineText {#text} at (0,0) size 60x40
    168             chunk 1 text run 1 at (0.00,-10.00) startOffset 0 endOffset 1 width 14.85: "1"
    169             chunk 1 text run 1 at (14.85,-5.00) startOffset 0 endOffset 1 width 14.85: "2"
    170             chunk 1 text run 1 at (29.70,5.00) startOffset 0 endOffset 2 width 29.70: "34"
     168            chunk 1 text run 1 at (0.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     169            chunk 1 text run 1 at (15.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     170            chunk 1 text run 1 at (30.00,5.00) startOffset 0 endOffset 2 width 30.00: "34"
    171171      RenderSVGContainer {g} at (395,83) size 362x342 [transform={m=((1.00,0.00)(0.00,1.00)) t=(220.00,0.00)}]
    172172        RenderSVGContainer {g} at (461,83) size 281x76 [transform={m=((1.00,0.00)(0.00,1.00)) t=(130.00,80.00)}]
     
    191191          RenderSVGText {text} at (20,-30) size 75x45 contains 1 chunk(s)
    192192            RenderSVGInlineText {#text} at (0,0) size 75x45
    193               chunk 1 text run 1 at (20.00,-10.00) startOffset 0 endOffset 1 width 14.85: "1"
    194               chunk 1 text run 1 at (40.00,-5.00) startOffset 0 endOffset 1 width 14.85: "2"
    195               chunk 1 text run 1 at (60.00,5.00) startOffset 0 endOffset 1 width 14.85: "3"
    196               chunk 1 text run 1 at (80.00,10.00) startOffset 0 endOffset 1 width 14.85: "4"
     193              chunk 1 text run 1 at (20.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     194              chunk 1 text run 1 at (40.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     195              chunk 1 text run 1 at (60.00,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     196              chunk 1 text run 1 at (80.00,10.00) startOffset 0 endOffset 1 width 15.00: "4"
    197197        RenderSVGContainer {g} at (433,150) size 324x90 [transform={m=((1.00,0.00)(0.00,1.00)) t=(130.00,120.00)}]
    198198          RenderSVGText {text} at (-90,-15) size 60x20 contains 1 chunk(s)
     
    219219          RenderSVGText {text} at (20,-30) size 75x45 contains 1 chunk(s)
    220220            RenderSVGInlineText {#text} at (0,0) size 75x45
    221               chunk 1 text run 1 at (20.00,-10.00) startOffset 0 endOffset 1 width 14.85: "1"
    222               chunk 1 text run 1 at (40.00,-5.00) startOffset 0 endOffset 1 width 14.85: "2"
    223               chunk 1 text run 1 at (60.00,5.00) startOffset 0 endOffset 1 width 14.85: "3"
    224               chunk 1 text run 1 at (80.00,10.00) startOffset 0 endOffset 1 width 14.85: "4"
     221              chunk 1 text run 1 at (20.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     222              chunk 1 text run 1 at (40.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     223              chunk 1 text run 1 at (60.00,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     224              chunk 1 text run 1 at (80.00,10.00) startOffset 0 endOffset 1 width 15.00: "4"
    225225        RenderSVGContainer {g} at (428,216) size 306x68 [transform={m=((1.00,0.00)(0.00,1.00)) t=(130.00,160.00)}]
    226226          RenderSVGText {text} at (-93,-15) size 63x20 contains 1 chunk(s)
     
    244244          RenderSVGText {text} at (20,-30) size 70x40 contains 1 chunk(s)
    245245            RenderSVGInlineText {#text} at (0,0) size 70x40
    246               chunk 1 text run 1 at (20.00,-10.00) startOffset 0 endOffset 1 width 14.85: "1"
    247               chunk 1 text run 1 at (40.00,-5.00) startOffset 0 endOffset 1 width 14.85: "2"
    248               chunk 1 text run 1 at (60.00,5.00) startOffset 0 endOffset 2 width 29.70: "34"
     246              chunk 1 text run 1 at (20.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     247              chunk 1 text run 1 at (40.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     248              chunk 1 text run 1 at (60.00,5.00) startOffset 0 endOffset 2 width 30.00: "34"
    249249        RenderSVGContainer {g} at (395,283) size 347x67 [transform={m=((1.00,0.00)(0.00,1.00)) t=(130.00,200.00)}]
    250250          RenderSVGText {text} at (-113,-15) size 83x20 contains 1 chunk(s)
     
    268268          RenderSVGText {text} at (20,-30) size 75x40 contains 1 chunk(s)
    269269            RenderSVGInlineText {#text} at (0,0) size 75x40
    270               chunk 1 text run 1 at (20.00,-10.00) startOffset 0 endOffset 1 width 14.85: "1"
    271               chunk 1 text run 1 at (40.00,-5.00) startOffset 0 endOffset 1 width 14.85: "2"
    272               chunk 1 text run 1 at (60.00,5.00) startOffset 0 endOffset 1 width 14.85: "3"
    273               chunk 1 text run 1 at (80.00,5.00) startOffset 0 endOffset 1 width 14.85: "4"
     270              chunk 1 text run 1 at (20.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     271              chunk 1 text run 1 at (40.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     272              chunk 1 text run 1 at (60.00,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     273              chunk 1 text run 1 at (80.00,5.00) startOffset 0 endOffset 1 width 15.00: "4"
    274274        RenderSVGContainer {g} at (395,350) size 339x75 [transform={m=((1.00,0.00)(0.00,1.00)) t=(130.00,240.00)}]
    275275          RenderSVGText {text} at (-113,-15) size 83x20 contains 1 chunk(s)
     
    293293          RenderSVGText {text} at (20,-30) size 70x45 contains 1 chunk(s)
    294294            RenderSVGInlineText {#text} at (0,0) size 70x45
    295               chunk 1 text run 1 at (20.00,-10.00) startOffset 0 endOffset 1 width 14.85: "1"
    296               chunk 1 text run 1 at (40.00,-5.00) startOffset 0 endOffset 1 width 14.85: "2"
    297               chunk 1 text run 1 at (60.00,5.00) startOffset 0 endOffset 1 width 14.85: "3"
    298               chunk 1 text run 1 at (74.85,10.00) startOffset 0 endOffset 1 width 14.85: "4"
     295              chunk 1 text run 1 at (20.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     296              chunk 1 text run 1 at (40.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     297              chunk 1 text run 1 at (60.00,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     298              chunk 1 text run 1 at (75.00,10.00) startOffset 0 endOffset 1 width 15.00: "4"
    299299    RenderSVGText {text} at (10,303) size 289x48 contains 1 chunk(s)
    300300      RenderSVGInlineText {#text} at (0,0) size 289x48
  • trunk/LayoutTests/platform/mac/svg/text/text-text-05-t-expected.txt

    r89233 r89311  
    3737          RenderSVGInlineText {#text} at (0,0) size 47x20
    3838            chunk 1 text run 1 at (0.00,270.00) startOffset 0 endOffset 7 width 46.20: "2.x 2.y"
    39       RenderSVGContainer {g} at (186,13) size 241x537 [transform={m=((1.00,0.00)(0.00,1.00)) t=(150.00,40.00)}]
     39      RenderSVGContainer {g} at (186,13) size 239x537 [transform={m=((1.00,0.00)(0.00,1.00)) t=(150.00,40.00)}]
    4040        RenderSVGText {text} at (-38,-32) size 76x20 contains 1 chunk(s)
    4141          RenderSVGInlineText {#text} at (0,0) size 76x20
     
    4545            chunk 1 (middle anchor) text run 1 at (-14.40,-3.00) startOffset 0 endOffset 5 width 28.80: "start"
    4646        RenderSVGPath {line} at (248,83) size 4x467 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [x1=0.00] [y1=10.00] [x2=0.00] [y2=290.00]
    47         RenderSVGContainer {g} at (243,91) size 184x424
     47        RenderSVGContainer {g} at (243,91) size 182x424
    4848          RenderSVGContainer {use} at (243,91) size 14x33
    4949            RenderSVGContainer {g} at (243,91) size 14x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,30.00)}]
     
    5151                RenderSVGPath {line} at (248,91) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    5252                RenderSVGPath {rect} at (243,110) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    53           RenderSVGText {text} at (0,20) size 62x13 contains 1 chunk(s)
    54             RenderSVGInlineText {#text} at (0,0) size 62x13
    55               chunk 1 text run 1 at (0.00,30.00) startOffset 0 endOffset 4 width 61.20: "1234"
     53          RenderSVGText {text} at (0,20) size 60x13 contains 1 chunk(s)
     54            RenderSVGInlineText {#text} at (0,0) size 60x13
     55              chunk 1 text run 1 at (0.00,30.00) startOffset 0 endOffset 4 width 60.00: "1234"
    5656          RenderSVGContainer {use} at (260,141) size 14x33
    5757            RenderSVGContainer {g} at (260,141) size 14x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,60.00)}]
     
    7474                RenderSVGPath {line} at (315,141) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    7575                RenderSVGPath {rect} at (310,160) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    76           RenderSVGText {text} at (10,50) size 46x13 contains 1 chunk(s)
    77             RenderSVGInlineText {#text} at (0,0) size 46x13
    78               chunk 1 text run 1 at (10.00,60.00) startOffset 0 endOffset 1 width 15.30: "1"
    79               chunk 1 text run 1 at (20.00,60.00) startOffset 0 endOffset 1 width 15.30: "2"
    80               chunk 1 text run 1 at (30.00,60.00) startOffset 0 endOffset 1 width 15.30: "3"
    81               chunk 1 text run 1 at (40.00,60.00) startOffset 0 endOffset 1 width 15.30: "4"
     76          RenderSVGText {text} at (10,50) size 45x13 contains 1 chunk(s)
     77            RenderSVGInlineText {#text} at (0,0) size 45x13
     78              chunk 1 text run 1 at (10.00,60.00) startOffset 0 endOffset 1 width 15.00: "1"
     79              chunk 1 text run 1 at (20.00,60.00) startOffset 0 endOffset 1 width 15.00: "2"
     80              chunk 1 text run 1 at (30.00,60.00) startOffset 0 endOffset 1 width 15.00: "3"
     81              chunk 1 text run 1 at (40.00,60.00) startOffset 0 endOffset 1 width 15.00: "4"
    8282          RenderSVGContainer {use} at (260,191) size 14x33
    8383            RenderSVGContainer {g} at (260,191) size 14x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,90.00)}]
     
    9090                RenderSVGPath {line} at (348,191) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    9191                RenderSVGPath {rect} at (343,210) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    92           RenderSVGText {text} at (10,80) size 96x13 contains 1 chunk(s)
    93             RenderSVGInlineText {#text} at (0,0) size 96x13
    94               chunk 1 text run 1 at (10.00,90.00) startOffset 0 endOffset 1 width 15.30: "1"
    95               chunk 1 text run 1 at (60.00,90.00) startOffset 0 endOffset 3 width 45.90: "234"
    96           RenderSVGContainer {g} at (243,225) size 111x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,120.00)}]
     92          RenderSVGText {text} at (10,80) size 95x13 contains 1 chunk(s)
     93            RenderSVGInlineText {#text} at (0,0) size 95x13
     94              chunk 1 text run 1 at (10.00,90.00) startOffset 0 endOffset 1 width 15.00: "1"
     95              chunk 1 text run 1 at (60.00,90.00) startOffset 0 endOffset 3 width 45.00: "234"
     96          RenderSVGContainer {g} at (243,225) size 107x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,120.00)}]
    9797            RenderSVGContainer {use} at (243,225) size 14x32
    9898              RenderSVGContainer {g} at (243,225) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,-10.00)}]
     
    115115                  RenderSVGPath {line} at (323,258) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    116116                  RenderSVGPath {rect} at (318,276) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    117             RenderSVGText {text} at (0,-20) size 62x33 contains 1 chunk(s)
    118               RenderSVGInlineText {#text} at (0,0) size 62x33
    119                 chunk 1 text run 1 at (0.00,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    120                 chunk 1 text run 1 at (15.30,-5.00) startOffset 0 endOffset 1 width 15.30: "2"
    121                 chunk 1 text run 1 at (30.60,5.00) startOffset 0 endOffset 1 width 15.30: "3"
    122                 chunk 1 text run 1 at (45.90,10.00) startOffset 0 endOffset 1 width 15.30: "4"
    123           RenderSVGContainer {g} at (260,275) size 84x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,150.00)}]
     117            RenderSVGText {text} at (0,-20) size 60x33 contains 1 chunk(s)
     118              RenderSVGInlineText {#text} at (0,0) size 60x33
     119                chunk 1 text run 1 at (0.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     120                chunk 1 text run 1 at (15.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     121                chunk 1 text run 1 at (30.00,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     122                chunk 1 text run 1 at (45.00,10.00) startOffset 0 endOffset 1 width 15.00: "4"
     123          RenderSVGContainer {g} at (260,275) size 82x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,150.00)}]
    124124            RenderSVGContainer {use} at (260,275) size 14x32
    125125              RenderSVGContainer {g} at (260,275) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,-10.00)}]
     
    142142                  RenderSVGPath {line} at (315,308) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    143143                  RenderSVGPath {rect} at (310,326) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    144             RenderSVGText {text} at (10,-20) size 46x33 contains 1 chunk(s)
    145               RenderSVGInlineText {#text} at (0,0) size 46x33
    146                 chunk 1 text run 1 at (10.00,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    147                 chunk 1 text run 1 at (20.00,-5.00) startOffset 0 endOffset 1 width 15.30: "2"
    148                 chunk 1 text run 1 at (30.00,5.00) startOffset 0 endOffset 1 width 15.30: "3"
    149                 chunk 1 text run 1 at (40.00,10.00) startOffset 0 endOffset 1 width 15.30: "4"
    150           RenderSVGContainer {g} at (260,325) size 100x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,180.00)}]
     144            RenderSVGText {text} at (10,-20) size 45x33 contains 1 chunk(s)
     145              RenderSVGInlineText {#text} at (0,0) size 45x33
     146                chunk 1 text run 1 at (10.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     147                chunk 1 text run 1 at (20.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     148                chunk 1 text run 1 at (30.00,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     149                chunk 1 text run 1 at (40.00,10.00) startOffset 0 endOffset 1 width 15.00: "4"
     150          RenderSVGContainer {g} at (260,325) size 99x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,180.00)}]
    151151            RenderSVGContainer {use} at (260,325) size 14x32
    152152              RenderSVGContainer {g} at (260,325) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,-10.00)}]
     
    169169                  RenderSVGPath {line} at (331,358) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    170170                  RenderSVGPath {rect} at (326,376) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    171             RenderSVGText {text} at (10,-20) size 56x33 contains 1 chunk(s)
    172               RenderSVGInlineText {#text} at (0,0) size 56x33
    173                 chunk 1 text run 1 at (10.00,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    174                 chunk 1 text run 1 at (20.00,-5.00) startOffset 0 endOffset 1 width 15.30: "2"
    175                 chunk 1 text run 1 at (35.30,5.00) startOffset 0 endOffset 1 width 15.30: "3"
    176                 chunk 1 text run 1 at (50.60,10.00) startOffset 0 endOffset 1 width 15.30: "4"
    177           RenderSVGContainer {g} at (243,375) size 111x57 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,210.00)}]
     171            RenderSVGText {text} at (10,-20) size 55x33 contains 1 chunk(s)
     172              RenderSVGInlineText {#text} at (0,0) size 55x33
     173                chunk 1 text run 1 at (10.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     174                chunk 1 text run 1 at (20.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     175                chunk 1 text run 1 at (35.00,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     176                chunk 1 text run 1 at (50.00,10.00) startOffset 0 endOffset 1 width 15.00: "4"
     177          RenderSVGContainer {g} at (243,375) size 107x57 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,210.00)}]
    178178            RenderSVGContainer {use} at (243,375) size 14x32
    179179              RenderSVGContainer {g} at (243,375) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,-10.00)}]
     
    186186                  RenderSVGPath {line} at (273,400) size 4x25 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    187187                  RenderSVGPath {rect} at (268,418) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    188             RenderSVGText {text} at (0,-20) size 62x28 contains 1 chunk(s)
    189               RenderSVGInlineText {#text} at (0,0) size 62x28
    190                 chunk 1 text run 1 at (0.00,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    191                 chunk 1 text run 1 at (15.30,5.00) startOffset 0 endOffset 3 width 45.90: "234"
    192           RenderSVGContainer {g} at (260,425) size 84x40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,240.00)}]
     188            RenderSVGText {text} at (0,-20) size 60x28 contains 1 chunk(s)
     189              RenderSVGInlineText {#text} at (0,0) size 60x28
     190                chunk 1 text run 1 at (0.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     191                chunk 1 text run 1 at (15.00,5.00) startOffset 0 endOffset 3 width 45.00: "234"
     192          RenderSVGContainer {g} at (260,425) size 82x40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,240.00)}]
    193193            RenderSVGContainer {use} at (260,425) size 14x32
    194194              RenderSVGContainer {g} at (260,425) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,-10.00)}]
     
    211211                  RenderSVGPath {line} at (315,433) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    212212                  RenderSVGPath {rect} at (310,451) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    213             RenderSVGText {text} at (10,-20) size 46x18 contains 1 chunk(s)
    214               RenderSVGInlineText {#text} at (0,0) size 46x18
    215                 chunk 1 text run 1 at (10.00,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    216                 chunk 1 text run 1 at (20.00,-5.00) startOffset 0 endOffset 1 width 15.30: "2"
    217                 chunk 1 text run 1 at (30.00,-5.00) startOffset 0 endOffset 1 width 15.30: "3"
    218                 chunk 1 text run 1 at (40.00,-5.00) startOffset 0 endOffset 1 width 15.30: "4"
    219           RenderSVGContainer {g} at (260,475) size 167x40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,270.00)}]
     213            RenderSVGText {text} at (10,-20) size 45x18 contains 1 chunk(s)
     214              RenderSVGInlineText {#text} at (0,0) size 45x18
     215                chunk 1 text run 1 at (10.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     216                chunk 1 text run 1 at (20.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     217                chunk 1 text run 1 at (30.00,-5.00) startOffset 0 endOffset 1 width 15.00: "3"
     218                chunk 1 text run 1 at (40.00,-5.00) startOffset 0 endOffset 1 width 15.00: "4"
     219          RenderSVGContainer {g} at (260,475) size 165x40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,270.00)}]
    220220            RenderSVGContainer {use} at (260,475) size 14x32
    221221              RenderSVGContainer {g} at (260,475) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,-10.00)}]
     
    228228                  RenderSVGPath {line} at (348,483) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    229229                  RenderSVGPath {rect} at (343,501) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    230             RenderSVGText {text} at (10,-20) size 96x18 contains 1 chunk(s)
    231               RenderSVGInlineText {#text} at (0,0) size 96x18
    232                 chunk 1 text run 1 at (10.00,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    233                 chunk 1 text run 1 at (60.00,-5.00) startOffset 0 endOffset 3 width 45.90: "234"
     230            RenderSVGText {text} at (10,-20) size 95x18 contains 1 chunk(s)
     231              RenderSVGInlineText {#text} at (0,0) size 95x18
     232                chunk 1 text run 1 at (10.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     233                chunk 1 text run 1 at (60.00,-5.00) startOffset 0 endOffset 3 width 45.00: "234"
    234234      RenderSVGContainer {g} at (353,13) size 202x537 [transform={m=((1.00,0.00)(0.00,1.00)) t=(250.00,40.00)}]
    235235        RenderSVGText {text} at (-38,-32) size 76x20 contains 1 chunk(s)
     
    240240            chunk 1 (middle anchor) text run 1 at (-23.10,-3.00) startOffset 0 endOffset 6 width 46.20: "middle"
    241241        RenderSVGPath {line} at (415,83) size 4x467 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [x1=0.00] [y1=10.00] [x2=0.00] [y2=290.00]
    242         RenderSVGContainer {use} at (365,91) size 190x424
    243           RenderSVGContainer {g} at (365,91) size 190x424
    244             RenderSVGContainer {g} at (365,91) size 190x424
     242        RenderSVGContainer {use} at (366,91) size 189x424
     243          RenderSVGContainer {g} at (366,91) size 189x424
     244            RenderSVGContainer {g} at (366,91) size 189x424
    245245              RenderSVGContainer {g} at (410,91) size 14x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,30.00)}]
    246246                RenderSVGContainer {g} at (410,91) size 14x33
    247247                  RenderSVGPath {line} at (415,91) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    248248                  RenderSVGPath {rect} at (410,110) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    249               RenderSVGText {text} at (-31,20) size 62x13 contains 1 chunk(s)
    250                 RenderSVGInlineText {#text} at (0,0) size 62x13
    251                   chunk 1 (middle anchor) text run 1 at (-30.60,30.00) startOffset 0 endOffset 4 width 61.20: "1234"
     249              RenderSVGText {text} at (-30,20) size 60x13 contains 1 chunk(s)
     250                RenderSVGInlineText {#text} at (0,0) size 60x13
     251                  chunk 1 (middle anchor) text run 1 at (-30.00,30.00) startOffset 0 endOffset 4 width 60.00: "1234"
    252252              RenderSVGContainer {g} at (426,141) size 14x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,60.00)}]
    253253                RenderSVGContainer {g} at (426,141) size 14x33
     
    268268              RenderSVGText {text} at (2,50) size 46x13 contains 1 chunk(s)
    269269                RenderSVGInlineText {#text} at (0,0) size 46x13
    270                   chunk 1 (middle anchor) text run 1 at (2.35,60.00) startOffset 0 endOffset 1 width 15.30: "1"
    271                   chunk 1 (middle anchor) text run 1 at (12.35,60.00) startOffset 0 endOffset 1 width 15.30: "2"
    272                   chunk 1 (middle anchor) text run 1 at (22.35,60.00) startOffset 0 endOffset 1 width 15.30: "3"
    273                   chunk 1 (middle anchor) text run 1 at (32.35,60.00) startOffset 0 endOffset 1 width 15.30: "4"
     270                  chunk 1 (middle anchor) text run 1 at (2.50,60.00) startOffset 0 endOffset 1 width 15.00: "1"
     271                  chunk 1 (middle anchor) text run 1 at (12.50,60.00) startOffset 0 endOffset 1 width 15.00: "2"
     272                  chunk 1 (middle anchor) text run 1 at (22.50,60.00) startOffset 0 endOffset 1 width 15.00: "3"
     273                  chunk 1 (middle anchor) text run 1 at (32.50,60.00) startOffset 0 endOffset 1 width 15.00: "4"
    274274              RenderSVGContainer {g} at (426,191) size 14x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,90.00)}]
    275275                RenderSVGContainer {g} at (426,191) size 14x33
     
    282282              RenderSVGText {text} at (2,80) size 81x13 contains 1 chunk(s)
    283283                RenderSVGInlineText {#text} at (0,0) size 81x13
    284                   chunk 1 (middle anchor) text run 1 at (2.35,90.00) startOffset 0 endOffset 1 width 15.30: "1"
    285                   chunk 1 (middle anchor) text run 1 at (37.05,90.00) startOffset 0 endOffset 3 width 45.90: "234"
    286               RenderSVGContainer {g} at (403,225) size 104x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,120.00)}]
     284                  chunk 1 (middle anchor) text run 1 at (2.50,90.00) startOffset 0 endOffset 1 width 15.00: "1"
     285                  chunk 1 (middle anchor) text run 1 at (37.50,90.00) startOffset 0 endOffset 3 width 45.00: "234"
     286              RenderSVGContainer {g} at (403,225) size 102x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,120.00)}]
    287287                RenderSVGContainer {g} at (410,225) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,-10.00)}]
    288288                  RenderSVGContainer {g} at (410,225) size 14x32
     
    301301                    RenderSVGPath {line} at (490,258) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    302302                    RenderSVGPath {rect} at (485,276) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    303                 RenderSVGText {text} at (-8,-20) size 62x33 contains 1 chunk(s)
    304                   RenderSVGInlineText {#text} at (0,0) size 62x33
    305                     chunk 1 (middle anchor) text run 1 at (-7.65,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    306                     chunk 1 (middle anchor) text run 1 at (7.65,-5.00) startOffset 0 endOffset 1 width 15.30: "2"
    307                     chunk 1 (middle anchor) text run 1 at (22.95,5.00) startOffset 0 endOffset 1 width 15.30: "3"
    308                     chunk 1 (middle anchor) text run 1 at (38.25,10.00) startOffset 0 endOffset 1 width 15.30: "4"
     303                RenderSVGText {text} at (-8,-20) size 61x33 contains 1 chunk(s)
     304                  RenderSVGInlineText {#text} at (0,0) size 61x33
     305                    chunk 1 (middle anchor) text run 1 at (-7.50,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     306                    chunk 1 (middle anchor) text run 1 at (7.50,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     307                    chunk 1 (middle anchor) text run 1 at (22.50,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     308                    chunk 1 (middle anchor) text run 1 at (37.50,10.00) startOffset 0 endOffset 1 width 15.00: "4"
    309309              RenderSVGContainer {g} at (420,275) size 77x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,150.00)}]
    310310                RenderSVGContainer {g} at (426,275) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,-10.00)}]
     
    326326                RenderSVGText {text} at (2,-20) size 46x33 contains 1 chunk(s)
    327327                  RenderSVGInlineText {#text} at (0,0) size 46x33
    328                     chunk 1 (middle anchor) text run 1 at (2.35,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    329                     chunk 1 (middle anchor) text run 1 at (12.35,-5.00) startOffset 0 endOffset 1 width 15.30: "2"
    330                     chunk 1 (middle anchor) text run 1 at (22.35,5.00) startOffset 0 endOffset 1 width 15.30: "3"
    331                     chunk 1 (middle anchor) text run 1 at (32.35,10.00) startOffset 0 endOffset 1 width 15.30: "4"
    332               RenderSVGContainer {g} at (420,325) size 95x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,180.00)}]
     328                    chunk 1 (middle anchor) text run 1 at (2.50,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     329                    chunk 1 (middle anchor) text run 1 at (12.50,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     330                    chunk 1 (middle anchor) text run 1 at (22.50,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     331                    chunk 1 (middle anchor) text run 1 at (32.50,10.00) startOffset 0 endOffset 1 width 15.00: "4"
     332              RenderSVGContainer {g} at (420,325) size 94x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,180.00)}]
    333333                RenderSVGContainer {g} at (426,325) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,-10.00)}]
    334334                  RenderSVGContainer {g} at (426,325) size 14x32
     
    347347                    RenderSVGPath {line} at (498,358) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    348348                    RenderSVGPath {rect} at (493,376) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    349                 RenderSVGText {text} at (2,-20) size 57x33 contains 1 chunk(s)
    350                   RenderSVGInlineText {#text} at (0,0) size 57x33
    351                     chunk 1 (middle anchor) text run 1 at (2.35,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    352                     chunk 1 (middle anchor) text run 1 at (12.35,-5.00) startOffset 0 endOffset 1 width 15.30: "2"
    353                     chunk 1 (middle anchor) text run 1 at (27.65,5.00) startOffset 0 endOffset 1 width 15.30: "3"
    354                     chunk 1 (middle anchor) text run 1 at (42.95,10.00) startOffset 0 endOffset 1 width 15.30: "4"
    355               RenderSVGContainer {g} at (403,375) size 79x57 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,210.00)}]
     349                RenderSVGText {text} at (2,-20) size 56x33 contains 1 chunk(s)
     350                  RenderSVGInlineText {#text} at (0,0) size 56x33
     351                    chunk 1 (middle anchor) text run 1 at (2.50,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     352                    chunk 1 (middle anchor) text run 1 at (12.50,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     353                    chunk 1 (middle anchor) text run 1 at (27.50,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     354                    chunk 1 (middle anchor) text run 1 at (42.50,10.00) startOffset 0 endOffset 1 width 15.00: "4"
     355              RenderSVGContainer {g} at (403,375) size 77x57 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,210.00)}]
    356356                RenderSVGContainer {g} at (410,375) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,-10.00)}]
    357357                  RenderSVGContainer {g} at (410,375) size 14x32
     
    362362                    RenderSVGPath {line} at (440,400) size 4x25 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    363363                    RenderSVGPath {rect} at (435,418) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    364                 RenderSVGText {text} at (-8,-20) size 47x28 contains 1 chunk(s)
    365                   RenderSVGInlineText {#text} at (0,0) size 47x28
    366                     chunk 1 (middle anchor) text run 1 at (-7.65,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    367                     chunk 1 (middle anchor) text run 1 at (-7.65,5.00) startOffset 0 endOffset 3 width 45.90: "234"
     364                RenderSVGText {text} at (-8,-20) size 46x28 contains 1 chunk(s)
     365                  RenderSVGInlineText {#text} at (0,0) size 46x28
     366                    chunk 1 (middle anchor) text run 1 at (-7.50,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     367                    chunk 1 (middle anchor) text run 1 at (-7.50,5.00) startOffset 0 endOffset 3 width 45.00: "234"
    368368              RenderSVGContainer {g} at (420,425) size 77x40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,240.00)}]
    369369                RenderSVGContainer {g} at (426,425) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,-10.00)}]
     
    385385                RenderSVGText {text} at (2,-20) size 46x18 contains 1 chunk(s)
    386386                  RenderSVGInlineText {#text} at (0,0) size 46x18
    387                     chunk 1 (middle anchor) text run 1 at (2.35,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    388                     chunk 1 (middle anchor) text run 1 at (12.35,-5.00) startOffset 0 endOffset 1 width 15.30: "2"
    389                     chunk 1 (middle anchor) text run 1 at (22.35,-5.00) startOffset 0 endOffset 1 width 15.30: "3"
    390                     chunk 1 (middle anchor) text run 1 at (32.35,-5.00) startOffset 0 endOffset 1 width 15.30: "4"
     387                    chunk 1 (middle anchor) text run 1 at (2.50,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     388                    chunk 1 (middle anchor) text run 1 at (12.50,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     389                    chunk 1 (middle anchor) text run 1 at (22.50,-5.00) startOffset 0 endOffset 1 width 15.00: "3"
     390                    chunk 1 (middle anchor) text run 1 at (32.50,-5.00) startOffset 0 endOffset 1 width 15.00: "4"
    391391              RenderSVGContainer {g} at (420,475) size 135x40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,270.00)}]
    392392                RenderSVGContainer {g} at (426,475) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,-10.00)}]
     
    400400                RenderSVGText {text} at (2,-20) size 81x18 contains 1 chunk(s)
    401401                  RenderSVGInlineText {#text} at (0,0) size 81x18
    402                     chunk 1 (middle anchor) text run 1 at (2.35,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    403                     chunk 1 (middle anchor) text run 1 at (37.05,-5.00) startOffset 0 endOffset 3 width 45.90: "234"
    404       RenderSVGContainer {g} at (480,13) size 210x537 [transform={m=((1.00,0.00)(0.00,1.00)) t=(350.00,40.00)}]
     402                    chunk 1 (middle anchor) text run 1 at (2.50,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     403                    chunk 1 (middle anchor) text run 1 at (37.50,-5.00) startOffset 0 endOffset 3 width 45.00: "234"
     404      RenderSVGContainer {g} at (483,13) size 207x537 [transform={m=((1.00,0.00)(0.00,1.00)) t=(350.00,40.00)}]
    405405        RenderSVGText {text} at (-38,-32) size 76x20 contains 1 chunk(s)
    406406          RenderSVGInlineText {#text} at (0,0) size 76x20
     
    410410            chunk 1 (middle anchor) text run 1 at (-12.00,-3.00) startOffset 0 endOffset 3 width 24.00: "end"
    411411        RenderSVGPath {line} at (581,83) size 4x467 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#000000]}] [x1=0.00] [y1=10.00] [x2=0.00] [y2=290.00]
    412         RenderSVGContainer {use} at (480,91) size 210x424
    413           RenderSVGContainer {g} at (480,91) size 210x424
    414             RenderSVGContainer {g} at (480,91) size 210x424
     412        RenderSVGContainer {use} at (483,91) size 207x424
     413          RenderSVGContainer {g} at (483,91) size 207x424
     414            RenderSVGContainer {g} at (483,91) size 207x424
    415415              RenderSVGContainer {g} at (576,91) size 14x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,30.00)}]
    416416                RenderSVGContainer {g} at (576,91) size 14x33
    417417                  RenderSVGPath {line} at (581,91) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    418418                  RenderSVGPath {rect} at (576,110) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    419               RenderSVGText {text} at (-62,20) size 62x13 contains 1 chunk(s)
    420                 RenderSVGInlineText {#text} at (0,0) size 62x13
    421                   chunk 1 (end anchor) text run 1 at (-61.20,30.00) startOffset 0 endOffset 4 width 61.20: "1234"
     419              RenderSVGText {text} at (-60,20) size 60x13 contains 1 chunk(s)
     420                RenderSVGInlineText {#text} at (0,0) size 60x13
     421                  chunk 1 (end anchor) text run 1 at (-60.00,30.00) startOffset 0 endOffset 4 width 60.00: "1234"
    422422              RenderSVGContainer {g} at (593,141) size 14x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,60.00)}]
    423423                RenderSVGContainer {g} at (593,141) size 14x33
     
    436436                  RenderSVGPath {line} at (648,141) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    437437                  RenderSVGPath {rect} at (643,160) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    438               RenderSVGText {text} at (-6,50) size 46x13 contains 1 chunk(s)
    439                 RenderSVGInlineText {#text} at (0,0) size 46x13
    440                   chunk 1 (end anchor) text run 1 at (-5.30,60.00) startOffset 0 endOffset 1 width 15.30: "1"
    441                   chunk 1 (end anchor) text run 1 at (4.70,60.00) startOffset 0 endOffset 1 width 15.30: "2"
    442                   chunk 1 (end anchor) text run 1 at (14.70,60.00) startOffset 0 endOffset 1 width 15.30: "3"
    443                   chunk 1 (end anchor) text run 1 at (24.70,60.00) startOffset 0 endOffset 1 width 15.30: "4"
     438              RenderSVGText {text} at (-5,50) size 45x13 contains 1 chunk(s)
     439                RenderSVGInlineText {#text} at (0,0) size 45x13
     440                  chunk 1 (end anchor) text run 1 at (-5.00,60.00) startOffset 0 endOffset 1 width 15.00: "1"
     441                  chunk 1 (end anchor) text run 1 at (5.00,60.00) startOffset 0 endOffset 1 width 15.00: "2"
     442                  chunk 1 (end anchor) text run 1 at (15.00,60.00) startOffset 0 endOffset 1 width 15.00: "3"
     443                  chunk 1 (end anchor) text run 1 at (25.00,60.00) startOffset 0 endOffset 1 width 15.00: "4"
    444444              RenderSVGContainer {g} at (593,191) size 14x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,90.00)}]
    445445                RenderSVGContainer {g} at (593,191) size 14x33
     
    450450                  RenderSVGPath {line} at (681,191) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    451451                  RenderSVGPath {rect} at (676,210) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    452               RenderSVGText {text} at (-6,80) size 66x13 contains 1 chunk(s)
    453                 RenderSVGInlineText {#text} at (0,0) size 66x13
    454                   chunk 1 (end anchor) text run 1 at (-5.30,90.00) startOffset 0 endOffset 1 width 15.30: "1"
    455                   chunk 1 (end anchor) text run 1 at (14.10,90.00) startOffset 0 endOffset 3 width 45.90: "234"
    456               RenderSVGContainer {g} at (556,225) size 109x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,120.00)}]
     452              RenderSVGText {text} at (-5,80) size 65x13 contains 1 chunk(s)
     453                RenderSVGInlineText {#text} at (0,0) size 65x13
     454                  chunk 1 (end anchor) text run 1 at (-5.00,90.00) startOffset 0 endOffset 1 width 15.00: "1"
     455                  chunk 1 (end anchor) text run 1 at (15.00,90.00) startOffset 0 endOffset 3 width 45.00: "234"
     456              RenderSVGContainer {g} at (558,225) size 107x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,120.00)}]
    457457                RenderSVGContainer {g} at (576,225) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,-10.00)}]
    458458                  RenderSVGContainer {g} at (576,225) size 14x32
     
    471471                    RenderSVGPath {line} at (656,258) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    472472                    RenderSVGPath {rect} at (651,276) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    473                 RenderSVGText {text} at (-16,-20) size 62x33 contains 1 chunk(s)
    474                   RenderSVGInlineText {#text} at (0,0) size 62x33
    475                     chunk 1 (end anchor) text run 1 at (-15.30,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    476                     chunk 1 (end anchor) text run 1 at (0.00,-5.00) startOffset 0 endOffset 1 width 15.30: "2"
    477                     chunk 1 (end anchor) text run 1 at (15.30,5.00) startOffset 0 endOffset 1 width 15.30: "3"
    478                     chunk 1 (end anchor) text run 1 at (30.60,10.00) startOffset 0 endOffset 1 width 15.30: "4"
    479               RenderSVGContainer {g} at (573,275) size 84x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,150.00)}]
     473                RenderSVGText {text} at (-15,-20) size 60x33 contains 1 chunk(s)
     474                  RenderSVGInlineText {#text} at (0,0) size 60x33
     475                    chunk 1 (end anchor) text run 1 at (-15.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     476                    chunk 1 (end anchor) text run 1 at (0.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     477                    chunk 1 (end anchor) text run 1 at (15.00,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     478                    chunk 1 (end anchor) text run 1 at (30.00,10.00) startOffset 0 endOffset 1 width 15.00: "4"
     479              RenderSVGContainer {g} at (575,275) size 82x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,150.00)}]
    480480                RenderSVGContainer {g} at (593,275) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,-10.00)}]
    481481                  RenderSVGContainer {g} at (593,275) size 14x32
     
    494494                    RenderSVGPath {line} at (648,308) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    495495                    RenderSVGPath {rect} at (643,326) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    496                 RenderSVGText {text} at (-6,-20) size 46x33 contains 1 chunk(s)
    497                   RenderSVGInlineText {#text} at (0,0) size 46x33
    498                     chunk 1 (end anchor) text run 1 at (-5.30,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    499                     chunk 1 (end anchor) text run 1 at (4.70,-5.00) startOffset 0 endOffset 1 width 15.30: "2"
    500                     chunk 1 (end anchor) text run 1 at (14.70,5.00) startOffset 0 endOffset 1 width 15.30: "3"
    501                     chunk 1 (end anchor) text run 1 at (24.70,10.00) startOffset 0 endOffset 1 width 15.30: "4"
    502               RenderSVGContainer {g} at (573,325) size 101x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,180.00)}]
     496                RenderSVGText {text} at (-5,-20) size 45x33 contains 1 chunk(s)
     497                  RenderSVGInlineText {#text} at (0,0) size 45x33
     498                    chunk 1 (end anchor) text run 1 at (-5.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     499                    chunk 1 (end anchor) text run 1 at (5.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     500                    chunk 1 (end anchor) text run 1 at (15.00,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     501                    chunk 1 (end anchor) text run 1 at (25.00,10.00) startOffset 0 endOffset 1 width 15.00: "4"
     502              RenderSVGContainer {g} at (575,325) size 99x65 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,180.00)}]
    503503                RenderSVGContainer {g} at (593,325) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,-10.00)}]
    504504                  RenderSVGContainer {g} at (593,325) size 14x32
     
    517517                    RenderSVGPath {line} at (665,358) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    518518                    RenderSVGPath {rect} at (660,376) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    519                 RenderSVGText {text} at (-6,-20) size 57x33 contains 1 chunk(s)
    520                   RenderSVGInlineText {#text} at (0,0) size 57x33
    521                     chunk 1 (end anchor) text run 1 at (-5.30,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    522                     chunk 1 (end anchor) text run 1 at (4.70,-5.00) startOffset 0 endOffset 1 width 15.30: "2"
    523                     chunk 1 (end anchor) text run 1 at (20.00,5.00) startOffset 0 endOffset 1 width 15.30: "3"
    524                     chunk 1 (end anchor) text run 1 at (35.30,10.00) startOffset 0 endOffset 1 width 15.30: "4"
    525               RenderSVGContainer {g} at (531,375) size 84x57 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,210.00)}]
     519                RenderSVGText {text} at (-5,-20) size 55x33 contains 1 chunk(s)
     520                  RenderSVGInlineText {#text} at (0,0) size 55x33
     521                    chunk 1 (end anchor) text run 1 at (-5.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     522                    chunk 1 (end anchor) text run 1 at (5.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     523                    chunk 1 (end anchor) text run 1 at (20.00,5.00) startOffset 0 endOffset 1 width 15.00: "3"
     524                    chunk 1 (end anchor) text run 1 at (35.00,10.00) startOffset 0 endOffset 1 width 15.00: "4"
     525              RenderSVGContainer {g} at (533,375) size 82x57 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,210.00)}]
    526526                RenderSVGContainer {g} at (576,375) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,-10.00)}]
    527527                  RenderSVGContainer {g} at (576,375) size 14x32
     
    532532                    RenderSVGPath {line} at (606,400) size 4x25 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    533533                    RenderSVGPath {rect} at (601,418) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    534                 RenderSVGText {text} at (-31,-20) size 47x28 contains 1 chunk(s)
    535                   RenderSVGInlineText {#text} at (15,0) size 47x28
    536                     chunk 1 (end anchor) text run 1 at (-15.30,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    537                     chunk 1 (end anchor) text run 1 at (-30.60,5.00) startOffset 0 endOffset 3 width 45.90: "234"
    538               RenderSVGContainer {g} at (573,425) size 84x40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,240.00)}]
     534                RenderSVGText {text} at (-30,-20) size 45x28 contains 1 chunk(s)
     535                  RenderSVGInlineText {#text} at (15,0) size 45x28
     536                    chunk 1 (end anchor) text run 1 at (-15.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     537                    chunk 1 (end anchor) text run 1 at (-30.00,5.00) startOffset 0 endOffset 3 width 45.00: "234"
     538              RenderSVGContainer {g} at (575,425) size 82x40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,240.00)}]
    539539                RenderSVGContainer {g} at (593,425) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,-10.00)}]
    540540                  RenderSVGContainer {g} at (593,425) size 14x32
     
    553553                    RenderSVGPath {line} at (648,433) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    554554                    RenderSVGPath {rect} at (643,451) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    555                 RenderSVGText {text} at (-6,-20) size 46x18 contains 1 chunk(s)
    556                   RenderSVGInlineText {#text} at (0,0) size 46x18
    557                     chunk 1 (end anchor) text run 1 at (-5.30,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    558                     chunk 1 (end anchor) text run 1 at (4.70,-5.00) startOffset 0 endOffset 1 width 15.30: "2"
    559                     chunk 1 (end anchor) text run 1 at (14.70,-5.00) startOffset 0 endOffset 1 width 15.30: "3"
    560                     chunk 1 (end anchor) text run 1 at (24.70,-5.00) startOffset 0 endOffset 1 width 15.30: "4"
    561               RenderSVGContainer {g} at (573,475) size 117x40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,270.00)}]
     555                RenderSVGText {text} at (-5,-20) size 45x18 contains 1 chunk(s)
     556                  RenderSVGInlineText {#text} at (0,0) size 45x18
     557                    chunk 1 (end anchor) text run 1 at (-5.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     558                    chunk 1 (end anchor) text run 1 at (5.00,-5.00) startOffset 0 endOffset 1 width 15.00: "2"
     559                    chunk 1 (end anchor) text run 1 at (15.00,-5.00) startOffset 0 endOffset 1 width 15.00: "3"
     560                    chunk 1 (end anchor) text run 1 at (25.00,-5.00) startOffset 0 endOffset 1 width 15.00: "4"
     561              RenderSVGContainer {g} at (575,475) size 115x40 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,270.00)}]
    562562                RenderSVGContainer {g} at (593,475) size 14x32 [transform={m=((1.00,0.00)(0.00,1.00)) t=(10.00,-10.00)}]
    563563                  RenderSVGContainer {g} at (593,475) size 14x32
     
    568568                    RenderSVGPath {line} at (681,483) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    569569                    RenderSVGPath {rect} at (676,501) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    570                 RenderSVGText {text} at (-6,-20) size 66x18 contains 1 chunk(s)
    571                   RenderSVGInlineText {#text} at (0,0) size 66x18
    572                     chunk 1 (end anchor) text run 1 at (-5.30,-10.00) startOffset 0 endOffset 1 width 15.30: "1"
    573                     chunk 1 (end anchor) text run 1 at (14.10,-5.00) startOffset 0 endOffset 3 width 45.90: "234"
     570                RenderSVGText {text} at (-5,-20) size 65x18 contains 1 chunk(s)
     571                  RenderSVGInlineText {#text} at (0,0) size 65x18
     572                    chunk 1 (end anchor) text run 1 at (-5.00,-10.00) startOffset 0 endOffset 1 width 15.00: "1"
     573                    chunk 1 (end anchor) text run 1 at (15.00,-5.00) startOffset 0 endOffset 3 width 45.00: "234"
    574574    RenderSVGText {text} at (10,313) size 269x48 contains 1 chunk(s)
    575575      RenderSVGInlineText {#text} at (0,0) size 269x48
  • trunk/LayoutTests/platform/mac/svg/text/text-text-06-t-expected.txt

    r89233 r89311  
    5151                RenderSVGPath {line} at (415,91) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    5252                RenderSVGPath {rect} at (410,110) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    53           RenderSVGText {text} at (10,-10) size 136x13 contains 1 chunk(s)
    54             RenderSVGInlineText {#text} at (0,0) size 136x13
    55               chunk 1 text run 1 at (10.00,0.00) startOffset 0 endOffset 2 width 15.30: "fi"
    56               chunk 1 text run 1 at (40.00,0.00) startOffset 0 endOffset 1 width 15.30: "1"
    57               chunk 1 text run 1 at (70.00,0.00) startOffset 0 endOffset 1 width 15.30: "2"
    58               chunk 1 text run 1 at (100.00,0.00) startOffset 0 endOffset 1 width 15.30: "3"
    59               chunk 1 text run 1 at (130.00,0.00) startOffset 0 endOffset 1 width 15.30: "4"
    60         RenderSVGContainer {g} at (193,141) size 136x133 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,80.00)}]
     53          RenderSVGText {text} at (10,-10) size 135x13 contains 1 chunk(s)
     54            RenderSVGInlineText {#text} at (0,0) size 135x13
     55              chunk 1 text run 1 at (10.00,0.00) startOffset 0 endOffset 2 width 15.00: "fi"
     56              chunk 1 text run 1 at (40.00,0.00) startOffset 0 endOffset 1 width 15.00: "1"
     57              chunk 1 text run 1 at (70.00,0.00) startOffset 0 endOffset 1 width 15.00: "2"
     58              chunk 1 text run 1 at (100.00,0.00) startOffset 0 endOffset 1 width 15.00: "3"
     59              chunk 1 text run 1 at (130.00,0.00) startOffset 0 endOffset 1 width 15.00: "4"
     60        RenderSVGContainer {g} at (193,141) size 132x133 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,80.00)}]
    6161          RenderSVGContainer {use} at (193,141) size 14x33
    6262            RenderSVGContainer {g} at (193,141) size 14x33 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,-10.00)}]
     
    8989                RenderSVGPath {line} at (298,208) size 4x26 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    9090                RenderSVGPath {rect} at (293,226) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    91           RenderSVGText {text} at (0,-20) size 77x53 contains 1 chunk(s)
    92             RenderSVGInlineText {#text} at (0,0) size 77x53
    93               chunk 1 text run 1 at (0.00,-10.00) startOffset 0 endOffset 2 width 15.30: "fi"
    94               chunk 1 text run 1 at (15.30,0.00) startOffset 0 endOffset 1 width 15.30: "1"
    95               chunk 1 text run 1 at (30.60,10.00) startOffset 0 endOffset 1 width 15.30: "2"
    96               chunk 1 text run 1 at (45.90,20.00) startOffset 0 endOffset 1 width 15.30: "3"
    97               chunk 1 text run 1 at (61.20,30.00) startOffset 0 endOffset 1 width 15.30: "4"
     91          RenderSVGText {text} at (0,-20) size 75x53 contains 1 chunk(s)
     92            RenderSVGInlineText {#text} at (0,0) size 75x53
     93              chunk 1 text run 1 at (0.00,-10.00) startOffset 0 endOffset 2 width 15.00: "fi"
     94              chunk 1 text run 1 at (15.00,0.00) startOffset 0 endOffset 1 width 15.00: "1"
     95              chunk 1 text run 1 at (30.00,10.00) startOffset 0 endOffset 1 width 15.00: "2"
     96              chunk 1 text run 1 at (45.00,20.00) startOffset 0 endOffset 1 width 15.00: "3"
     97              chunk 1 text run 1 at (60.00,30.00) startOffset 0 endOffset 1 width 15.00: "4"
    9898        RenderSVGContainer {g} at (210,308) size 297x132 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,180.00)}]
    9999          RenderSVGContainer {use} at (210,308) size 14x32
     
    127127                RenderSVGPath {line} at (415,375) size 4x25 [stroke={[type=SOLID] [color=#FF0000]}] [fill={[type=SOLID] [color=#8888FF]}] [x1=0.00] [y1=0.00] [x2=0.00] [y2=-15.00]
    128128                RenderSVGPath {rect} at (410,393) size 14x14 [fill={[type=SOLID] [color=#8888FF]}] [x=-4.00] [y=-4.00] [width=8.00] [height=8.00]
    129           RenderSVGText {text} at (10,-20) size 136x53 contains 1 chunk(s)
    130             RenderSVGInlineText {#text} at (0,0) size 136x53
    131               chunk 1 text run 1 at (10.00,-10.00) startOffset 0 endOffset 2 width 15.30: "fi"
    132               chunk 1 text run 1 at (40.00,0.00) startOffset 0 endOffset 1 width 15.30: "1"
    133               chunk 1 text run 1 at (70.00,10.00) startOffset 0 endOffset 1 width 15.30: "2"
    134               chunk 1 text run 1 at (100.00,20.00) startOffset 0 endOffset 1 width 15.30: "3"
    135               chunk 1 text run 1 at (130.00,30.00) startOffset 0 endOffset 1 width 15.30: "4"
     129          RenderSVGText {text} at (10,-20) size 135x53 contains 1 chunk(s)
     130            RenderSVGInlineText {#text} at (0,0) size 135x53
     131              chunk 1 text run 1 at (10.00,-10.00) startOffset 0 endOffset 2 width 15.00: "fi"
     132              chunk 1 text run 1 at (40.00,0.00) startOffset 0 endOffset 1 width 15.00: "1"
     133              chunk 1 text run 1 at (70.00,10.00) startOffset 0 endOffset 1 width 15.00: "2"
     134              chunk 1 text run 1 at (100.00,20.00) startOffset 0 endOffset 1 width 15.00: "3"
     135              chunk 1 text run 1 at (130.00,30.00) startOffset 0 endOffset 1 width 15.00: "4"
    136136    RenderSVGText {text} at (10,303) size 269x48 contains 1 chunk(s)
    137137      RenderSVGInlineText {#text} at (0,0) size 269x48
  • trunk/LayoutTests/platform/mac/svg/transforms/text-with-mask-with-svg-transform-expected.txt

    r89233 r89311  
    3939        RenderSVGPath {rect} at (11,288) size 158x104 [fill={[type=SOLID] [color=#FFFFFF]}] [x=60.00] [y=250.00] [width=200.00] [height=25.00]
    4040        RenderSVGPath {rect} at (0,306) size 157x103 [fill={[type=SOLID] [color=#FFFFFF] [opacity=0.70]}] [x=60.00] [y=275.00] [width=200.00] [height=25.00]
    41       RenderSVGText {text} at (60,202) size 127x112 contains 1 chunk(s)
     41      RenderSVGText {text} at (60,202) size 126x112 contains 1 chunk(s)
    4242        [masker="mask3"] RenderSVGResourceMasker {mask} at (60,200) size 200x100
    43         RenderSVGInlineText {#text} at (0,0) size 127x112
     43        RenderSVGInlineText {#text} at (0,0) size 126x112
    4444          [masker="mask3"] RenderSVGResourceMasker {mask} at (60,200) size 200x100
    45           chunk 1 text run 1 at (60.00,280.00) startOffset 0 endOffset 2 width 81.25: "SV"
    46           chunk 1 text run 2 at (145.65,280.00) startOffset 2 endOffset 3 width 40.52: "G"
     45          chunk 1 text run 1 at (60.00,280.00) startOffset 0 endOffset 2 width 80.96: "SV"
     46          chunk 1 text run 2 at (145.36,280.00) startOffset 2 endOffset 3 width 40.37: "G"
    4747      RenderSVGText {text} at (200,214) size 204x14 contains 1 chunk(s)
    4848        RenderSVGInlineText {#text} at (0,0) size 204x14
  • trunk/LayoutTests/platform/mac/svg/wicd/test-rightsizing-b-expected.txt

    r89233 r89311  
    2323                  RenderSVGText {text} at (26,59) size 148x83 contains 1 chunk(s)
    2424                    RenderSVGInlineText {#text} at (0,0) size 148x83
    25                       chunk 1 (middle anchor) text run 1 at (26.65,125.00) startOffset 0 endOffset 3 width 146.70: "SVG"
     25                      chunk 1 (middle anchor) text run 1 at (26.72,125.00) startOffset 0 endOffset 3 width 146.56: "SVG"
    2626          RenderText {#text} at (294,280) size 4x17
    2727            text run at (294,280) width 4: " "
     
    3535                RenderSVGPath {circle} at (0,0) size 147x147 [fill={[type=SOLID] [color=#0000FF]}] [cx=100.00] [cy=100.00] [r=100.00]
    3636                RenderSVGContainer {g} at (19,44) size 109x61
    37                   RenderSVGText {text} at (27,60) size 146x82 contains 1 chunk(s)
    38                     RenderSVGInlineText {#text} at (0,0) size 146x82
    39                       chunk 1 (middle anchor) text run 1 at (27.36,125.00) startOffset 0 endOffset 3 width 145.28: "SVG"
     37                  RenderSVGText {text} at (26,60) size 148x82 contains 1 chunk(s)
     38                    RenderSVGInlineText {#text} at (0,0) size 148x82
     39                      chunk 1 (middle anchor) text run 1 at (26.72,125.00) startOffset 0 endOffset 3 width 146.56: "SVG"
    4040          RenderText {#text} at (445,280) size 4x17
    4141            text run at (445,280) width 4: " "
     
    4949                RenderSVGPath {circle} at (0,0) size 73x73 [fill={[type=SOLID] [color=#0000FF]}] [cx=100.00] [cy=100.00] [r=100.00]
    5050                RenderSVGContainer {g} at (9,21) size 55x31
    51                   RenderSVGText {text} at (25,58) size 150x84 contains 1 chunk(s)
    52                     RenderSVGInlineText {#text} at (0,0) size 150x84
    53                       chunk 1 (middle anchor) text run 1 at (25.43,125.00) startOffset 0 endOffset 3 width 149.14: "SVG"
     51                  RenderSVGText {text} at (26,58) size 148x84 contains 1 chunk(s)
     52                    RenderSVGInlineText {#text} at (0,0) size 148x84
     53                      chunk 1 (middle anchor) text run 1 at (26.72,125.00) startOffset 0 endOffset 3 width 146.56: "SVG"
    5454          RenderText {#text} at (522,280) size 4x17
    5555            text run at (522,280) width 4: " "
     
    6363                RenderSVGPath {circle} at (0,0) size 36x36 [fill={[type=SOLID] [color=#0000FF]}] [cx=100.00] [cy=100.00] [r=100.00]
    6464                RenderSVGContainer {g} at (4,10) size 28x16
    65                   RenderSVGText {text} at (24,57) size 152x86 contains 1 chunk(s)
    66                     RenderSVGInlineText {#text} at (0,0) size 152x86
    67                       chunk 1 (middle anchor) text run 1 at (24.39,125.00) startOffset 0 endOffset 3 width 151.22: "SVG"
     65                  RenderSVGText {text} at (26,57) size 148x86 contains 1 chunk(s)
     66                    RenderSVGInlineText {#text} at (0,0) size 148x86
     67                      chunk 1 (middle anchor) text run 1 at (26.72,125.00) startOffset 0 endOffset 3 width 146.56: "SVG"
    6868          RenderText {#text} at (0,0) size 0x0
    6969        RenderBlock {p} at (0,366) size 678x64
  • trunk/LayoutTests/svg/custom/resources/ABCFont.svg

    r89233 r89311  
    3030            <glyph glyph-name="c" unicode="c" horiz-adv-x="1147"
    3131                d="M1053 319q-39 -170 -150 -259t-287 -89q-232 0 -373 153.5t-141 407.5q0 255 141 407.5t373 152.5q101 0 201 -23.5t201 -71.5v-272h-107q-21 140 -91.5 204t-201.5 64q-149 0 -225 -115.5t-76 -345.5t75.5 -346t225.5 -116q119 0 190 62t97 187h148z" />
    32             <glyph glyph-name="ellipsis" unicode="&#x2026;" horiz-adv-x="1638" d="M133 0v268h279v-268h-279zM680 0v268h278v-268h-278zM1225 0v268h278v-268h-278z" />
    3332        </font>
    3433    </defs>
  • trunk/Source/JavaScriptCore/ChangeLog

    r89285 r89311  
     12011-06-20  Kenneth Russell  <kbr@google.com>
     2
     3        Unreviewed.
     4
     5        Rolled out r89233 and r89235 because of crashes in http/tests/misc/acid3.html on Snow Leopard and other platforms
     6        https://bugs.webkit.org/show_bug.cgi?id=63022
     7
     8        * wtf/Platform.h:
     9
    1102011-06-18  Anders Carlsson  <andersca@apple.com>
    211
  • trunk/Source/JavaScriptCore/wtf/Platform.h

    r89233 r89311  
    11/*
    2  * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
     2 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc.  All rights reserved.
    33 * Copyright (C) 2007-2009 Torch Mobile, Inc.
    44 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
  • trunk/Source/WebCore/ChangeLog

    r89305 r89311  
     12011-06-20  Kenneth Russell  <kbr@google.com>
     2
     3        Unreviewed.
     4
     5        Rolled out r89233 and r89235 because of crashes in http/tests/misc/acid3.html on Snow Leopard and other platforms
     6        https://bugs.webkit.org/show_bug.cgi?id=63022
     7
     8        * features.pri:
     9        * page/DOMWindow.idl:
     10        * platform/graphics/Font.cpp:
     11        (WebCore::Font::drawText):
     12        (WebCore::Font::drawEmphasisMarks):
     13        (WebCore::Font::width):
     14        (WebCore::Font::selectionRectForText):
     15        (WebCore::Font::offsetForPosition):
     16        (WebCore::Font::codePath):
     17        * platform/graphics/Font.h:
     18        * platform/graphics/FontFallbackList.h:
     19        * platform/graphics/FontFastPath.cpp:
     20        (WebCore::Font::glyphDataForCharacter):
     21        (WebCore::Font::getEmphasisMarkGlyphData):
     22        (WebCore::Font::drawGlyphBuffer):
     23        * platform/graphics/FontMetrics.h:
     24        * platform/graphics/GlyphPageTreeNode.cpp:
     25        (WebCore::fill):
     26        * platform/graphics/SVGGlyph.h:
     27        (WebCore::SVGGlyph::SVGGlyph):
     28        (WebCore::SVGGlyph::operator==):
     29        * platform/graphics/SimpleFontData.cpp:
     30        (WebCore::SimpleFontData::SimpleFontData):
     31        * platform/graphics/SimpleFontData.h:
     32        (WebCore::SimpleFontData::widthForGlyph):
     33        * platform/graphics/TextRun.h:
     34        * platform/graphics/WidthIterator.cpp:
     35        (WebCore::WidthIterator::advance):
     36        * platform/graphics/WidthIterator.h:
     37        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
     38        (WebCore::scaleEmToUnits):
     39        * platform/graphics/mac/SimpleFontDataMac.mm:
     40        (WebCore::scaleEmToUnits):
     41        * platform/graphics/win/SimpleFontDataCGWin.cpp:
     42        (WebCore::scaleEmToUnits):
     43        * rendering/svg/SVGTextMetrics.cpp:
     44        (WebCore::SVGTextMetrics::SVGTextMetrics):
     45        (WebCore::constructTextRun):
     46        (WebCore::SVGTextMetrics::measureCharacterRange):
     47        * rendering/svg/SVGTextMetrics.h:
     48        * rendering/svg/SVGTextRunRenderingContext.cpp:
     49        (WebCore::convertEmUnitToPixel):
     50        (WebCore::isVerticalWritingMode):
     51        (WebCore::firstParentRendererForNonTextNode):
     52        (WebCore::referencingRenderObjectFromRun):
     53        (WebCore::SVGTextRunWalker::SVGTextRunWalker):
     54        (WebCore::SVGTextRunWalker::walk):
     55        (WebCore::floatWidthUsingSVGFontCallback):
     56        (WebCore::floatWidthMissingGlyphCallback):
     57        (WebCore::floatWidthOfSubStringUsingSVGFont):
     58        (WebCore::SVGTextRunRenderingContext::floatWidthUsingSVGFont):
     59        (WebCore::drawTextUsingSVGFontCallback):
     60        (WebCore::drawTextMissingGlyphCallback):
     61        (WebCore::SVGTextRunRenderingContext::drawTextUsingSVGFont):
     62        (WebCore::SVGTextRunRenderingContext::selectionRectForTextUsingSVGFont):
     63        (WebCore::SVGTextRunRenderingContext::offsetForPositionForTextUsingSVGFont):
     64        * rendering/svg/SVGTextRunRenderingContext.h:
     65        * svg/SVGAltGlyphElement.cpp:
     66        (WebCore::SVGAltGlyphElement::glyphElement):
     67        * svg/SVGAltGlyphElement.h:
     68        * svg/SVGFontData.cpp:
     69        (WebCore::SVGFontData::initializeFontData):
     70        * svg/SVGFontData.h:
     71        * svg/SVGFontElement.cpp:
     72        (WebCore::SVGFontElement::registerLigaturesInGlyphCache):
     73        (WebCore::SVGFontElement::ensureGlyphCache):
     74        * svg/SVGGlyphMap.h:
     75        (WebCore::SVGGlyphMap::addGlyphByUnicodeString):
     76        * svg/svgtags.in:
     77
    1782011-06-20  Scott Byer  <scottbyer@chromium.org>
    279
  • trunk/Source/WebCore/features.pri

    r89233 r89311  
    3636    DEFINES += WTF_USE_QT4_UNICODE=1
    3737    DEFINES -= WTF_USE_ICU_UNICODE
    38 }
    39 
    40 isEmpty(HAVE_QRAWFONT) {
    41     # We have to disable SVG Fonts, which rely on the fast path.
    42     DEFINES -= ENABLE_SVG_FONTS=1
    43     DEFINES += ENABLE_SVG_FONTS=0
    4438}
    4539
  • trunk/Source/WebCore/page/DOMWindow.idl

    r89233 r89311  
    2121 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    2222 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
    2424 */
    2525
  • trunk/Source/WebCore/platform/graphics/Font.cpp

    r89233 r89311  
    136136    to = (to == -1 ? run.length() : to);
    137137
     138#if ENABLE(SVG_FONTS)
     139    if (TextRun::RenderingContext* renderingContext = run.renderingContext()) {
     140        renderingContext->drawTextUsingSVGFont(*this, context, run, point, from, to);
     141        return;
     142    }
     143#endif
     144
    138145    CodePath codePathToUse = codePath(run);
    139146
     
    156163    if (to < 0)
    157164        to = run.length();
     165
     166#if ENABLE(SVG_FONTS)
     167    // FIXME: Implement for SVG fonts.
     168    if (primaryFont()->isSVGFont())
     169        return;
     170#endif
    158171
    159172    if (codePath(run) != Complex)
     
    165178float Font::width(const TextRun& run, HashSet<const SimpleFontData*>* fallbackFonts, GlyphOverflow* glyphOverflow) const
    166179{
     180#if ENABLE(SVG_FONTS)
     181    if (TextRun::RenderingContext* renderingContext = run.renderingContext())
     182        return renderingContext->floatWidthUsingSVGFont(*this, run);
     183#endif
     184
    167185    CodePath codePathToUse = codePath(run);
    168186    if (codePathToUse != Complex) {
     
    176194}
    177195
    178 float Font::width(const TextRun& run, int& charsConsumed, String& glyphName) const
     196float Font::width(const TextRun& run, int extraCharsAvailable, int& charsConsumed, String& glyphName) const
    179197{
    180198#if ENABLE(SVG_FONTS)
    181199    if (TextRun::RenderingContext* renderingContext = run.renderingContext())
    182         return renderingContext->floatWidthUsingSVGFont(*this, run, charsConsumed, glyphName);
     200        return renderingContext->floatWidthUsingSVGFont(*this, run, extraCharsAvailable, charsConsumed, glyphName);
     201#else
     202    UNUSED_PARAM(extraCharsAvailable);
    183203#endif
    184204
     
    194214FloatRect Font::selectionRectForText(const TextRun& run, const FloatPoint& point, int h, int from, int to) const
    195215{
     216#if ENABLE(SVG_FONTS)
     217    if (TextRun::RenderingContext* renderingContext = run.renderingContext())
     218        return renderingContext->selectionRectForTextUsingSVGFont(*this, run, point, h, from, to);
     219#endif
     220 
    196221    to = (to == -1 ? run.length() : to);
    197222
     
    204229int Font::offsetForPosition(const TextRun& run, float x, bool includePartialGlyphs) const
    205230{
     231#if ENABLE(SVG_FONTS)
     232    if (TextRun::RenderingContext* renderingContext = run.renderingContext())
     233        return renderingContext->offsetForPositionForTextUsingSVGFont(*this, run, x, includePartialGlyphs);
     234#endif
     235
    206236    if (codePath(run) != Complex)
    207237        return offsetForPositionForSimpleText(run, x, includePartialGlyphs);
     
    248278    if (s_codePath != Auto)
    249279        return s_codePath;
    250 
    251 #if ENABLE(SVG_FONTS)
    252     if (run.renderingContext())
    253         return Simple;
    254 #endif
    255280
    256281#if PLATFORM(QT) && !HAVE(QRAWFONT)
  • trunk/Source/WebCore/platform/graphics/Font.h

    r89233 r89311  
    9898
    9999    float width(const TextRun&, HashSet<const SimpleFontData*>* fallbackFonts = 0, GlyphOverflow* = 0) const;
    100     float width(const TextRun&, int& charsConsumed, String& glyphName) const;
     100    float width(const TextRun&, int extraCharsAvailable, int& charsConsumed, String& glyphName) const;
    101101
    102102    int offsetForPosition(const TextRun&, float position, bool includePartialGlyphs) const;
     
    140140    const FontData* fontDataAt(unsigned) const;
    141141    GlyphData glyphDataForCharacter(UChar32, bool mirror, FontDataVariant = AutoVariant) const;
    142     std::pair<GlyphData, GlyphPage*> glyphDataAndPageForCharacter(UChar32, bool mirror, FontDataVariant = AutoVariant) const;
    143142    bool primaryFontHasGlyphForCharacter(UChar32) const;
    144143
     
    187186
    188187    friend struct WidthIterator;
    189     friend class SVGTextRunRenderingContext;
    190188
    191189public:
     
    215213
    216214    bool needsTranscoding() const { return m_needsTranscoding; }
    217     FontFallbackList* fontList() const { return m_fontList.get(); }
    218215
    219216private:
  • trunk/Source/WebCore/platform/graphics/FontFallbackList.h

    r89235 r89311  
    5353    unsigned generation() const { return m_generation; }
    5454
    55     typedef HashMap<int, GlyphPageTreeNode*> GlyphPages;
    56     GlyphPageTreeNode* glyphPageZero() const { return m_pageZero; }
    57     const GlyphPages& glyphPages() const { return m_pages; }
    58 
    5955private:
    60     friend class SVGTextRunRenderingContext;
    61     void setGlyphPageZero(GlyphPageTreeNode* pageZero) { m_pageZero = pageZero; }
    62     void setGlyphPages(const GlyphPages& pages) { m_pages = pages; }
    63 
    6456    FontFallbackList();
    6557
     
    8072
    8173    mutable Vector<pair<const FontData*, bool>, 1> m_fontList;
    82     mutable GlyphPages m_pages;
     74    mutable HashMap<int, GlyphPageTreeNode*> m_pages;
    8375    mutable GlyphPageTreeNode* m_pageZero;
    8476    mutable const SimpleFontData* m_cachedPrimarySimpleFontData;
  • trunk/Source/WebCore/platform/graphics/FontFastPath.cpp

    r89233 r89311  
    4444GlyphData Font::glyphDataForCharacter(UChar32 c, bool mirror, FontDataVariant variant) const
    4545{
    46     return glyphDataAndPageForCharacter(c, mirror, variant).first;
    47 }
    48 
    49 std::pair<GlyphData, GlyphPage*> Font::glyphDataAndPageForCharacter(UChar32 c, bool mirror, FontDataVariant variant) const
    50 {
    5146    ASSERT(isMainThread());
    5247
    5348    if (variant == AutoVariant) {
    54         if (m_fontDescription.smallCaps() && !primaryFont()->isSVGFont()) {
     49        if (m_fontDescription.smallCaps()) {
    5550            UChar32 upperC = toUpper(c);
    5651            if (upperC != c) {
     
    8580                GlyphData data = page->glyphDataForCharacter(c);
    8681                if (data.fontData && (data.fontData->platformData().orientation() == Horizontal || data.fontData->isTextOrientationFallback()))
    87                     return make_pair(data, page);
     82                    return data;
    8883
    8984                if (data.fontData) {
     
    9994                            const SimpleFontData* verticalRightFontData = data.fontData->verticalRightOrientationFontData();
    10095                            GlyphPageTreeNode* verticalRightNode = GlyphPageTreeNode::getRootChild(verticalRightFontData, pageNumber);
    101                             GlyphPage* verticalRightPage = verticalRightNode->page();
     96                            const GlyphPage* verticalRightPage = verticalRightNode->page();
    10297                            if (verticalRightPage) {
    10398                                GlyphData verticalRightData = verticalRightPage->glyphDataForCharacter(c);
     
    105100                                // into it.
    106101                                if (data.glyph != verticalRightData.glyph)
    107                                     return make_pair(data, page);
     102                                    return data;
    108103                                // The glyphs are identical, meaning that we should just use the horizontal glyph.
    109104                                if (verticalRightData.fontData)
    110                                     return make_pair(verticalRightData, verticalRightPage);
     105                                    return verticalRightData;
    111106                            }
    112107                        } else if (m_fontDescription.textOrientation() == TextOrientationUpright) {
    113108                            const SimpleFontData* uprightFontData = data.fontData->uprightOrientationFontData();
    114109                            GlyphPageTreeNode* uprightNode = GlyphPageTreeNode::getRootChild(uprightFontData, pageNumber);
    115                             GlyphPage* uprightPage = uprightNode->page();
     110                            const GlyphPage* uprightPage = uprightNode->page();
    116111                            if (uprightPage) {
    117112                                GlyphData uprightData = uprightPage->glyphDataForCharacter(c);
    118113                                // If the glyphs are the same, then we know we can just use the horizontal glyph rotated vertically to be upright.
    119114                                if (data.glyph == uprightData.glyph)
    120                                     return make_pair(data, page);
     115                                    return data;
    121116                                // The glyphs are distinct, meaning that the font has a vertical-right glyph baked into it. We can't use that
    122117                                // glyph, so we fall back to the upright data and use the horizontal glyph.
    123118                                if (uprightData.fontData)
    124                                     return make_pair(uprightData, uprightPage);
     119                                    return uprightData;
    125120                            }
    126121                        }
     
    129124                        ASSERT_NOT_REACHED();
    130125                    }
    131                     return make_pair(data, page);
     126                    return data;
    132127                }
    133128
     
    154149                    const SimpleFontData* variantFontData = data.fontData->variantFontData(m_fontDescription, variant);
    155150                    if (!variantFontData)
    156                         return make_pair(data, page);
     151                        return data;
    157152
    158153                    GlyphPageTreeNode* variantNode = GlyphPageTreeNode::getRootChild(variantFontData, pageNumber);
    159                     GlyphPage* variantPage = variantNode->page();
     154                    const GlyphPage* variantPage = variantNode->page();
    160155                    if (variantPage) {
    161156                        GlyphData data = variantPage->glyphDataForCharacter(c);
    162157                        if (data.fontData)
    163                             return make_pair(data, variantPage);
     158                            return data;
    164159                    }
    165160
    166161                    // Do not attempt system fallback off the variantFontData. This is the very unlikely case that
    167162                    // a font has the lowercase character but the small caps font does not have its uppercase version.
    168                     return make_pair(variantFontData->missingGlyphData(), page);
     163                    return variantFontData->missingGlyphData();
    169164                }
    170165
     
    218213            page->setGlyphDataForCharacter(c, c, characterFontData);
    219214            characterFontData->setMaxGlyphPageTreeLevel(max(characterFontData->maxGlyphPageTreeLevel(), node->level()));
    220             return make_pair(page->glyphDataForCharacter(c), page);
     215            return page->glyphDataForCharacter(c);
    221216#else
    222217            page->setGlyphDataForCharacter(c, data.glyph, data.fontData);
     
    224219#endif
    225220        }
    226         return make_pair(data, page);
     221        return data;
    227222    }
    228223
     
    235230        page->setGlyphDataForCharacter(c, c, data.fontData);
    236231        data.fontData->setMaxGlyphPageTreeLevel(max(data.fontData->maxGlyphPageTreeLevel(), node->level()));
    237         return make_pair(page->glyphDataForCharacter(c), page);
     232        return page->glyphDataForCharacter(c);
    238233#else
    239234        page->setGlyphDataForCharacter(c, data.glyph, data.fontData);
     
    241236#endif
    242237    }
    243     return make_pair(data, page);
     238    return data;
    244239}
    245240
     
    260255    if (mark.isEmpty())
    261256        return false;
     257
     258#if ENABLE(SVG_FONTS)
     259    // FIXME: Implement for SVG fonts.
     260    if (primaryFont()->isSVGFont())
     261        return false;
     262#endif
    262263
    263264    UChar32 character = mark[0];
     
    376377}
    377378
    378 void Font::drawGlyphBuffer(GraphicsContext* context, const TextRun& run, const GlyphBuffer& glyphBuffer, const FloatPoint& point) const
     379void Font::drawGlyphBuffer(GraphicsContext* context, const TextRun&, const GlyphBuffer& glyphBuffer, const FloatPoint& point) const
    379380{   
    380381    // Draw each contiguous run of glyphs that use the same font data.
     
    385386    int lastFrom = 0;
    386387    int nextGlyph = 0;
    387 #if ENABLE(SVG_FONTS)
    388     TextRun::RenderingContext* renderingContext = run.renderingContext();
    389 #endif
    390388    while (nextGlyph < glyphBuffer.size()) {
    391389        const SimpleFontData* nextFontData = glyphBuffer.fontDataAt(nextGlyph);
    392390        FloatSize nextOffset = glyphBuffer.offsetAt(nextGlyph);
    393 
    394391        if (nextFontData != fontData || nextOffset != offset) {
    395 #if ENABLE(SVG_FONTS)
    396             if (renderingContext && fontData->isSVGFont())
    397                 renderingContext->drawSVGGlyphs(context, run, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
    398             else
    399 #endif
    400                 drawGlyphs(context, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
     392            drawGlyphs(context, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
    401393
    402394            lastFrom = nextGlyph;
     
    409401    }
    410402
    411 #if ENABLE(SVG_FONTS)
    412     if (renderingContext && fontData->isSVGFont())
    413         renderingContext->drawSVGGlyphs(context, run, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
    414     else
    415 #endif
    416         drawGlyphs(context, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
     403    drawGlyphs(context, fontData, glyphBuffer, lastFrom, nextGlyph - lastFrom, startPoint);
    417404}
    418405
  • trunk/Source/WebCore/platform/graphics/FontMetrics.h

    r89233 r89311  
    123123};
    124124
    125 static inline float scaleEmToUnits(float x, unsigned unitsPerEm)
    126 {
    127     return unitsPerEm ? x / unitsPerEm : x;
    128 }
    129 
    130125} // namespace WebCore
    131126
  • trunk/Source/WebCore/platform/graphics/GlyphPageTreeNode.cpp

    r89233 r89311  
    127127static bool fill(GlyphPage* pageToFill, unsigned offset, unsigned length, UChar* buffer, unsigned bufferLength, const SimpleFontData* fontData)
    128128{
    129 #if ENABLE(SVG_FONTS)
    130     if (SimpleFontData::AdditionalFontData* additionalFontData = fontData->fontData())
    131         return additionalFontData->fillSVGGlyphPage(pageToFill, offset, length, buffer, bufferLength, fontData);
    132 #endif
    133     return pageToFill->fill(offset, length, buffer, bufferLength, fontData);
     129    if (!fontData->isSVGFont())
     130        return pageToFill->fill(offset, length, buffer, bufferLength, fontData);
     131
     132    // SVG Fonts do not use the glyph page cache. Zero fill the glyph
     133    // positions and return false to indicate the glyphs were not found.
     134    for (unsigned i = 0; i < length; ++i)
     135        pageToFill->setGlyphDataForIndex(offset + i, 0, 0);
     136    return false;
    134137}
    135138
  • trunk/Source/WebCore/platform/graphics/SVGGlyph.h

    r89233 r89311  
    5252
    5353    SVGGlyph()
    54         : isPartOfLigature(false)
     54        : isValid(false)
    5555        , orientation(Both)
    5656        , arabicForm(None)
     
    7474    bool operator==(const SVGGlyph& other) const
    7575    {
    76         return isPartOfLigature == other.isPartOfLigature
     76        return isValid == other.isValid
    7777            && orientation == other.orientation
    7878            && arabicForm == other.arabicForm
     
    8787    }
    8888
    89     bool isPartOfLigature : 1;
     89    bool isValid : 1;
    9090
    9191    unsigned orientation : 2; // Orientation
  • trunk/Source/WebCore/platform/graphics/SimpleFontData.cpp

    r89233 r89311  
    5757}
    5858
    59 SimpleFontData::SimpleFontData(PassOwnPtr<AdditionalFontData> fontData, float fontSize, bool syntheticBold, bool syntheticItalic)
    60     : m_platformData(FontPlatformData(fontSize, syntheticBold, syntheticItalic))
     59SimpleFontData::SimpleFontData(PassOwnPtr<AdditionalFontData> fontData, int size, bool syntheticBold, bool syntheticItalic)
     60    : m_platformData(FontPlatformData(size, syntheticBold, syntheticItalic))
    6161    , m_fontData(fontData)
    6262    , m_treatAsFixedPitch(false)
     
    6767    , m_hasVerticalGlyphs(false)
    6868{
    69     m_fontData->initializeFontData(this, fontSize);
     69    m_fontData->initializeFontData(this, size);
    7070}
    7171
  • trunk/Source/WebCore/platform/graphics/SimpleFontData.h

    r89233 r89311  
    6565class FontDescription;
    6666class SharedBuffer;
    67 struct WidthIterator;
    6867
    6968enum FontDataVariant { AutoVariant, NormalVariant, SmallCapsVariant, EmphasisMarkVariant, BrokenIdeographVariant };
     
    7675    public:
    7776        virtual ~AdditionalFontData() { }
    78 
    79         virtual void initializeFontData(SimpleFontData*, float fontSize) = 0;
    80         virtual float widthForSVGGlyph(Glyph, float fontSize) const = 0;
    81         virtual bool fillSVGGlyphPage(GlyphPage*, unsigned offset, unsigned length, UChar* buffer, unsigned bufferLength, const SimpleFontData*) const = 0;
    82         virtual bool applySVGGlyphSelection(WidthIterator&, GlyphData&, bool mirror, int currentCharacter, unsigned& advanceLength) const = 0;
     77   
     78        virtual void initializeFontData(SimpleFontData*, int) = 0;
    8379    };
    8480
     
    8783
    8884    // Used to create SVG Fonts.
    89     SimpleFontData(PassOwnPtr<AdditionalFontData>, float fontSize, bool syntheticBold, bool syntheticItalic);
     85    SimpleFontData(PassOwnPtr<AdditionalFontData>, int size, bool syntheticBold, bool syntheticItalic);
    9086
    9187    virtual ~SimpleFontData();
     
    326322        return width;
    327323
    328     if (m_fontData)
    329         width = m_fontData->widthForSVGGlyph(glyph, m_platformData.size());
    330     else
    331         width = platformWidthForGlyph(glyph);
    332 
     324    width = platformWidthForGlyph(glyph);
    333325    m_glyphToWidthMap.setMetricsForGlyph(glyph, width);
    334326    return width;
  • trunk/Source/WebCore/platform/graphics/TextRun.h

    r89233 r89311  
    3535class Font;
    3636class GraphicsContext;
    37 class GlyphBuffer;
    38 class SimpleFontData;
    39 struct GlyphData;
    40 struct WidthIterator;
    4137
    4238class TextRun {
     
    122118
    123119#if ENABLE(SVG_FONTS)
    124         virtual GlyphData glyphDataForCharacter(const Font&, const TextRun&, WidthIterator&, UChar32 character, bool mirror, int currentCharacter, unsigned& advanceLength) = 0;
    125         virtual void drawSVGGlyphs(GraphicsContext*, const TextRun&, const SimpleFontData*, const GlyphBuffer&, int from, int to, const FloatPoint&) const = 0;
    126         virtual float floatWidthUsingSVGFont(const Font&, const TextRun&, int& charsConsumed, String& glyphName) const = 0;
     120        // FIXME: Note that the SVG Font integration APIs will be more abstract and simpler once the SVG Fonts rewrite patch lands (59085).
     121        virtual void drawTextUsingSVGFont(const Font&, GraphicsContext*, const TextRun&, const FloatPoint&, int from, int to) const = 0;
     122        virtual float floatWidthUsingSVGFont(const Font&, const TextRun&) const = 0;
     123        virtual float floatWidthUsingSVGFont(const Font&, const TextRun&, int extraCharsAvailable, int& charsConsumed, String& glyphName) const = 0;
     124        virtual FloatRect selectionRectForTextUsingSVGFont(const Font&, const TextRun&, const FloatPoint&, int h, int from, int to) const = 0;
     125        virtual int offsetForPositionForTextUsingSVGFont(const Font&, const TextRun&, float position, bool includePartialGlyphs) const = 0;
    127126#endif
    128127    };
  • trunk/Source/WebCore/platform/graphics/WidthIterator.cpp

    r89233 r89311  
    7575}
    7676
    77 GlyphData WidthIterator::glyphDataForCharacter(UChar32 character, bool mirror, int currentCharacter, unsigned& advanceLength)
    78 {
    79     ASSERT(m_font);
    80 
    81 #if ENABLE(SVG_FONTS)
    82     if (TextRun::RenderingContext* renderingContext = m_run.renderingContext())
    83         return renderingContext->glyphDataForCharacter(*m_font, m_run, *this, character, mirror, currentCharacter, advanceLength);
    84 #else
    85     UNUSED_PARAM(currentCharacter);
    86     UNUSED_PARAM(advanceLength);
    87 #endif
    88 
    89     return m_font->glyphDataForCharacter(character, mirror);
    90 }
    91 
    92 unsigned WidthIterator::advance(int offset, GlyphBuffer* glyphBuffer)
     77void WidthIterator::advance(int offset, GlyphBuffer* glyphBuffer)
    9378{
    9479    if (offset > m_end)
     
    9782    int currentCharacter = m_currentCharacter;
    9883    if (currentCharacter >= offset)
    99         return 0;
     84        return;
    10085
    10186    const UChar* cp = m_run.data(currentCharacter);
     
    139124        }
    140125
    141         unsigned advanceLength = clusterLength;
    142         const GlyphData& glyphData = glyphDataForCharacter(c, rtl, currentCharacter, advanceLength);
     126        const GlyphData& glyphData = m_font->glyphDataForCharacter(c, rtl);
    143127        Glyph glyph = glyphData.glyph;
    144128        const SimpleFontData* fontData = glyphData.fontData;
     
    223207
    224208        // Advance past the character we just dealt with.
    225         cp += advanceLength;
    226         currentCharacter += advanceLength;
     209        cp += clusterLength;
     210        currentCharacter += clusterLength;
    227211
    228212        m_runWidthSoFar += width;
     
    238222    }
    239223
    240     unsigned consumedCharacters = currentCharacter - m_currentCharacter;
    241224    m_currentCharacter = currentCharacter;
    242     return consumedCharacters;
    243225}
    244226
  • trunk/Source/WebCore/platform/graphics/WidthIterator.h

    r89233 r89311  
    2323#define WidthIterator_h
    2424
    25 #include "SVGGlyph.h"
    2625#include <wtf/HashSet.h>
    27 #include <wtf/Vector.h>
    2826#include <wtf/unicode/Unicode.h>
    2927
     
    3432class SimpleFontData;
    3533class TextRun;
    36 struct GlyphData;
    3734
    3835struct WidthIterator {
    3936    WidthIterator(const Font*, const TextRun&, HashSet<const SimpleFontData*>* fallbackFonts = 0, bool accountForGlyphBounds = false, bool forTextEmphasis = false);
    4037
    41     unsigned advance(int to, GlyphBuffer* = 0);
     38    void advance(int to, GlyphBuffer* = 0);
    4239    bool advanceOneCharacter(float& width, GlyphBuffer* = 0);
    4340
     
    4643    float firstGlyphOverflow() const { ASSERT(m_accountForGlyphBounds); return m_firstGlyphOverflow; }
    4744    float lastGlyphOverflow() const { ASSERT(m_accountForGlyphBounds); return m_lastGlyphOverflow; }
    48 
    49     const TextRun& run() const { return m_run; }
    50     float runWidthSoFar() const { return m_runWidthSoFar; }
    51 
    52 #if ENABLE(SVG_FONTS)
    53     String lastGlyphName() const { return m_lastGlyphName; }
    54     void setLastGlyphName(const String& name) { m_lastGlyphName = name; }
    55     Vector<SVGGlyph::ArabicForm>& arabicForms() { return m_arabicForms; }
    56 #endif
    5745
    5846    const Font* m_font;
     
    6755    bool m_isAfterExpansion;
    6856
    69 #if ENABLE(SVG_FONTS)
    70     String m_lastGlyphName;
    71     Vector<SVGGlyph::ArabicForm> m_arabicForms;
    72 #endif
    73 
    7457private:
    75     GlyphData glyphDataForCharacter(UChar32, bool mirror, int currentCharacter, unsigned& advanceLength);
    7658    UChar32 normalizeVoicingMarks(int currentCharacter);
    7759
  • trunk/Source/WebCore/platform/graphics/chromium/SimpleFontDataChromiumWin.cpp

    r89233 r89311  
    4747namespace WebCore {
    4848
     49static inline float scaleEmToUnits(float x, int unitsPerEm)
     50{
     51    return unitsPerEm ? x / static_cast<float>(unitsPerEm) : x;
     52}
     53
    4954void SimpleFontData::platformInit()
    5055{
  • trunk/Source/WebCore/platform/graphics/mac/SimpleFontDataMac.mm

    r89233 r89311  
    5757 
    5858const float smallCapsFontSizeMultiplier = 0.7f;
     59static inline float scaleEmToUnits(float x, unsigned unitsPerEm) { return x / unitsPerEm; }
    5960
    6061static bool fontHasVerticalGlyphs(CTFontRef ctFont)
  • trunk/Source/WebCore/platform/graphics/win/SimpleFontDataCGWin.cpp

    r89233 r89311  
    4747
    4848using std::max;
     49
     50static inline float scaleEmToUnits(float x, unsigned unitsPerEm) { return unitsPerEm ? x / static_cast<float>(unitsPerEm) : x; }
    4951
    5052void SimpleFontData::platformInit()
  • trunk/Source/WebCore/rendering/svg/SVGTextMetrics.cpp

    r89233 r89311  
    3535}
    3636
    37 SVGTextMetrics::SVGTextMetrics(RenderSVGInlineText* textRenderer, const TextRun& run)
     37SVGTextMetrics::SVGTextMetrics(RenderSVGInlineText* textRenderer, const TextRun& run, unsigned position, unsigned textLength)
    3838{
    3939    ASSERT(textRenderer);
     
    4343
    4444    const Font& scaledFont = textRenderer->scaledFont();
     45
     46    int extraCharsAvailable = textLength - (position + run.length());
    4547    int length = 0;
    4648
    4749    // Calculate width/height using the scaled font, divide this result by the scalingFactor afterwards.
    48     m_width = scaledFont.width(run, length, m_glyph.name) / scalingFactor;
     50    m_width = scaledFont.width(run, extraCharsAvailable, length, m_glyph.name) / scalingFactor;
    4951    m_height = scaledFont.fontMetrics().floatHeight() / scalingFactor;
    5052
     
    9092    // We handle letter & word spacing ourselves.
    9193    run.disableSpacing();
    92 
    93     // Propagate the maximum length of the characters buffer to the TextRun, even when we're only processing a substring.
    94     run.setCharactersLength(text->textLength() - position);
    95     ASSERT(run.charactersLength() >= run.length());
    9694    return run;
    9795}
     
    10098{
    10199    ASSERT(text);
    102     return SVGTextMetrics(text, constructTextRun(text, text->characters(), position, length));
     100    return SVGTextMetrics(text, constructTextRun(text, text->characters(), position, length), position, text->textLength());
    103101}
    104102
  • trunk/Source/WebCore/rendering/svg/SVGTextMetrics.h

    r89233 r89311  
    6767private:
    6868    SVGTextMetrics();
    69     SVGTextMetrics(RenderSVGInlineText*, const TextRun&);
     69    SVGTextMetrics(RenderSVGInlineText*, const TextRun&, unsigned position, unsigned textLength);
    7070
    7171    float m_width;
  • trunk/Source/WebCore/rendering/svg/SVGTextRunRenderingContext.cpp

    r89233 r89311  
    2222
    2323#if ENABLE(SVG_FONTS)
    24 #include "SVGTextRunRenderingContext.h"
    25 
    2624#include "Font.h"
    27 #include "GlyphBuffer.h"
     25
     26#include "CSSFontSelector.h"
    2827#include "GraphicsContext.h"
    2928#include "RenderObject.h"
    3029#include "RenderSVGInlineText.h"
    3130#include "RenderSVGResourceSolidColor.h"
     31#include "SVGAltGlyphElement.h"
    3232#include "SVGFontData.h"
    3333#include "SVGFontElement.h"
    3434#include "SVGFontFaceElement.h"
    3535#include "SVGGlyphElement.h"
     36#include "SVGGlyphMap.h"
     37#include "SVGMissingGlyphElement.h"
    3638#include "SVGNames.h"
    37 #include "WidthIterator.h"
     39#include "SVGTextRunRenderingContext.h"
     40#include "SimpleFontData.h"
     41#include "XMLNames.h"
     42
     43using namespace WTF::Unicode;
    3844
    3945namespace WebCore {
     46
     47static inline float convertEmUnitToPixel(float fontSize, float unitsPerEm, float value)
     48{
     49    if (!unitsPerEm)
     50        return 0.0f;
     51
     52    return value * fontSize / unitsPerEm;
     53}
     54
     55static inline bool isVerticalWritingMode(const SVGRenderStyle* style)
     56{
     57    return style->writingMode() == WM_TBRL || style->writingMode() == WM_TB;
     58}
    4059
    4160static inline const SVGFontData* svgFontAndFontFaceElementForFontData(const SimpleFontData* fontData, SVGFontFaceElement*& fontFace, SVGFontElement*& font)
     
    5776{
    5877    ASSERT(renderer);
    59     return renderer->isText() ? renderer->parent() : renderer;
    60 }
    61 
    62 static inline RenderObject* renderObjectFromRun(const TextRun& run)
     78    RenderObject* newRenderer = renderer->isText() ? renderer->parent() : renderer;
     79    return newRenderer;
     80}
     81
     82static inline RenderObject* referencingRenderObjectFromRun(const TextRun& run)
    6383{
    6484    if (TextRun::RenderingContext* renderingContext = run.renderingContext())
     
    7494}
    7595
    76 float SVGTextRunRenderingContext::floatWidthUsingSVGFont(const Font& font, const TextRun& run, int& charsConsumed, String& glyphName) const
    77 {
    78     WidthIterator it(&font, run);
    79     charsConsumed += it.advance(run.length());
    80     glyphName = it.lastGlyphName();
    81     return it.runWidthSoFar();
    82 }
    83  
    84 void SVGTextRunRenderingContext::drawSVGGlyphs(GraphicsContext* context, const TextRun& run, const SimpleFontData* fontData, const GlyphBuffer& glyphBuffer, int from, int numGlyphs, const FloatPoint& point) const
    85 {
     96// Helper class to walk a text run. Lookup a SVGGlyph for each character
     97// - also respecting possibly defined ligatures - and invoke a callback for each found glyph.
     98template<typename SVGTextRunData>
     99struct SVGTextRunWalker {
     100    typedef bool (*SVGTextRunWalkerCallback)(const SVGGlyph&, SVGTextRunData&);
     101    typedef void (*SVGTextRunWalkerMissingGlyphCallback)(const TextRun&, SVGTextRunData&);
     102
     103    SVGTextRunWalker(const SVGFontData* fontData, SVGFontElement* fontElement, SVGTextRunData& data,
     104                     SVGTextRunWalkerCallback callback, SVGTextRunWalkerMissingGlyphCallback missingGlyphCallback)
     105        : m_fontData(fontData)
     106        , m_fontElement(fontElement)
     107        , m_walkerData(data)
     108        , m_walkerCallback(callback)
     109        , m_walkerMissingGlyphCallback(missingGlyphCallback)
     110    {
     111    }
     112
     113    void walk(const TextRun& run, bool isVerticalText, const String& language, int from, int to)
     114    {
     115        if (from < 0 || to < 0 || from > to || from >= run.length() || to > run.length())
     116            return;         
     117
     118        const String text = Font::normalizeSpaces(run.data(from), to - from);
     119        Vector<SVGGlyph::ArabicForm> chars(charactersWithArabicForm(text, run.rtl()));
     120
     121        SVGGlyph identifier;
     122        bool foundGlyph = false;
     123        int characterLookupRange;
     124        int endOfScanRange = to + m_walkerData.extraCharsAvailable;
     125
     126        RenderObject* renderObject = referencingRenderObjectFromRun(run);
     127        RenderObject* parentRenderObject = firstParentRendererForNonTextNode(renderObject);
     128
     129        bool haveAltGlyph = false;
     130        SVGGlyph altGlyphIdentifier;
     131        Node* node = parentRenderObject->node();
     132        if (node && node->hasTagName(SVGNames::altGlyphTag)) {
     133            if (SVGGlyphElement* glyphElement = static_cast<SVGAltGlyphElement*>(node)->glyphElement()) {
     134                haveAltGlyph = true;
     135                altGlyphIdentifier = glyphElement->buildGlyphIdentifier();
     136                altGlyphIdentifier.isValid = true;
     137                altGlyphIdentifier.unicodeStringLength = to - from;
     138            }
     139        }
     140
     141        for (int i = from; i < to; ++i) {
     142            // If characterLookupRange is > 0, then the font defined ligatures (length of unicode property value > 1).
     143            // We have to check wheter the current character & the next character define a ligature. This needs to be
     144            // extended to the n-th next character (where n is 'characterLookupRange'), to check for any possible ligature.
     145            characterLookupRange = endOfScanRange - i;
     146
     147            String lookupString = Font::normalizeSpaces(run.data(i), characterLookupRange);
     148
     149            Vector<SVGGlyph> glyphs;
     150            if (haveAltGlyph)
     151                glyphs.append(altGlyphIdentifier);
     152            else
     153                m_fontElement->collectGlyphsForString(lookupString, glyphs);
     154
     155            Vector<SVGGlyph>::iterator it = glyphs.begin();
     156            Vector<SVGGlyph>::iterator end = glyphs.end();
     157           
     158            for (; it != end; ++it) {
     159                identifier = *it;
     160                if (identifier.isValid && isCompatibleGlyph(identifier, isVerticalText, language, chars, i, i + identifier.unicodeStringLength)) {
     161                    ASSERT(characterLookupRange > 0);
     162                    i += identifier.unicodeStringLength - 1;
     163                    m_walkerData.charsConsumed += identifier.unicodeStringLength;
     164                    m_walkerData.glyphName = identifier.glyphName;
     165
     166                    foundGlyph = true;
     167                    SVGGlyphElement::inheritUnspecifiedAttributes(identifier, m_fontData);
     168                    break;
     169                }
     170            }
     171
     172            if (!foundGlyph) {
     173                ++m_walkerData.charsConsumed;
     174                if (SVGMissingGlyphElement* element = m_fontElement->firstMissingGlyphElement()) {
     175                    // <missing-glyph> element support
     176                    identifier = SVGGlyphElement::buildGenericGlyphIdentifier(element);
     177                    SVGGlyphElement::inheritUnspecifiedAttributes(identifier, m_fontData);
     178                    identifier.isValid = true;
     179                } else {
     180                    // Fallback to system font fallback
     181                    TextRun subRun(run);
     182                    subRun.setRenderingContext(0);
     183                    subRun.setText(subRun.data(i), 1);
     184
     185                    (*m_walkerMissingGlyphCallback)(subRun, m_walkerData);
     186                    continue;
     187                }
     188            }
     189
     190            if (!(*m_walkerCallback)(identifier, m_walkerData))
     191                break;
     192
     193            foundGlyph = false;
     194        }
     195    }
     196
     197private:
     198    const SVGFontData* m_fontData;
     199    SVGFontElement* m_fontElement;
     200    SVGTextRunData& m_walkerData;
     201    SVGTextRunWalkerCallback m_walkerCallback;
     202    SVGTextRunWalkerMissingGlyphCallback m_walkerMissingGlyphCallback;
     203};
     204
     205// Callback & data structures to compute the width of text using SVG Fonts
     206struct SVGTextRunWalkerMeasuredLengthData {
     207    int at;
     208    int from;
     209    int to;
     210    int extraCharsAvailable;
     211    int charsConsumed;
     212    String glyphName;
     213
     214    float scale;
     215    float length;
     216    const Font* font;
     217};
     218
     219static bool floatWidthUsingSVGFontCallback(const SVGGlyph& identifier, SVGTextRunWalkerMeasuredLengthData& data)
     220{
     221    if (data.at >= data.from && data.at < data.to)
     222        data.length += identifier.horizontalAdvanceX * data.scale;
     223
     224    data.at++;
     225    return data.at < data.to;
     226}
     227
     228static void floatWidthMissingGlyphCallback(const TextRun& run, SVGTextRunWalkerMeasuredLengthData& data)
     229{
     230    // Handle system font fallback
     231    FontDescription fontDescription(data.font->fontDescription());
     232    fontDescription.setFamily(FontFamily());
     233    Font font(fontDescription, 0, 0); // spacing handled by SVG text code.
     234    font.update(data.font->fontSelector());
     235
     236    TextRun fallbackRun(run);
     237    fallbackRun.setRenderingContext(0);
     238    data.length += font.width(fallbackRun);
     239}
     240
     241static float floatWidthOfSubStringUsingSVGFont(const Font& font, const TextRun& run, int extraCharsAvailable, int from, int to, int& charsConsumed, String& glyphName)
     242{
     243    int newFrom = to > from ? from : to;
     244    int newTo = to > from ? to : from;
     245
     246    from = newFrom;
     247    to = newTo;
     248
    86249    SVGFontElement* fontElement = 0;
    87250    SVGFontFaceElement* fontFaceElement = 0;
    88251
    89     const SVGFontData* svgFontData = svgFontAndFontFaceElementForFontData(fontData, fontFaceElement, fontElement);
    90     if (!fontElement || !fontFaceElement)
    91         return;
    92 
    93     // We can only paint SVGFonts if a context is available.
    94     RenderSVGResource* activePaintingResource = activePaintingResourceFromRun(run);
    95     RenderObject* renderObject = renderObjectFromRun(run);
    96     RenderObject* parentRenderObject = firstParentRendererForNonTextNode(renderObject);
    97     RenderStyle* parentRenderObjectStyle = 0;
    98 
    99     ASSERT(renderObject);
    100     if (!activePaintingResource) {
    101         // TODO: We're only supporting simple filled HTML text so far.
    102         RenderSVGResourceSolidColor* solidPaintingResource = RenderSVGResource::sharedSolidPaintingResource();
    103         solidPaintingResource->setColor(context->fillColor());
    104         activePaintingResource = solidPaintingResource;
     252    if (const SVGFontData* fontData = svgFontAndFontFaceElementForFontData(font.primaryFont(), fontFaceElement, fontElement)) {
     253        if (!fontElement)
     254            return 0.0f;
     255
     256        SVGTextRunWalkerMeasuredLengthData data;
     257
     258        data.font = &font;
     259        data.at = from;
     260        data.from = from;
     261        data.to = to;
     262        data.extraCharsAvailable = extraCharsAvailable;
     263        data.charsConsumed = 0;
     264        data.scale = convertEmUnitToPixel(font.size(), fontFaceElement->unitsPerEm(), 1.0f);
     265        data.length = 0.0f;
     266
     267        RenderObject* renderObject = referencingRenderObjectFromRun(run);
     268        RenderObject* parentRenderObject = firstParentRendererForNonTextNode(renderObject);
     269
     270        String language;
     271        if (SVGElement* element = static_cast<SVGElement*>(parentRenderObject->node()))
     272            language = element->getAttribute(XMLNames::langAttr);
     273
     274        bool isVerticalText = isVerticalWritingMode(parentRenderObject->style()->svgStyle());
     275
     276        SVGTextRunWalker<SVGTextRunWalkerMeasuredLengthData> runWalker(fontData, fontElement, data, floatWidthUsingSVGFontCallback, floatWidthMissingGlyphCallback);
     277        runWalker.walk(run, isVerticalText, language, from, to);
     278        charsConsumed = data.charsConsumed;
     279        glyphName = data.glyphName;
     280        return data.length;
    105281    }
    106  
    107     bool isVerticalText = false;
    108     if (parentRenderObject) {
    109         parentRenderObjectStyle = parentRenderObject->style();
    110         ASSERT(parentRenderObjectStyle);
    111         isVerticalText = parentRenderObjectStyle->svgStyle()->isVerticalWritingMode();
    112     }
    113 
    114     float scale = scaleEmToUnits(fontData->platformData().size(), fontFaceElement->unitsPerEm());
    115     ASSERT(activePaintingResource);
    116 
    117     FloatPoint glyphOrigin;
    118     glyphOrigin.setX(svgFontData->horizontalOriginX() * scale);
    119     glyphOrigin.setY(svgFontData->horizontalOriginY() * scale);
    120 
    121     FloatPoint currentPoint = point;
    122     RenderSVGResourceMode resourceMode = context->textDrawingMode() == TextModeStroke ? ApplyToStrokeMode : ApplyToFillMode;
    123     for (int i = 0; i < numGlyphs; ++i) {
    124         Glyph glyph = glyphBuffer.glyphAt(from + i);
    125         if (!glyph)
    126             continue;
    127 
    128         float advance = glyphBuffer.advanceAt(from + i);
    129         SVGGlyph svgGlyph = fontElement->svgGlyphForGlyph(glyph);
    130         ASSERT(!svgGlyph.isPartOfLigature);
    131         ASSERT(svgGlyph.tableEntry == glyph);
    132 
    133         SVGGlyphElement::inheritUnspecifiedAttributes(svgGlyph, svgFontData);
    134 
    135         // FIXME: Support arbitary SVG content as glyph (currently limited to <glyph d="..."> situations).
    136         if (svgGlyph.pathData.isEmpty()) {
    137             if (isVerticalText)
    138                 currentPoint.move(0, advance);
    139             else
    140                 currentPoint.move(advance, 0);
    141             continue;
    142          }
    143 
    144         context->save();
    145 
    146         if (isVerticalText) {
    147             glyphOrigin.setX(svgGlyph.verticalOriginX * scale);
    148             glyphOrigin.setY(svgGlyph.verticalOriginY * scale);
    149          }
    150 
    151         AffineTransform glyphPathTransform;
    152         glyphPathTransform.translate(currentPoint.x() + glyphOrigin.x(), currentPoint.y() + glyphOrigin.y());
    153         glyphPathTransform.scale(scale, -scale);
    154 
    155         Path glyphPath = svgGlyph.pathData;
    156         glyphPath.transform(glyphPathTransform);
    157 
    158         if (activePaintingResource->applyResource(parentRenderObject, parentRenderObjectStyle, context, resourceMode)) {
    159             if (renderObject && renderObject->isSVGInlineText()) {
    160                 const RenderSVGInlineText* textRenderer = toRenderSVGInlineText(renderObject);
    161                 context->setStrokeThickness(context->strokeThickness() * textRenderer->scalingFactor());
    162             }
    163             activePaintingResource->postApplyResource(parentRenderObject, context, resourceMode, &glyphPath);
    164          }
    165  
    166         context->restore();
    167 
    168         if (isVerticalText)
    169             currentPoint.move(0, advance);
    170         else
    171             currentPoint.move(advance, 0);
    172     }
    173 }
    174 
    175 GlyphData SVGTextRunRenderingContext::glyphDataForCharacter(const Font& font, const TextRun& run, WidthIterator& iterator, UChar32 character, bool mirror, int currentCharacter, unsigned& advanceLength)
    176 {
    177     const SimpleFontData* primaryFont = font.primaryFont();
    178     ASSERT(primaryFont);
    179 
    180     pair<GlyphData, GlyphPage*> pair = font.glyphDataAndPageForCharacter(character, mirror);
    181     GlyphData glyphData = pair.first;
    182     if (!glyphData.fontData)
    183         return glyphData;
    184 
    185     GlyphData missingGlyphData = primaryFont->missingGlyphData();
    186     if (glyphData.glyph == missingGlyphData.glyph && glyphData.fontData == missingGlyphData.fontData)
    187         return glyphData;
    188 
    189     // Characters enclosed by an <altGlyph> element, may not be registered in the GlyphPage.
    190     if (!glyphData.fontData->isSVGFont()) {
    191         if (TextRun::RenderingContext* renderingContext = run.renderingContext()) {
    192             RenderObject* renderObject = static_cast<SVGTextRunRenderingContext*>(renderingContext)->renderer();
    193             RenderObject* parentRenderObject = renderObject->isText() ? renderObject->parent() : renderObject;
    194             ASSERT(parentRenderObject);
    195             if (Element* parentRenderObjectElement = toElement(parentRenderObject->node())) {
    196                 if (parentRenderObjectElement->hasTagName(SVGNames::altGlyphTag))
    197                     glyphData.fontData = primaryFont;
     282
     283    return 0.0f;
     284}
     285
     286float SVGTextRunRenderingContext::floatWidthUsingSVGFont(const Font& font, const TextRun& run) const
     287{
     288    int charsConsumed;
     289    String glyphName;
     290    return floatWidthOfSubStringUsingSVGFont(font, run, 0, 0, run.length(), charsConsumed, glyphName);
     291}
     292
     293float SVGTextRunRenderingContext::floatWidthUsingSVGFont(const Font& font, const TextRun& run, int extraCharsAvailable, int& charsConsumed, String& glyphName) const
     294{
     295    return floatWidthOfSubStringUsingSVGFont(font, run, extraCharsAvailable, 0, run.length(), charsConsumed, glyphName);
     296}
     297
     298// Callback & data structures to draw text using SVG Fonts
     299struct SVGTextRunWalkerDrawTextData {
     300    int extraCharsAvailable;
     301    int charsConsumed;
     302    String glyphName;
     303    Vector<SVGGlyph> glyphIdentifiers;
     304    Vector<UChar> fallbackCharacters;
     305};
     306
     307static bool drawTextUsingSVGFontCallback(const SVGGlyph& identifier, SVGTextRunWalkerDrawTextData& data)
     308{
     309    data.glyphIdentifiers.append(identifier);
     310    return true;
     311}
     312
     313static void drawTextMissingGlyphCallback(const TextRun& run, SVGTextRunWalkerDrawTextData& data)
     314{
     315    ASSERT(run.length() == 1);
     316    data.glyphIdentifiers.append(SVGGlyph());
     317    data.fallbackCharacters.append(run[0]);
     318}
     319
     320void SVGTextRunRenderingContext::drawTextUsingSVGFont(const Font& font, GraphicsContext* context, const TextRun& run, const FloatPoint& point, int from, int to) const
     321{
     322    SVGFontElement* fontElement = 0;
     323    SVGFontFaceElement* fontFaceElement = 0;
     324
     325    if (const SVGFontData* fontData = svgFontAndFontFaceElementForFontData(font.primaryFont(), fontFaceElement, fontElement)) {
     326        if (!fontElement)
     327            return;
     328
     329        SVGTextRunWalkerDrawTextData data;
     330        FloatPoint currentPoint = point;
     331        float scale = convertEmUnitToPixel(font.size(), fontFaceElement->unitsPerEm(), 1.0f);
     332
     333        // We can only paint SVGFonts if a context is available.
     334        RenderObject* renderObject = referencingRenderObjectFromRun(run);
     335        RenderObject* parentRenderObject = firstParentRendererForNonTextNode(renderObject);
     336
     337        // If activePaintingResource is not set, we're dealing for HTML text rendered using SVG Fonts.
     338        RenderSVGResource* activePaintingResource = activePaintingResourceFromRun(run);
     339        if (!activePaintingResource) {
     340            // TODO: We're only supporting simple filled HTML text so far.
     341            RenderSVGResourceSolidColor* solidPaintingResource = RenderSVGResource::sharedSolidPaintingResource();
     342            solidPaintingResource->setColor(context->fillColor());
     343
     344            activePaintingResource = solidPaintingResource;
     345        }
     346
     347        int charsConsumed;
     348        String glyphName;
     349        float xStartOffset = floatWidthOfSubStringUsingSVGFont(font, run, 0, run.rtl() ? to : 0, run.rtl() ? run.length() : from, charsConsumed, glyphName);
     350        FloatPoint glyphOrigin;
     351
     352        String language;
     353        if (SVGElement* element = static_cast<SVGElement*>(parentRenderObject->node()))
     354            language = element->getAttribute(XMLNames::langAttr);
     355
     356        RenderStyle* parentRenderObjectStyle = parentRenderObject->style();
     357        bool isVerticalText = isVerticalWritingMode(parentRenderObjectStyle->svgStyle());
     358        if (!isVerticalText) {
     359            glyphOrigin.setX(fontData->horizontalOriginX() * scale);
     360            glyphOrigin.setY(fontData->horizontalOriginY() * scale);
     361        }
     362
     363        data.extraCharsAvailable = 0;
     364        data.charsConsumed = 0;
     365
     366        SVGTextRunWalker<SVGTextRunWalkerDrawTextData> runWalker(fontData, fontElement, data, drawTextUsingSVGFontCallback, drawTextMissingGlyphCallback);
     367        runWalker.walk(run, isVerticalText, language, from, to);
     368
     369        RenderSVGResourceMode resourceMode = context->textDrawingMode() == TextModeStroke ? ApplyToStrokeMode : ApplyToFillMode;
     370
     371        unsigned numGlyphs = data.glyphIdentifiers.size();
     372        unsigned fallbackCharacterIndex = 0;
     373        for (unsigned i = 0; i < numGlyphs; ++i) {
     374            const SVGGlyph& identifier = data.glyphIdentifiers[run.rtl() ? numGlyphs - i - 1 : i];
     375            if (identifier.isValid) {
     376                // FIXME: Support arbitary SVG content as glyph (currently limited to <glyph d="..."> situations).
     377                if (!identifier.pathData.isEmpty()) {
     378                    GraphicsContextStateSaver stateSaver(*context);
     379
     380                    if (isVerticalText) {
     381                        glyphOrigin.setX(identifier.verticalOriginX * scale);
     382                        glyphOrigin.setY(identifier.verticalOriginY * scale);
     383                    }
     384
     385                    AffineTransform glyphPathTransform;
     386                    glyphPathTransform.translate(xStartOffset + currentPoint.x() + glyphOrigin.x(), currentPoint.y() + glyphOrigin.y());
     387                    glyphPathTransform.scale(scale, -scale);
     388
     389                    Path glyphPath = identifier.pathData;
     390                    glyphPath.transform(glyphPathTransform);
     391
     392                    if (activePaintingResource->applyResource(parentRenderObject, parentRenderObjectStyle, context, resourceMode)) {
     393                        if (renderObject && renderObject->isSVGInlineText()) {
     394                            const RenderSVGInlineText* textRenderer = toRenderSVGInlineText(renderObject);
     395                            context->setStrokeThickness(context->strokeThickness() * textRenderer->scalingFactor());
     396                        }
     397                        activePaintingResource->postApplyResource(parentRenderObject, context, resourceMode, &glyphPath);
     398                    }
     399                }
     400
     401                if (isVerticalText)
     402                    currentPoint.move(0.0f, identifier.verticalAdvanceY * scale);
     403                else
     404                    currentPoint.move(identifier.horizontalAdvanceX * scale, 0.0f);
     405            } else {
     406                // Handle system font fallback
     407                FontDescription fontDescription(font.fontDescription());
     408                fontDescription.setFamily(FontFamily());
     409                Font font(fontDescription, 0, 0); // spacing handled by SVG text code.
     410                font.update(font.fontSelector());
     411
     412                TextRun fallbackCharacterRun(run);
     413                fallbackCharacterRun.setRenderingContext(0);
     414                fallbackCharacterRun.setText(&data.fallbackCharacters[run.rtl() ? data.fallbackCharacters.size() - fallbackCharacterIndex - 1 : fallbackCharacterIndex], 1);
     415                font.drawText(context, fallbackCharacterRun, currentPoint);
     416
     417                if (isVerticalText)
     418                    currentPoint.move(0.0f, font.width(fallbackCharacterRun));
     419                else
     420                    currentPoint.move(font.width(fallbackCharacterRun), 0.0f);
     421
     422                fallbackCharacterIndex++;
    198423            }
    199424        }
    200425    }
    201 
    202     if (!glyphData.fontData || !glyphData.fontData->isSVGFont())
    203         return glyphData;
    204 
    205     const SimpleFontData* fontData = glyphData.fontData;
    206 
    207     SVGFontElement* fontElement = 0;
    208     SVGFontFaceElement* fontFaceElement = 0;
    209 
    210     const SVGFontData* svgFontData = svgFontAndFontFaceElementForFontData(fontData, fontFaceElement, fontElement);
    211     if (!fontElement || !fontFaceElement)
    212         return glyphData;
    213 
    214     // If we got here, we're dealing with a glyph defined in a SVG Font.
    215     // The returned glyph by glyphDataAndPageForCharacter() is a glyph stored in the SVG Font glyph table.
    216     // This doesn't necessarily mean the glyph is suitable for rendering/measuring in this context, its
    217     // arabic-form/orientation/... may not match, we have to apply SVG Glyph selection to discover that.
    218     if (svgFontData->applySVGGlyphSelection(iterator, glyphData, mirror, currentCharacter, advanceLength))
    219         return glyphData;
    220 
    221     GlyphPage* page = pair.second;
    222     ASSERT(page);
    223 
    224     FontFallbackList* fontList = font.fontList();
    225     ASSERT(fontList);
    226 
    227     // No suitable glyph found that is compatible with the requirments (same language, arabic-form, orientation etc.)
    228     // Even though our GlyphPage contains an entry for eg. glyph "a", it's not compatible. So we have to temporarily
    229     // remove the glyph data information from the GlyphPage, and retry the lookup, which handles font fallbacks correctly.
    230     GlyphPageTreeNode* originalGlyphPageZero = fontList->glyphPageZero();
    231     const FontFallbackList::GlyphPages& originalGlyphPages = fontList->glyphPages();
    232     page->setGlyphDataForCharacter(character, glyphData.glyph, 0);
    233 
    234     // Assure that the font fallback glyph selection worked, aka. the fallbackGlyphData font data is not the same as before.
    235     GlyphData fallbackGlyphData = font.glyphDataForCharacter(character, mirror);
    236     ASSERT(fallbackGlyphData.fontData != fontData);
    237 
    238     // Restore original state of the SVG Font glyph table and the current font fallback list,
    239     // to assure the next lookup of the same glyph won't immediately return the fallback glyph.
    240     page->setGlyphDataForCharacter(character, glyphData.glyph, fontData);
    241     fontList->setGlyphPageZero(originalGlyphPageZero);
    242     fontList->setGlyphPages(originalGlyphPages);
    243     return fallbackGlyphData;
     426}
     427
     428FloatRect SVGTextRunRenderingContext::selectionRectForTextUsingSVGFont(const Font& font, const TextRun& run, const FloatPoint& point, int height, int from, int to) const
     429{
     430    int charsConsumed;
     431    String glyphName;
     432
     433    return FloatRect(point.x() + floatWidthOfSubStringUsingSVGFont(font, run, 0, run.rtl() ? to : 0, run.rtl() ? run.length() : from, charsConsumed, glyphName),
     434                     point.y(), floatWidthOfSubStringUsingSVGFont(font, run, 0, from, to, charsConsumed, glyphName), height);
     435}
     436
     437int SVGTextRunRenderingContext::offsetForPositionForTextUsingSVGFont(const Font&, const TextRun&, float, bool) const
     438{
     439    // TODO: Fix text selection when HTML text is drawn using a SVG Font
     440    // We need to integrate the SVG text selection code in the offsetForPosition() framework.
     441    // This will also fix a major issue, that SVG Text code can't select arabic strings properly.
     442    return 0;
    244443}
    245444
  • trunk/Source/WebCore/rendering/svg/SVGTextRunRenderingContext.h

    r89233 r89311  
    2222#define SVGTextRunRenderingContext_h
    2323
    24 #include "Font.h"
    2524#include "TextRun.h"
    2625
     
    4342    void setActivePaintingResource(RenderSVGResource* object) { m_activePaintingResource = object; }
    4443
    45     virtual GlyphData glyphDataForCharacter(const Font&, const TextRun&, WidthIterator&, UChar32 character, bool mirror, int currentCharacter, unsigned& advanceLength);
    46     virtual void drawSVGGlyphs(GraphicsContext*, const TextRun&, const SimpleFontData*, const GlyphBuffer&, int from, int to, const FloatPoint&) const;
    47     virtual float floatWidthUsingSVGFont(const Font&, const TextRun&, int& charsConsumed, String& glyphName) const;
     44    virtual void drawTextUsingSVGFont(const Font&, GraphicsContext*, const TextRun&, const FloatPoint&, int from, int to) const;
     45    virtual float floatWidthUsingSVGFont(const Font&, const TextRun&) const;
     46    virtual float floatWidthUsingSVGFont(const Font&, const TextRun&, int extraCharsAvailable, int& charsConsumed, String& glyphName) const;
     47    virtual FloatRect selectionRectForTextUsingSVGFont(const Font&, const TextRun&, const FloatPoint&, int h, int from, int to) const;
     48    virtual int offsetForPositionForTextUsingSVGFont(const Font&, const TextRun&, float position, bool includePartialGlyphs) const;
    4849#endif
    4950
     
    5657    {
    5758    }
    58 
    59     virtual ~SVGTextRunRenderingContext() { }
    6059
    6160    RenderObject* m_renderer;
  • trunk/Source/WebCore/svg/SVGAltGlyphElement.cpp

    r89233 r89311  
    102102}
    103103
    104 bool SVGAltGlyphElement::hasValidGlyphElement(String& glyphName) const
     104SVGGlyphElement* SVGAltGlyphElement::glyphElement() const
    105105{
    106     // FIXME: No support for altGlyphDef/glyphRef.
    107     // This is tracked by https://bugs.webkit.org/show_bug.cgi?id=60850.
    108     glyphName = getTarget(fastGetAttribute(XLinkNames::hrefAttr));
    109     Element* element = treeScope()->getElementById(glyphName);
    110     if (!element || !element->hasTagName(SVGNames::glyphTag))
    111         return false;
    112     return true;
     106    Element* elt = treeScope()->getElementById(getTarget(fastGetAttribute(XLinkNames::hrefAttr)));
     107    if (!elt || !elt->hasTagName(SVGNames::glyphTag))
     108        return 0;
     109    return static_cast<SVGGlyphElement*>(elt);
    113110}
    114111
     
    116113
    117114#endif // ENABLE(SVG)
     115
     116// vim:ts=4:noet
  • trunk/Source/WebCore/svg/SVGAltGlyphElement.h

    r89233 r89311  
    4141    void setFormat(const AtomicString&, ExceptionCode&);
    4242
    43     bool hasValidGlyphElement(String& glyphName) const;
     43    SVGGlyphElement* glyphElement() const;
    4444
    4545private:
  • trunk/Source/WebCore/svg/SVGFontData.cpp

    r89233 r89311  
    2323#include "SVGFontData.h"
    2424
    25 #include "RenderObject.h"
    26 #include "SVGAltGlyphElement.h"
    2725#include "SVGFontElement.h"
    2826#include "SVGGlyph.h"
    29 #include "SVGNames.h"
    30 #include "SVGTextRunRenderingContext.h"
    31 #include "TextRun.h"
    32 #include "WidthIterator.h"
    33 #include "XMLNames.h"
    3427
    3528namespace WebCore {
     
    4740}
    4841
    49 void SVGFontData::initializeFontData(SimpleFontData* fontData, float fontSize)
     42void SVGFontData::initializeFontData(SimpleFontData* fontData, int size)
    5043{
    5144    ASSERT(fontData);
    5245
    5346    SVGFontFaceElement* svgFontFaceElement = this->svgFontFaceElement();
    54     ASSERT(svgFontFaceElement);
     47    unsigned unitsPerEm = svgFontFaceElement->unitsPerEm();
    5548
    56     SVGFontElement* svgFontElement = svgFontFaceElement->associatedFontElement();
    57     ASSERT(svgFontElement);
    58     GlyphData missingGlyphData;
    59     missingGlyphData.fontData = fontData;
    60     missingGlyphData.glyph = svgFontElement->missingGlyph();
    61     fontData->setMissingGlyphData(missingGlyphData);
     49    float scale = size;
     50    if (unitsPerEm)
     51        scale /= unitsPerEm;
    6252
    63     fontData->setZeroWidthSpaceGlyph(0);
    64     fontData->determinePitch();
    65 
    66     GlyphPage* glyphPageZero = GlyphPageTreeNode::getRootChild(fontData, 0)->page();
    67     if (!glyphPageZero) {
    68         fontData->setSpaceGlyph(0);
    69         fontData->setSpaceWidth(0);
    70         return;
    71     }
    72 
    73     unsigned unitsPerEm = svgFontFaceElement->unitsPerEm();
    74     float scale = scaleEmToUnits(fontSize, unitsPerEm);
    7553    float xHeight = svgFontFaceElement->xHeight() * scale;
    7654    float ascent = svgFontFaceElement->ascent() * scale;
    7755    float descent = svgFontFaceElement->descent() * scale;
    78     float lineGap = 0.1f * fontSize;
     56    float lineGap = 0.1f * size;
    7957
     58    SVGFontElement* associatedFontElement = svgFontFaceElement->associatedFontElement();
    8059    if (!xHeight) {
    8160        // Fallback if x_heightAttr is not specified for the font element.
    82         Glyph letterXGlyph = glyphPageZero->glyphDataForCharacter('x').glyph;
    83         xHeight = letterXGlyph ? fontData->widthForGlyph(letterXGlyph) : 2 * ascent / 3;
     61        Vector<SVGGlyph> letterXGlyphs;
     62        associatedFontElement->collectGlyphsForString(String("x", 1), letterXGlyphs);
     63        xHeight = letterXGlyphs.isEmpty() ? 2 * ascent / 3 : letterXGlyphs.first().horizontalAdvanceX * scale;
    8464    }
    8565
     
    9272    fontMetrics.setXHeight(xHeight);
    9373
    94     // Calculate space width.
    95     Glyph spaceGlyph = glyphPageZero->glyphDataForCharacter(' ').glyph;
    96     fontData->setSpaceGlyph(spaceGlyph);
    97     fontData->setSpaceWidth(fontData->widthForGlyph(spaceGlyph));
     74    Vector<SVGGlyph> spaceGlyphs;
     75    associatedFontElement->collectGlyphsForString(String(" ", 1), spaceGlyphs);
     76    fontData->setSpaceWidth(spaceGlyphs.isEmpty() ? xHeight : spaceGlyphs.first().horizontalAdvanceX * scale);
    9877
    99     // Estimate average character width.
    100     Glyph numeralZeroGlyph = glyphPageZero->glyphDataForCharacter('0').glyph;
    101     fontData->setAvgCharWidth(numeralZeroGlyph ? fontData->widthForGlyph(numeralZeroGlyph) : fontData->spaceWidth());
     78    Vector<SVGGlyph> numeralZeroGlyphs;
     79    associatedFontElement->collectGlyphsForString(String("0", 1), numeralZeroGlyphs);
     80    fontData->setAvgCharWidth(numeralZeroGlyphs.isEmpty() ? fontData->spaceWidth() : numeralZeroGlyphs.first().horizontalAdvanceX * scale);
    10281
    103     // Estimate maximum character width.
    104     Glyph letterWGlyph = glyphPageZero->glyphDataForCharacter('W').glyph;
    105     fontData->setMaxCharWidth(letterWGlyph ? fontData->widthForGlyph(letterWGlyph) : ascent);
    106 }
     82    Vector<SVGGlyph> letterWGlyphs;
     83    associatedFontElement->collectGlyphsForString(String("W", 1), letterWGlyphs);
     84    fontData->setMaxCharWidth(letterWGlyphs.isEmpty() ? ascent : letterWGlyphs.first().horizontalAdvanceX * scale);
    10785
    108 float SVGFontData::widthForSVGGlyph(Glyph glyph, float fontSize) const
    109 {
    110     SVGFontFaceElement* svgFontFaceElement = this->svgFontFaceElement();
    111     ASSERT(svgFontFaceElement);
     86    // FIXME: is there a way we can get the space glyph from the SVGGlyph above?
     87    fontData->setSpaceGlyph(0);
     88    fontData->setZeroWidthSpaceGlyph(0);
     89    fontData->determinePitch();
    11290
    113     SVGFontElement* associatedFontElement = svgFontFaceElement->associatedFontElement();
    114     ASSERT(associatedFontElement);
    115 
    116     SVGGlyph svgGlyph = associatedFontElement->svgGlyphForGlyph(glyph);
    117     SVGGlyphElement::inheritUnspecifiedAttributes(svgGlyph, this);
    118     return svgGlyph.horizontalAdvanceX * scaleEmToUnits(fontSize, svgFontFaceElement->unitsPerEm());
    119 }
    120 
    121 bool SVGFontData::applySVGGlyphSelection(WidthIterator& iterator, GlyphData& glyphData, bool mirror, int currentCharacter, unsigned& advanceLength) const
    122 {
    123     const TextRun& run = iterator.run();
    124     Vector<SVGGlyph::ArabicForm>& arabicForms = iterator.arabicForms();
    125     ASSERT(int(run.charactersLength()) >= currentCharacter);
    126 
    127     // Associate text with arabic forms, if needed.
    128     String remainingTextInRun(run.data(currentCharacter), run.charactersLength() - currentCharacter);
    129     remainingTextInRun = Font::normalizeSpaces(remainingTextInRun.characters(), remainingTextInRun.length());
    130     if (!currentCharacter && arabicForms.isEmpty())
    131         arabicForms = charactersWithArabicForm(remainingTextInRun, mirror);
    132 
    133     SVGFontFaceElement* svgFontFaceElement = this->svgFontFaceElement();
    134     ASSERT(svgFontFaceElement);
    135 
    136     SVGFontElement* associatedFontElement = svgFontFaceElement->associatedFontElement();
    137     ASSERT(associatedFontElement);
    138 
    139     RenderObject* renderObject = 0;
    140     if (TextRun::RenderingContext* renderingContext = run.renderingContext())
    141         renderObject = static_cast<SVGTextRunRenderingContext*>(renderingContext)->renderer();
    142 
    143     String language;
    144     bool isVerticalText = false;
    145     String altGlyphName;
    146 
    147     if (renderObject) {
    148         RenderObject* parentRenderObject = renderObject->isText() ? renderObject->parent() : renderObject;
    149         ASSERT(parentRenderObject);
    150 
    151         isVerticalText = parentRenderObject->style()->svgStyle()->isVerticalWritingMode();
    152         if (Element* parentRenderObjectElement = toElement(parentRenderObject->node())) {
    153             language = parentRenderObjectElement->getAttribute(XMLNames::langAttr);
    154 
    155             if (parentRenderObjectElement->hasTagName(SVGNames::altGlyphTag)) {
    156                 SVGAltGlyphElement* altGlyph = static_cast<SVGAltGlyphElement*>(parentRenderObjectElement);
    157                 if (!altGlyph->hasValidGlyphElement(altGlyphName))
    158                     altGlyphName = emptyString();
    159             }
    160         }
    161     }
    162 
    163     Vector<SVGGlyph> glyphs;
    164     if (!altGlyphName.isEmpty()) {
    165         associatedFontElement->collectGlyphsForGlyphName(altGlyphName, glyphs);
    166 
    167         // Assign the unicodeStringLength now that its known.
    168         size_t glyphsSize = glyphs.size();
    169         for (size_t i = 0; i < glyphsSize; ++i)
    170             glyphs[i].unicodeStringLength = run.length();
    171     } else
    172         associatedFontElement->collectGlyphsForString(remainingTextInRun, glyphs);
    173 
    174     size_t glyphsSize = glyphs.size();
    175     for (size_t i = 0; i < glyphsSize; ++i) {
    176         SVGGlyph& svgGlyph = glyphs[i];
    177         if (svgGlyph.isPartOfLigature)
    178             continue;
    179         if (!isCompatibleGlyph(svgGlyph, isVerticalText, language, arabicForms, currentCharacter, currentCharacter + svgGlyph.unicodeStringLength))
    180             continue;
    181         iterator.setLastGlyphName(svgGlyph.glyphName);
    182         glyphData.glyph = svgGlyph.tableEntry;
    183         advanceLength = svgGlyph.unicodeStringLength;
    184         return true;
    185     }
    186 
    187     iterator.setLastGlyphName(String());
    188     return false;
    189 }
    190 
    191 bool SVGFontData::fillSVGGlyphPage(GlyphPage* pageToFill, unsigned offset, unsigned length, UChar* buffer, unsigned bufferLength, const SimpleFontData* fontData) const
    192 {
    193     // bufferLength will be greater than the requested number of glyphs if the buffer contains surrogate pairs.
    194     // We won't support this for now.
    195     if (bufferLength > length)
    196         return false;
    197 
    198     ASSERT(fontData->isCustomFont());
    199     ASSERT(fontData->isSVGFont());
    200 
    201     SVGFontFaceElement* fontFaceElement = this->svgFontFaceElement();
    202     ASSERT(fontFaceElement);
    203 
    204     SVGFontElement* fontElement = fontFaceElement->associatedFontElement();
    205     ASSERT(fontElement);
    206 
    207     bool haveGlyphs = false;
    208     Vector<SVGGlyph> glyphs;
    209     for (unsigned i = 0; i < length; ++i) {
    210         String lookupString(buffer + i, 1);
    211         fontElement->collectGlyphsForString(lookupString, glyphs);
    212         if (glyphs.isEmpty()) {
    213             pageToFill->setGlyphDataForIndex(offset + i, 0, 0);
    214             continue;
    215         }
    216 
    217         // Associate entry in glyph page with first valid SVGGlyph.
    218         // If there are multiple valid ones, just take the first one. WidthIterator will take
    219         // care of matching to the correct glyph, if multiple ones are available, as that's
    220         // only possible within the context of a string (eg. arabic form matching).
    221         haveGlyphs = true;
    222         pageToFill->setGlyphDataForIndex(offset + i, glyphs.first().tableEntry, fontData);
    223         glyphs.clear();
    224     }
    225 
    226     return haveGlyphs;
     91    GlyphData missingGlyphData;
     92    missingGlyphData.fontData = fontData;
     93    missingGlyphData.glyph = 0;
     94    fontData->setMissingGlyphData(missingGlyphData);
    22795}
    22896
  • trunk/Source/WebCore/svg/SVGFontData.h

    r89233 r89311  
    3636    virtual ~SVGFontData() { }
    3737
    38     virtual void initializeFontData(SimpleFontData*, float fontSize);
    39     virtual float widthForSVGGlyph(Glyph, float fontSize) const;
    40     virtual bool fillSVGGlyphPage(GlyphPage*, unsigned offset, unsigned length, UChar* buffer, unsigned bufferLength, const SimpleFontData*) const;
    41     virtual bool applySVGGlyphSelection(WidthIterator&, GlyphData&, bool mirror, int currentCharacter, unsigned& advanceLength) const;
     38    virtual void initializeFontData(SimpleFontData*, int size);
    4239
    4340    SVGFontFaceElement* svgFontFaceElement() const { return m_svgFontFaceElement; }
  • trunk/Source/WebCore/svg/SVGFontElement.cpp

    r89233 r89311  
    112112            // This glyph is never meant to be used for rendering, only as identifier as a part of a ligature.
    113113            SVGGlyph newGlyphPart;
     114            /* FIXME: Enable this once with the next patch.
    114115            newGlyphPart.isPartOfLigature = true;
     116            */
    115117            m_glyphMap.addGlyphByUnicodeString(lookupString, newGlyphPart);
    116118        }
     
    153155    }
    154156
    155     // Register each character of each ligature, if needed.
     157    /* FIXME: Register each character of each ligature, if needed.
     158       This is not needed yet, turn it on with the next patch. With the current SVG Fonts code it would break fonts-glyph-04-t.svg
    156159    if (!ligatures.isEmpty())
    157160        registerLigaturesInGlyphCache(ligatures);
     161    */
    158162
    159163    // Register missing-glyph element, if present.
  • trunk/Source/WebCore/svg/SVGGlyphMap.h

    r89233 r89311  
    7373            svgGlyph.priority = m_currentPriority++;
    7474            svgGlyph.unicodeStringLength = len;
     75            svgGlyph.isValid = true;
    7576            appendToGlyphTable(svgGlyph);
    7677        }
  • trunk/Source/WebCore/svg/svgtags.in

    r89233 r89311  
    105105use
    106106view
    107 #if ENABLE_SVG_FONTS
    108107vkern interfaceName=SVGVKernElement
    109 #endif
Note: See TracChangeset for help on using the changeset viewer.