Changeset 222843 in webkit


Ignore:
Timestamp:
Oct 4, 2017 6:51:19 AM (7 years ago)
Author:
Carlos Garcia Campos
Message:

[Harfbuzz] Implement ComplexTextController on top of HarfBuzz
https://bugs.webkit.org/show_bug.cgi?id=167956

Source/WebCore:

Reviewed by Myles C. Maxfield.

Implement ComplexTextController using HarfBuzz and remove HarfBuzzShaper.

Covered by existing tests, a rebaseline will be neeed.

  • platform/FreeType.cmake:
  • platform/graphics/ComplexTextController.cpp:

(WebCore::TextLayoutDeleter::operator() const): Enable TextLayout when using HarfBuzz.
(WebCore::FontCascade::createLayout const): Ditto.
(WebCore::FontCascade::width): Ditto.

  • platform/graphics/ComplexTextController.h:

(WebCore::ComplexTextController::ComplexTextRun::create): Add constructor that receives an hb_buffer_t.

  • platform/graphics/Font.cpp:

(WebCore::Font::variantCapsSupportsCharacterForSynthesis const): Simple implementation for non-cocoa ports.

  • platform/graphics/FontCascade.cpp:

(WebCore::FontCascade::getGlyphsAndAdvancesForComplexText const): Moved from FontCascadeCocoa.mm.
(WebCore::FontCascade::floatWidthForComplexText const): Ditto.
(WebCore::FontCascade::adjustSelectionRectForComplexText const): Ditto.
(WebCore::FontCascade::offsetForPositionForComplexText const): Ditto.

  • platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:

(WebCore::FontCascade::fontForCombiningCharacterSequence const): Normalize the sequence and get the font of the
base character.

  • platform/graphics/cocoa/FontCascadeCocoa.mm:
  • platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:

