Skip to content
  • zimmermann@webkit.org's avatar
    2010-10-01 Nikolas Zimmermann <nzimmermann@rim.com> · 65ac5a76
    zimmermann@webkit.org authored
            Reviewed by Dirk Schulze.
    
            Rewrite SVG text layout code
            https://bugs.webkit.org/show_bug.cgi?id=45532
    
            Modernize SVG text layout engine, split the layout process into three phases, so that each results can be cached (which will be done in a follow-up patch).
    
            Phase #1) - SVGTextLayoutAttributesBuilder
            ------------------------------------------
    
            Parse x/y/dx/dy/rotate values of the <text> subtree (<text x="30 40">A<tspan>B<tspan x="50">C</tspan></tspan></text>)
            This is done by SVGTextLayoutAttributesBuilder. It builds a SVGTextLayoutAttributes object for each RenderSVGInlineText renderer, and stores it there.
            Phase #1 is started from RenderSVGText::layout(), before RenderBlockLineLayout is laying out the inline children, and thus before the InlineBox tree is created.
    
            Now we know which character has an associated absolute x or y position, denoting the start of a new text chunk. Whenever we encounter a new text chunk
            RenderBlockLineLayout should create a new SVGInlineTextBox. This is very important, as BiDi reordering shouldn't happen across text chunks, as well as ligature detection.
    
            The text chunk concept is now merged right into the InlineBox tree, so we don't need to hack around the lack of that, as done for the previous years.
    
            Phase #2) - SVGTextLayoutEngine
            ------------------------------------------
    
            RenderSVGText::layout() calls RenderBlock::layoutInlineChildren() right after phase #1 ends. The InlineBox tree is created. During that process findNextLineBreak()
            decides how to split up the text into InlineTextBoxes. It has already been patched, to ask RenderSVGInlineText::characterStartsNewTextChunk(int position), whether the
            current character should go in a new SVGInlineTextBox or not. This requires that phase #1 already stored these information in the RenderSVGInlineText objects.
    
            For each <text> object a SVGRootInlineBox is created (in constructLine()) and all child boxes are added. After that SVGRootInlineBox::computePerCharacterLayoutInformation()
            is called (unlike HTML text, which splits the vertical & horizontal layout in two phases, it's just one single phase for SVG). This function invokes SVGTextLayoutEngine
            and starts phase #2 of the layout process.
    
            SVGTextLayoutEngine lays out the content of each SVGInlineTextBox either on a line or a path. It contains all the logic handling, alignment-baseline, dominant-baseline,
            letter-spacing, word-spacing, kerning, glyph-orientation-(horizontal|vertical), rotation, etc. etc.
    
            As result it generates a set of SVGTextFragment objects which are stored in each SVGInlineTextBox. Each SVGTextFragment is a portion of text that can be rendered/measured
            at once. Some examples to illustrate what's going on:
    
            <text x="20">ABCD</text>:
            - SVGInlineTextBox
              - SVGTextFragment, start 0 length 4, "ABCD" (x=20)
    
            <text x="20 100">ABCD</text>:
            - SVGInlineTextBox
              - SVGTextFragment, start 0 length 1, "A" (x=20)
            - SVGInlineTextBox
              - SVGTextFragment, start 0 length 1, "B" (x=100)
              - SVGTextFragment, start 1 length 2, "CD" (x=100 + advance_of_last)
    
            <text><textPath xlink:href="#somePath">ABCD</textPath></text>:
            - SVGInlineTextBox
              - SVGTextFragment, start 0 length 1, "A" (rotated!)
              - SVGTextFragment, start 1 length 1, "B" (rotated!)
              - SVGTextFragment, start 2 length 1, "C" (rotated!)
              - SVGTextFragment, start 3 length 1, "D" (rotated!)
    
            <text x="0 50 100">A<tspan>B</tspan>C</text>
            - SVGInlineTextBox
              - SVGTextFragment, start 0 length 1, "A" (x=0)
            - SVGInlineFlowBox
              - SVGInlineTextBox
                - SVGTextFragment, start 0 length 1, "B" (x=50)
            - SVGInlineTextBox
              - SVGTextFragment, start 0 length 1, "C" (x=100)
    
            When painting text SVGInlineTextBox just walks its fragments and paints them. Text selection works the same.
            All text measurements (width/height etc.) have already been done in phase #2 and aren't required anymore while painting/selecting.
            This is one of the main benefits of the new text layout engine, painting & selection is cheap now, compared to the layout process.
    
            We're now doing phase #1 everytime RenderSVGText::layout() is called. This is not necessary, we only have to recompute these information
            if the x/y/dx/dy or rotate list of an element in the <text> subtree changes or the text content itself -> this will be done in a follow-up patch.
            It's likely that we'll also find ways to skip phase #2 in certain situations.
    
            Phase #3) - SVGTextChunkBuilder
            ------------------------------------------
    
            After phase #2 finished, we can post-process the text fragments. Certain operations have to be applied on a "per chunk" basis.
            text-anchor should be applied to individual text chunks, as well as textLength corrections (lengthAdjust="spacing" / lengthAdjust="spacingAndGlyphs").
    
            SVGTextChunkBuilder just walks the SVGInlineTextBox, and collects all boxes belonging to a certain chunk. For each of the chunks all fragments
            are post-processed. For instance for text-anchor="middle", all x positions of all fragments are shifted by -fragmentWidth/2 (for horizonal text).
    
            After phase #1 - #3 finished, SVGRootInlineBox::computePerCharacterLayoutInformation() utilizies the stored SVGTextFragments to lay out all child
            boxes in the InlineBox tree (setWidth/Height, etc.), the size and position of the SVGRootInlineBox and it's parent RenderSVGText object.
    
            This should give interessted readers a good summary of how the new text layout engine works.
            See LayoutTests/ChangeLog for more details on test progression.
    
            Tests: svg/custom/text-rotation.svg
                   svg/custom/text-x-dy-lists.svg
    
            * Android.mk: Add SVGTextLayoutEngine.* / SVGTextChunkBuilder.* to build. Remove SVGCharacterData.* / SVGTextChunkLayoutInfo.* / SVGTextLayoutUtilities.* from build.
            * CMakeLists.txt: Ditto.
            * GNUmakefile.am: Ditto.
            * WebCore.gypi: Ditto.
            * WebCore.pro: Ditto.
            * WebCore.vcproj/WebCore.vcproj: Ditto.
            * WebCore.xcodeproj/project.pbxproj: Ditto.
            * rendering/InlineBox.h:
            (WebCore::InlineBox::isSVGInlineFlowBox): Add helper function to identify SVGInlineFlowBoxes. The variants for SVGInlineTextBox etc. already exist.
            * rendering/InlineTextBox.h: Devirtualize selectionStartEnd, SVG is no longer overriding it.
            * rendering/RenderSVGAllInOne.cpp: removes
            * rendering/RenderText.cpp:
            (WebCore::RenderText::setTextInternal): Remove SVG specific hacks, moved to RenderSVGInlineText.
            * rendering/SVGCharacterData.cpp: Removed.
            * rendering/SVGCharacterData.h: Removed.
            * rendering/SVGCharacterLayoutInfo.cpp: Removed.
            * rendering/SVGCharacterLayoutInfo.h: Removed.
            * rendering/SVGRenderTreeAsText.cpp: Hack DRT output to be somewhat compatible with the current output, the plan is to change it completly after this patch.
            (WebCore::writeRenderSVGTextBox):
            (WebCore::writeSVGInlineTextBox):
            * rendering/SVGTextChunkLayoutInfo.cpp: Removed.
            * rendering/SVGTextChunkLayoutInfo.h: Removed.
            * rendering/SVGTextLayoutUtilities.cpp: Removed.
            * rendering/SVGTextLayoutUtilities.h: Removed.
            * rendering/style/RenderStyle.cpp:
            (WebCore::RenderStyle::diff): Only return immediately if SVGRenderStyle::diff produced StyleDifferenceLayout, it it's sth. else be sure to ask RenderStyle itself what to do.
            * rendering/style/SVGRenderStyle.h:
            (WebCore::SVGRenderStyle::isVerticalWritingMode): New helper method, moved from SVGTextLayoutUtilities.
            * rendering/svg/RenderSVGInlineText.cpp:
            (WebCore::applySVGWhitespaceRules): Moved from RenderText into a SVG specific place.
            (WebCore::RenderSVGInlineText::RenderSVGInlineText): Use applySVGWhitespaceRules on the incoming text.
            (WebCore::RenderSVGInlineText::styleDidChange): Only apply SVG white space rules, when using xml:space="preserve", otherwhise the constructor already handled it.
            (WebCore::RenderSVGInlineText::characterStartsNewTextChunk): Create text chunks for absolute y values as well, SVG 1.1 2nd Edition demands that.
            (WebCore::RenderSVGInlineText::positionForPoint): New function operating on all SVGInlineTextBoxes and their SVGTextFragments.
            * rendering/svg/RenderSVGInlineText.h:
            (WebCore::RenderSVGInlineText::layoutAttributes): Stores the layout attributes generated by SVGTextLayoutAttributesBuilder.
            (WebCore::toRenderSVGInlineText): New helper methods for casting.
            * rendering/svg/RenderSVGText.cpp:
            (WebCore::RenderSVGText::layout): Add comment, that SVGTextLayoutAttributesBuilder is just phase one of the layout process.
            (WebCore::RenderSVGText::positionForPoint): Simplified implementation for SVGs needs.
            * rendering/svg/RenderSVGText.h:
            * rendering/svg/SVGInlineFlowBox.cpp:
            (WebCore::SVGInlineFlowBox::paintSelectionBackground): Seperated selection background drawing from actual text rendering, to make sure selection is always in background for SVG.
            (WebCore::SVGInlineFlowBox::paint): Call computetextMatchMarkerRectForRenderer, before painting.
            (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer): New method.
            * rendering/svg/SVGInlineFlowBox.h:
            (WebCore::SVGInlineFlowBox::isSVGInlineFlowBox):
            * rendering/svg/SVGInlineTextBox.cpp: Completly rewritten, operates on SVGTextFragments, produced by the SVGTextLayoutEngine. Whole new concept, compared to the old hack.
            * rendering/svg/SVGInlineTextBox.h:
            (WebCore::SVGInlineTextBox::clearTextFragments): Only used by SVGTextLayoutEngine, to clean up previously computed fragments.
            (WebCore::SVGInlineTextBox::textFragments): Offers access to the fragments in the box.
            (WebCore::SVGInlineTextBox::startsNewTextChunk): Does this box start a new text chunk?
            (WebCore::SVGInlineTextBox::setStartsNewTextChunk): SVGTextLayoutEngine marks this box, if it starts a new text chunk.
            * rendering/svg/SVGRootInlineBox.cpp: Remove old code regarding text chunk parts.
            (WebCore::SVGRootInlineBox::paint): Selection is now painted before text, to assure it's really in the background.
            (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation): Use new SVGTextLayoutEngine.
            (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes): Feed SVGTextLayoutEngine with SVGInlineTextBoxes, detect the begin/end of path layouts.
            (WebCore::SVGRootInlineBox::layoutChildBoxes): Use new isSVGInlineTextBox() helper method.
            (WebCore::SVGRootInlineBox::closestLeafChildForPosition): Simplified version for SVG.
            * rendering/svg/SVGRootInlineBox.h: Remove access to text chunks, they're now longer stored in the SVGRootInlineBox.
            * rendering/svg/SVGTextChunk.cpp: s/SVGTextChunkNew/SVGTextChunk/
            * rendering/svg/SVGTextChunk.h:
            * rendering/svg/SVGTextChunkBuilder.cpp: Added.
            * rendering/svg/SVGTextChunkBuilder.h: Added.
            * rendering/svg/SVGTextLayoutAttributes.cpp: Constify dump() method.
            * rendering/svg/SVGTextLayoutAttributes.h:
            (WebCore::SVGTextLayoutAttributes::textMetricsValues):
            * rendering/svg/SVGTextLayoutAttributesBuilder.cpp: Rewritten, consume less memory, while building the layout attributes.
            * rendering/svg/SVGTextLayoutAttributesBuilder.h:
            * rendering/svg/SVGTextLayoutEngine.cpp: Added.
            * rendering/svg/SVGTextLayoutEngine.h: Added.
            * rendering/svg/SVGTextQuery.cpp: Rewritten to deal with the new SVGTextFragment/SVGTextLayoutAttributes logic.
            * rendering/svg/SVGTextQuery.h:
    2010-10-01  Nikolas Zimmermann  <nzimmermann@rim.com>
    
            Reviewed by Dirk Schulze.
    
            Rewrite SVG text layout code
            https://bugs.webkit.org/show_bug.cgi?id=45532
    
            Rebaseline most SVGs containing text. The underlying concept has changed, I tried hard to maintain
            a somewhat compatible DRT output, so it doesn't require rebaselines of _all_ tests.
            The dump looks awkward now, it will always report "chunk 1", as it's hardcoded in SVGRenderTreeAsText.
            Follow up patches will change the output of text dumps completly.
    
            * platform/mac-leopard/svg/W3C-SVG-1.1/text-text-05-t-expected.checksum:
            * platform/mac-leopard/svg/W3C-SVG-1.1/text-text-05-t-expected.png:
            * platform/mac-leopard/svg/batik/text/textOnPath-expected.checksum:
            * platform/mac-leopard/svg/batik/text/textOnPath-expected.png: baseline-shift adjustments now match Opera.
            * platform/mac-leopard/svg/batik/text/verticalTextOnPath-expected.checksum:
            * platform/mac-leopard/svg/batik/text/verticalTextOnPath-expected.png: Ditto.
            * platform/mac-leopard/svg/batik/text/xmlSpace-expected.checksum:
            * platform/mac-leopard/svg/batik/text/xmlSpace-expected.png:
            * platform/mac-leopard/svg/custom/altglyph-expected.checksum:
            * platform/mac-leopard/svg/custom/altglyph-expected.png:
            * platform/mac-leopard/svg/text/multichar-glyph-expected.checksum:
            * platform/mac-leopard/svg/text/multichar-glyph-expected.png:
            * platform/mac/svg/W3C-SVG-1.1/animate-elem-03-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/animate-elem-24-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/animate-elem-36-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/animate-elem-40-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/animate-elem-44-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/coords-viewattr-03-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/filters-displace-01-f-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-desc-02-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-elem-01-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-elem-02-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-elem-03-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-elem-04-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-elem-05-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-elem-06-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-elem-07-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-glyph-02-t-expected.txt:
            * 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.txt:
            * platform/mac/svg/W3C-SVG-1.1/fonts-kern-01-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/interact-cursor-01-f-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/linking-a-07-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/masking-mask-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/masking-path-03-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/pservers-grad-05-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/pservers-grad-08-b-expected.checksum:
            * platform/mac/svg/W3C-SVG-1.1/pservers-grad-08-b-expected.png: No more blurry edges, size calculations fixed.
            * platform/mac/svg/W3C-SVG-1.1/pservers-grad-08-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/pservers-grad-11-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/pservers-pattern-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/render-elems-06-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/render-elems-07-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/render-elems-08-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/render-groups-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/render-groups-03-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/struct-frag-06-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/styling-css-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/styling-css-03-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/styling-css-05-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-align-02-b-expected.checksum:
            * platform/mac/svg/W3C-SVG-1.1/text-align-02-b-expected.png: baseline-shift looks slightly different, now matches Opera.
            * platform/mac/svg/W3C-SVG-1.1/text-align-02-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-align-03-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-align-04-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-align-05-b-expected.checksum:
            * platform/mac/svg/W3C-SVG-1.1/text-align-05-b-expected.png: Vertical text now starts at correct origin, and is centered correctly.
            * platform/mac/svg/W3C-SVG-1.1/text-align-05-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-align-06-b-expected.checksum:
            * platform/mac/svg/W3C-SVG-1.1/text-align-06-b-expected.png: Ditto + baseline-shift differences.
            * platform/mac/svg/W3C-SVG-1.1/text-align-06-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-altglyph-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-deco-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-path-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-spacing-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-text-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-text-04-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-text-05-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-text-06-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-text-07-t-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-tselect-01-b-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-tselect-02-f-expected.txt:
            * platform/mac/svg/W3C-SVG-1.1/text-tspan-01-b-expected.txt:
            * platform/mac/svg/batik/text/longTextOnPath-expected.txt:
            * platform/mac/svg/batik/text/textAnchor-expected.txt:
            * platform/mac/svg/batik/text/textAnchor2-expected.checksum:
            * platform/mac/svg/batik/text/textAnchor2-expected.png: y-position adjustments start new text chunks since SVG 1.1 2nd edition (in contrary to SVG 1.2 Tiny). Left the test as is.
            * platform/mac/svg/batik/text/textAnchor2-expected.txt:
            * platform/mac/svg/batik/text/textAnchor3-expected.txt:
            * platform/mac/svg/batik/text/textDecoration-expected.checksum:
            * platform/mac/svg/batik/text/textDecoration-expected.png: text-decoration defined on <text> paints with the paint sever defined on the <tspan>, test finally works!
            * platform/mac/svg/batik/text/textDecoration-expected.txt:
            * platform/mac/svg/batik/text/textDecoration2-expected.checksum:
            * platform/mac/svg/batik/text/textDecoration2-expected.png: Ditto.
            * platform/mac/svg/batik/text/textDecoration2-expected.txt:
            * platform/mac/svg/batik/text/textEffect-expected.checksum:
            * platform/mac/svg/batik/text/textEffect-expected.png: Just like pservers-grad-08-b.svg, no more blurry edges.
            * platform/mac/svg/batik/text/textEffect-expected.txt:
            * platform/mac/svg/batik/text/textEffect2-expected.txt:
            * platform/mac/svg/batik/text/textEffect3-expected.checksum:
            * platform/mac/svg/batik/text/textEffect3-expected.png: Ditto.
            * platform/mac/svg/batik/text/textEffect3-expected.txt:
            * platform/mac/svg/batik/text/textFeatures-expected.checksum:
            * platform/mac/svg/batik/text/textFeatures-expected.png: baseline-shift differences.
            * platform/mac/svg/batik/text/textFeatures-expected.txt:
            * platform/mac/svg/batik/text/textGlyphOrientationHorizontal-expected.checksum:
            * platform/mac/svg/batik/text/textGlyphOrientationHorizontal-expected.png: Completly fixed, now aligns properly with path, matches Opera & Batik.
            * platform/mac/svg/batik/text/textGlyphOrientationHorizontal-expected.txt:
            * platform/mac/svg/batik/text/textLayout-expected.txt:
            * platform/mac/svg/batik/text/textLayout2-expected.checksum:
            * platform/mac/svg/batik/text/textLayout2-expected.png: baseline-shift differences.
            * platform/mac/svg/batik/text/textLayout2-expected.txt:
            * platform/mac/svg/batik/text/textLength-expected.txt:
            * platform/mac/svg/batik/text/textOnPath-expected.txt:
            * platform/mac/svg/batik/text/textOnPath2-expected.txt:
            * platform/mac/svg/batik/text/textOnPath3-expected.txt:
            * platform/mac/svg/batik/text/textOnPathSpaces-expected.txt:
            * platform/mac/svg/batik/text/textPCDATA-expected.txt:
            * platform/mac/svg/batik/text/textPosition-expected.txt:
            * platform/mac/svg/batik/text/textPosition2-expected.txt:
            * platform/mac/svg/batik/text/textProperties-expected.txt:
            * platform/mac/svg/batik/text/textProperties2-expected.txt:
            * platform/mac/svg/batik/text/verticalText-expected.checksum:
            * platform/mac/svg/batik/text/verticalText-expected.png:
            * platform/mac/svg/batik/text/verticalText-expected.txt:
            * platform/mac/svg/batik/text/verticalTextOnPath-expected.txt:
            * platform/mac/svg/batik/text/xmlSpace-expected.txt:
            * platform/mac/svg/carto.net/button-expected.txt:
            * platform/mac/svg/carto.net/colourpicker-expected.txt:
            * platform/mac/svg/carto.net/combobox-expected.txt:
            * platform/mac/svg/carto.net/selectionlist-expected.txt:
            * platform/mac/svg/carto.net/tabgroup-expected.txt:
            * platform/mac/svg/carto.net/textbox-expected.txt:
            * platform/mac/svg/carto.net/window-expected.txt:
            * platform/mac/svg/clip-path/deep-nested-clip-in-mask-panning-expected.txt:
            * platform/mac/svg/css/text-shadow-multiple-expected.txt:
            * platform/mac/svg/custom/alignment-baseline-modes-expected.checksum:
            * platform/mac/svg/custom/alignment-baseline-modes-expected.png: central baseline now works as expected.
            * platform/mac/svg/custom/alignment-baseline-modes-expected.txt:
            * platform/mac/svg/custom/altglyph-expected.txt:
            * platform/mac/svg/custom/broken-internal-references-expected.txt:
            * platform/mac/svg/custom/container-opacity-clip-viewBox-expected.txt:
            * platform/mac/svg/custom/dominant-baseline-modes-expected.checksum:
            * platform/mac/svg/custom/dominant-baseline-modes-expected.png: ditto.
            * platform/mac/svg/custom/dominant-baseline-modes-expected.txt:
            * platform/mac/svg/custom/glyph-selection-lang-attribute-expected.txt:
            * platform/mac/svg/custom/glyph-transformation-with-hkern-expected.checksum:
            * platform/mac/svg/custom/glyph-transformation-with-hkern-expected.png: Kerning is now properly respected.
            * platform/mac/svg/custom/image-small-width-height-expected.txt:
            * platform/mac/svg/custom/invalid-fill-expected.txt:
            * platform/mac/svg/custom/invalid-fill-hex-expected.txt:
            * platform/mac/svg/custom/mouse-move-on-svg-container-expected.txt:
            * platform/mac/svg/custom/mouse-move-on-svg-container-standalone-expected.txt:
            * platform/mac/svg/custom/mouse-move-on-svg-root-expected.txt:
            * platform/mac/svg/custom/mouse-move-on-svg-root-standalone-expected.txt:
            * platform/mac/svg/custom/pattern-rotate-expected.txt:
            * platform/mac/svg/custom/scrolling-embedded-svg-file-image-repaint-problem-expected.txt:
            * platform/mac/svg/custom/style-attribute-font-size-expected.txt:
            * platform/mac/svg/custom/text-dom-01-f-expected.txt:
            * platform/mac/svg/custom/text-letter-spacing-expected.txt:
            * platform/mac/svg/custom/text-linking-expected.txt:
            * platform/mac/svg/custom/text-rotation-expected.checksum: Added.
            * platform/mac/svg/custom/text-rotation-expected.png: Added.
            * platform/mac/svg/custom/text-rotation-expected.txt: Added.
            * platform/mac/svg/custom/text-whitespace-handling-expected.txt:
            * platform/mac/svg/custom/text-x-dx-lists-expected.txt:
            * platform/mac/svg/custom/text-x-dy-lists-expected.checksum: Added.
            * platform/mac/svg/custom/text-x-dy-lists-expected.png: Added.
            * platform/mac/svg/custom/text-x-dy-lists-expected.txt: Added.
            * platform/mac/svg/custom/text-x-override-in-tspan-child-expected.checksum:
            * platform/mac/svg/custom/text-x-override-in-tspan-child-expected.png:
            * platform/mac/svg/custom/text-x-override-in-tspan-child-expected.txt:
            * platform/mac/svg/custom/use-detach-expected.txt:
            * platform/mac/svg/filters/filter-on-filter-for-text-expected.txt:
            * platform/mac/svg/filters/filter-on-tspan-expected.txt:
            * platform/mac/svg/text/kerning-expected.txt:
            * platform/mac/svg/text/multichar-glyph-expected.txt:
            * platform/mac/svg/text/select-textLength-spacing-squeeze-1-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacing-squeeze-1-expected.png:
            * platform/mac/svg/text/select-textLength-spacing-squeeze-1-expected.txt:
            * platform/mac/svg/text/select-textLength-spacing-squeeze-2-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacing-squeeze-2-expected.png:
            * platform/mac/svg/text/select-textLength-spacing-squeeze-2-expected.txt:
            * platform/mac/svg/text/select-textLength-spacing-squeeze-3-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacing-squeeze-3-expected.png:
            * platform/mac/svg/text/select-textLength-spacing-squeeze-3-expected.txt:
            * platform/mac/svg/text/select-textLength-spacing-squeeze-4-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacing-squeeze-4-expected.png:
            * platform/mac/svg/text/select-textLength-spacing-squeeze-4-expected.txt:
            * platform/mac/svg/text/select-textLength-spacing-stretch-1-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacing-stretch-1-expected.png:
            * platform/mac/svg/text/select-textLength-spacing-stretch-1-expected.txt:
            * platform/mac/svg/text/select-textLength-spacing-stretch-2-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacing-stretch-2-expected.png:
            * platform/mac/svg/text/select-textLength-spacing-stretch-2-expected.txt:
            * platform/mac/svg/text/select-textLength-spacing-stretch-3-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacing-stretch-3-expected.png:
            * platform/mac/svg/text/select-textLength-spacing-stretch-3-expected.txt:
            * platform/mac/svg/text/select-textLength-spacing-stretch-4-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacing-stretch-4-expected.png:
            * platform/mac/svg/text/select-textLength-spacing-stretch-4-expected.txt:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.png:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-1-expected.txt:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.png:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-2-expected.txt:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.png:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-3-expected.txt:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.png:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-squeeze-4-expected.txt:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.png:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-1-expected.txt:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.png:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-2-expected.txt:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.png:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-3-expected.txt:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-4-expected.checksum:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-4-expected.png:
            * platform/mac/svg/text/select-textLength-spacingAndGlyphs-stretch-4-expected.txt:
            * platform/mac/svg/text/select-x-list-1-expected.checksum:
            * platform/mac/svg/text/select-x-list-1-expected.png:
            * platform/mac/svg/text/select-x-list-1-expected.txt:
            * platform/mac/svg/text/select-x-list-2-expected.checksum:
            * platform/mac/svg/text/select-x-list-2-expected.png:
            * platform/mac/svg/text/select-x-list-2-expected.txt:
            * platform/mac/svg/text/select-x-list-3-expected.checksum:
            * platform/mac/svg/text/select-x-list-3-expected.png:
            * platform/mac/svg/text/select-x-list-3-expected.txt:
            * platform/mac/svg/text/select-x-list-4-expected.checksum:
            * platform/mac/svg/text/select-x-list-4-expected.png:
            * platform/mac/svg/text/select-x-list-4-expected.txt:
            * platform/mac/svg/text/select-x-list-with-tspans-1-expected.checksum:
            * platform/mac/svg/text/select-x-list-with-tspans-1-expected.png:
            * platform/mac/svg/text/select-x-list-with-tspans-1-expected.txt:
            * platform/mac/svg/text/select-x-list-with-tspans-2-expected.checksum:
            * platform/mac/svg/text/select-x-list-with-tspans-2-expected.png:
            * platform/mac/svg/text/select-x-list-with-tspans-2-expected.txt:
            * platform/mac/svg/text/select-x-list-with-tspans-3-expected.checksum:
            * platform/mac/svg/text/select-x-list-with-tspans-3-expected.png:
            * platform/mac/svg/text/select-x-list-with-tspans-3-expected.txt:
            * platform/mac/svg/text/select-x-list-with-tspans-4-expected.checksum:
            * platform/mac/svg/text/select-x-list-with-tspans-4-expected.png:
            * platform/mac/svg/text/select-x-list-with-tspans-4-expected.txt:
            * platform/mac/svg/text/text-align-02-b-expected.checksum:
            * platform/mac/svg/text/text-align-02-b-expected.png:
            * platform/mac/svg/text/text-align-02-b-expected.txt:
            * platform/mac/svg/text/text-align-03-b-expected.txt:
            * platform/mac/svg/text/text-align-04-b-expected.checksum:
            * platform/mac/svg/text/text-align-04-b-expected.png:
            * platform/mac/svg/text/text-align-04-b-expected.txt:
            * platform/mac/svg/text/text-align-05-b-expected.checksum:
            * platform/mac/svg/text/text-align-05-b-expected.png:
            * platform/mac/svg/text/text-align-05-b-expected.txt:
            * platform/mac/svg/text/text-align-06-b-expected.checksum:
            * platform/mac/svg/text/text-align-06-b-expected.png:
            * platform/mac/svg/text/text-align-06-b-expected.txt:
            * platform/mac/svg/text/text-altglyph-01-b-expected.txt:
            * platform/mac/svg/text/text-deco-01-b-expected.checksum:
            * platform/mac/svg/text/text-deco-01-b-expected.png:
            * platform/mac/svg/text/text-deco-01-b-expected.txt:
            * platform/mac/svg/text/text-hkern-expected.checksum:
            * platform/mac/svg/text/text-hkern-expected.png: Kerning now respects text chunk boundaries.
            * platform/mac/svg/text/text-hkern-expected.txt:
            * platform/mac/svg/text/text-hkern-on-vertical-text-expected.txt:
            * platform/mac/svg/text/text-path-01-b-expected.checksum:
            * platform/mac/svg/text/text-path-01-b-expected.png:
            * platform/mac/svg/text/text-path-01-b-expected.txt:
            * platform/mac/svg/text/text-spacing-01-b-expected.checksum:
            * platform/mac/svg/text/text-spacing-01-b-expected.png:
            * platform/mac/svg/text/text-spacing-01-b-expected.txt:
            * platform/mac/svg/text/text-text-01-b-expected.checksum:
            * platform/mac/svg/text/text-text-01-b-expected.png:
            * platform/mac/svg/text/text-text-01-b-expected.txt:
            * platform/mac/svg/text/text-text-04-t-expected.checksum:
            * 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.checksum:
            * platform/mac/svg/text/text-text-05-t-expected.png: y positions now also start text chunks, finally a progression on this test!
            * platform/mac/svg/text/text-text-05-t-expected.txt:
            * platform/mac/svg/text/text-text-06-t-expected.txt:
            * platform/mac/svg/text/text-text-07-t-expected.checksum:
            * platform/mac/svg/text/text-text-07-t-expected.png:
            * platform/mac/svg/text/text-text-07-t-expected.txt:
            * platform/mac/svg/text/text-text-08-b-expected.checksum:
            * platform/mac/svg/text/text-text-08-b-expected.png: Opacity doesn't affect selection anymore, matches all other browsers.
            * platform/mac/svg/text/text-tselect-01-b-expected.txt:
            * platform/mac/svg/text/text-tselect-02-f-expected.txt:
            * platform/mac/svg/text/text-tspan-01-b-expected.txt:
            * platform/mac/svg/text/text-vkern-expected.checksum:
            * platform/mac/svg/text/text-vkern-expected.png: Kerning now respects text chunk boundaries.
            * platform/mac/svg/text/text-vkern-expected.txt:
            * platform/mac/svg/text/textPathBoundsBug-expected.txt:
            * platform/mac/svg/transforms/text-with-mask-with-svg-transform-expected.txt:
            * platform/mac/svg/transforms/text-with-pattern-inside-transformed-html-expected.checksum:
            * platform/mac/svg/transforms/text-with-pattern-inside-transformed-html-expected.png:
            * platform/mac/svg/transforms/text-with-pattern-inside-transformed-html-expected.txt:
            * platform/mac/svg/transforms/text-with-pattern-with-svg-transform-expected.checksum:
            * platform/mac/svg/transforms/text-with-pattern-with-svg-transform-expected.png:
            * platform/mac/svg/transforms/text-with-pattern-with-svg-transform-expected.txt:
            * svg/batik/text/xmlSpace.svg: Fixed wrong test, now the embedded SVG Font is actually used.
            * svg/custom/altglyph.svg: Fixed wrong test, xlink namespace was wrong, xlink:href for altGlyph had no effect.
            * svg/custom/glyph-setting-d-attribute-expected.txt:
            * svg/custom/glyph-transformation-with-hkern-expected.txt:
            * svg/custom/text-rotation.svg: Added.
            * svg/custom/text-x-dy-lists.svg: Added.
            * svg/custom/text-x-override-in-tspan-child.svg: Fixed wrong test, depending on a previous bug - now matches Opera.
            * svg/text/multichar-glyph.svg: Also dump end positions of characters.
            * svg/text/resources/SelectionTestCase.js: Modify the selection test cases, to draw green lines marking the computed start & end postions of the selected characters.
            (selectRange):
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@68976 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    65ac5a76