(WebCore::harfBuzzPositionToFloat):
(WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
(WebCore::fontFeatures):
(WebCore::characterScript):
(WebCore::scriptsAreCompatibleForCharacters):
(WebCore::findNextRun):
(WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

  • platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:

(WebCore::harfBuzzGetGlyph): Check here if the character is a white space and use the space or zeroWidthSpace
to ensure we get a glyph.

  • platform/graphics/harfbuzz/HarfBuzzShaper.cpp: Removed.
  • platform/graphics/harfbuzz/HarfBuzzShaper.h: Removed.
  • platform/graphics/harfbuzz/HbUniquePtr.h: Added.

(WebCore::HbPtrDeleter::operator() const):
(WebCore::HbPtrDeleter<hb_font_t>::operator() const):
(WebCore::HbPtrDeleter<hb_buffer_t>::operator() const):

  • platform/graphics/opentype/OpenTypeMathData.h: Use HbUniquePtr.

LayoutTests:

Unreviewed GTK+ gardening. Rebaseline tests.

  • platform/gtk/css1/font_properties/font-expected.png:
  • platform/gtk/css1/font_properties/font-expected.txt:
  • platform/gtk/css1/pseudo/firstline-expected.png:
  • platform/gtk/css1/pseudo/firstline-expected.txt:
  • platform/gtk/css1/pseudo/multiple_pseudo_elements-expected.png:
  • platform/gtk/css1/pseudo/multiple_pseudo_elements-expected.txt:
  • platform/gtk/css2.1/t051201-c23-first-line-00-b-expected.png:
  • platform/gtk/css2.1/t051201-c23-first-line-00-b-expected.txt:
  • platform/gtk/css2.1/t051202-c26-psudo-nest-00-c-expected.png:
  • platform/gtk/css2.1/t051202-c26-psudo-nest-00-c-expected.txt:
  • platform/gtk/css2.1/t0905-c5525-fltwidth-00-c-g-expected.png:
  • platform/gtk/css2.1/t0905-c5525-fltwidth-00-c-g-expected.txt:
  • platform/gtk/css2.1/t1508-c527-font-00-b-expected.png:
  • platform/gtk/css2.1/t1508-c527-font-00-b-expected.txt:
  • platform/gtk/css2.1/t1508-c527-font-06-b-expected.png:
  • platform/gtk/css2.1/t1508-c527-font-06-b-expected.txt:
  • platform/gtk/css2.1/t1508-c527-font-07-b-expected.png:
  • platform/gtk/css2.1/t1508-c527-font-07-b-expected.txt:
  • platform/gtk/css2.1/t1508-c527-font-10-c-expected.png:
  • platform/gtk/css2.1/t1508-c527-font-10-c-expected.txt:
  • platform/gtk/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.png:
  • platform/gtk/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.txt:
  • platform/gtk/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.png:
  • platform/gtk/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.txt:
  • platform/gtk/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.png:
  • platform/gtk/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.txt:
  • platform/gtk/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.png:
  • platform/gtk/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.txt:
  • platform/gtk/fast/css/text-overflow-ellipsis-text-align-center-expected.png:
  • platform/gtk/fast/css/text-overflow-ellipsis-text-align-center-expected.txt:
  • platform/gtk/fast/css/text-overflow-ellipsis-text-align-left-expected.png:
  • platform/gtk/fast/css/text-overflow-ellipsis-text-align-left-expected.txt:
  • platform/gtk/fast/text/atsui-negative-spacing-features-expected.png:
  • platform/gtk/fast/text/atsui-negative-spacing-features-expected.txt:
  • platform/gtk/fast/text/atsui-pointtooffset-calls-cg-expected.png:
  • platform/gtk/fast/text/atsui-pointtooffset-calls-cg-expected.txt:
  • platform/gtk/fast/text/atsui-rtl-override-selection-expected.png:
  • platform/gtk/fast/text/atsui-rtl-override-selection-expected.txt:
  • platform/gtk/fast/text/atsui-spacing-features-expected.png:
  • platform/gtk/fast/text/atsui-spacing-features-expected.txt:
  • platform/gtk/fast/text/emphasis-expected.png:
  • platform/gtk/fast/text/emphasis-expected.txt:
  • platform/gtk/fast/text/international/bold-bengali-expected.png:
  • platform/gtk/fast/text/international/bold-bengali-expected.txt:
  • platform/gtk/fast/text/international/hebrew-vowels-expected.png:
  • platform/gtk/fast/text/international/hebrew-vowels-expected.txt:
  • platform/gtk/fast/text/international/thai-baht-space-expected.png:
  • platform/gtk/fast/text/international/thai-baht-space-expected.txt:
  • platform/gtk/fast/text/international/thai-line-breaks-expected.png:
  • platform/gtk/fast/text/international/thai-line-breaks-expected.txt:
  • platform/gtk/fast/text/large-text-composed-char-dos-expected.txt: Added.
  • platform/gtk/svg/W3C-I18N/g-dirLTR-ubNone-expected.png:
  • platform/gtk/svg/W3C-I18N/g-dirLTR-ubNone-expected.txt:
  • platform/gtk/svg/W3C-I18N/g-dirLTR-ubOverride-expected.png:
  • platform/gtk/svg/W3C-I18N/g-dirLTR-ubOverride-expected.txt:
  • platform/gtk/svg/W3C-I18N/g-dirRTL-ubNone-expected.png:
  • platform/gtk/svg/W3C-I18N/g-dirRTL-ubNone-expected.txt:
  • platform/gtk/svg/W3C-I18N/g-dirRTL-ubOverride-expected.png:
  • platform/gtk/svg/W3C-I18N/g-dirRTL-ubOverride-expected.txt:
  • platform/gtk/svg/W3C-I18N/text-dirLTR-ubNone-expected.png:
  • platform/gtk/svg/W3C-I18N/text-dirLTR-ubNone-expected.txt:
  • platform/gtk/svg/W3C-I18N/text-dirLTR-ubOverride-expected.png:
  • platform/gtk/svg/W3C-I18N/text-dirLTR-ubOverride-expected.txt:
  • platform/gtk/svg/W3C-I18N/text-dirRTL-ubNone-expected.png:
  • platform/gtk/svg/W3C-I18N/text-dirRTL-ubNone-expected.txt:
  • platform/gtk/svg/W3C-I18N/text-dirRTL-ubOverride-expected.png:
  • platform/gtk/svg/W3C-I18N/text-dirRTL-ubOverride-expected.txt:
  • platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubEmbed-in-rtl-context-expected.png:
  • platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubEmbed-in-rtl-context-expected.txt:
  • platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubNone-in-rtl-context-expected.png:
  • platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubNone-in-rtl-context-expected.txt:
  • platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubOverride-in-rtl-context-expected.png:
  • platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubOverride-in-rtl-context-expected.txt:
  • platform/gtk/svg/W3C-I18N/tspan-dirRTL-ubOverride-in-rtl-context-expected.png:
  • platform/gtk/svg/W3C-I18N/tspan-dirRTL-ubOverride-in-rtl-context-expected.txt:
  • platform/gtk/svg/W3C-I18N/tspan-direction-rtl-expected.png:
  • platform/gtk/svg/W3C-I18N/tspan-direction-rtl-expected.txt:
  • platform/gtk/svg/text/bidi-tspans-expected.png:
  • platform/gtk/svg/text/bidi-tspans-expected.txt:
  • platform/gtk/svg/text/select-textLength-spacing-squeeze-1-expected.png:
  • platform/gtk/svg/text/select-textLength-spacing-squeeze-1-expected.txt:
  • platform/gtk/svg/text/select-textLength-spacing-squeeze-2-expected.png:
  • platform/gtk/svg/text/select-textLength-spacing-squeeze-2-expected.txt:
  • platform/gtk/svg/text/select-textLength-spacing-stretch-2-expected.png:
  • platform/gtk/svg/text/select-textLength-spacing-stretch-2-expected.txt:
  • platform/gtk/svg/text/select-textLength-spacing-stretch-3-expected.png:
  • platform/gtk/svg/text/select-textLength-spacing-stretch-3-expected.txt:
Location:
trunk
Files:
2 added
2 deleted
98 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r222841 r222843  
     12017-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [Harfbuzz] Implement ComplexTextController on top of HarfBuzz
     4        https://bugs.webkit.org/show_bug.cgi?id=167956
     5
     6        Unreviewed GTK+ gardening. Rebaseline tests.
     7
     8        * platform/gtk/css1/font_properties/font-expected.png:
     9        * platform/gtk/css1/font_properties/font-expected.txt:
     10        * platform/gtk/css1/pseudo/firstline-expected.png:
     11        * platform/gtk/css1/pseudo/firstline-expected.txt:
     12        * platform/gtk/css1/pseudo/multiple_pseudo_elements-expected.png:
     13        * platform/gtk/css1/pseudo/multiple_pseudo_elements-expected.txt:
     14        * platform/gtk/css2.1/t051201-c23-first-line-00-b-expected.png:
     15        * platform/gtk/css2.1/t051201-c23-first-line-00-b-expected.txt:
     16        * platform/gtk/css2.1/t051202-c26-psudo-nest-00-c-expected.png:
     17        * platform/gtk/css2.1/t051202-c26-psudo-nest-00-c-expected.txt:
     18        * platform/gtk/css2.1/t0905-c5525-fltwidth-00-c-g-expected.png:
     19        * platform/gtk/css2.1/t0905-c5525-fltwidth-00-c-g-expected.txt:
     20        * platform/gtk/css2.1/t1508-c527-font-00-b-expected.png:
     21        * platform/gtk/css2.1/t1508-c527-font-00-b-expected.txt:
     22        * platform/gtk/css2.1/t1508-c527-font-06-b-expected.png:
     23        * platform/gtk/css2.1/t1508-c527-font-06-b-expected.txt:
     24        * platform/gtk/css2.1/t1508-c527-font-07-b-expected.png:
     25        * platform/gtk/css2.1/t1508-c527-font-07-b-expected.txt:
     26        * platform/gtk/css2.1/t1508-c527-font-10-c-expected.png:
     27        * platform/gtk/css2.1/t1508-c527-font-10-c-expected.txt:
     28        * platform/gtk/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.png:
     29        * platform/gtk/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.txt:
     30        * platform/gtk/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.png:
     31        * platform/gtk/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.txt:
     32        * platform/gtk/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.png:
     33        * platform/gtk/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.txt:
     34        * platform/gtk/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.png:
     35        * platform/gtk/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.txt:
     36        * platform/gtk/fast/css/text-overflow-ellipsis-text-align-center-expected.png:
     37        * platform/gtk/fast/css/text-overflow-ellipsis-text-align-center-expected.txt:
     38        * platform/gtk/fast/css/text-overflow-ellipsis-text-align-left-expected.png:
     39        * platform/gtk/fast/css/text-overflow-ellipsis-text-align-left-expected.txt:
     40        * platform/gtk/fast/text/atsui-negative-spacing-features-expected.png:
     41        * platform/gtk/fast/text/atsui-negative-spacing-features-expected.txt:
     42        * platform/gtk/fast/text/atsui-pointtooffset-calls-cg-expected.png:
     43        * platform/gtk/fast/text/atsui-pointtooffset-calls-cg-expected.txt:
     44        * platform/gtk/fast/text/atsui-rtl-override-selection-expected.png:
     45        * platform/gtk/fast/text/atsui-rtl-override-selection-expected.txt:
     46        * platform/gtk/fast/text/atsui-spacing-features-expected.png:
     47        * platform/gtk/fast/text/atsui-spacing-features-expected.txt:
     48        * platform/gtk/fast/text/emphasis-expected.png:
     49        * platform/gtk/fast/text/emphasis-expected.txt:
     50        * platform/gtk/fast/text/international/bold-bengali-expected.png:
     51        * platform/gtk/fast/text/international/bold-bengali-expected.txt:
     52        * platform/gtk/fast/text/international/hebrew-vowels-expected.png:
     53        * platform/gtk/fast/text/international/hebrew-vowels-expected.txt:
     54        * platform/gtk/fast/text/international/thai-baht-space-expected.png:
     55        * platform/gtk/fast/text/international/thai-baht-space-expected.txt:
     56        * platform/gtk/fast/text/international/thai-line-breaks-expected.png:
     57        * platform/gtk/fast/text/international/thai-line-breaks-expected.txt:
     58        * platform/gtk/fast/text/large-text-composed-char-dos-expected.txt: Added.
     59        * platform/gtk/svg/W3C-I18N/g-dirLTR-ubNone-expected.png:
     60        * platform/gtk/svg/W3C-I18N/g-dirLTR-ubNone-expected.txt:
     61        * platform/gtk/svg/W3C-I18N/g-dirLTR-ubOverride-expected.png:
     62        * platform/gtk/svg/W3C-I18N/g-dirLTR-ubOverride-expected.txt:
     63        * platform/gtk/svg/W3C-I18N/g-dirRTL-ubNone-expected.png:
     64        * platform/gtk/svg/W3C-I18N/g-dirRTL-ubNone-expected.txt:
     65        * platform/gtk/svg/W3C-I18N/g-dirRTL-ubOverride-expected.png:
     66        * platform/gtk/svg/W3C-I18N/g-dirRTL-ubOverride-expected.txt:
     67        * platform/gtk/svg/W3C-I18N/text-dirLTR-ubNone-expected.png:
     68        * platform/gtk/svg/W3C-I18N/text-dirLTR-ubNone-expected.txt:
     69        * platform/gtk/svg/W3C-I18N/text-dirLTR-ubOverride-expected.png:
     70        * platform/gtk/svg/W3C-I18N/text-dirLTR-ubOverride-expected.txt:
     71        * platform/gtk/svg/W3C-I18N/text-dirRTL-ubNone-expected.png:
     72        * platform/gtk/svg/W3C-I18N/text-dirRTL-ubNone-expected.txt:
     73        * platform/gtk/svg/W3C-I18N/text-dirRTL-ubOverride-expected.png:
     74        * platform/gtk/svg/W3C-I18N/text-dirRTL-ubOverride-expected.txt:
     75        * platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubEmbed-in-rtl-context-expected.png:
     76        * platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubEmbed-in-rtl-context-expected.txt:
     77        * platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubNone-in-rtl-context-expected.png:
     78        * platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubNone-in-rtl-context-expected.txt:
     79        * platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubOverride-in-rtl-context-expected.png:
     80        * platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubOverride-in-rtl-context-expected.txt:
     81        * platform/gtk/svg/W3C-I18N/tspan-dirRTL-ubOverride-in-rtl-context-expected.png:
     82        * platform/gtk/svg/W3C-I18N/tspan-dirRTL-ubOverride-in-rtl-context-expected.txt:
     83        * platform/gtk/svg/W3C-I18N/tspan-direction-rtl-expected.png:
     84        * platform/gtk/svg/W3C-I18N/tspan-direction-rtl-expected.txt:
     85        * platform/gtk/svg/text/bidi-tspans-expected.png:
     86        * platform/gtk/svg/text/bidi-tspans-expected.txt:
     87        * platform/gtk/svg/text/select-textLength-spacing-squeeze-1-expected.png:
     88        * platform/gtk/svg/text/select-textLength-spacing-squeeze-1-expected.txt:
     89        * platform/gtk/svg/text/select-textLength-spacing-squeeze-2-expected.png:
     90        * platform/gtk/svg/text/select-textLength-spacing-squeeze-2-expected.txt:
     91        * platform/gtk/svg/text/select-textLength-spacing-stretch-2-expected.png:
     92        * platform/gtk/svg/text/select-textLength-spacing-stretch-2-expected.txt:
     93        * platform/gtk/svg/text/select-textLength-spacing-stretch-3-expected.png:
     94        * platform/gtk/svg/text/select-textLength-spacing-stretch-3-expected.txt:
     95
    1962017-10-04  Miguel Gomez  <magomez@igalia.com>
    297
  • trunk/LayoutTests/platform/gtk/css1/font_properties/font-expected.txt

    r222078 r222843  
    2727          text run at (423,0) width 283: "This is the \"base font size\" referred to in the following tests."
    2828      RenderBlock {P} at (0,253) size 769x21
    29         RenderText {#text} at (0,0) size 495x19
    30           text run at (0,0) width 495: "This element should be 13pt. Helvetica which is in small-cap italics."
     29        RenderText {#text} at (0,0) size 496x19
     30          text run at (0,0) width 496: "This element should be 13pt. Helvetica which is in small-cap italics."
    3131      RenderBlock {P} at (0,291) size 769x82
    3232        RenderText {#text} at (0,3) size 762x74
     
    5757          text run at (0,59) width 308: "included for the purposes of testing this more effectively."
    5858      RenderBlock {P} at (0,587) size 769x109
    59         RenderText {#text} at (0,3) size 749x101
    60           text run at (0,3) width 727: "This element should be in a sans-serif font, italicized and small caps, with a weight of 900. "
    61           text run at (727,3) width 22: "Its"
    62           text run at (0,30) width 746: "font-size should be 150% the base font size, and its line-height should be 150% of that value"
    63           text run at (0,57) width 245: "(18px and 27px, respectively). "
    64           text run at (245,57) width 480: "Extra text is included for the purposes of testing this more"
    65           text run at (0,84) width 94: "effectively."
     59        RenderText {#text} at (0,3) size 750x101
     60          text run at (0,3) width 728: "This element should be in a sans-serif font, italicized and small caps, with a weight of 900. "
     61          text run at (727,3) width 23: "Its"
     62          text run at (0,30) width 747: "font-size should be 150% the base font size, and its line-height should be 150% of that value"
     63          text run at (0,57) width 246: "(18px and 27px, respectively). "
     64          text run at (245,57) width 481: "Extra text is included for the purposes of testing this more"
     65          text run at (0,84) width 95: "effectively."
    6666      RenderBlock {P} at (0,713) size 769x217
    67         RenderText {#text} at (0,17) size 744x182
    68           text run at (0,17) width 722: "This element should be in a sans-serif font, italicized and small caps, with a weight of 100. "
    69           text run at (722,17) width 22: "Its"
    70           text run at (0,71) width 742: "font-size should be 150% the base font size, and its line-height should be 300% of that value"
     67        RenderText {#text} at (0,17) size 745x182
     68          text run at (0,17) width 723: "This element should be in a sans-serif font, italicized and small caps, with a weight of 100. "
     69          text run at (722,17) width 23: "Its"
     70          text run at (0,71) width 743: "font-size should be 150% the base font size, and its line-height should be 300% of that value"
    7171          text run at (0,125) width 244: "(18px and 54px, respectively). "
    72           text run at (244,125) width 479: "Extra text is included for the purposes of testing this more"
     72          text run at (243,125) width 480: "Extra text is included for the purposes of testing this more"
    7373          text run at (0,179) width 93: "effectively."
    7474      RenderBlock {P} at (0,947) size 769x145
     
    7676          text run at (0,8) width 750: "This element should be in a monospace font, italicized and small caps, with a weight of"
    7777          text run at (0,44) width 55: "900. "
    78           text run at (55,44) width 687: "Its font-size should be 150% the base font size, and its line-height should be"
     78          text run at (54,44) width 688: "Its font-size should be 150% the base font size, and its line-height should be"
    7979          text run at (0,80) width 618: "2em, or twice the element's font size (18px and 36px, respectively). "
    80           text run at (618,80) width 113: "Extra text is"
     80          text run at (617,80) width 114: "Extra text is"
    8181          text run at (0,116) width 499: "included for the purposes of testing this more effectively."
    8282      RenderBlock {P} at (0,1109) size 769x289
    83         RenderText {#text} at (0,38) size 744x212
    84           text run at (0,38) width 722: "This element should be in a sans-serif font, italicized and small caps, with a weight of 500. "
    85           text run at (722,38) width 22: "Its"
     83        RenderText {#text} at (0,38) size 745x212
     84          text run at (0,38) width 723: "This element should be in a sans-serif font, italicized and small caps, with a weight of 500. "
     85          text run at (722,38) width 23: "Its"
    8686          text run at (0,134) width 693: "font-size should be 150% the base font size, or 18px, and its line-height should be 1in. "
    8787          text run at (693,134) width 47: "Extra"
     
    101101          text run at (0,32) width 318: "Extra text is included for the purposes of testing this more effectively."
    102102      RenderBlock {P} at (0,1645) size 769x271
    103         RenderInline {SPAN} at (0,0) size 758x236 [bgcolor=#C0C0C0]
    104           RenderText {#text} at (0,17) size 758x236
    105             text run at (0,17) width 722: "This element should be in a sans-serif font, italicized and small caps, with a weight of 100. "
    106             text run at (722,17) width 22: "Its"
    107             text run at (0,71) width 742: "font-size should be 150% the base font size, and its line-height should be 300% of that value"
    108             text run at (0,125) width 758: "(18px and 54px, respectively). The text should have a silver background. The background color"
     103        RenderInline {SPAN} at (0,0) size 759x236 [bgcolor=#C0C0C0]
     104          RenderText {#text} at (0,17) size 759x236
     105            text run at (0,17) width 723: "This element should be in a sans-serif font, italicized and small caps, with a weight of 100. "
     106            text run at (722,17) width 23: "Its"
     107            text run at (0,71) width 743: "font-size should be 150% the base font size, and its line-height should be 300% of that value"
     108            text run at (0,125) width 759: "(18px and 54px, respectively). The text should have a silver background. The background color"
    109109            text run at (0,179) width 736: "has been set on an inline element and should therefore only cover the text, not the interline"
    110             text run at (0,233) width 63: "spacing."
     110            text run at (0,233) width 64: "spacing."
    111111        RenderText {#text} at (0,0) size 0x0
    112112      RenderTable {TABLE} at (0,1933) size 769x2432 [border: (1px outset #808080)]
     
    128128                  text run at (0,18) width 204: "referred to in the following tests."
    129129              RenderBlock {P} at (4,57) size 747x21
    130                 RenderText {#text} at (0,0) size 495x19
    131                   text run at (0,0) width 495: "This element should be 13pt. Helvetica which is in small-cap italics."
     130                RenderText {#text} at (0,0) size 496x19
     131                  text run at (0,0) width 496: "This element should be 13pt. Helvetica which is in small-cap italics."
    132132              RenderBlock {P} at (4,101) size 747x145
    133133                RenderText {#text} at (0,5) size 735x134
     
    166166                  text run at (0,76) width 669: "and its line-height should be 150% of that value (18px and 27px,"
    167167                  text run at (0,112) width 147: "respectively). "
    168                   text run at (147,112) width 561: "Extra text is included for the purposes of testing this"
     168                  text run at (146,112) width 562: "Extra text is included for the purposes of testing this"
    169169                  text run at (0,148) width 175: "more effectively."
    170170              RenderBlock {P} at (4,745) size 747x361
     
    174174                  text run at (225,94) width 491: "Its font-size should be 150% the base font size,"
    175175                  text run at (0,166) width 661: "and its line-height should be 300% of that value (18px and 54px,"
    176                   text run at (0,238) width 145: "respectively). "
    177                   text run at (145,238) width 559: "Extra text is included for the purposes of testing this"
    178                   text run at (0,310) width 173: "more effectively."
     176                  text run at (0,238) width 146: "respectively). "
     177                  text run at (145,238) width 560: "Extra text is included for the purposes of testing this"
     178                  text run at (0,310) width 174: "more effectively."
    179179              RenderBlock {P} at (4,1129) size 747x157
    180180                RenderText {#text} at (0,8) size 740x140
     
    191191                  text run at (0,226) width 433: "or 18px, and its line-height should be 1in. "
    192192                  text run at (433,226) width 306: "Extra text is included for the"
    193                   text run at (0,322) width 426: "purposes of testing this more effectively."
     193                  text run at (0,322) width 427: "purposes of testing this more effectively."
    194194              RenderBlock {P} at (4,1717) size 747x145
    195195                RenderText {#text} at (0,8) size 730x128
     
    207207                  text run at (235,40) width 405: "Extra text is included for the purposes of testing this more effectively."
    208208              RenderBlock {P} at (4,1967) size 747x433
    209                 RenderInline {SPAN} at (0,0) size 746x387 [bgcolor=#C0C0C0]
    210                   RenderText {#text} at (0,22) size 746x387
     209                RenderInline {SPAN} at (0,0) size 747x387 [bgcolor=#C0C0C0]
     210                  RenderText {#text} at (0,22) size 747x387
    211211                    text run at (0,22) width 701: "This element should be in a sans-serif font, italicized and small caps,"
    212212                    text run at (0,94) width 225: "with a weight of 100. "
    213213                    text run at (225,94) width 491: "Its font-size should be 150% the base font size,"
    214214                    text run at (0,166) width 661: "and its line-height should be 300% of that value (18px and 54px,"
    215                     text run at (0,238) width 746: "respectively). The text should have a silver background. The background"
    216                     text run at (0,310) width 742: "color has been set on an inline element and should therefore only cover"
     215                    text run at (0,238) width 747: "respectively). The text should have a silver background. The background"
     216                    text run at (0,310) width 743: "color has been set on an inline element and should therefore only cover"
    217217                    text run at (0,382) width 353: "the text, not the interline spacing."
    218218                RenderText {#text} at (0,0) size 0x0
  • trunk/LayoutTests/platform/gtk/css1/pseudo/firstline-expected.txt

    r222078 r222843  
    3030        RenderText {#text} at (0,0) size 762x53
    3131          text run at (0,0) width 604: "The first line of this paragraph, and only that one, should be displayed in small-caps style. "
    32           text run at (604,0) width 154: "Thus, if the first line is"
     32          text run at (603,0) width 155: "Thus, if the first line is"
    3333          text run at (0,18) width 762: "not in small-caps style, OR if the entire paragraph turns out in small-caps, then the user agent has failed this test (although"
    3434          text run at (0,36) width 165: "the problem might be that "
     
    6868                RenderText {#text} at (0,0) size 744x53
    6969                  text run at (0,0) width 604: "The first line of this paragraph, and only that one, should be displayed in small-caps style. "
    70                   text run at (604,0) width 140: "Thus, if the first line"
     70                  text run at (603,0) width 141: "Thus, if the first line"
    7171                  text run at (0,18) width 712: "is not in small-caps style, OR if the entire paragraph turns out in small-caps, then the user agent has failed this test"
    7272                  text run at (0,36) width 229: "(although the problem might be that "
  • trunk/LayoutTests/platform/gtk/css1/pseudo/multiple_pseudo_elements-expected.txt

    r222078 r222843  
    4646            text run at (0,1) width 76: "\"W"
    4747        RenderText {#text} at (76,37) size 765x80
    48           text run at (76,37) width 332: "e should check for quotation support,\" it was said. "
    49           text run at (408,37) width 354: "The first two characters in this paragraph-- a double-"
     48          text run at (76,37) width 333: "e should check for quotation support,\" it was said. "
     49          text run at (408,37) width 355: "The first two characters in this paragraph-- a double-"
    5050          text run at (0,64) width 683: "quote mark and a capital 'W'-- should be 350% bigger than the rest of the paragraph, and maroon (dark red). "
    5151          text run at (683,64) width 81: "Note that the"
     
    9191                    text run at (0,1) width 76: "\"W"
    9292                RenderText {#text} at (76,37) size 739x80
    93                   text run at (76,37) width 332: "e should check for quotation support,\" it was said. "
    94                   text run at (408,37) width 300: "The first two characters in this paragraph-- a"
     93                  text run at (76,37) width 333: "e should check for quotation support,\" it was said. "
     94                  text run at (408,37) width 301: "The first two characters in this paragraph-- a"
    9595                  text run at (0,64) width 727: "double-quote mark and a capital 'W'-- should be 350% bigger than the rest of the paragraph, and maroon (dark red)."
    9696                  text run at (0,82) width 739: "Note that the inclusion of both the quotation mark and the 'W' in the first-letter style is not required under CSS1, but it"
  • trunk/LayoutTests/platform/gtk/css2.1/t051201-c23-first-line-00-b-expected.txt

    r221911 r222843  
    7070        RenderText {#text} at (91,0) size 398x17
    7171          text run at (91,0) width 219: " of this paragraph, and only that "
    72           text run at (310,0) width 179: "one, should be displayed in "
    73         RenderInline {STRONG} at (0,0) size 72x17
    74           RenderText {#text} at (489,0) size 72x17
    75             text run at (489,0) width 72: "small-caps"
    76         RenderText {#text} at (561,0) size 114x17
    77           text run at (561,0) width 61: " style as "
    78           text run at (622,0) width 53: "well as "
    79         RenderInline {STRONG} at (0,0) size 39x17
    80           RenderText {#text} at (675,0) size 39x17
    81             text run at (675,0) width 39: "green"
    82         RenderText {#text} at (714,0) size 784x107
    83           text run at (714,0) width 58: ". Thus, if"
     72          text run at (309,0) width 180: "one, should be displayed in "
     73        RenderInline {STRONG} at (0,0) size 73x17
     74          RenderText {#text} at (488,0) size 73x17
     75            text run at (488,0) width 73: "small-caps"
     76        RenderText {#text} at (560,0) size 115x17
     77          text run at (560,0) width 62: " style as "
     78          text run at (621,0) width 54: "well as "
     79        RenderInline {STRONG} at (0,0) size 40x17
     80          RenderText {#text} at (674,0) size 40x17
     81            text run at (674,0) width 40: "green"
     82        RenderText {#text} at (713,0) size 784x107
     83          text run at (713,0) width 59: ". Thus, if"
    8484          text run at (0,18) width 132: "the first line is not in "
    8585          text run at (132,18) width 341: "small-caps style, or if the entire paragraph turns out in "
  • trunk/LayoutTests/platform/gtk/css2.1/t051202-c26-psudo-nest-00-c-expected.txt

    r222078 r222843  
    5757          RenderText {#text} at (131,15) size 108x17
    5858            text run at (131,15) width 108: "two characters"
    59         RenderText {#text} at (239,15) size 446x17
     59        RenderText {#text} at (239,15) size 447x17
    6060          text run at (239,15) width 118: " in this paragraph "
    61           text run at (357,15) width 328: "(a double-quote mark and a capital 'T') should be "
    62         RenderInline {STRONG} at (0,0) size 88x17
    63           RenderText {#text} at (685,15) size 88x17
    64             text run at (685,15) width 44: "200% "
    65             text run at (729,15) width 44: "bigger"
     61          text run at (356,15) width 330: "(a double-quote mark and a capital 'T') should be "
     62        RenderInline {STRONG} at (0,0) size 89x17
     63          RenderText {#text} at (685,15) size 89x17
     64            text run at (685,15) width 45: "200% "
     65            text run at (729,15) width 45: "bigger"
    6666        RenderText {#text} at (0,37) size 218x17
    6767          text run at (0,37) width 218: "than the rest of the paragraph, and "
  • trunk/LayoutTests/platform/gtk/css2.1/t0905-c5525-fltwidth-00-c-g-expected.txt

    r221911 r222843  
    2323          text run at (0,90) width 199: "float text ignore this float "
    2424          text run at (198,90) width 187: "text ignore this float text"
    25           text run at (0,108) width 235: "ignore this float text ignore this "
     25          text run at (0,108) width 236: "ignore this float text ignore this "
    2626          text run at (235,108) width 150: "float text ignore this"
    2727          text run at (0,126) width 283: "float text ignore this float text ignore "
     
    3636          text run at (48,216) width 337: "this float text ignore this float text ignore this"
    3737          text run at (0,234) width 77: "float text "
    38           text run at (77,234) width 308: "ignore this float text ignore this float text"
     38          text run at (76,234) width 309: "ignore this float text ignore this float text"
    3939          text run at (0,252) width 121: "ignore this float "
    4040          text run at (120,252) width 265: "text ignore this float text ignore this"
    41           text run at (0,270) width 157: "float text ignore this "
     41          text run at (0,270) width 158: "float text ignore this "
    4242          text run at (157,270) width 228: "float text ignore this float text"
    4343          text run at (0,288) width 204: "ignore this float text ignore "
  • trunk/LayoutTests/platform/gtk/css2.1/t1508-c527-font-00-b-expected.txt

    r221911 r222843  
    88          text run at (0,0) width 636: "This text should be 13px Helvetica in small-caps and italicized. There should be a small gap between each line. "
    99        RenderInline {SPAN} at (0,0) size 784x75 [color=#C0C0C0]
    10           RenderText {#text} at (636,0) size 784x75
    11             text run at (636,0) width 132: "dummy text dummy text"
     10          RenderText {#text} at (635,0) size 784x75
     11            text run at (635,0) width 133: "dummy text dummy text"
    1212            text run at (0,15) width 244: "dummy text dummy text dummy text dummy "
    13             text run at (244,15) width 408: "text dummy text dummy text dummy text dummy text dummy text dummy "
    14             text run at (652,15) width 132: "text dummy text dummy"
     13            text run at (243,15) width 409: "text dummy text dummy text dummy text dummy text dummy text dummy "
     14            text run at (651,15) width 133: "text dummy text dummy"
    1515            text run at (0,30) width 272: "text dummy text dummy text dummy text dummy "
    1616            text run at (272,30) width 408: "text dummy text dummy text dummy text dummy text dummy text dummy "
    1717            text run at (680,30) width 92: "text dummy text"
    18             text run at (0,45) width 312: "dummy text dummy text dummy text dummy text dummy "
    19             text run at (312,45) width 408: "text dummy text dummy text dummy text dummy text dummy text dummy "
    20             text run at (720,45) width 64: "text dummy"
    21             text run at (0,60) width 340: "text dummy text dummy text dummy text dummy text dummy "
    22             text run at (340,60) width 364: "text dummy text dummy text dummy text dummy text dummy text"
     18            text run at (0,45) width 313: "dummy text dummy text dummy text dummy text dummy "
     19            text run at (312,45) width 409: "text dummy text dummy text dummy text dummy text dummy text dummy "
     20            text run at (720,45) width 25: "text"
     21            text run at (0,60) width 380: "dummy text dummy text dummy text dummy text dummy text dummy "
     22            text run at (380,60) width 364: "text dummy text dummy text dummy text dummy text dummy text"
    2323        RenderText {#text} at (0,0) size 0x0
  • trunk/LayoutTests/platform/gtk/css2.1/t1508-c527-font-06-b-expected.txt

    r148798 r222843  
    99          text run at (0,44) width 121: "line spacing. "
    1010        RenderInline {SPAN} at (0,0) size 768x200 [color=#C0C0C0]
    11           RenderText {#text} at (121,44) size 768x200
    12             text run at (121,44) width 521: "dummy text dummy text dummy text dummy text dummy text dummy "
     11          RenderText {#text} at (120,44) size 768x200
     12            text run at (120,44) width 522: "dummy text dummy text dummy text dummy text dummy text dummy "
    1313            text run at (642,44) width 126: "text dummy text"
    1414            text run at (0,80) width 427: "dummy text dummy text dummy text dummy text dummy "
  • trunk/LayoutTests/platform/gtk/css2.1/t1508-c527-font-07-b-expected.txt

    r221911 r222843  
    55    RenderBody {BODY} at (8,18) size 769x672 [color=#000080]
    66      RenderBlock {P} at (0,0) size 769x672
    7         RenderText {#text} at (0,38) size 734x116
    8           text run at (0,38) width 734: "This text should be 18px sans-serif, in small-caps and italicized. The lines should be one inch"
     7        RenderText {#text} at (0,38) size 735x116
     8          text run at (0,38) width 735: "This text should be 18px sans-serif, in small-caps and italicized. The lines should be one inch"
    99          text run at (0,134) width 53: "apart. "
    1010        RenderInline {SPAN} at (0,0) size 753x500 [color=#C0C0C0]
    11           RenderText {#text} at (53,134) size 753x500
    12             text run at (53,134) width 519: "dummy text dummy text dummy text dummy text dummy text dummy "
    13             text run at (572,134) width 181: "text dummy text dummy"
     11          RenderText {#text} at (52,134) size 753x500
     12            text run at (52,134) width 520: "dummy text dummy text dummy text dummy text dummy text dummy "
     13            text run at (571,134) width 182: "text dummy text dummy"
    1414            text run at (0,230) width 372: "text dummy text dummy text dummy text dummy "
    1515            text run at (372,230) width 367: "text dummy text dummy text dummy text dummy"
  • trunk/LayoutTests/platform/gtk/css2.1/t1508-c527-font-10-c-expected.txt

    r221911 r222843  
    77        RenderInline {SPAN} at (0,0) size 778x398 [color=#FFFFFF] [bgcolor=#000080]
    88          RenderText {#text} at (0,17) size 748x74
    9             text run at (0,17) width 485: "This text should be 18px sans-serif, in small-caps, italicized, "
     9            text run at (0,17) width 486: "This text should be 18px sans-serif, in small-caps, italicized, "
    1010            text run at (485,17) width 263: "and very light. There should be a"
    1111            text run at (0,71) width 251: "36px gap betwen each line. The "
    12             text run at (251,71) width 451: "text should have a blue background, the gap should not. "
     12            text run at (251,71) width 452: "text should have a blue background, the gap should not. "
    1313          RenderInline {SPAN} at (0,0) size 778x344 [color=#0000FF]
    1414            RenderText {#text} at (702,71) size 778x344
    15               text run at (702,71) width 49: "dummy"
     15              text run at (702,71) width 50: "dummy"
    1616              text run at (0,125) width 465: "text dummy text dummy text dummy text dummy text dummy "
    1717              text run at (465,125) width 313: "text dummy text dummy text dummy text"
  • trunk/LayoutTests/platform/gtk/editing/selection/vertical-rl-rtl-extend-line-backward-br-expected.txt

    r222681 r222843  
    1515            text run at (23,45) width 120 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}."
    1616      RenderBlock {PRE} at (0,212) size 784x0
    17 selection start: position 6 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body
     17selection start: position 0 of child 1 {BR} of child 1 {P} of child 3 {DIV} of body
    1818selection end:   position 5 of child 2 {#text} of child 1 {P} of child 3 {DIV} of body
  • trunk/LayoutTests/platform/gtk/editing/selection/vertical-rl-rtl-extend-line-backward-p-expected.txt

    r222681 r222843  
    1515            text run at (0,45) width 120 RTL: "\x{5D0}\x{5D9}\x{5DF} \x{5DC}\x{5D9} \x{5E9}\x{5DD}."
    1616      RenderBlock {PRE} at (0,212) size 784x0
    17 selection start: position 6 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body
     17selection start: position 9 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body
    1818selection end:   position 5 of child 0 {#text} of child 2 {P} of child 3 {DIV} of body
  • trunk/LayoutTests/platform/gtk/editing/selection/vertical-rl-rtl-extend-line-forward-br-expected.txt

    r222681 r222843  
    1616      RenderBlock {PRE} at (0,212) size 784x0
    1717selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body
    18 selection end:   position 7 of child 2 {#text} of child 1 {P} of child 3 {DIV} of body
     18selection end:   position 9 of child 2 {#text} of child 1 {P} of child 3 {DIV} of body
  • trunk/LayoutTests/platform/gtk/editing/selection/vertical-rl-rtl-extend-line-forward-p-expected.txt

    r222681 r222843  
    1616      RenderBlock {PRE} at (0,212) size 784x0
    1717selection start: position 5 of child 0 {#text} of child 1 {P} of child 3 {DIV} of body
    18 selection end:   position 7 of child 0 {#text} of child 2 {P} of child 3 {DIV} of body
     18selection end:   position 9 of child 0 {#text} of child 2 {P} of child 3 {DIV} of body
  • trunk/LayoutTests/platform/gtk/fast/css/text-overflow-ellipsis-text-align-center-expected.txt

    r222078 r222843  
    6666    RenderText {#text} at (297,12) size 448x17
    6767      text run at (297,12) width 448: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    68 layer at (8,518) size 310x20 clip at (9,519) size 308x18 scrollX 411 scrollWidth 719
     68layer at (8,518) size 310x20 clip at (9,519) size 308x18 scrollX 413 scrollWidth 722
    6969  RenderBlock {DIV} at (0,510) size 310x21 [border: (1px solid #000000)]
    70     RenderText {#text} at (-410,1) size 719x17
    71       text run at (-410,1) width 719 RTL override: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    72 layer at (8,599) size 310x74 clip at (9,600) size 308x72 scrollX 411 scrollWidth 719
     70    RenderText {#text} at (-412,1) size 720x17
     71      text run at (-412,1) width 719 RTL override: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
     72layer at (8,599) size 310x74 clip at (9,600) size 308x72 scrollX 413 scrollWidth 722
    7373  RenderBlock {DIV} at (0,591) size 310x75 [border: (1px solid #000000)]
    74     RenderText {#text} at (-410,1) size 719x17
    75       text run at (-410,1) width 719 RTL override: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
     74    RenderText {#text} at (-412,1) size 720x17
     75      text run at (-412,1) width 719 RTL override: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    7676    RenderBR {BR} at (0,0) size 0x0
    77     RenderText {#text} at (-400,19) size 709x17
    78       text run at (-400,19) width 709 RTL override: "orem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
     77    RenderText {#text} at (-401,19) size 709x17
     78      text run at (-401,19) width 709 RTL override: "orem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    7979    RenderBR {BR} at (0,0) size 0x0
    80     RenderText {#text} at (-392,37) size 701x17
    81       text run at (-392,37) width 701 RTL override: "rem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
     80    RenderText {#text} at (-395,37) size 701x17
     81      text run at (-395,37) width 701 RTL override: "rem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    8282    RenderBR {BR} at (0,0) size 0x0
    83     RenderText {#text} at (-387,55) size 696x17
    84       text run at (-387,55) width 696 RTL override: "em ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
     83    RenderText {#text} at (-388,55) size 697x17
     84      text run at (-388,55) width 696 RTL override: "em ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    8585    RenderBR {BR} at (0,0) size 0x0
    86 layer at (8,734) size 310x31 clip at (9,735) size 308x29 scrollX 440 scrollWidth 748
     86layer at (8,734) size 310x31 clip at (9,735) size 308x29 scrollX 443 scrollWidth 752
    8787  RenderBlock {DIV} at (0,725) size 310x32 [border: (1px solid #000000)]
    88     RenderText {#text} at (128,12) size 181x17
    89       text run at (128,12) width 181 RTL override: "Lorem ipsum dolor sit amet, "
    90     RenderImage {IMG} at (103,1) size 25x25
    91     RenderText {#text} at (-439,12) size 542x17
    92       text run at (-439,12) width 542 RTL override: " consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
     88    RenderText {#text} at (124,12) size 182x17
     89      text run at (124,12) width 182 RTL override: "Lorem ipsum dolor sit amet, "
     90    RenderImage {IMG} at (99,1) size 26x25
     91    RenderText {#text} at (-442,12) size 543x17
     92      text run at (-442,12) width 542 RTL override: " consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    9393layer at (8,825) size 310x31 clip at (9,826) size 308x29 scrollX 436 scrollWidth 744
    9494  RenderBlock {DIV} at (0,817) size 310x32 [border: (1px solid #000000)]
  • trunk/LayoutTests/platform/gtk/fast/css/text-overflow-ellipsis-text-align-left-expected.txt

    r222078 r222843  
    6666    RenderText {#text} at (297,12) size 448x17
    6767      text run at (297,12) width 448: "ipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    68 layer at (8,518) size 310x20 clip at (9,519) size 308x18 scrollX 411 scrollWidth 719
     68layer at (8,518) size 310x20 clip at (9,519) size 308x18 scrollX 416 scrollWidth 724
    6969  RenderBlock {DIV} at (0,510) size 310x21 [border: (1px solid #000000)]
    70     RenderText {#text} at (-410,1) size 719x17
    71       text run at (-410,1) width 719 RTL override: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    72 layer at (8,599) size 310x74 clip at (9,600) size 308x72 scrollX 411 scrollWidth 719
     70    RenderText {#text} at (-415,1) size 719x17
     71      text run at (-415,1) width 719 RTL override: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
     72layer at (8,599) size 310x74 clip at (9,600) size 308x72 scrollX 416 scrollWidth 724
    7373  RenderBlock {DIV} at (0,591) size 310x75 [border: (1px solid #000000)]
    74     RenderText {#text} at (-410,1) size 719x17
    75       text run at (-410,1) width 719 RTL override: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
     74    RenderText {#text} at (-415,1) size 719x17
     75      text run at (-415,1) width 719 RTL override: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    7676    RenderBR {BR} at (0,0) size 0x0
    77     RenderText {#text} at (-400,19) size 709x17
    78       text run at (-400,19) width 709 RTL override: "orem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
     77    RenderText {#text} at (-402,19) size 709x17
     78      text run at (-402,19) width 709 RTL override: "orem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    7979    RenderBR {BR} at (0,0) size 0x0
    80     RenderText {#text} at (-392,37) size 701x17
    81       text run at (-392,37) width 701 RTL override: "rem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
     80    RenderText {#text} at (-398,37) size 701x17
     81      text run at (-398,37) width 701 RTL override: "rem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    8282    RenderBR {BR} at (0,0) size 0x0
    83     RenderText {#text} at (-387,55) size 696x17
    84       text run at (-387,55) width 696 RTL override: "em ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
     83    RenderText {#text} at (-390,55) size 696x17
     84      text run at (-390,55) width 696 RTL override: "em ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    8585    RenderBR {BR} at (0,0) size 0x0
    86 layer at (8,734) size 310x31 clip at (9,735) size 308x29 scrollX 440 scrollWidth 748
     86layer at (8,734) size 310x31 clip at (9,735) size 308x29 scrollX 447 scrollWidth 755
    8787  RenderBlock {DIV} at (0,725) size 310x32 [border: (1px solid #000000)]
    88     RenderText {#text} at (128,12) size 181x17
    89       text run at (128,12) width 181 RTL override: "Lorem ipsum dolor sit amet, "
    90     RenderImage {IMG} at (103,1) size 25x25
    91     RenderText {#text} at (-439,12) size 542x17
    92       text run at (-439,12) width 542 RTL override: " consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
     88    RenderText {#text} at (121,12) size 181x17
     89      text run at (121,12) width 181 RTL override: "Lorem ipsum dolor sit amet, "
     90    RenderImage {IMG} at (96,1) size 25x25
     91    RenderText {#text} at (-446,12) size 542x17
     92      text run at (-446,12) width 542 RTL override: " consectetur adipiscing elit. Vivamus vitae eros non libero faucibus sagittis sed ut eros."
    9393layer at (8,825) size 310x31 clip at (9,826) size 308x29 scrollX 436 scrollWidth 744
    9494  RenderBlock {DIV} at (0,817) size 310x32 [border: (1px solid #000000)]
  • trunk/LayoutTests/platform/gtk/fast/text/atsui-negative-spacing-features-expected.txt

    r222681 r222843  
    2424              RenderBlock {DIV} at (1,1) size 202x124
    2525                RenderBlock {DIV} at (0,0) size 202x38 [border: (1px solid #0000FF)]
    26                   RenderText {#text} at (45,1) size 178x35
     26                  RenderText {#text} at (45,1) size 177x35
    2727                    text run at (45,1) width 156 RTL: "\x{5D9}\x{5B0}\x{5D4}\x{5B4}\x{5D9}, \x{5D0}\x{5B8}\x{5D7}\x{5B4}\x{5D9}, \x{5DC}\x{5B0}\x{5DA}\x{5B8} \x{5E1}\x{5B5}\x{5E4}\x{5B6}\x{5E8} \x{5E9}\x{5C1}\x{5B0}\x{5DC}\x{5B7}\x{5D7}\x{5B0}\x{5EA}\x{5BC}\x{5B4}\x{5D9}\x{5D5}"
    28                     text run at (23,19) width 122 RTL: "\x{5E6}\x{5B0}\x{5DE}\x{5B4}\x{5D9}\x{5EA}\x{5D5}\x{5BC}\x{5EA} \x{5DC}\x{5B8}\x{5DA}\x{5B0} \x{5DE}\x{5B0}\x{5DB}\x{5B7}\x{5E8}\x{5B0}\x{5EA}\x{5BC}\x{5B4}\x{5D9}\x{5D5}."
     28                    text run at (24,19) width 122 RTL: "\x{5E6}\x{5B0}\x{5DE}\x{5B4}\x{5D9}\x{5EA}\x{5D5}\x{5BC}\x{5EA} \x{5DC}\x{5B8}\x{5DA}\x{5B0} \x{5DE}\x{5B0}\x{5DB}\x{5B7}\x{5E8}\x{5B0}\x{5EA}\x{5BC}\x{5B4}\x{5D9}\x{5D5}."
    2929                    text run at (145,19) width 56 RTL: "\x{5D5}\x{5BC}\x{5DE}\x{5B4}\x{5DE}\x{5B0}\x{5DB}\x{5BC}\x{5B6}\x{5E8}\x{5B6}\x{5EA} "
    3030                RenderBlock {DIV} at (0,43) size 202x38 [border: (1px solid #0000FF)]
     
    4141                  RenderText {#text} at (9,1) size 192x35
    4242                    text run at (9,1) width 192 RTL: "\x{5D9}\x{5B0}\x{5D4}\x{5B4}\x{5D9}, \x{5D0}\x{5B8}\x{5D7}\x{5B4}\x{5D9}, \x{5DC}\x{5B0}\x{5DA}\x{5B8} \x{5E1}\x{5B5}\x{5E4}\x{5B6}\x{5E8} \x{5E9}\x{5C1}\x{5B0}\x{5DC}\x{5B7}\x{5D7}\x{5B0}\x{5EA}\x{5BC}\x{5B4}\x{5D9}\x{5D5} \x{5D5}\x{5BC}\x{5DE}\x{5B4}\x{5DE}\x{5B0}\x{5DB}\x{5BC}\x{5B6}\x{5E8}\x{5B6}\x{5EA}"
    43                     text run at (92,19) width 109 RTL: "\x{5E6}\x{5B0}\x{5DE}\x{5B4}\x{5D9}\x{5EA}\x{5D5}\x{5BC}\x{5EA} \x{5DC}\x{5B8}\x{5DA}\x{5B0} \x{5DE}\x{5B0}\x{5DB}\x{5B7}\x{5E8}\x{5B0}\x{5EA}\x{5BC}\x{5B4}\x{5D9}\x{5D5}."
     43                    text run at (93,19) width 108 RTL: "\x{5E6}\x{5B0}\x{5DE}\x{5B4}\x{5D9}\x{5EA}\x{5D5}\x{5BC}\x{5EA} \x{5DC}\x{5B8}\x{5DA}\x{5B0} \x{5DE}\x{5B0}\x{5DB}\x{5B7}\x{5E8}\x{5B0}\x{5EA}\x{5BC}\x{5B4}\x{5D9}\x{5D5}."
    4444                RenderBlock {DIV} at (0,43) size 202x38 [border: (1px solid #0000FF)]
    4545                  RenderText {#text} at (1,1) size 150x35
  • trunk/LayoutTests/platform/gtk/fast/text/atsui-pointtooffset-calls-cg-expected.txt

    r222079 r222843  
    1717        RenderText {#text} at (62,18) size 632x17
    1818          text run at (62,18) width 632: " by clicking the X and verifying that the correct caret position (13) is reported to the editing delegate."
    19 caret: position 7 of child 2 {#text} of body
     19caret: position 13 of child 2 {#text} of body
  • trunk/LayoutTests/platform/gtk/fast/text/atsui-rtl-override-selection-expected.txt

    r222315 r222843  
    1313        RenderText {#text} at (0,0) size 281x17
    1414          text run at (0,0) width 281: "\x{201C}remips\x{201D} should be highlighted in the above."
    15 selection start: position 3 of child 0 {#text} of child 3 {BDO} of body
     15selection start: position 4 of child 0 {#text} of child 3 {BDO} of body
    1616selection end:   position 10 of child 0 {#text} of child 3 {BDO} of body
  • trunk/LayoutTests/platform/gtk/fast/text/atsui-spacing-features-expected.txt

    r222681 r222843  
    3636              RenderBlock {DIV} at (1,1) size 202x178
    3737                RenderBlock {DIV} at (0,0) size 202x56 [border: (1px solid #0000FF)]
    38                   RenderText {#text} at (61,1) size 182x53
     38                  RenderText {#text} at (61,1) size 181x53
    3939                    text run at (61,1) width 140 RTL: "\x{5D9}\x{5B0}\x{5D4}\x{5B4}\x{5D9}, \x{5D0}\x{5B8}\x{5D7}\x{5B4}\x{5D9}, \x{5DC}\x{5B0}\x{5DA}\x{5B8} \x{5E1}\x{5B5}\x{5E4}\x{5B6}\x{5E8}"
    40                     text run at (19,19) width 50 RTL: "\x{5E6}\x{5B0}\x{5DE}\x{5B4}\x{5D9}\x{5EA}\x{5D5}\x{5BC}\x{5EA}"
     40                    text run at (20,19) width 50 RTL: "\x{5E6}\x{5B0}\x{5DE}\x{5B4}\x{5D9}\x{5EA}\x{5D5}\x{5BC}\x{5EA}"
    4141                    text run at (69,19) width 132 RTL: "\x{5E9}\x{5C1}\x{5B0}\x{5DC}\x{5B7}\x{5D7}\x{5B0}\x{5EA}\x{5BC}\x{5B4}\x{5D9}\x{5D5} \x{5D5}\x{5BC}\x{5DE}\x{5B4}\x{5DE}\x{5B0}\x{5DB}\x{5BC}\x{5B6}\x{5E8}\x{5B6}\x{5EA} "
    4242                    text run at (119,37) width 82 RTL: "\x{5DC}\x{5B8}\x{5DA}\x{5B0} \x{5DE}\x{5B0}\x{5DB}\x{5B7}\x{5E8}\x{5B0}\x{5EA}\x{5BC}\x{5B4}\x{5D9}\x{5D5}."
     
    7676                  RenderText {#text} at (1,1) size 200x35
    7777                    text run at (1,1) width 200 RTL: "\x{5D9}\x{5B0}\x{5D4}\x{5B4}\x{5D9}, \x{5D0}\x{5B8}\x{5D7}\x{5B4}\x{5D9}, \x{5DC}\x{5B0}\x{5DA}\x{5B8} \x{5E1}\x{5B5}\x{5E4}\x{5B6}\x{5E8} \x{5E9}\x{5C1}\x{5B0}\x{5DC}\x{5B7}\x{5D7}\x{5B0}\x{5EA}\x{5BC}\x{5B4}\x{5D9}\x{5D5}"
    78                     text run at (17,19) width 126 RTL: "\x{5E6}\x{5B0}\x{5DE}\x{5B4}\x{5D9}\x{5EA}\x{5D5}\x{5BC}\x{5EA} \x{5DC}\x{5B8}\x{5DA}\x{5B0} \x{5DE}\x{5B0}\x{5DB}\x{5B7}\x{5E8}\x{5B0}\x{5EA}\x{5BC}\x{5B4}\x{5D9}\x{5D5}."
     78                    text run at (18,19) width 126 RTL: "\x{5E6}\x{5B0}\x{5DE}\x{5B4}\x{5D9}\x{5EA}\x{5D5}\x{5BC}\x{5EA} \x{5DC}\x{5B8}\x{5DA}\x{5B0} \x{5DE}\x{5B0}\x{5DB}\x{5B7}\x{5E8}\x{5B0}\x{5EA}\x{5BC}\x{5B4}\x{5D9}\x{5D5}."
    7979                    text run at (143,19) width 58 RTL: "\x{5D5}\x{5BC}\x{5DE}\x{5B4}\x{5DE}\x{5B0}\x{5DB}\x{5BC}\x{5B6}\x{5E8}\x{5B6}\x{5EA} "
    8080                RenderBlock {DIV} at (0,43) size 202x38 [border: (1px solid #0000FF)]
  • trunk/LayoutTests/platform/gtk/fast/text/emphasis-expected.txt

    r221725 r222843  
    3232          RenderText {#text} at (3,70) size 111x26
    3333            text run at (3,70) width 111: "odio sa\x{300}pien"
    34         RenderText {#text} at (114,70) size 338x66
    35           text run at (114,70) width 12: ", "
    36           text run at (126,70) width 215: "lobortis eu iaculis vel,"
     34        RenderText {#text} at (113,70) size 338x66
     35          text run at (113,70) width 13: ", "
     36          text run at (125,70) width 216: "lobortis eu iaculis vel,"
    3737          text run at (3,110) width 211: "scelerisque nec dolor."
    3838      RenderBlock (floating) {DIV} at (8,164) size 366x154 [border: (3px solid #000000)]
  • trunk/LayoutTests/platform/gtk/fast/text/international/bold-bengali-expected.txt

    r221675 r222843  
    1414          text run at (478,0) width 260: "There should be no missing-glyph boxes."
    1515      RenderBlock {P} at (0,86) size 784x18
    16         RenderInline {B} at (0,0) size 25x17
    17           RenderText {#text} at (0,0) size 25x17
    18             text run at (0,0) width 25: "\x{9AC}\x{9BE}\x{982}\x{9B2}\x{9BE}"
     16        RenderInline {B} at (0,0) size 30x17
     17          RenderText {#text} at (0,0) size 30x17
     18            text run at (0,0) width 30: "\x{9AC}\x{9BE}\x{982}\x{9B2}\x{9BE}"
    1919      RenderBlock {P} at (0,120) size 784x0
    2020      RenderBlock {P} at (0,120) size 784x18
  • trunk/LayoutTests/platform/gtk/fast/text/international/hebrew-vowels-expected.txt

    r222681 r222843  
    1212          text run at (0,0) width 458: "The vowel (two vertical dots) should be centered beneath the main letter."
    1313      RenderBlock {DIV} at (0,86) size 784x91
    14         RenderText {#text} at (57,1) size 66x88
    15           text run at (57,1) width 66 RTL: "\x{5E1}\x{5B0} "
    16         RenderText {#text} at (0,1) size 57x88
    17           text run at (0,1) width 57 RTL: "\x{5E9}\x{5B0}"
     14        RenderText {#text} at (33,1) size 44x88
     15          text run at (33,1) width 44 RTL: "\x{5E1}\x{5B0} "
     16        RenderText {#text} at (0,1) size 34x88
     17          text run at (0,1) width 34 RTL: "\x{5E9}\x{5B0}"
    1818        RenderText {#text} at (0,0) size 0x0
    1919      RenderBlock {HR} at (0,185) size 784x2 [border: (1px inset #000000)]
  • trunk/LayoutTests/platform/gtk/fast/text/international/thai-baht-space-expected.txt

    r222079 r222843  
    1414          text run at (0,18) width 576: "Two lines below have 4 Thai currency signs (U+0E3F) and all of them should be rendered."
    1515      RenderBlock {P} at (0,52) size 784x36
    16         RenderText {#text} at (0,0) size 271x17
    17           text run at (0,0) width 271: "abc \x{E25}\x{E07}\x{E17}\x{E38}\x{E19}4000\x{E3F} \x{E23}\x{E31}\x{E1A}\x{E1B}\x{E23}\x{E30}\x{E01}\x{E31}\x{E19}\x{E23}\x{E32}\x{E22}\x{E44}\x{E14}\x{E49} 50000\x{E3F}/M"
    18         RenderBR {BR} at (271,14) size 0x0
    19         RenderText {#text} at (0,18) size 271x17
    20           text run at (0,18) width 271: "abc \x{E25}\x{E07}\x{E17}\x{E38}\x{E19}4000 \x{E3F}\x{E23}\x{E31}\x{E1A}\x{E1B}\x{E23}\x{E30}\x{E01}\x{E31}\x{E19}\x{E23}\x{E32}\x{E22}\x{E44}\x{E14}\x{E49} 50000\x{E3F}/M"
     16        RenderText {#text} at (0,0) size 272x17
     17          text run at (0,0) width 272: "abc \x{E25}\x{E07}\x{E17}\x{E38}\x{E19}4000\x{E3F} \x{E23}\x{E31}\x{E1A}\x{E1B}\x{E23}\x{E30}\x{E01}\x{E31}\x{E19}\x{E23}\x{E32}\x{E22}\x{E44}\x{E14}\x{E49} 50000\x{E3F}/M"
     18        RenderBR {BR} at (271,14) size 1x0
     19        RenderText {#text} at (0,18) size 272x17
     20          text run at (0,18) width 272: "abc \x{E25}\x{E07}\x{E17}\x{E38}\x{E19}4000 \x{E3F}\x{E23}\x{E31}\x{E1A}\x{E1B}\x{E23}\x{E30}\x{E01}\x{E31}\x{E19}\x{E23}\x{E32}\x{E22}\x{E44}\x{E14}\x{E49} 50000\x{E3F}/M"
  • trunk/LayoutTests/platform/gtk/fast/text/international/thai-line-breaks-expected.txt

    r221675 r222843  
    1515      text run at (0,0) width 18: "\x{E1A}\x{E17}"
    1616      text run at (0,18) width 41: "\x{E17}\x{E35}\x{E48}\x{E51}\x{E1E}\x{E32}\x{E22}\x{E38}"
    17       text run at (0,36) width 49: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
     17      text run at (0,36) width 50: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
    1818      text run at (0,54) width 16: "\x{E42}\x{E14}"
    1919      text run at (0,72) width 21: "\x{E42}\x{E23}\x{E18}\x{E35}"
     
    2121      text run at (0,108) width 16: "\x{E2D}\x{E22}\x{E39}\x{E48}"
    2222      text run at (0,126) width 54: "\x{E17}\x{E48}\x{E32}\x{E21}\x{E01}\x{E25}\x{E32}\x{E07}"
    23       text run at (0,144) width 42: "\x{E17}\x{E38}\x{E48}\x{E07}\x{E43}\x{E2B}\x{E0D}\x{E48}"
     23      text run at (0,144) width 43: "\x{E17}\x{E38}\x{E48}\x{E07}\x{E43}\x{E2B}\x{E0D}\x{E48}"
    2424      text run at (0,162) width 17: "\x{E43}\x{E19}"
    2525      text run at (0,180) width 44: "\x{E41}\x{E04}\x{E19}\x{E0B}\x{E31}\x{E2A}"
     
    2828      text run at (0,234) width 13: "\x{E40}\x{E2E}"
    2929      text run at (0,252) width 17: "\x{E19}\x{E23}\x{E35}"
    30       text run at (0,270) width 35: "\x{E0A}\x{E32}\x{E27}\x{E44}\x{E23}\x{E48}"
     30      text run at (0,270) width 36: "\x{E0A}\x{E32}\x{E27}\x{E44}\x{E23}\x{E48}"
    3131      text run at (0,288) width 22: "\x{E41}\x{E25}\x{E30}"
    3232      text run at (0,306) width 15: "\x{E1B}\x{E49}\x{E32}"
    3333      text run at (0,324) width 22: "\x{E40}\x{E2D}\x{E47}\x{E21}"
    3434      text run at (0,342) width 37: "\x{E20}\x{E23}\x{E23}\x{E22}\x{E32}"
    35       text run at (0,360) width 35: "\x{E0A}\x{E32}\x{E27}\x{E44}\x{E23}\x{E48}"
     35      text run at (0,360) width 36: "\x{E0A}\x{E32}\x{E27}\x{E44}\x{E23}\x{E48}"
    3636      text run at (0,378) width 25: "\x{E1A}\x{E49}\x{E32}\x{E19}"
    3737      text run at (0,396) width 23: "\x{E02}\x{E2D}\x{E07}"
     
    142142      text run at (0,2286) width 14: "\x{E27}\x{E48}\x{E32}"
    143143      text run at (0,2304) width 38: "\"\x{E42}\x{E1E}\x{E23}\x{E07}"
    144       text run at (0,2322) width 56: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}\""
     144      text run at (0,2322) width 57: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}\""
    145145      text run at (0,2340) width 24: "\x{E40}\x{E1B}\x{E47}\x{E19}"
    146146      text run at (0,2358) width 9: "\x{E17}\x{E35}\x{E48}"
     
    179179      text run at (0,2952) width 20: "\x{E19}\x{E31}\x{E49}\x{E19}"
    180180      text run at (0,2970) width 9: "\x{E21}\x{E35}"
    181       text run at (0,2988) width 34: "\x{E1A}\x{E31}\x{E19}\x{E44}\x{E14}"
     181      text run at (0,2988) width 35: "\x{E1A}\x{E31}\x{E19}\x{E44}\x{E14}"
    182182      text run at (0,3006) width 15: "\x{E25}\x{E07}"
    183183      text run at (0,3024) width 16: "\x{E44}\x{E1B}"
     
    213213      text run at (0,3564) width 25: "\x{E44}\x{E21}\x{E48}\x{E21}\x{E35}"
    214214      text run at (0,3582) width 17: "\x{E41}\x{E21}\x{E49}"
    215       text run at (0,3600) width 34: "\x{E15}\x{E49}\x{E19}\x{E44}\x{E21}\x{E49}"
     215      text run at (0,3600) width 35: "\x{E15}\x{E49}\x{E19}\x{E44}\x{E21}\x{E49}"
    216216      text run at (0,3618) width 17: "\x{E2A}\x{E31}\x{E01}"
    217217      text run at (0,3636) width 19: "\x{E15}\x{E49}\x{E19}"
     
    277277      text run at (0,4716) width 24: "\x{E40}\x{E2B}\x{E47}\x{E19}"
    278278      text run at (0,4734) width 16: "\x{E2D}\x{E22}\x{E39}\x{E48}"
    279       text run at (0,4752) width 32: "\x{E17}\x{E31}\x{E48}\x{E27}\x{E44}\x{E1B}"
     279      text run at (0,4752) width 33: "\x{E17}\x{E31}\x{E48}\x{E27}\x{E44}\x{E1B}"
    280280      text run at (0,4770) width 23: "\x{E04}\x{E23}\x{E31}\x{E49}\x{E07}"
    281281      text run at (0,4788) width 26: "\x{E2B}\x{E19}\x{E36}\x{E48}\x{E07}"
     
    575575      text run at (0,10080) width 30: "\x{E40}\x{E2B}\x{E25}\x{E37}\x{E2D}"
    576576      text run at (0,10098) width 24: "\x{E40}\x{E01}\x{E34}\x{E19}"
    577       text run at (0,10116) width 42: "\x{E2D}\x{E22}\x{E48}\x{E32}\x{E07}\x{E44}\x{E23}"
     577      text run at (0,10116) width 43: "\x{E2D}\x{E22}\x{E48}\x{E32}\x{E07}\x{E44}\x{E23}"
    578578      text run at (0,10134) width 33: "\x{E01}\x{E47}\x{E15}\x{E32}\x{E21}"
    579579      text run at (0,10152) width 18: "\x{E27}\x{E31}\x{E19}"
     
    590590      text run at (0,10350) width 16: "\x{E2D}\x{E22}\x{E39}\x{E48}"
    591591      text run at (0,10368) width 9: "\x{E17}\x{E35}\x{E48}"
    592       text run at (0,10386) width 34: "\x{E1A}\x{E31}\x{E19}\x{E44}\x{E14}"
     592      text run at (0,10386) width 35: "\x{E1A}\x{E31}\x{E19}\x{E44}\x{E14}"
    593593      text run at (0,10404) width 31: "\x{E1B}\x{E23}\x{E30}\x{E15}\x{E39}"
    594594      text run at (0,10422) width 22: "\x{E41}\x{E25}\x{E30}"
     
    698698      text run at (0,12294) width 17: "\x{E25}\x{E38}\x{E01}"
    699699      text run at (0,12312) width 18: "\x{E02}\x{E36}\x{E49}\x{E19}"
    700       text run at (0,12330) width 34: "\x{E17}\x{E31}\x{E19}\x{E43}\x{E14}"
     700      text run at (0,12330) width 35: "\x{E17}\x{E31}\x{E19}\x{E43}\x{E14}"
    701701      text run at (0,12348) width 24: "\"\x{E25}\x{E21}"
    702       text run at (0,12366) width 49: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
     702      text run at (0,12366) width 50: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
    703703      text run at (0,12384) width 15: "\x{E21}\x{E32}"
    704704      text run at (0,12402) width 29: "\x{E40}\x{E2D}\x{E47}\x{E21}\""
     
    795795      text run at (0,14040) width 23: "\x{E2B}\x{E32}\x{E22}"
    796796      text run at (0,14058) width 19: "\x{E1B}\x{E35}\x{E19}"
    797       text run at (0,14076) width 34: "\x{E1A}\x{E31}\x{E19}\x{E44}\x{E14}"
     797      text run at (0,14076) width 35: "\x{E1A}\x{E31}\x{E19}\x{E44}\x{E14}"
    798798      text run at (0,14094) width 16: "\x{E44}\x{E21}\x{E49}"
    799799      text run at (0,14112) width 15: "\x{E25}\x{E07}"
     
    900900      text run at (0,15930) width 23: "\x{E02}\x{E2D}\x{E07}"
    901901      text run at (0,15948) width 24: "\x{E1E}\x{E32}\x{E22}\x{E38}"
    902       text run at (0,15966) width 49: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
     902      text run at (0,15966) width 50: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
    903903      text run at (0,15984) width 24: "\x{E15}\x{E32}\x{E21}"
    904904      text run at (0,16002) width 27: "\x{E1B}\x{E01}\x{E15}\x{E34}"
     
    906906      text run at (0,16038) width 30: "\x{E01}\x{E25}\x{E32}\x{E07}"
    907907      text run at (0,16056) width 24: "\x{E1E}\x{E32}\x{E22}\x{E38}"
    908       text run at (0,16074) width 49: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
     908      text run at (0,16074) width 50: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
    909909      text run at (0,16092) width 38: "\x{E2D}\x{E32}\x{E01}\x{E32}\x{E28}"
    910910      text run at (0,16110) width 14: "\x{E08}\x{E30}"
     
    935935      text run at (0,16560) width 23: "\x{E02}\x{E2D}\x{E07}"
    936936      text run at (0,16578) width 24: "\x{E1E}\x{E32}\x{E22}\x{E38}"
    937       text run at (0,16596) width 49: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
     937      text run at (0,16596) width 50: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
    938938      text run at (0,16614) width 22: "\x{E41}\x{E25}\x{E30}"
    939939      text run at (0,16632) width 23: "\x{E08}\x{E32}\x{E01}"
     
    10161016      text run at (0,18018) width 16: "\x{E42}\x{E15}\x{E49}"
    10171017      text run at (0,18036) width 16: "\x{E44}\x{E21}\x{E48}"
    1018       text run at (0,18054) width 39: "\x{E0A}\x{E2D}\x{E1A}\x{E43}\x{E08}"
     1018      text run at (0,18054) width 40: "\x{E0A}\x{E2D}\x{E1A}\x{E43}\x{E08}"
    10191019      text run at (0,18072) width 21: "\x{E40}\x{E25}\x{E22}"
    10201020      text run at (0,18090) width 19: "\x{E21}\x{E31}\x{E19}"
     
    11461146      text run at (0,20358) width 49: "\x{E2D}\x{E38}\x{E1A}\x{E31}\x{E15}\x{E34}\x{E40}\x{E2B}\x{E15}\x{E38}"
    11471147      text run at (0,20376) width 17: "\x{E2D}\x{E35}\x{E01}"
    1148       text run at (0,20394) width 38: "\x{E0A}\x{E31}\x{E48}\x{E27}\x{E42}\x{E21}\x{E07}"
     1148      text run at (0,20394) width 39: "\x{E0A}\x{E31}\x{E48}\x{E27}\x{E42}\x{E21}\x{E07}"
    11491149      text run at (0,20412) width 24: "\x{E41}\x{E25}\x{E49}\x{E27}"
    1150       text run at (0,20430) width 38: "\x{E0A}\x{E31}\x{E48}\x{E27}\x{E42}\x{E21}\x{E07}"
     1150      text run at (0,20430) width 39: "\x{E0A}\x{E31}\x{E48}\x{E27}\x{E42}\x{E21}\x{E07}"
    11511151      text run at (0,20448) width 19: "\x{E40}\x{E25}\x{E48}\x{E32}"
    11521152      text run at (0,20466) width 25: "\x{E1C}\x{E48}\x{E32}\x{E19}"
     
    12021202      text run at (0,21366) width 17: "\x{E41}\x{E15}\x{E48}"
    12031203      text run at (0,21384) width 31: "\x{E2B}\x{E25}\x{E32}\x{E22}"
    1204       text run at (0,21402) width 38: "\x{E0A}\x{E31}\x{E48}\x{E27}\x{E42}\x{E21}\x{E07}"
     1204      text run at (0,21402) width 39: "\x{E0A}\x{E31}\x{E48}\x{E27}\x{E42}\x{E21}\x{E07}"
    12051205      text run at (0,21420) width 25: "\x{E1C}\x{E48}\x{E32}\x{E19}"
    12061206      text run at (0,21438) width 16: "\x{E44}\x{E1B}"
     
    12271227      text run at (0,21816) width 14: "\x{E08}\x{E30}"
    12281228      text run at (0,21834) width 24: "\x{E40}\x{E1B}\x{E47}\x{E19}"
    1229       text run at (0,21852) width 42: "\x{E2D}\x{E22}\x{E48}\x{E32}\x{E07}\x{E44}\x{E23}"
     1229      text run at (0,21852) width 43: "\x{E2D}\x{E22}\x{E48}\x{E32}\x{E07}\x{E44}\x{E23}"
    12301230      text run at (0,21870) width 17: "\x{E43}\x{E19}"
    12311231      text run at (0,21888) width 26: "\x{E17}\x{E35}\x{E48}\x{E2A}\x{E38}\x{E14}"
     
    12881288      text run at (0,36) width 8: "\x{E51}"
    12891289      text run at (0,54) width 24: "\x{E1E}\x{E32}\x{E22}\x{E38}"
    1290       text run at (0,72) width 49: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
     1290      text run at (0,72) width 50: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
    12911291      text run at (0,90) width 16: "\x{E42}\x{E14}"
    12921292      text run at (0,108) width 21: "\x{E42}\x{E23}\x{E18}\x{E35}"
     
    13091309      text run at (0,414) width 22: "\x{E40}\x{E2D}\x{E47}\x{E21}"
    13101310      text run at (0,432) width 37: "\x{E20}\x{E23}\x{E23}\x{E22}\x{E32}"
    1311       text run at (0,450) width 35: "\x{E0A}\x{E32}\x{E27}\x{E44}\x{E23}\x{E48}"
     1311      text run at (0,450) width 36: "\x{E0A}\x{E32}\x{E27}\x{E44}\x{E23}\x{E48}"
    13121312      text run at (0,468) width 25: "\x{E1A}\x{E49}\x{E32}\x{E19}"
    13131313      text run at (0,486) width 23: "\x{E02}\x{E2D}\x{E07}"
     
    14201420      text run at (0,2412) width 7: "\""
    14211421      text run at (0,2430) width 31: "\x{E42}\x{E1E}\x{E23}\x{E07}"
    1422       text run at (0,2448) width 49: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
     1422      text run at (0,2448) width 50: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
    14231423      text run at (0,2466) width 7: "\""
    14241424      text run at (0,2484) width 24: "\x{E40}\x{E1B}\x{E47}\x{E19}"
     
    14621462      text run at (0,3168) width 20: "\x{E19}\x{E31}\x{E49}\x{E19}"
    14631463      text run at (0,3186) width 9: "\x{E21}\x{E35}"
    1464       text run at (0,3204) width 34: "\x{E1A}\x{E31}\x{E19}\x{E44}\x{E14}"
     1464      text run at (0,3204) width 35: "\x{E1A}\x{E31}\x{E19}\x{E44}\x{E14}"
    14651465      text run at (0,3222) width 15: "\x{E25}\x{E07}"
    14661466      text run at (0,3240) width 16: "\x{E44}\x{E1B}"
     
    15001500      text run at (0,3852) width 9: "\x{E21}\x{E35}"
    15011501      text run at (0,3870) width 17: "\x{E41}\x{E21}\x{E49}"
    1502       text run at (0,3888) width 34: "\x{E15}\x{E49}\x{E19}\x{E44}\x{E21}\x{E49}"
     1502      text run at (0,3888) width 35: "\x{E15}\x{E49}\x{E19}\x{E44}\x{E21}\x{E49}"
    15031503      text run at (0,3906) width 17: "\x{E2A}\x{E31}\x{E01}"
    15041504      text run at (0,3924) width 19: "\x{E15}\x{E49}\x{E19}"
     
    18781878      text run at (0,10656) width 30: "\x{E40}\x{E2B}\x{E25}\x{E37}\x{E2D}"
    18791879      text run at (0,10674) width 24: "\x{E40}\x{E01}\x{E34}\x{E19}"
    1880       text run at (0,10692) width 42: "\x{E2D}\x{E22}\x{E48}\x{E32}\x{E07}\x{E44}\x{E23}"
     1880      text run at (0,10692) width 43: "\x{E2D}\x{E22}\x{E48}\x{E32}\x{E07}\x{E44}\x{E23}"
    18811881      text run at (0,10710) width 9: "\x{E01}\x{E47}"
    18821882      text run at (0,10728) width 24: "\x{E15}\x{E32}\x{E21}"
     
    18941894      text run at (0,10944) width 16: "\x{E2D}\x{E22}\x{E39}\x{E48}"
    18951895      text run at (0,10962) width 9: "\x{E17}\x{E35}\x{E48}"
    1896       text run at (0,10980) width 34: "\x{E1A}\x{E31}\x{E19}\x{E44}\x{E14}"
     1896      text run at (0,10980) width 35: "\x{E1A}\x{E31}\x{E19}\x{E44}\x{E14}"
    18971897      text run at (0,10998) width 31: "\x{E1B}\x{E23}\x{E30}\x{E15}\x{E39}"
    18981898      text run at (0,11016) width 22: "\x{E41}\x{E25}\x{E30}"
     
    20072007      text run at (0,12978) width 7: "\""
    20082008      text run at (0,12996) width 17: "\x{E25}\x{E21}"
    2009       text run at (0,13014) width 49: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
     2009      text run at (0,13014) width 50: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
    20102010      text run at (0,13032) width 15: "\x{E21}\x{E32}"
    20112011      text run at (0,13050) width 22: "\x{E40}\x{E2D}\x{E47}\x{E21}"
     
    21102110      text run at (0,14832) width 23: "\x{E2B}\x{E32}\x{E22}"
    21112111      text run at (0,14850) width 19: "\x{E1B}\x{E35}\x{E19}"
    2112       text run at (0,14868) width 34: "\x{E1A}\x{E31}\x{E19}\x{E44}\x{E14}"
     2112      text run at (0,14868) width 35: "\x{E1A}\x{E31}\x{E19}\x{E44}\x{E14}"
    21132113      text run at (0,14886) width 16: "\x{E44}\x{E21}\x{E49}"
    21142114      text run at (0,14904) width 15: "\x{E25}\x{E07}"
     
    22212221      text run at (0,16830) width 23: "\x{E02}\x{E2D}\x{E07}"
    22222222      text run at (0,16848) width 24: "\x{E1E}\x{E32}\x{E22}\x{E38}"
    2223       text run at (0,16866) width 49: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
     2223      text run at (0,16866) width 50: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
    22242224      text run at (0,16884) width 24: "\x{E15}\x{E32}\x{E21}"
    22252225      text run at (0,16902) width 27: "\x{E1B}\x{E01}\x{E15}\x{E34}"
     
    22272227      text run at (0,16938) width 30: "\x{E01}\x{E25}\x{E32}\x{E07}"
    22282228      text run at (0,16956) width 24: "\x{E1E}\x{E32}\x{E22}\x{E38}"
    2229       text run at (0,16974) width 49: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
     2229      text run at (0,16974) width 50: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
    22302230      text run at (0,16992) width 38: "\x{E2D}\x{E32}\x{E01}\x{E32}\x{E28}"
    22312231      text run at (0,17010) width 14: "\x{E08}\x{E30}"
     
    22582258      text run at (0,17496) width 23: "\x{E02}\x{E2D}\x{E07}"
    22592259      text run at (0,17514) width 24: "\x{E1E}\x{E32}\x{E22}\x{E38}"
    2260       text run at (0,17532) width 49: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
     2260      text run at (0,17532) width 50: "\x{E44}\x{E0B}\x{E42}\x{E04}\x{E25}\x{E19}"
    22612261      text run at (0,17550) width 22: "\x{E41}\x{E25}\x{E30}"
    22622262      text run at (0,17568) width 23: "\x{E08}\x{E32}\x{E01}"
     
    24772477      text run at (0,21438) width 49: "\x{E2D}\x{E38}\x{E1A}\x{E31}\x{E15}\x{E34}\x{E40}\x{E2B}\x{E15}\x{E38}"
    24782478      text run at (0,21456) width 17: "\x{E2D}\x{E35}\x{E01}"
    2479       text run at (0,21474) width 38: "\x{E0A}\x{E31}\x{E48}\x{E27}\x{E42}\x{E21}\x{E07}"
     2479      text run at (0,21474) width 39: "\x{E0A}\x{E31}\x{E48}\x{E27}\x{E42}\x{E21}\x{E07}"
    24802480      text run at (0,21492) width 24: "\x{E41}\x{E25}\x{E49}\x{E27}"
    2481       text run at (0,21510) width 38: "\x{E0A}\x{E31}\x{E48}\x{E27}\x{E42}\x{E21}\x{E07}"
     2481      text run at (0,21510) width 39: "\x{E0A}\x{E31}\x{E48}\x{E27}\x{E42}\x{E21}\x{E07}"
    24822482      text run at (0,21528) width 19: "\x{E40}\x{E25}\x{E48}\x{E32}"
    24832483      text run at (0,21546) width 25: "\x{E1C}\x{E48}\x{E32}\x{E19}"
     
    25352535      text run at (0,22482) width 17: "\x{E41}\x{E15}\x{E48}"
    25362536      text run at (0,22500) width 31: "\x{E2B}\x{E25}\x{E32}\x{E22}"
    2537       text run at (0,22518) width 38: "\x{E0A}\x{E31}\x{E48}\x{E27}\x{E42}\x{E21}\x{E07}"
     2537      text run at (0,22518) width 39: "\x{E0A}\x{E31}\x{E48}\x{E27}\x{E42}\x{E21}\x{E07}"
    25382538      text run at (0,22536) width 25: "\x{E1C}\x{E48}\x{E32}\x{E19}"
    25392539      text run at (0,22554) width 16: "\x{E44}\x{E1B}"
     
    25612561      text run at (0,22950) width 14: "\x{E08}\x{E30}"
    25622562      text run at (0,22968) width 24: "\x{E40}\x{E1B}\x{E47}\x{E19}"
    2563       text run at (0,22986) width 42: "\x{E2D}\x{E22}\x{E48}\x{E32}\x{E07}\x{E44}\x{E23}"
     2563      text run at (0,22986) width 43: "\x{E2D}\x{E22}\x{E48}\x{E32}\x{E07}\x{E44}\x{E23}"
    25642564      text run at (0,23004) width 17: "\x{E43}\x{E19}"
    25652565      text run at (0,23022) width 9: "\x{E17}\x{E35}\x{E48}"
  • trunk/LayoutTests/platform/gtk/svg/W3C-I18N/g-dirLTR-ubNone-expected.txt

    r221676 r222843  
    77        RenderSVGText {text} at (91,133) size 278x21 contains 1 chunk(s)
    88          RenderSVGInlineText {#text} at (0,0) size 278x21
    9             chunk 1 (middle anchor) text run 1 at (91.40,150.00) startOffset 0 endOffset 4 width 45.00: "W3C "
    10             chunk 1 (middle anchor) text run 1 at (136.40,150.00) startOffset 0 endOffset 12 width 100.20 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644}"
    11             chunk 1 (middle anchor) text run 1 at (236.60,150.00) startOffset 0 endOffset 15 width 132.00: " dirLTR ubNone!"
     9            chunk 1 (middle anchor) text run 1 at (91.47,150.00) startOffset 0 endOffset 4 width 45.00: "W3C "
     10            chunk 1 (middle anchor) text run 1 at (136.47,150.00) startOffset 0 endOffset 12 width 100.20 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644}"
     11            chunk 1 (middle anchor) text run 1 at (236.67,150.00) startOffset 0 endOffset 15 width 131.86: " dirLTR ubNone!"
    1212      RenderSVGText {text} at (20,170) size 86x13 contains 1 chunk(s)
    1313        RenderSVGInlineText {#text} at (0,0) size 86x12
  • trunk/LayoutTests/platform/gtk/svg/W3C-I18N/g-dirLTR-ubOverride-expected.txt

    r221676 r222843  
    77        RenderSVGText {text} at (78,133) size 304x21 contains 1 chunk(s)
    88          RenderSVGInlineText {#text} at (0,0) size 303x21
    9             chunk 1 (middle anchor) text run 1 at (78.50,150.00) startOffset 0 endOffset 4 width 45.00: "W3C "
    10             chunk 1 (middle anchor) text run 1 at (123.50,150.00) startOffset 0 endOffset 12 width 100.20 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644}"
    11             chunk 1 (middle anchor) text run 1 at (223.70,150.00) startOffset 0 endOffset 19 width 157.80: " dirLTR ubOverride!"
     9            chunk 1 (middle anchor) text run 1 at (78.57,150.00) startOffset 0 endOffset 4 width 45.00: "W3C "
     10            chunk 1 (middle anchor) text run 1 at (123.57,150.00) startOffset 0 endOffset 12 width 100.20 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644}"
     11            chunk 1 (middle anchor) text run 1 at (223.77,150.00) startOffset 0 endOffset 19 width 157.66: " dirLTR ubOverride!"
    1212      RenderSVGText {text} at (20,170) size 86x13 contains 1 chunk(s)
    1313        RenderSVGInlineText {#text} at (0,0) size 86x12
  • trunk/LayoutTests/platform/gtk/svg/W3C-I18N/g-dirRTL-ubNone-expected.txt

    r222127 r222843  
    77        RenderSVGText {text} at (91,133) size 278x21 contains 1 chunk(s)
    88          RenderSVGInlineText {#text} at (0,0) size 278x21
    9             chunk 1 (middle anchor) text run 1 at (91.40,150.00) startOffset 0 endOffset 1 width 4.80 RTL: "!"
    10             chunk 1 (middle anchor) text run 1 at (96.20,150.00) startOffset 0 endOffset 13 width 122.40: "dirRTL ubNone"
    11             chunk 1 (middle anchor) text run 1 at (218.60,150.00) startOffset 0 endOffset 14 width 109.80 RTL: " \x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} "
    12             chunk 1 (middle anchor) text run 1 at (328.40,150.00) startOffset 0 endOffset 3 width 40.20: "W3C"
     9            chunk 1 (middle anchor) text run 1 at (91.30,150.00) startOffset 0 endOffset 1 width 4.80 RTL: "!"
     10            chunk 1 (middle anchor) text run 1 at (96.10,150.00) startOffset 0 endOffset 13 width 122.61: "dirRTL ubNone"
     11            chunk 1 (middle anchor) text run 1 at (218.70,150.00) startOffset 0 endOffset 14 width 109.80 RTL: " \x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} "
     12            chunk 1 (middle anchor) text run 1 at (328.50,150.00) startOffset 0 endOffset 3 width 40.20: "W3C"
    1313      RenderSVGText {text} at (20,170) size 86x13 contains 1 chunk(s)
    1414        RenderSVGInlineText {#text} at (0,0) size 86x12
  • trunk/LayoutTests/platform/gtk/svg/W3C-I18N/g-dirRTL-ubOverride-expected.txt

    r222127 r222843  
    44  RenderSVGRoot {svg} at (0,0) size 800x600
    55    RenderSVGContainer {g} at (33,222) size 651x143
    6       RenderSVGContainer {g} at (130,222) size 506x35
     6      RenderSVGContainer {g} at (130,222) size 507x35
    77        RenderSVGText {text} at (78,133) size 304x21 contains 1 chunk(s)
    8           RenderSVGInlineText {#text} at (0,0) size 303x21
    9             chunk 1 (middle anchor) text run 1 at (78.50,150.00) startOffset 0 endOffset 1 width 4.80 RTL: "!"
    10             chunk 1 (middle anchor) text run 1 at (83.30,150.00) startOffset 0 endOffset 17 width 148.20: "dirRTL ubOverride"
    11             chunk 1 (middle anchor) text run 1 at (231.50,150.00) startOffset 0 endOffset 14 width 109.80 RTL: " \x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} "
    12             chunk 1 (middle anchor) text run 1 at (341.30,150.00) startOffset 0 endOffset 3 width 40.20: "W3C"
     8          RenderSVGInlineText {#text} at (0,0) size 304x21
     9            chunk 1 (middle anchor) text run 1 at (78.40,150.00) startOffset 0 endOffset 1 width 4.80 RTL: "!"
     10            chunk 1 (middle anchor) text run 1 at (83.20,150.00) startOffset 0 endOffset 17 width 148.41: "dirRTL ubOverride"
     11            chunk 1 (middle anchor) text run 1 at (231.60,150.00) startOffset 0 endOffset 14 width 109.80 RTL: " \x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} "
     12            chunk 1 (middle anchor) text run 1 at (341.40,150.00) startOffset 0 endOffset 3 width 40.20: "W3C"
    1313      RenderSVGText {text} at (20,170) size 86x13 contains 1 chunk(s)
    1414        RenderSVGInlineText {#text} at (0,0) size 86x12
  • trunk/LayoutTests/platform/gtk/svg/W3C-I18N/text-dirLTR-ubNone-expected.txt

    r221676 r222843  
    66      RenderSVGText {text} at (91,133) size 278x21 contains 1 chunk(s)
    77        RenderSVGInlineText {#text} at (0,0) size 278x21
    8           chunk 1 (middle anchor) text run 1 at (91.40,150.00) startOffset 0 endOffset 4 width 45.00: "W3C "
    9           chunk 1 (middle anchor) text run 1 at (136.40,150.00) startOffset 0 endOffset 12 width 100.20 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644}"
    10           chunk 1 (middle anchor) text run 1 at (236.60,150.00) startOffset 0 endOffset 15 width 132.00: " dirLTR ubNone!"
     8          chunk 1 (middle anchor) text run 1 at (91.47,150.00) startOffset 0 endOffset 4 width 45.00: "W3C "
     9          chunk 1 (middle anchor) text run 1 at (136.47,150.00) startOffset 0 endOffset 12 width 100.20 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644}"
     10          chunk 1 (middle anchor) text run 1 at (236.67,150.00) startOffset 0 endOffset 15 width 131.86: " dirLTR ubNone!"
    1111      RenderSVGText {text} at (20,170) size 86x13 contains 1 chunk(s)
    1212        RenderSVGInlineText {#text} at (0,0) size 86x12
  • trunk/LayoutTests/platform/gtk/svg/W3C-I18N/text-dirLTR-ubOverride-expected.txt

    r221676 r222843  
    66      RenderSVGText {text} at (80,133) size 300x21 contains 1 chunk(s)
    77        RenderSVGInlineText {#text} at (0,0) size 300x21
    8           chunk 1 (middle anchor) text run 1 at (80.00,150.00) startOffset 0 endOffset 35 width 300.00 LTR override: "W3C \x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} dirLTR ubOverride!"
     8          chunk 1 (middle anchor) text run 1 at (80.07,150.00) startOffset 0 endOffset 35 width 299.86 LTR override: "W3C \x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} dirLTR ubOverride!"
    99      RenderSVGText {text} at (20,170) size 86x13 contains 1 chunk(s)
    1010        RenderSVGInlineText {#text} at (0,0) size 86x12
  • trunk/LayoutTests/platform/gtk/svg/W3C-I18N/text-dirRTL-ubNone-expected.txt

    r222127 r222843  
    66      RenderSVGText {text} at (91,133) size 278x21 contains 1 chunk(s)
    77        RenderSVGInlineText {#text} at (0,0) size 278x21
    8           chunk 1 (middle anchor) text run 1 at (91.40,150.00) startOffset 0 endOffset 1 width 4.80 RTL: "!"
    9           chunk 1 (middle anchor) text run 1 at (96.20,150.00) startOffset 0 endOffset 13 width 122.40: "dirRTL ubNone"
    10           chunk 1 (middle anchor) text run 1 at (218.60,150.00) startOffset 0 endOffset 14 width 109.80 RTL: " \x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} "
    11           chunk 1 (middle anchor) text run 1 at (328.40,150.00) startOffset 0 endOffset 3 width 40.20: "W3C"
     8          chunk 1 (middle anchor) text run 1 at (91.30,150.00) startOffset 0 endOffset 1 width 4.80 RTL: "!"
     9          chunk 1 (middle anchor) text run 1 at (96.10,150.00) startOffset 0 endOffset 13 width 122.61: "dirRTL ubNone"
     10          chunk 1 (middle anchor) text run 1 at (218.70,150.00) startOffset 0 endOffset 14 width 109.80 RTL: " \x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} "
     11          chunk 1 (middle anchor) text run 1 at (328.50,150.00) startOffset 0 endOffset 3 width 40.20: "W3C"
    1212      RenderSVGText {text} at (20,170) size 86x13 contains 1 chunk(s)
    1313        RenderSVGInlineText {#text} at (0,0) size 86x12
  • trunk/LayoutTests/platform/gtk/svg/W3C-I18N/text-dirRTL-ubOverride-expected.txt

    r221676 r222843  
    66      RenderSVGText {text} at (78,133) size 304x21 contains 1 chunk(s)
    77        RenderSVGInlineText {#text} at (0,0) size 303x21
    8           chunk 1 (middle anchor) text run 1 at (78.50,150.00) startOffset 0 endOffset 35 width 303.00 RTL override: "W3C \x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} dirRTL ubOverride!"
     8          chunk 1 (middle anchor) text run 1 at (78.57,150.00) startOffset 0 endOffset 35 width 302.86 RTL override: "W3C \x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} dirRTL ubOverride!"
    99      RenderSVGText {text} at (20,170) size 86x13 contains 1 chunk(s)
    1010        RenderSVGInlineText {#text} at (0,0) size 86x12
  • trunk/LayoutTests/platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubEmbed-in-rtl-context-expected.txt

    r222079 r222843  
    55    RenderSVGContainer {g} at (33,222) size 651x143
    66      RenderSVGText {text} at (75,133) size 310x21 contains 1 chunk(s)
    7         RenderSVGInlineText {#text} at (198,0) size 112x21
    8           chunk 1 (middle anchor) text run 1 at (273.20,150.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
    9         RenderSVGTSpan {tspan} at (0,0) size 188x21
     7        RenderSVGInlineText {#text} at (197,0) size 112x21
     8          chunk 1 (middle anchor) text run 1 at (273.13,150.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
     9        RenderSVGTSpan {tspan} at (0,0) size 187x21
    1010          RenderSVGInlineText {#text} at (11,0) size 187x21
    11             chunk 1 (middle anchor) text run 1 at (86.60,150.00) startOffset 0 endOffset 16 width 147.00: "dirLTR ubEmbed, "
    12             chunk 1 (middle anchor) text run 1 at (233.60,150.00) startOffset 0 endOffset 6 width 39.60 RTL: "\x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}"
     11            chunk 1 (middle anchor) text run 1 at (86.67,150.00) startOffset 0 endOffset 16 width 147.00: "dirLTR ubEmbed, "
     12            chunk 1 (middle anchor) text run 1 at (233.67,150.00) startOffset 0 endOffset 6 width 39.46 RTL: "\x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}"
    1313        RenderSVGInlineText {#text} at (0,0) size 12x21
    14           chunk 1 (middle anchor) text run 1 at (75.20,150.00) startOffset 0 endOffset 2 width 11.40 RTL: "\"!"
     14          chunk 1 (middle anchor) text run 1 at (75.27,150.00) startOffset 0 endOffset 2 width 11.40 RTL: "\"!"
    1515      RenderSVGText {text} at (20,170) size 86x13 contains 1 chunk(s)
    1616        RenderSVGInlineText {#text} at (0,0) size 86x12
  • trunk/LayoutTests/platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubNone-in-rtl-context-expected.txt

    r222079 r222843  
    66      RenderSVGText {text} at (82,133) size 296x21 contains 1 chunk(s)
    77        RenderSVGInlineText {#text} at (184,0) size 112x21
    8           chunk 1 (middle anchor) text run 1 at (266.30,150.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
     8          chunk 1 (middle anchor) text run 1 at (266.23,150.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
    99        RenderSVGTSpan {tspan} at (0,0) size 174x21
    1010          RenderSVGInlineText {#text} at (11,0) size 173x21
    11             chunk 1 (middle anchor) text run 1 at (93.50,150.00) startOffset 0 endOffset 8 width 49.20 RTL: ", \x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}"
    12             chunk 1 (middle anchor) text run 1 at (142.70,150.00) startOffset 0 endOffset 13 width 123.60: "dirLTR ubNone"
     11            chunk 1 (middle anchor) text run 1 at (93.57,150.00) startOffset 0 endOffset 8 width 49.06 RTL: ", \x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}"
     12            chunk 1 (middle anchor) text run 1 at (142.63,150.00) startOffset 0 endOffset 13 width 123.60: "dirLTR ubNone"
    1313        RenderSVGInlineText {#text} at (0,0) size 12x21
    14           chunk 1 (middle anchor) text run 1 at (82.10,150.00) startOffset 0 endOffset 2 width 11.40 RTL: "\"!"
     14          chunk 1 (middle anchor) text run 1 at (82.17,150.00) startOffset 0 endOffset 2 width 11.40 RTL: "\"!"
    1515      RenderSVGText {text} at (20,170) size 86x13 contains 1 chunk(s)
    1616        RenderSVGInlineText {#text} at (0,0) size 86x12
  • trunk/LayoutTests/platform/gtk/svg/W3C-I18N/tspan-dirLTR-ubOverride-in-rtl-context-expected.txt

    r221676 r222843  
    66      RenderSVGText {text} at (69,133) size 322x21 contains 1 chunk(s)
    77        RenderSVGInlineText {#text} at (209,0) size 112x21
    8           chunk 1 (middle anchor) text run 1 at (278.90,150.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
     8          chunk 1 (middle anchor) text run 1 at (278.83,150.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
    99        RenderSVGTSpan {tspan} at (0,0) size 199x21
    1010          RenderSVGInlineText {#text} at (11,0) size 198x21
    11             chunk 1 (middle anchor) text run 1 at (80.90,150.00) startOffset 0 endOffset 25 width 198.00 LTR override: "dirLTR ubOverride, \x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}"
     11            chunk 1 (middle anchor) text run 1 at (80.97,150.00) startOffset 0 endOffset 25 width 197.86 LTR override: "dirLTR ubOverride, \x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}"
    1212        RenderSVGInlineText {#text} at (0,0) size 12x21
    13           chunk 1 (middle anchor) text run 1 at (69.50,150.00) startOffset 0 endOffset 2 width 11.40 RTL: "\"!"
     13          chunk 1 (middle anchor) text run 1 at (69.57,150.00) startOffset 0 endOffset 2 width 11.40 RTL: "\"!"
    1414      RenderSVGText {text} at (20,170) size 86x13 contains 1 chunk(s)
    1515        RenderSVGInlineText {#text} at (0,0) size 86x12
  • trunk/LayoutTests/platform/gtk/svg/W3C-I18N/tspan-dirRTL-ubOverride-in-rtl-context-expected.txt

    r221676 r222843  
    55    RenderSVGContainer {g} at (33,222) size 651x143
    66      RenderSVGText {text} at (69,133) size 322x21 contains 1 chunk(s)
    7         RenderSVGInlineText {#text} at (210,0) size 112x21
    8           chunk 1 (middle anchor) text run 1 at (279.20,150.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
    9         RenderSVGTSpan {tspan} at (0,0) size 200x21
     7        RenderSVGInlineText {#text} at (209,0) size 112x21
     8          chunk 1 (middle anchor) text run 1 at (279.13,150.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
     9        RenderSVGTSpan {tspan} at (0,0) size 199x21
    1010          RenderSVGInlineText {#text} at (11,0) size 199x21
    11             chunk 1 (middle anchor) text run 1 at (80.60,150.00) startOffset 0 endOffset 25 width 198.60 RTL override: "dirRTL ubOverride, \x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}"
     11            chunk 1 (middle anchor) text run 1 at (80.67,150.00) startOffset 0 endOffset 25 width 198.46 RTL override: "dirRTL ubOverride, \x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}"
    1212        RenderSVGInlineText {#text} at (0,0) size 12x21
    13           chunk 1 (middle anchor) text run 1 at (69.20,150.00) startOffset 0 endOffset 2 width 11.40 RTL: "\"!"
     13          chunk 1 (middle anchor) text run 1 at (69.27,150.00) startOffset 0 endOffset 2 width 11.40 RTL: "\"!"
    1414      RenderSVGText {text} at (20,170) size 86x13 contains 1 chunk(s)
    1515        RenderSVGInlineText {#text} at (0,0) size 86x12
  • trunk/LayoutTests/platform/gtk/svg/W3C-I18N/tspan-direction-rtl-expected.txt

    r222127 r222843  
    66      RenderSVGText {text} at (75,133) size 310x21 contains 1 chunk(s)
    77        RenderSVGInlineText {#text} at (198,0) size 112x21
    8           chunk 1 (middle anchor) text run 1 at (273.20,150.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
     8          chunk 1 (middle anchor) text run 1 at (273.30,150.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
    99        RenderSVGTSpan {tspan} at (0,0) size 188x21
    1010          RenderSVGInlineText {#text} at (11,0) size 187x21
    11             chunk 1 (middle anchor) text run 1 at (86.60,150.00) startOffset 0 endOffset 8 width 49.20 RTL: ", \x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}"
    12             chunk 1 (middle anchor) text run 1 at (135.80,150.00) startOffset 0 endOffset 14 width 137.40: "dirRTL ubEmbed"
     11            chunk 1 (middle anchor) text run 1 at (86.50,150.00) startOffset 0 endOffset 8 width 49.41 RTL: ", \x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}"
     12            chunk 1 (middle anchor) text run 1 at (135.90,150.00) startOffset 0 endOffset 14 width 137.40: "dirRTL ubEmbed"
    1313        RenderSVGInlineText {#text} at (0,0) size 12x21
    14           chunk 1 (middle anchor) text run 1 at (75.20,150.00) startOffset 0 endOffset 2 width 11.40 RTL: "\"!"
     14          chunk 1 (middle anchor) text run 1 at (75.10,150.00) startOffset 0 endOffset 2 width 11.40 RTL: "\"!"
    1515      RenderSVGText {text} at (20,170) size 86x13 contains 1 chunk(s)
    1616        RenderSVGInlineText {#text} at (0,0) size 86x12
  • trunk/LayoutTests/platform/gtk/svg/text/bidi-tspans-expected.txt

    r222127 r222843  
    66      RenderSVGText {text} at (75,133) size 310x21 contains 1 chunk(s)
    77        RenderSVGInlineText {#text} at (0,0) size 310x21
    8           chunk 1 (middle anchor) text run 1 at (75.20,150.00) startOffset 0 endOffset 10 width 61.80 RTL: ", \x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}\"!"
    9           chunk 1 (middle anchor) text run 1 at (137.00,150.00) startOffset 0 endOffset 14 width 136.20: "dirRTL ubEmbed"
    10           chunk 1 (middle anchor) text run 1 at (273.20,150.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
     8          chunk 1 (middle anchor) text run 1 at (75.10,150.00) startOffset 0 endOffset 10 width 61.80 RTL: ", \x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}\"!"
     9          chunk 1 (middle anchor) text run 1 at (136.90,150.00) startOffset 0 endOffset 14 width 136.41: "dirRTL ubEmbed"
     10          chunk 1 (middle anchor) text run 1 at (273.30,150.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
    1111      RenderSVGText {text} at (75,163) size 310x21 contains 1 chunk(s)
    1212        RenderSVGInlineText {#text} at (198,0) size 112x21
    13           chunk 1 (middle anchor) text run 1 at (273.20,180.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
     13          chunk 1 (middle anchor) text run 1 at (273.30,180.00) startOffset 0 endOffset 14 width 111.60 RTL: "\x{646}\x{634}\x{627}\x{637} \x{627}\x{644}\x{62A}\x{62F}\x{648}\x{64A}\x{644} \""
    1414        RenderSVGTSpan {tspan} at (0,0) size 188x21
    1515          RenderSVGInlineText {#text} at (11,0) size 187x21
    16             chunk 1 (middle anchor) text run 1 at (86.60,180.00) startOffset 0 endOffset 8 width 49.20 RTL: ", \x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}"
    17             chunk 1 (middle anchor) text run 1 at (135.80,180.00) startOffset 0 endOffset 14 width 137.40: "dirRTL ubEmbed"
     16            chunk 1 (middle anchor) text run 1 at (86.50,180.00) startOffset 0 endOffset 8 width 49.41 RTL: ", \x{627}\x{62E}\x{62A}\x{628}\x{627}\x{631}"
     17            chunk 1 (middle anchor) text run 1 at (135.90,180.00) startOffset 0 endOffset 14 width 137.40: "dirRTL ubEmbed"
    1818        RenderSVGInlineText {#text} at (0,0) size 12x21
    19           chunk 1 (middle anchor) text run 1 at (75.20,180.00) startOffset 0 endOffset 2 width 11.40 RTL: "\"!"
     19          chunk 1 (middle anchor) text run 1 at (75.10,180.00) startOffset 0 endOffset 2 width 11.40 RTL: "\"!"
  • trunk/LayoutTests/platform/gtk/svg/text/select-textLength-spacing-squeeze-1-expected.txt

    r222079 r222843  
    22  RenderView at (0,0) size 800x600
    33layer at (0,0) size 800x600
    4   RenderSVGRoot {svg} at (0,4) size 328x88
    5     RenderSVGContainer {g} at (0,4) size 328x88
     4  RenderSVGRoot {svg} at (47,4) size 261x57
     5    RenderSVGContainer {g} at (47,4) size 75x57
    66      RenderSVGPath {svg:line} at (47,4) size 6x57 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=10.00] [y1=0.95] [x2=10.00] [y2=12.17]
    77      RenderSVGPath {svg:line} at (116,4) size 6x57 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=23.71] [y1=0.95] [x2=23.71] [y2=12.17]
    88      RenderSVGRect {svg:rect} at (50,4) size 69x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=10.00] [y=0.95] [width=13.71] [height=11.17]
    9       RenderSVGText {svg:text} at (0,27) size 131x10 contains 1 chunk(s)
    10         RenderSVGInlineText {#text} at (0,0) size 131x9
    11           chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 42 width 130.80: "Expected 'Tex' to be selected, got: 'Text'"
    129    RenderSVGText {text} at (10,0) size 52x13 contains 1 chunk(s)
    1310      RenderSVGInlineText {#text} at (0,0) size 52x12
     
    2825        chunk 1 text run 15 at (55.95,10.00) startOffset 14 endOffset 15 width 5.60: "e"
    2926selection start: position 0 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
    30 selection end:   position 4 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
     27selection end:   position 3 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
  • trunk/LayoutTests/platform/gtk/svg/text/select-textLength-spacing-squeeze-2-expected.txt

    r222079 r222843  
    22  RenderView at (0,0) size 800x600
    33layer at (0,0) size 800x600
    4   RenderSVGRoot {svg} at (0,4) size 308x88
    5     RenderSVGContainer {g} at (0,4) size 300x88
     4  RenderSVGRoot {svg} at (50,4) size 258x57
     5    RenderSVGContainer {g} at (153,4) size 59x57
    66      RenderSVGPath {svg:line} at (153,4) size 6x57 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=31.23] [y1=0.95] [x2=31.23] [y2=12.17]
    77      RenderSVGPath {svg:line} at (206,4) size 6x57 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=41.88] [y1=0.95] [x2=41.88] [y2=12.17]
    88      RenderSVGRect {svg:rect} at (156,4) size 54x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=31.23] [y=0.95] [width=10.65] [height=11.17]
    9       RenderSVGText {svg:text} at (0,27) size 120x10 contains 1 chunk(s)
    10         RenderSVGInlineText {#text} at (0,0) size 120x9
    11           chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 39 width 120.00: "Expected 'Sq' to be selected, got: 'qu'"
    129    RenderSVGText {text} at (10,0) size 52x13 contains 1 chunk(s)
    1310      RenderSVGInlineText {#text} at (0,0) size 52x12
     
    2724        chunk 1 text run 14 at (52.49,10.00) startOffset 13 endOffset 14 width 5.00: "z"
    2825        chunk 1 text run 15 at (55.95,10.00) startOffset 14 endOffset 15 width 5.60: "e"
    29 selection start: position 9 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
    30 selection end:   position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
     26selection start: position 8 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
     27selection end:   position 10 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
  • trunk/LayoutTests/platform/gtk/svg/text/select-textLength-spacing-stretch-2-expected.txt

    r222079 r222843  
    22  RenderView at (0,0) size 800x600
    33layer at (0,0) size 800x600
    4   RenderSVGRoot {svg} at (0,4) size 772x88
    5     RenderSVGContainer {g} at (0,4) size 376x88
     4  RenderSVGRoot {svg} at (50,4) size 722x57
     5    RenderSVGContainer {g} at (300,4) size 76x57
    66      RenderSVGPath {svg:line} at (300,4) size 6x57 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=60.60] [y1=0.95] [x2=60.60] [y2=12.17]
    77      RenderSVGPath {svg:line} at (370,4) size 6x57 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=74.64] [y1=0.95] [x2=74.64] [y2=12.17]
    88      RenderSVGRect {svg:rect} at (303,4) size 71x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=60.60] [y=0.95] [width=14.04] [height=11.17]
    9       RenderSVGText {svg:text} at (0,27) size 114x10 contains 1 chunk(s)
    10         RenderSVGInlineText {#text} at (0,0) size 114x9
    11           chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 38 width 114.00: "Expected 'to' to be selected, got: 'o'"
    129    RenderSVGText {text} at (10,0) size 145x13 contains 1 chunk(s)
    1310      RenderSVGInlineText {#text} at (0,0) size 145x12
     
    2724        chunk 1 text run 14 at (138.12,10.00) startOffset 13 endOffset 14 width 5.00: "c"
    2825        chunk 1 text run 15 at (148.76,10.00) startOffset 14 endOffset 15 width 5.60: "h"
    29 selection start: position 6 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
     26selection start: position 5 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
    3027selection end:   position 7 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
  • trunk/LayoutTests/platform/gtk/svg/text/select-textLength-spacing-stretch-3-expected.txt

    r222079 r222843  
    22  RenderView at (0,0) size 800x600
    33layer at (0,0) size 800x600
    4   RenderSVGRoot {svg} at (0,4) size 772x88
    5     RenderSVGContainer {g} at (0,4) size 567x88
     4  RenderSVGRoot {svg} at (50,4) size 722x57
     5    RenderSVGContainer {g} at (441,4) size 126x57
    66      RenderSVGPath {svg:line} at (441,4) size 6x57 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=88.72] [y1=0.95] [x2=88.72] [y2=12.17]
    77      RenderSVGPath {svg:line} at (561,4) size 6x57 [stroke={[type=SOLID] [color=#008000]}] [fill={[type=SOLID] [color=#000000]}] [x1=112.80] [y1=0.95] [x2=112.80] [y2=12.17]
    88      RenderSVGRect {svg:rect} at (443,4) size 121x57 [fill={[type=SOLID] [color=#FF0000] [opacity=0.40]}] [x=88.72] [y=0.95] [width=24.08] [height=11.17]
    9       RenderSVGText {svg:text} at (0,27) size 119x10 contains 1 chunk(s)
    10         RenderSVGInlineText {#text} at (0,0) size 119x9
    11           chunk 1 text run 1 at (0.00,35.00) startOffset 0 endOffset 40 width 118.40: "Expected 'Str' to be selected, got: 'tr'"
    129    RenderSVGText {text} at (10,0) size 145x13 contains 1 chunk(s)
    1310      RenderSVGInlineText {#text} at (0,0) size 145x12
     
    2724        chunk 1 text run 14 at (138.12,10.00) startOffset 13 endOffset 14 width 5.00: "c"
    2825        chunk 1 text run 15 at (148.76,10.00) startOffset 14 endOffset 15 width 5.60: "h"
    29 selection start: position 9 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
     26selection start: position 8 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
    3027selection end:   position 11 of child 0 {#text} of child 5 {text} of child 0 {svg} of document
  • trunk/Source/WebCore/ChangeLog

    r222842 r222843  
     12017-10-04  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [Harfbuzz] Implement ComplexTextController on top of HarfBuzz
     4        https://bugs.webkit.org/show_bug.cgi?id=167956
     5
     6        Reviewed by Myles C. Maxfield.
     7
     8        Implement ComplexTextController using HarfBuzz and remove HarfBuzzShaper.
     9
     10        Covered by existing tests, a rebaseline will be neeed.
     11
     12        * platform/FreeType.cmake:
     13        * platform/graphics/ComplexTextController.cpp:
     14        (WebCore::TextLayoutDeleter::operator() const): Enable TextLayout when using HarfBuzz.
     15        (WebCore::FontCascade::createLayout const): Ditto.
     16        (WebCore::FontCascade::width): Ditto.
     17        * platform/graphics/ComplexTextController.h:
     18        (WebCore::ComplexTextController::ComplexTextRun::create): Add constructor that receives an hb_buffer_t.
     19        * platform/graphics/Font.cpp:
     20        (WebCore::Font::variantCapsSupportsCharacterForSynthesis const): Simple implementation for non-cocoa ports.
     21        * platform/graphics/FontCascade.cpp:
     22        (WebCore::FontCascade::getGlyphsAndAdvancesForComplexText const): Moved from FontCascadeCocoa.mm.
     23        (WebCore::FontCascade::floatWidthForComplexText const): Ditto.
     24        (WebCore::FontCascade::adjustSelectionRectForComplexText const): Ditto.
     25        (WebCore::FontCascade::offsetForPositionForComplexText const): Ditto.
     26        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
     27        (WebCore::FontCascade::fontForCombiningCharacterSequence const): Normalize the sequence and get the font of the
     28        base character.
     29        * platform/graphics/cocoa/FontCascadeCocoa.mm:
     30        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
     31        (WebCore::harfBuzzPositionToFloat):
     32        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
     33        (WebCore::fontFeatures):
     34        (WebCore::characterScript):
     35        (WebCore::scriptsAreCompatibleForCharacters):
     36        (WebCore::findNextRun):
     37        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
     38        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
     39        (WebCore::harfBuzzGetGlyph): Check here if the character is a white space and use the space or zeroWidthSpace
     40        to ensure we get a glyph.
     41        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp: Removed.
     42        * platform/graphics/harfbuzz/HarfBuzzShaper.h: Removed.
     43        * platform/graphics/harfbuzz/HbUniquePtr.h: Added.
     44        (WebCore::HbPtrDeleter::operator() const):
     45        (WebCore::HbPtrDeleter<hb_font_t>::operator() const):
     46        (WebCore::HbPtrDeleter<hb_buffer_t>::operator() const):
     47        * platform/graphics/opentype/OpenTypeMathData.h: Use HbUniquePtr.
     48
    1492017-10-04  Michael Catanzaro  <mcatanzaro@igalia.com>
    250
  • trunk/Source/WebCore/platform/FreeType.cmake

    r217508 r222843  
    1616    platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp
    1717    platform/graphics/harfbuzz/HarfBuzzFace.cpp
    18     platform/graphics/harfbuzz/HarfBuzzShaper.cpp
    1918)
    2019
  • trunk/Source/WebCore/platform/graphics/ComplexTextController.cpp

    r222637 r222843  
    9191void TextLayoutDeleter::operator()(TextLayout* layout) const
    9292{
    93 #if PLATFORM(COCOA)
     93#if !PLATFORM(WIN)
    9494    delete layout;
    9595#else
     
    100100std::unique_ptr<TextLayout, TextLayoutDeleter> FontCascade::createLayout(RenderText& text, float xPos, bool collapseWhiteSpace) const
    101101{
    102 #if PLATFORM(COCOA)
     102#if !PLATFORM(WIN)
    103103    if (!collapseWhiteSpace || !TextLayout::isNeeded(text, *this))
    104104        return nullptr;
     
    114114float FontCascade::width(TextLayout& layout, unsigned from, unsigned len, HashSet<const Font*>* fallbackFonts)
    115115{
    116 #if PLATFORM(COCOA)
     116#if !PLATFORM(WIN)
    117117    return layout.width(from, len, fallbackFonts);
    118118#else
  • trunk/Source/WebCore/platform/graphics/ComplexTextController.h

    r219050 r222843  
    3838typedef const struct __CTLine * CTLineRef;
    3939
     40typedef struct hb_buffer_t hb_buffer_t;
     41
    4042namespace WebCore {
    4143
     
    7678        {
    7779            return adoptRef(*new ComplexTextRun(ctRun, font, characters, stringLocation, stringLength, indexBegin, indexEnd));
     80        }
     81
     82        static Ref<ComplexTextRun> create(hb_buffer_t* buffer, const Font& font, const UChar* characters, unsigned stringLocation, unsigned stringLength, unsigned indexBegin, unsigned indexEnd, bool ltr)
     83        {
     84            return adoptRef(*new ComplexTextRun(buffer, font, characters, stringLocation, stringLength, indexBegin, indexEnd, ltr));
    7885        }
    7986
     
    136143    private:
    137144        ComplexTextRun(CTRunRef, const Font&, const UChar* characters, unsigned stringLocation, unsigned stringLength, unsigned indexBegin, unsigned indexEnd);
     145        ComplexTextRun(hb_buffer_t*, const Font&, const UChar* characters, unsigned stringLocation, unsigned stringLength, unsigned indexBegin, unsigned indexEnd, bool ltr);
    138146        ComplexTextRun(const Font&, const UChar* characters, unsigned stringLocation, unsigned stringLength, unsigned indexBegin, unsigned indexEnd, bool ltr);
    139147        WEBCORE_EXPORT ComplexTextRun(const Vector<FloatSize>& advances, const Vector<FloatPoint>& origins, const Vector<Glyph>& glyphs, const Vector<unsigned>& stringIndices, FloatSize initialAdvance, const Font&, const UChar* characters, unsigned stringLocation, unsigned stringLength, unsigned indexBegin, unsigned indexEnd, bool ltr);
  • trunk/Source/WebCore/platform/graphics/Font.cpp

    r220506 r222843  
    500500
    501501#if !PLATFORM(COCOA)
    502 bool Font::variantCapsSupportsCharacterForSynthesis(FontVariantCaps, UChar32) const
    503 {
    504     return false;
     502bool Font::variantCapsSupportsCharacterForSynthesis(FontVariantCaps fontVariantCaps, UChar32) const
     503{
     504    switch (fontVariantCaps) {
     505    case FontVariantCaps::Small:
     506    case FontVariantCaps::Petite:
     507    case FontVariantCaps::AllSmall:
     508    case FontVariantCaps::AllPetite:
     509        return false;
     510    default:
     511        // Synthesis only supports the variant-caps values listed above.
     512        return true;
     513    }
    505514}
    506515#endif
  • trunk/Source/WebCore/platform/graphics/FontCascade.cpp

    r222610 r222843  
    13481348}
    13491349
     1350#if !PLATFORM(WIN)
     1351float FontCascade::getGlyphsAndAdvancesForComplexText(const TextRun& run, unsigned from, unsigned to, GlyphBuffer& glyphBuffer, ForTextEmphasisOrNot forTextEmphasis) const
     1352{
     1353    float initialAdvance;
     1354
     1355    ComplexTextController controller(*this, run, false, 0, forTextEmphasis);
     1356    GlyphBuffer dummyGlyphBuffer;
     1357    controller.advance(from, &dummyGlyphBuffer);
     1358    controller.advance(to, &glyphBuffer);
     1359
     1360    if (glyphBuffer.isEmpty())
     1361        return 0;
     1362
     1363    if (run.rtl()) {
     1364        // Exploit the fact that the sum of the paint advances is equal to
     1365        // the sum of the layout advances.
     1366        initialAdvance = controller.totalWidth();
     1367        for (unsigned i = 0; i < dummyGlyphBuffer.size(); ++i)
     1368            initialAdvance -= dummyGlyphBuffer.advanceAt(i).width();
     1369        for (unsigned i = 0; i < glyphBuffer.size(); ++i)
     1370            initialAdvance -= glyphBuffer.advanceAt(i).width();
     1371        glyphBuffer.reverse(0, glyphBuffer.size());
     1372    } else {
     1373        initialAdvance = dummyGlyphBuffer.initialAdvance().width();
     1374        for (unsigned i = 0; i < dummyGlyphBuffer.size(); ++i)
     1375            initialAdvance += dummyGlyphBuffer.advanceAt(i).width();
     1376    }
     1377
     1378    return initialAdvance;
     1379}
     1380#endif
     1381
    13501382void FontCascade::drawEmphasisMarksForSimpleText(GraphicsContext& context, const TextRun& run, const AtomicString& mark, const FloatPoint& point, unsigned from, unsigned to) const
    13511383{
     
    14611493}
    14621494
     1495#if !PLATFORM(WIN)
     1496float FontCascade::floatWidthForComplexText(const TextRun& run, HashSet<const Font*>* fallbackFonts, GlyphOverflow* glyphOverflow) const
     1497{
     1498    ComplexTextController controller(*this, run, true, fallbackFonts);
     1499    if (glyphOverflow) {
     1500        glyphOverflow->top = std::max<int>(glyphOverflow->top, ceilf(-controller.minGlyphBoundingBoxY()) - (glyphOverflow->computeBounds ? 0 : fontMetrics().ascent()));
     1501        glyphOverflow->bottom = std::max<int>(glyphOverflow->bottom, ceilf(controller.maxGlyphBoundingBoxY()) - (glyphOverflow->computeBounds ? 0 : fontMetrics().descent()));
     1502        glyphOverflow->left = std::max<int>(0, ceilf(-controller.minGlyphBoundingBoxX()));
     1503        glyphOverflow->right = std::max<int>(0, ceilf(controller.maxGlyphBoundingBoxX() - controller.totalWidth()));
     1504    }
     1505    return controller.totalWidth();
     1506}
     1507#endif
     1508
    14631509void FontCascade::adjustSelectionRectForSimpleText(const TextRun& run, LayoutRect& selectionRect, unsigned from, unsigned to) const
    14641510{
     
    14791525    selectionRect.setWidth(LayoutUnit::fromFloatCeil(afterWidth - beforeWidth));
    14801526}
     1527
     1528#if !PLATFORM(WIN)
     1529void FontCascade::adjustSelectionRectForComplexText(const TextRun& run, LayoutRect& selectionRect, unsigned from, unsigned to) const
     1530{
     1531    ComplexTextController controller(*this, run);
     1532    controller.advance(from);
     1533    float beforeWidth = controller.runWidthSoFar();
     1534    controller.advance(to);
     1535    float afterWidth = controller.runWidthSoFar();
     1536
     1537    if (run.rtl())
     1538        selectionRect.move(controller.totalWidth() - afterWidth, 0);
     1539    else
     1540        selectionRect.move(beforeWidth, 0);
     1541    selectionRect.setWidth(LayoutUnit::fromFloatCeil(afterWidth - beforeWidth));
     1542}
     1543#endif
    14811544
    14821545int FontCascade::offsetForPositionForSimpleText(const TextRun& run, float x, bool includePartialGlyphs) const
     
    15231586}
    15241587
    1525 #if !PLATFORM(COCOA)
     1588#if !PLATFORM(WIN)
     1589int FontCascade::offsetForPositionForComplexText(const TextRun& run, float x, bool includePartialGlyphs) const
     1590{
     1591    ComplexTextController controller(*this, run);
     1592    return controller.offsetForPosition(x, includePartialGlyphs);
     1593}
     1594#endif
     1595
     1596#if !PLATFORM(COCOA) && !USE(CAIRO)
    15261597// FIXME: Unify this with the macOS and iOS implementation.
    15271598const Font* FontCascade::fontForCombiningCharacterSequence(const UChar* characters, size_t length) const
  • trunk/Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp

    r222202 r222843  
    3030#if USE(CAIRO)
    3131
    32 #include "Font.h"
    33 #include "GraphicsContext.h"
    34 #include "HarfBuzzShaper.h"
    35 #include "LayoutRect.h"
    36 #include "Logging.h"
    37 #include "NotImplemented.h"
    38 #include "PlatformContextCairo.h"
    39 #include <cairo.h>
     32#include "SurrogatePairAwareTextIterator.h"
     33#include <unicode/normlzr.h>
    4034
    4135namespace WebCore {
    42 
    43 float FontCascade::getGlyphsAndAdvancesForComplexText(const TextRun& run, unsigned from, unsigned to, GlyphBuffer& glyphBuffer, ForTextEmphasisOrNot /* forTextEmphasis */) const
    44 {
    45     HarfBuzzShaper shaper(this, run);
    46     if (!shaper.shape(&glyphBuffer, from, to)) {
    47         LOG_ERROR("Shaper couldn't shape glyphBuffer.");
    48         return 0;
    49     }
    50 
    51     if (glyphBuffer.isEmpty())
    52         return 0;
    53 
    54     return shaper.selectionRect({ }, 0, from, to).x();
    55 }
    5636
    5737bool FontCascade::canReturnFallbackFontsForComplexText()
     
    6545}
    6646
    67 float FontCascade::floatWidthForComplexText(const TextRun& run, HashSet<const Font*>*, GlyphOverflow* glyphOverflow) const
     47const Font* FontCascade::fontForCombiningCharacterSequence(const UChar* characters, size_t length) const
    6848{
    69     if (glyphOverflow) {
    70         // FIXME: Calculate the actual values rather than just the font's ascent and descent
    71         glyphOverflow->top = glyphOverflow->computeBounds ? fontMetrics().ascent() : 0;
    72         glyphOverflow->bottom = glyphOverflow->computeBounds ? fontMetrics().descent() : 0;
    73         glyphOverflow->left = 0;
    74         glyphOverflow->right = 0;
    75     }
    76     HarfBuzzShaper shaper(this, run);
    77     if (shaper.shape())
    78         return shaper.totalWidth();
    79     LOG_ERROR("Shaper couldn't shape text run.");
    80     return 0;
    81 }
     49    UErrorCode error = U_ZERO_ERROR;
     50    Vector<UChar, 4> normalizedCharacters(length);
     51    int32_t normalizedLength = unorm_normalize(characters, length, UNORM_NFC, UNORM_UNICODE_3_2, normalizedCharacters.data(), length, &error);
     52    if (U_FAILURE(error))
     53        return nullptr;
    8254
    83 int FontCascade::offsetForPositionForComplexText(const TextRun& run, float x, bool includePartialGlyphs) const
    84 {
    85     HarfBuzzShaper shaper(this, run);
    86     if (shaper.shape())
    87         return shaper.offsetForPosition(x, includePartialGlyphs);
    88     LOG_ERROR("Shaper couldn't shape text run.");
    89     return 0;
    90 }
     55    UChar32 character;
     56    unsigned clusterLength = 0;
     57    SurrogatePairAwareTextIterator iterator(normalizedCharacters.data(), 0, normalizedLength, normalizedLength);
     58    if (!iterator.consume(character, clusterLength))
     59        return nullptr;
    9160
    92 void FontCascade::adjustSelectionRectForComplexText(const TextRun& run, LayoutRect& selectionRect, unsigned from, unsigned to) const
    93 {
    94     HarfBuzzShaper shaper(this, run);
    95     GlyphBuffer glyphBuffer;
    96     if (!shaper.shape(&glyphBuffer, from, to)) {
    97         LOG_ERROR("Shaper couldn't shape text run.");
    98         return;
    99     }
    100 
    101     // FIXME: This should mimic Mac port.
    102     selectionRect = LayoutRect(shaper.selectionRect(selectionRect.location(), selectionRect.height().toInt(), from, to));
     61    return glyphDataForCharacter(character, false, NormalVariant).font;
    10362}
    10463
  • trunk/Source/WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm

    r220809 r222843  
    492492}
    493493
    494 void FontCascade::adjustSelectionRectForComplexText(const TextRun& run, LayoutRect& selectionRect, unsigned from, unsigned to) const
    495 {
    496     ComplexTextController controller(*this, run);
    497     controller.advance(from);
    498     float beforeWidth = controller.runWidthSoFar();
    499     controller.advance(to);
    500     float afterWidth = controller.runWidthSoFar();
    501 
    502     if (run.rtl())
    503         selectionRect.move(controller.totalWidth() - afterWidth, 0);
    504     else
    505         selectionRect.move(beforeWidth, 0);
    506     selectionRect.setWidth(LayoutUnit::fromFloatCeil(afterWidth - beforeWidth));
    507 }
    508 
    509 float FontCascade::getGlyphsAndAdvancesForComplexText(const TextRun& run, unsigned from, unsigned to, GlyphBuffer& glyphBuffer, ForTextEmphasisOrNot forTextEmphasis) const
    510 {
    511     float initialAdvance;
    512 
    513     ComplexTextController controller(*this, run, false, 0, forTextEmphasis);
    514     GlyphBuffer dummyGlyphBuffer;
    515     controller.advance(from, &dummyGlyphBuffer);
    516     controller.advance(to, &glyphBuffer);
    517 
    518     if (glyphBuffer.isEmpty())
    519         return 0;
    520 
    521     if (run.rtl()) {
    522         // Exploit the fact that the sum of the paint advances is equal to
    523         // the sum of the layout advances.
    524         initialAdvance = controller.totalWidth();
    525         for (unsigned i = 0; i < dummyGlyphBuffer.size(); ++i)
    526             initialAdvance -= dummyGlyphBuffer.advanceAt(i).width();
    527         for (unsigned i = 0; i < glyphBuffer.size(); ++i)
    528             initialAdvance -= glyphBuffer.advanceAt(i).width();
    529         glyphBuffer.reverse(0, glyphBuffer.size());
    530     } else {
    531         initialAdvance = dummyGlyphBuffer.initialAdvance().width();
    532         for (unsigned i = 0; i < dummyGlyphBuffer.size(); ++i)
    533             initialAdvance += dummyGlyphBuffer.advanceAt(i).width();
    534     }
    535 
    536     return initialAdvance;
    537 }
    538 
    539 float FontCascade::floatWidthForComplexText(const TextRun& run, HashSet<const Font*>* fallbackFonts, GlyphOverflow* glyphOverflow) const
    540 {
    541     ComplexTextController controller(*this, run, true, fallbackFonts);
    542     if (glyphOverflow) {
    543         glyphOverflow->top = std::max<int>(glyphOverflow->top, ceilf(-controller.minGlyphBoundingBoxY()) - (glyphOverflow->computeBounds ? 0 : fontMetrics().ascent()));
    544         glyphOverflow->bottom = std::max<int>(glyphOverflow->bottom, ceilf(controller.maxGlyphBoundingBoxY()) - (glyphOverflow->computeBounds ? 0 : fontMetrics().descent()));
    545         glyphOverflow->left = std::max<int>(0, ceilf(-controller.minGlyphBoundingBoxX()));
    546         glyphOverflow->right = std::max<int>(0, ceilf(controller.maxGlyphBoundingBoxX() - controller.totalWidth()));
    547     }
    548     return controller.totalWidth();
    549 }
    550 
    551 int FontCascade::offsetForPositionForComplexText(const TextRun& run, float x, bool includePartialGlyphs) const
    552 {
    553     ComplexTextController controller(*this, run);
    554     return controller.offsetForPosition(x, includePartialGlyphs);
    555 }
    556 
    557494// FIXME: Use this on all ports.
    558495const Font* FontCascade::fontForCombiningCharacterSequence(const UChar* characters, size_t length) const
  • trunk/Source/WebCore/platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp

    r211836 r222843  
    11/*
    2 * Copyright (C) 2017 Apple Inc. All rights reserved.
    3 *
    4 * Redistribution and use in source and binary forms, with or without
    5 * modification, are permitted provided that the following conditions
    6 * are met:
    7 * 1. Redistributions of source code must retain the above copyright
    8 *    notice, this list of conditions and the following disclaimer.
    9 * 2. Redistributions in binary form must reproduce the above copyright
    10 *    notice, this list of conditions and the following disclaimer in the
    11 *    documentation and/or other materials provided with the distribution.
    12 *
    13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
    14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    16 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
    17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    19 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
    20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    23 */
     2 * Copyright (C) 2017 Apple Inc. All rights reserved.
     3 * Copyright (C) 2017 Igalia S.L.
     4 *
     5 * Redistribution and use in source and binary forms, with or without
     6 * modification, are permitted provided that the following conditions
     7 * are met:
     8 * 1. Redistributions of source code must retain the above copyright
     9 *    notice, this list of conditions and the following disclaimer.
     10 * 2. Redistributions in binary form must reproduce the above copyright
     11 *    notice, this list of conditions and the following disclaimer in the
     12 *    documentation and/or other materials provided with the distribution.
     13 *
     14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
     15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     17 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     21 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     23 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24 */
    2425
    2526#include "config.h"
    2627#include "ComplexTextController.h"
    2728
     29#include "FontCascade.h"
     30#include "HbUniquePtr.h"
     31#include "SurrogatePairAwareTextIterator.h"
     32#include <hb-icu.h>
     33
    2834namespace WebCore {
    2935
    30 void ComplexTextController::collectComplexTextRunsForCharacters(const UChar*, unsigned, unsigned, const Font*)
    31 {
    32     // FIXME: Implement this.
    33     ASSERT_NOT_REACHED();
    34 }
    35 
    36 }
     36static inline float harfBuzzPositionToFloat(hb_position_t value)
     37{
     38    return static_cast<float>(value) / (1 << 16);
     39}
     40
     41ComplexTextController::ComplexTextRun::ComplexTextRun(hb_buffer_t* buffer, const Font& font, const UChar* characters, unsigned stringLocation, unsigned stringLength, unsigned indexBegin, unsigned indexEnd, bool ltr)
     42    : m_initialAdvance(0, 0)
     43    , m_font(font)
     44    , m_characters(characters)
     45    , m_stringLength(stringLength)
     46    , m_indexBegin(indexBegin)
     47    , m_indexEnd(indexEnd)
     48    , m_glyphCount(hb_buffer_get_length(buffer))
     49    , m_stringLocation(stringLocation)
     50    , m_isLTR(ltr)
     51{
     52    if (!m_glyphCount)
     53        return;
     54
     55    m_glyphs.grow(m_glyphCount);
     56    m_baseAdvances.grow(m_glyphCount);
     57    m_glyphOrigins.grow(m_glyphCount);
     58    m_coreTextIndices.grow(m_glyphCount);
     59
     60    hb_glyph_info_t* glyphInfos = hb_buffer_get_glyph_infos(buffer, nullptr);
     61    hb_glyph_position_t* glyphPositions = hb_buffer_get_glyph_positions(buffer, nullptr);
     62
     63    // HarfBuzz returns the shaping result in visual order. We don't need to flip for RTL.
     64    for (unsigned i = 0; i < m_glyphCount; ++i) {
     65        m_coreTextIndices[i] = glyphInfos[i].cluster;
     66
     67        uint16_t glyph = glyphInfos[i].codepoint;
     68        if (m_font.isZeroWidthSpaceGlyph(glyph)) {
     69            m_glyphs[i] = glyph;
     70            m_baseAdvances[i] = { };
     71            m_glyphOrigins[i] = { };
     72            continue;
     73        }
     74
     75        float offsetX = harfBuzzPositionToFloat(glyphPositions[i].x_offset);
     76        float offsetY = -harfBuzzPositionToFloat(glyphPositions[i].y_offset);
     77        float advanceX = harfBuzzPositionToFloat(glyphPositions[i].x_advance);
     78        float advanceY = harfBuzzPositionToFloat(glyphPositions[i].y_advance);
     79
     80        m_glyphs[i] = glyph;
     81        m_baseAdvances[i] = { advanceX, advanceY };
     82        m_glyphOrigins[i] = { offsetX, offsetY };
     83    }
     84}
     85
     86static const unsigned hbEnd = static_cast<unsigned>(-1);
     87
     88static Vector<hb_feature_t, 4> fontFeatures(const FontCascade& font, FontOrientation orientation)
     89{
     90    Vector<hb_feature_t, 4> features;
     91
     92    if (orientation == Vertical) {
     93        features.append({ HarfBuzzFace::vertTag, 1, 0, hbEnd });
     94        features.append({ HarfBuzzFace::vrt2Tag, 1, 0, hbEnd });
     95    }
     96
     97    hb_feature_t kerning = { HarfBuzzFace::kernTag, 0, 0, hbEnd };
     98    if (font.enableKerning())
     99        kerning.value = 1;
     100    features.append(WTFMove(kerning));
     101
     102    for (auto& feature : font.fontDescription().featureSettings()) {
     103        auto& tag = feature.tag();
     104        features.append({ HB_TAG(tag[0], tag[1], tag[2], tag[3]), static_cast<uint32_t>(feature.value()), 0, hbEnd });
     105    }
     106
     107    return features;
     108}
     109
     110static std::optional<UScriptCode> characterScript(UChar32 character)
     111{
     112    UErrorCode errorCode = U_ZERO_ERROR;
     113    UScriptCode script = uscript_getScript(character, &errorCode);
     114    if (U_FAILURE(errorCode))
     115        return std::nullopt;
     116    return script;
     117}
     118
     119static bool scriptsAreCompatibleForCharacters(UScriptCode script, UScriptCode previousScript, UChar32 character, UChar32 previousCharacter)
     120{
     121    if (script == previousScript)
     122        return true;
     123
     124    if (script == USCRIPT_INHERITED || previousScript == USCRIPT_COMMON)
     125        return true;
     126
     127    if (script == USCRIPT_COMMON) {
     128        // §5.1 Handling Characters with the Common Script Property.
     129        // Programs must resolve any of the special Script property values, such as Common,
     130        // based on the context of the surrounding characters. A simple heuristic uses the
     131        // script of the preceding character, which works well in many cases.
     132        // http://www.unicode.org/reports/tr24/#Common.
     133        //
     134        // FIXME: cover all other cases mentioned in the spec (ie. brackets or quotation marks).
     135        // https://bugs.webkit.org/show_bug.cgi?id=177003.
     136        //
     137        // We use a slightly more conservative heuristic than the one proposed in the spec,
     138        // using the script of the previous character only if both are ASCII.
     139        if (isASCII(character) && isASCII(previousCharacter))
     140            return true;
     141    }
     142
     143    return uscript_hasScript(character, previousScript);
     144}
     145
     146struct HBRun {
     147    unsigned startIndex;
     148    unsigned endIndex;
     149    UScriptCode script;
     150};
     151
     152static std::optional<HBRun> findNextRun(const UChar* characters, unsigned length, unsigned offset)
     153{
     154    SurrogatePairAwareTextIterator textIterator(characters + offset, offset, length, length);
     155    UChar32 character;
     156    unsigned clusterLength = 0;
     157    if (!textIterator.consume(character, clusterLength))
     158        return std::nullopt;
     159
     160    auto currentScript = characterScript(character);
     161    if (!currentScript)
     162        return std::nullopt;
     163
     164    unsigned startIndex = offset;
     165    UChar32 previousCharacter = character;
     166    for (textIterator.advance(clusterLength); textIterator.consume(character, clusterLength); previousCharacter = character, textIterator.advance(clusterLength)) {
     167        if (FontCascade::treatAsZeroWidthSpace(character))
     168            continue;
     169
     170        auto nextScript = characterScript(character);
     171        if (!nextScript)
     172            return std::nullopt;
     173
     174        if (!scriptsAreCompatibleForCharacters(nextScript.value(), currentScript.value(), character, previousCharacter))
     175            return std::optional<HBRun>({ startIndex, textIterator.currentIndex(), currentScript.value() });
     176    }
     177
     178    return std::optional<HBRun>({ startIndex, textIterator.currentIndex(), currentScript.value() });
     179}
     180
     181void ComplexTextController::collectComplexTextRunsForCharacters(const UChar* characters, unsigned length, unsigned stringLocation, const Font* font)
     182{
     183    if (!font) {
     184        // Create a run of missing glyphs from the primary font.
     185        m_complexTextRuns.append(ComplexTextRun::create(m_font.primaryFont(), characters, stringLocation, length, 0, length, m_run.ltr()));
     186        return;
     187    }
     188
     189    Vector<HBRun> runList;
     190    unsigned offset = 0;
     191    while (offset < length) {
     192        auto run = findNextRun(characters, length, offset);
     193        if (!run)
     194            break;
     195        runList.append(run.value());
     196        offset = run->endIndex;
     197    }
     198
     199    size_t runCount = runList.size();
     200    if (!runCount)
     201        return;
     202
     203    const auto& fontPlatformData = font->platformData();
     204    auto features = fontFeatures(m_font, fontPlatformData.orientation());
     205    HbUniquePtr<hb_buffer_t> buffer(hb_buffer_create());
     206    hb_buffer_set_unicode_funcs(buffer.get(), hb_icu_get_unicode_funcs());
     207
     208    for (unsigned i = 0; i < runCount; ++i) {
     209        auto& run = runList[m_run.rtl() ? runCount - i - 1 : i];
     210
     211        hb_buffer_set_script(buffer.get(), hb_icu_script_to_script(run.script));
     212        if (!m_mayUseNaturalWritingDirection || m_run.directionalOverride())
     213            hb_buffer_set_direction(buffer.get(), m_run.rtl() ? HB_DIRECTION_RTL : HB_DIRECTION_LTR);
     214        else {
     215            // Leaving direction to HarfBuzz to guess is *really* bad, but will do for now.
     216            hb_buffer_guess_segment_properties(buffer.get());
     217        }
     218        hb_buffer_add_utf16(buffer.get(), reinterpret_cast<const uint16_t*>(characters), length, run.startIndex, run.endIndex - run.startIndex);
     219
     220        HarfBuzzFace* face = fontPlatformData.harfBuzzFace();
     221        ASSERT(face);
     222        if (fontPlatformData.orientation() == Vertical)
     223            face->setScriptForVerticalGlyphSubstitution(buffer.get());
     224
     225        HbUniquePtr<hb_font_t> harfBuzzFont(face->createFont());
     226        hb_shape(harfBuzzFont.get(), buffer.get(), features.isEmpty() ? nullptr : features.data(), features.size());
     227        m_complexTextRuns.append(ComplexTextRun::create(buffer.get(), *font, characters, stringLocation, length, run.startIndex, run.endIndex, m_run.ltr()));
     228        hb_buffer_reset(buffer.get());
     229    }
     230}
     231
     232} // namespace WebCore
  • trunk/Source/WebCore/platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp

    r221909 r222843  
    3535#include "CairoUtilities.h"
    3636#include "Font.h"
     37#include "FontCascade.h"
    3738#include "FontPlatformData.h"
    3839#include "GlyphBuffer.h"
    39 #include "HarfBuzzShaper.h"
    4040#include "TextEncoding.h"
    4141#include <cairo-ft.h>
     
    102102        char buffer[U8_MAX_LENGTH];
    103103        size_t bufferLength = 0;
     104        if (FontCascade::treatAsSpace(unicode) && unicode != '\t')
     105            unicode = ' ';
     106        else if (FontCascade::treatAsZeroWidthSpaceInComplexScript(unicode))
     107            unicode = zeroWidthSpace;
    104108        U8_APPEND_UNSAFE(buffer, bufferLength, unicode);
    105         if (cairo_scaled_font_text_to_glyphs(scaledFont, 0, 0, buffer, bufferLength, &glyphs, &numGlyphs, nullptr, nullptr, nullptr) != CAIRO_STATUS_SUCCESS)
    106             return false;
    107         if (!numGlyphs)
     109        if (cairo_scaled_font_text_to_glyphs(scaledFont, 0, 0, buffer, bufferLength, &glyphs, &numGlyphs, nullptr, nullptr, nullptr) != CAIRO_STATUS_SUCCESS || !numGlyphs)
    108110            return false;
    109111        result.iterator->value = glyphs[0].index;
     
    215217}
    216218
    217 GlyphBufferAdvance HarfBuzzShaper::createGlyphBufferAdvance(float width, float height)
    218 {
    219     return GlyphBufferAdvance(width, height);
    220 }
    221 
    222219} // namespace WebCore
  • trunk/Source/WebCore/platform/graphics/opentype/OpenTypeMathData.h

    r222113 r222843  
    3434
    3535#if !ENABLE(OPENTYPE_MATH) && USE(HARFBUZZ)
     36#include "HbUniquePtr.h"
    3637#include <hb-ot.h>
    3738#endif
     
    135136    RefPtr<SharedBuffer> m_mathBuffer;
    136137#elif USE(HARFBUZZ)
    137     struct HbFontDeleter {
    138         void operator()(hb_font_t* font)
    139         {
    140             hb_font_destroy(font);
    141         }
    142     };
    143     std::unique_ptr<hb_font_t, HbFontDeleter> m_mathFont;
     138    HbUniquePtr<hb_font_t> m_mathFont;
    144139#endif
    145140};
Note: See TracChangeset for help on using the changeset viewer.