Skip to content

Upgrade Parley from 0.11 to latest main (2026-09-24) - #914

Merged
nicoburns merged 1 commit into
mainfrom
devin/1789920947-parley-break-spaces-analysis2
Sep 24, 2026
Merged

nicoburns merged 1 commit into
mainfrom
devin/1789920947-parley-break-spaces-analysis2

Conversation

@nicoburns

@nicoburns nicoburns commented Sep 20, 2026 •

Copy link
Copy Markdown
Member

Summary

Upgrades Parley from 0.11.1 (crates.io) to linebender/parley main at 6a9444f, pinned as a git dependency. There are about 130 upstream commits since 0.11.1. The biggest user-visible effects on Blitz are that white-space collapsing becomes a per-span style, pre-line/break-spaces become real modes, and line boxes are now sized following CSS.

Notable Parley changes pulled in

White space

  • WhiteSpaceCollapse is now a style (TextStyle::white_space_collapse / StyleProperty::WhiteSpaceCollapse) instead of TreeBuilder::set_white_space_mode builder state (#814). The builder state was applied lazily to buffered text, so text just before a child with a different white-space was collapsed using the child's mode. That can no longer happen.
  • New modes:
    • PreserveBreaks (#812).
    • BreakSpaces (#833): break opportunities after preserved spaces are computed during analysis, and whitespace never hangs.
  • Hanging and justification:
    • CSS conditional hanging of trailing whitespace (#790).
    • Hanging ideographic spaces (#784).
    • Consecutive hanging whitespace in calculate_content_widths (#785).
    • A reworked spacing/justification model that no longer mutates advances in place (#738, #760, #762).
  • Collapsing fixes: TreeBuilder collapsing fixed and optimised (#786), and non-breaking spaces are preserved when collapsing (#734).

Line layout

  • Line boxes follow the CSS line-box model (#697):
    • LineMetrics::{ascent,descent,leading} are removed.
    • block_{min,max}_coord are now the line-box bounds, and content_block_{min,max}_coord give the typographic bounds.
    • Negative half-leading is preserved rather than clamped (#743).
    • As a result, the strut's descent now extends below a baseline-aligned inline-block, as it does in browsers.
  • InlineBox::baseline (#639). append_inline_box_to_line now takes the box's ascent/descent relative to the baseline, plus a quantize flag.
  • CRLF is treated as a single hard line break (#667, #824).
  • Intrinsic sizing:
    • Max-content width is floored by min-content width (#834).
    • Inline boxes directly after a hard newline are handled correctly (#746).
  • Out-of-flow boxes:
    • No line-break opportunity is created at an out-of-flow box (#797).
    • Out-of-flow box indexing is fixed (#815).
    • An infinite loop in break_remaining with CustomOutOfFlow boxes is fixed (#753).

Shaping, clusters and fonts

  • Cluster now spans a full grapheme cluster (#715) and is character-addressed (#810).
  • Glyph::style_index is removed in favour of Cluster::style / GlyphRun::style (#661, #660).
  • Shaping context carries across run boundaries (#740), and runs that shape to zero glyphs are kept (#805).
  • Letter spacing suppresses optional ligatures (#731).
  • Font synthesis: shaping uses the correct variable-font wght synthesis (#723), and synthetic bold is applied only when the weight difference is over 200 (#724).
  • Word and line breaking:
    • UAX add font size support #29 word boundaries are decoupled from line-break opportunities (#819).
    • Complex-script fixes: soft breaks no longer shadow mandatory breaks (#781), and word boundaries work without dictionaries (#829).
    • Line-break overrides before newlines are handled correctly (#676).
  • Emoji presentation resolution is improved (#811).
  • Run::metrics() is renamed to Run::font_metrics(), and Run::font() now returns a FontInstance (the font itself is .font).
  • NormalizedCoord moves to parlance as a #[repr(transparent)] i16, with optional bytemuck impls (#813).
  • Dependencies are upgraded to read-fonts 0.41, skrifa 0.44 and harfrust 0.12 (#719).

Performance

Blitz changes

White space now travels with the style rather than the builder:

// stylo_to_parley::style
TextStyle { white_space_collapse: white_space_collapse(itext.white_space_collapse), .. }
// collapse / preserve / preserve-breaks / break-spaces now map 1:1

// <br>
builder.push_style_modification_span(&[StyleProperty::WhiteSpaceCollapse(Preserve)]);
builder.push_text("\n");
builder.pop_style_span();

// display: contents (no TextStyle of its own)
builder.push_style_modification_span(&[WhiteSpaceCollapse(..), TextWrapMode(..)]);
/* children */
builder.pop_style_span();
  • All set_white_space_mode calls and the threaded collapse_mode parameter are removed.
  • Where there is no computed style, the fallback TextStyle sets white_space_collapse: Collapse, because Parley's default is Preserve.
  • API migration:
    • InlineBox { baseline: None, .. }.
    • append_inline_box_to_line(advance, 0.0, 0.0, true) for floated boxes.
    • The hit-test node lookup uses cluster.style().brush.id.
    • Painting uses run.font_metrics() and &run.font().font.
  • Normalized coords are passed to anyrender without copying, via bytemuck::cast_slice::<NormalizedCoord, i16>. This enables parley's bytemuck feature in blitz-paint.

Tests

  • New tests/blitz-tests/tests/whitespace_modes.rs:
    • pre-line collapsing across spans.
    • Preserved spans and <br> restoring the parent's collapsing.
    • display: contents carrying its own collapse mode and an independent text-wrap-mode.
    • break-spaces wrapping and its effect on intrinsic widths and alignment.
    • Out-of-flow placeholder offsets.
  • anonymous_block_cache_invalidation now asserts heights relative to the initial layout. With CSS line-box sizing, the strut's descent below a baseline-aligned inline-block depends on the system font (22px on Linux and Windows, 23px on macOS).

WPT results

Subtests: 600 newly passing, 82 newly failing (net +518).

Full diff (475 changed tests)
+ FAIL => PASS      [1/1]    +1  css/CSS2/abspos/between-float-and-text.html
+ FAIL => PASS      [1/1]    +1  css/CSS2/bidi-text/bidi-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c414-flt-fit-000.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c534-bgre-000.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c534-bgre-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c534-bgreps-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c534-bgreps-002.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c534-bgreps-003.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c534-bgreps-004.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c534-bgreps-005.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c536-bgpos-000.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c536-bgpos-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c541-word-sp-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c547-indent-000.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c5511-brdr-tw-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c5513-brdr-bw-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c5515-brdr-w-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c5525-fltwidth-003.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c562-white-sp-000.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/css1/c61-rel-len-000.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/floats-clear/float-003.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/floats-clear/float-replaced-width-006.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/floats-clear/float-replaced-width-008.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/floats-clear/float-replaced-width-009.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/floats-clear/float-replaced-width-011.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/floats-clear/floats-149.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/floats/float-nowrap-3.html
- PASS => FAIL      [0/1]    -1  css/CSS2/floats/floats-wrap-bfc-002-left-overflow.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/floats/floats-wrap-bfc-002-left-table.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/floats/floats-wrap-bfc-002-right-overflow.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/floats/floats-wrap-bfc-002-right-table.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/fonts/font-family-rule-005.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/fonts/font-size-124.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/generated-content/after-content-display-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/generated-content/after-content-display-018.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/generated-content/before-content-display-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/generated-content/before-content-display-018.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/generated-content/content-white-space-001.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/linebox/inline-formatting-context-013.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/linebox/line-height-applies-to-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/linebox/line-height-applies-to-002.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/linebox/line-height-applies-to-003.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/linebox/line-height-applies-to-004.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/linebox/line-height-applies-to-007.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/linebox/line-height-applies-to-008.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/linebox/line-height-applies-to-009.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/linebox/line-height-applies-to-012.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/linebox/line-height-applies-to-013.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/linebox/line-height-applies-to-014.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/linebox/line-height-oof-descendants-001.html
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/inline-block-replaced-width-001.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/inline-block-replaced-width-003.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/inline-block-replaced-width-006.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/inline-block-width-001a.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/inline-block-width-001b.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/inline-block-zorder-002.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/inline-replaced-width-001.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/inline-replaced-width-003.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/inline-replaced-width-006.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/inline-table-zorder-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/normal-flow/max-height-036.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/normal-flow/max-height-047.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/max-width-percentage-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/normal-flow/min-height-036.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/normal-flow/min-height-047.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/min-width-percentage-001.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/width-percentage-001.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/normal-flow/width-percentage-002.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/positioning/absolute-non-replaced-height-008.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/positioning/absolute-non-replaced-max-height-002.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/positioning/absolute-non-replaced-max-height-008.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/positioning/absolute-non-replaced-max-height-009.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/positioning/abspos-011.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/positioning/abspos-012.xht
+ FAIL => PASS      [6/6]    +5  css/CSS2/positioning/inline-static-position-001.html
+ FAIL => PASS      [1/1]    +1  css/CSS2/positioning/position-relative-029.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/positioning/position-relative-030.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/positioning/position-relative-031.xht
- PASS => FAIL      [0/1]    -1  css/CSS2/syntax/case-sensitive-005.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/syntax/escapes-000.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/letter-spacing-justify-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/text-indent-011.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-005.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-007.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-applies-to-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-applies-to-005.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-applies-to-007.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-generated-content-before-001.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-mixed-002.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-normal-005.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-normal-007.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-normal-008.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-nowrap-005.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-004.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-016.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-017.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-018.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-021.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-023.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-025.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-026.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-028.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-029.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-030.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-031.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-032.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-033.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-034.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-035.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-036.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-039.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-045.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-050.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-051.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/text/white-space-processing-053.xht
+ FAIL => PASS      [1/1]    +1  css/CSS2/visudet/inline-block-baseline-016.html
- PASS => FAIL      [0/1]    -1  css/CSS2/visudet/line-height-204.html
+ FAIL => PASS      [1/1]    +1  css/CSS2/visufx/overflow-applies-to-001.xht
+ FAIL => FAIL      [4/7]    +2  css/css-align/baseline-rules/synthesized-baseline-flexbox-001.html
+ FAIL => FAIL      [4/7]    +2  css/css-align/baseline-rules/synthesized-baseline-grid-001.html
+ FAIL => FAIL      [2/3]    +2  css/css-align/baseline-rules/synthesized-baseline-inline-block-001.html
- PASS => FAIL      [0/1]    -1  css/css-backgrounds/background-origin/origin-padding-box.html
- PASS => FAIL      [0/1]    -1  css/css-backgrounds/background-origin/origin-padding-box_with_radius.html
- PASS => FAIL      [0/1]    -1  css/css-backgrounds/background-size-025.html
- PASS => FAIL      [0/1]    -1  css/css-backgrounds/background-size-027.html
- PASS => FAIL      [0/1]    -1  css/css-backgrounds/background-size-028.html
- PASS => FAIL      [0/1]    -1  css/css-backgrounds/background-size-030.html
- PASS => FAIL      [0/1]    -1  css/css-backgrounds/background-size-031.html
- PASS => FAIL      [0/1]    -1  css/css-break/flexbox/multi-line-row-flex-fragmentation-082a-print.html
- PASS => FAIL      [0/1]    -1  css/css-break/flexbox/multi-line-row-flex-fragmentation-082b-print.html
- PASS => FAIL      [0/1]    -1  css/css-break/flexbox/multi-line-row-flex-fragmentation-082c-print.html
- PASS => FAIL      [0/1]    -1  css/css-break/flexbox/multi-line-row-flex-fragmentation-082d-print.html
- PASS => FAIL      [0/1]    -1  css/css-break/ruby-003.html
- PASS => FAIL      [0/1]    -1  css/css-contain/contain-animation-001.html
+ FAIL => PASS      [1/1]    +1  css/css-contain/contain-layout-ink-overflow-013.html
+ FAIL => PASS      [1/1]    +1  css/css-contain/contain-layout-ink-overflow-015.html
+ FAIL => PASS      [1/1]    +1  css/css-contain/contain-paint-022.html
- PASS => FAIL      [0/1]    -1  css/css-contain/contain-size-064.html
+ FAIL => PASS      [1/1]    +1  css/css-display/display-contents-text-inherit-002.html
+ FAIL => FAIL     [3/12]    +1  css/css-flexbox/alignment/flex-align-baseline-overflow-002.html
+ FAIL => FAIL     [3/12]    +1  css/css-flexbox/alignment/flex-align-baseline-overflow-003.html
+ FAIL => PASS      [1/1]    +1  css/css-flexbox/flexbox-basic-canvas-vert-001.xhtml
+ FAIL => PASS      [1/1]    +1  css/css-flexbox/flexbox-basic-canvas-vert-001v.xhtml
+ FAIL => PASS      [1/1]    +1  css/css-flexbox/flexbox-basic-iframe-vert-001.xhtml
+ FAIL => PASS      [1/1]    +1  css/css-flexbox/flexbox-basic-img-vert-001.xhtml
+ FAIL => PASS      [1/1]    +1  css/css-flexbox/flexbox-basic-textarea-vert-001.xhtml
+ FAIL => PASS      [1/1]    +1  css/css-flexbox/flexbox-basic-video-vert-001.xhtml
+ FAIL => PASS      [1/1]    +1  css/css-flexbox/flexible-box-float.html
- FAIL => FAIL      [0/2]    -1  css/css-flexbox/percentage-size-quirks-002.html
+ FAIL => PASS      [1/1]    +1  css/css-fonts/font-size-zero-2.html
- PASS => FAIL      [0/1]    -1  css/css-fonts/font-variant-position-05.html
- PASS => FAIL      [0/1]    -1  css/css-fonts/small-caps-letter-spacing-002.html
+ FAIL => PASS      [1/1]    +1  css/css-fonts/variations/font-weight-metrics.html
+ FAIL => PASS  [100/100]  +100  css/css-grid/abspos/positioned-grid-descendants-001.html
+ FAIL => FAIL     [7/18]    +7  css/css-grid/alignment/grid-baseline-004.html
+ FAIL => PASS      [1/1]    +1  css/css-grid/grid-items/grid-layout-z-order-a.html
+ FAIL => PASS      [1/1]    +1  css/css-grid/grid-items/grid-layout-z-order-b.html
- PASS => FAIL      [0/1]    -1  css/css-highlight-api/painting/custom-highlight-painting-inheritance-001.html
- PASS => FAIL      [0/1]    -1  css/css-highlight-api/painting/custom-highlight-painting-inheritance-002.html
+ FAIL => PASS      [1/1]    +1  css/css-highlight-api/painting/custom-highlight-painting-invalidation-002.html
+ FAIL => PASS      [1/1]    +1  css/css-highlight-api/painting/custom-highlight-painting-staticrange-001.html
+ FAIL => FAIL    [10/22]   +10  css/css-inline/baseline-source/baseline-source-first-001.html
+ FAIL => FAIL     [9/12]    +9  css/css-inline/baseline-source/baseline-source-first-textarea-001.tentative.html
+ FAIL => FAIL    [10/22]   +10  css/css-inline/baseline-source/baseline-source-last-001.html
+ FAIL => PASS    [12/12]   +12  css/css-inline/baseline-source/baseline-source-last-textarea-001.tentative.html
- PASS => FAIL      [0/1]    -1  css/css-inline/empty-span-size-002.html
+ FAIL => PASS      [1/1]    +1  css/css-lists/list-style-type-string-001a.html
+ FAIL => PASS      [1/1]    +1  css/css-lists/list-style-type-string-001b.html
+ FAIL => PASS      [1/1]    +1  css/css-overflow/line-clamp/line-clamp-balance-009.html
+ FAIL => PASS      [1/1]    +1  css/css-overflow/text-overflow-023.html
+ FAIL => PASS      [1/1]    +1  css/css-position/multicol/static-position/vlr-ltr-ltr-in-multicol.html
+ FAIL => PASS      [1/1]    +1  css/css-position/multicol/static-position/vlr-rtl-ltr-in-multicol.tentative.html
+ FAIL => PASS      [1/1]    +1  css/css-position/multicol/static-position/vrl-ltr-ltr-in-multicol.html
+ FAIL => PASS      [1/1]    +1  css/css-position/multicol/static-position/vrl-rtl-ltr-in-multicol.tentative.html
+ FAIL => PASS      [1/1]    +1  css/css-position/static-position/htb-ltr-ltr.html
+ FAIL => PASS      [1/1]    +1  css/css-position/static-position/htb-rtl-ltr.tentative.html
+ FAIL => PASS      [1/1]    +1  css/css-pseudo/first-line-with-before-after.html
+ FAIL => PASS      [1/1]    +1  css/css-pseudo/marker-tab-size.html
- PASS => FAIL      [0/1]    -1  css/css-ruby/br-clear-all-000.html
- PASS => FAIL      [0/1]    -1  css/css-ruby/empty-ruby-base-container.html
- PASS => FAIL      [0/1]    -1  css/css-ruby/empty-ruby-text-container-abs.html
- PASS => FAIL      [0/1]    -1  css/css-ruby/empty-ruby-text-container-float.html
- PASS => FAIL      [0/1]    -1  css/css-ruby/ruby-base-container-abs.html
- PASS => FAIL      [0/1]    -1  css/css-ruby/ruby-base-container-float.html
+ FAIL => PASS      [1/1]    +1  css/css-ruby/ruby-intra-level-whitespace-001.html
- PASS => FAIL      [0/1]    -1  css/css-ruby/ruby-tab-in-base-001.html
- PASS => FAIL      [0/1]    -1  css/css-ruby/ruby-tab-in-base-003.html
- PASS => FAIL      [0/1]    -1  css/css-ruby/ruby-whitespace-002.html
+ FAIL => PASS      [1/1]    +1  css/css-sizing/slice-nowrap-intrinsic-size.html
+ FAIL => FAIL     [3/15]    +1  css/css-tables/tentative/baseline-table.html
- PASS => FAIL      [0/1]    -1  css/css-text-decor/text-decoration-skip-spaces-001.html
- PASS => FAIL      [0/1]    -1  css/css-text/hanging-punctuation/hanging-punctuation-first-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/hyphens/hyphens-auto-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/hyphens/hyphens-auto-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/letter-spacing/letter-spacing-combining-mark-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/line-break/line-break-anywhere-and-white-space-006.html
- PASS => FAIL      [0/1]    -1  css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-004.html
- PASS => FAIL      [0/1]    -1  css/css-text/line-break/line-break-anywhere-overrides-uax-behavior-006.html
+ FAIL => PASS      [1/1]    +1  css/css-text/line-breaking/line-breaking-atomic-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/overflow-wrap/overflow-wrap-anywhere-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/overflow-wrap/overflow-wrap-anywhere-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/overflow-wrap/overflow-wrap-anywhere-009.html
+ FAIL => PASS      [1/1]    +1  css/css-text/overflow-wrap/overflow-wrap-break-word-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/overflow-wrap/overflow-wrap-break-word-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/overflow-wrap/overflow-wrap-break-word-008.html
+ FAIL => PASS      [1/1]    +1  css/css-text/overflow-wrap/overflow-wrap-break-word-009.html
+ FAIL => PASS      [1/1]    +1  css/css-text/overflow-wrap/overflow-wrap-min-content-size-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/shaping/shaping-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/shaping/shaping-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/shaping/shaping-008.html
+ FAIL => PASS      [1/1]    +1  css/css-text/shaping/shaping-017.html
+ FAIL => PASS      [1/1]    +1  css/css-text/shaping/shaping-018.html
+ FAIL => PASS      [1/1]    +1  css/css-text/shaping/shaping-021.html
+ FAIL => PASS      [1/1]    +1  css/css-text/shaping/shaping-024.html
+ FAIL => PASS      [1/1]    +1  css/css-text/text-align/text-align-end-009.html
+ FAIL => PASS      [1/1]    +1  css/css-text/text-align/text-align-match-parent-05.html
+ FAIL => PASS      [1/1]    +1  css/css-text/text-encoding/shaping-tatweel-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/text-justify/text-justify-and-trailing-spaces-001.html
+ FAIL => PASS      [1/1]    +1  css/css-text/text-justify/text-justify-and-trailing-spaces-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/text-justify/text-justify-and-trailing-spaces-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/text-justify/text-justify-and-trailing-spaces-004.html
+ FAIL => PASS      [1/1]    +1  css/css-text/text-transform/text-transform-fullwidth-006.html
+ FAIL => PASS      [1/1]    +1  css/css-text/text-transform/text-transform-fullwidth-008.html
+ FAIL => PASS      [1/1]    +1  css/css-text/text-transform/text-transform-fullwidth-009.html
- PASS => FAIL      [0/1]    -1  css/css-text/white-space/break-spaces-001.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-005.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-008.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-before-first-char-001.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-before-first-char-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-before-first-char-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-before-first-char-004.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-before-first-char-005.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-before-first-char-006.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-before-first-char-012.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-before-first-char-013.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-before-first-char-014.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-before-first-char-015.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-before-first-char-018.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-with-ideographic-space-005.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-with-ideographic-space-010.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-with-overflow-wrap-001.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-with-overflow-wrap-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-with-overflow-wrap-005.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-with-overflow-wrap-006.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-with-overflow-wrap-007.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-with-overflow-wrap-008.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-with-overflow-wrap-009.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/break-spaces-with-overflow-wrap-010.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/control-chars-00B.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/control-chars-085.html
- PASS => FAIL      [0/1]    -1  css/css-text/white-space/eol-spaces-bidi-004.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/full-width-leading-spaces-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/full-width-leading-spaces-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/full-width-leading-spaces-005.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/hanging-whitespace-001.tentative.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/hanging-whitespace-004.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/pre-wrap-001.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/pre-wrap-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/pre-wrap-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/pre-wrap-004.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/pre-wrap-005.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/pre-wrap-006.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/pre-wrap-007.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/pre-wrap-014.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/pre-wrap-017.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/pre-wrap-018.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/pre-wrap-019.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/pre-wrap-leading-spaces-015.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/pre-wrap-leading-spaces-017.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-004.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-005.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-006.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-007.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-009.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-010.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-012.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-017.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-019.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-020.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-022.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-023.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-025.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-break-spaces-001.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-break-spaces-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-break-spaces-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-break-spaces-004.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-break-spaces-005.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-break-spaces-006.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-ideographic-space-break-spaces-007.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/trailing-space-align-start.tentative.html
+ FAIL => PASS      [8/8]    +2  css/css-text/white-space/trailing-space-before-br-001.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-applies-to-text-001.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-intrinsic-size-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-intrinsic-size-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-intrinsic-size-013.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-intrinsic-size-014.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-intrinsic-size-015.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-intrinsic-size-016.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-intrinsic-size-017.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-intrinsic-size-018.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-intrinsic-size-019.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-intrinsic-size-020.html
+ FAIL => FAIL  [176/192]   +46  css/css-text/white-space/white-space-intrinsic-size-021.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-intrinsic-size-024.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-intrinsic-size-025.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-nowrap-011.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-pre-wrap-justify-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-pre-wrap-trailing-spaces-001.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-pre-wrap-trailing-spaces-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-pre-wrap-trailing-spaces-005.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-pre-wrap-trailing-spaces-007.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-pre-wrap-trailing-spaces-008.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-pre-wrap-trailing-spaces-011.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-pre-wrap-trailing-spaces-021.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/white-space-zero-fontsize-001.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/ws-break-spaces-applies-to-001.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/ws-break-spaces-applies-to-002.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/ws-break-spaces-applies-to-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/white-space/ws-break-spaces-applies-to-005.html
- PASS => FAIL      [0/1]    -1  css/css-text/word-break/word-break-break-all-003.html
+ FAIL => PASS      [1/1]    +1  css/css-text/word-break/word-break-break-all-008.html
+ FAIL => PASS      [1/1]    +1  css/css-text/word-break/word-break-break-all-017.html
+ FAIL => PASS      [1/1]    +1  css/css-text/word-break/word-break-break-all-018.html
+ FAIL => PASS      [1/1]    +1  css/css-text/word-break/word-break-break-all-021.html
+ FAIL => PASS      [1/1]    +1  css/css-text/word-break/word-break-break-all-022.html
+ FAIL => PASS      [1/1]    +1  css/css-text/word-break/word-break-break-all-029.html
- PASS => FAIL      [0/1]    -1  css/css-text/word-break/word-break-keep-all-003.html
- PASS => FAIL      [0/1]    -1  css/css-text/word-break/word-break-normal-lo-000.html
- PASS => FAIL      [0/1]    -1  css/css-text/word-break/word-break-normal-tdd-000.html
- PASS => FAIL      [0/1]    -1  css/css-text/word-break/word-break-normal-th-000.html
- FAIL => FAIL     [2/12]    -3  css/css-transforms/3d-point-mapping-2-transforminterop.html
+ FAIL => PASS      [1/1]    +1  css/css-values/ch-unit-001.html
- PASS => FAIL      [0/8]    -8  css/css-values/lh-rlh-on-root-001.html
+ FAIL => PASS      [1/1]    +1  css/css-values/lh-unit-001.html
+ FAIL => PASS      [1/1]    +1  css/css-values/lh-unit-002.html
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-005.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-009.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-011.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-017.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-021.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-023.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-029.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-033.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-035.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-041.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-045.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-047.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-053.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-057.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-059.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-065.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-069.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-071.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-077.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-081.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-083.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-089.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-095.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-105.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-111.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-113.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-117.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-121.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-127.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-129.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-133.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-137.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-143.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-145.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-149.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-153.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-159.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-161.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-165.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-169.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-175.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-177.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-181.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-185.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-191.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-193.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-197.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-201.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-207.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-209.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-213.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-217.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vlr-225.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vrl-004.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vrl-010.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vrl-014.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vrl-016.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vrl-022.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vrl-028.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vrl-034.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vrl-038.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vrl-040.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vrl-046.xht
+ FAIL => PASS      [1/1]    +1  css/css-writing-modes/abs-pos-non-replaced-vrl-050.xht
# ... and 75 more (see the workflow logs)

Generated by the WPT workflow.

@staging-devin-ai-integration

Copy link
Copy Markdown
Contributor

I'll fix CI failures and address comments from users with write access that start with 'DevinAI' or '@devin'.

  • Disable automatic comment, CI, and merge conflict monitoring

@staging-devin-ai-integration staging-devin-ai-integration Bot changed the title Implement CSS break-spaces with Parley (analysis-time branch) Upgrade Parley from 0.11 to latest main Sep 24, 2026
@staging-devin-ai-integration
staging-devin-ai-integration Bot force-pushed the devin/1789920947-parley-break-spaces-analysis2 branch from 8c6167d to e2601a1 Compare September 24, 2026 17:44
Pin Parley to linebender/parley main (6a9444f). White-space collapsing is
now a per-span Parley style, so all four white-space-collapse values map
1:1, <br> and display: contents push modification spans, and the
set_white_space_mode calls are removed. Migrate to the newer Parley API
(InlineBox::baseline, append_inline_box_to_line ascent/descent/quantize,
Cluster::style, Run::font_metrics, FontInstance) and cast normalized coords
to &[i16] via bytemuck.

Add whitespace_modes tests and make anonymous_block_cache_invalidation
assert heights relative to the initial layout, since CSS line-box sizing
makes the strut descent depend on the system font.
@staging-devin-ai-integration
staging-devin-ai-integration Bot force-pushed the devin/1789920947-parley-break-spaces-analysis2 branch from e2601a1 to 2e87a60 Compare September 24, 2026 17:46
@nicoburns nicoburns changed the title Upgrade Parley from 0.11 to latest main Upgrade Parley from 0.11 to latest main (2026-09-24) Sep 24, 2026
@nicoburns
nicoburns enabled auto-merge (squash) September 24, 2026 17:52
@nicoburns
nicoburns merged commit 5b227f8 into main Sep 24, 2026
16 checks passed
staging-devin-ai-integration Bot pushed a commit that referenced this pull request Sep 24, 2026
Rebased onto main as a single commit: main now includes #914 (Parley
upgrade to linebender main), which superseded the Parley repin commits
that made up most of this branch's history. The previous history is
preserved at backup/832-pre-rebase.

- Map stylo vertical-align / alignment-baseline / baseline-shift to
  Parley's VerticalAlign on text styles and inline boxes
- Drop Blitz's root line-height floor and per-span line-height
  pre-computation; Parley now owns line box sizing
- Export inline-block / inline flex / grid baselines to Parley
- Scale ch/ic linearly from font units to match shaped advances
- Position glyph runs, inline boxes and decorations by baseline offset
staging-devin-ai-integration Bot pushed a commit that referenced this pull request Sep 24, 2026
Rebased onto main as a single commit: main now includes #914 (Parley
upgrade to linebender main), which superseded the Parley repin commits
that made up most of this branch's history. The previous history is
preserved at backup/832-pre-rebase.

- Map stylo vertical-align / alignment-baseline / baseline-shift to
  Parley's VerticalAlign on text styles and inline boxes
- Drop Blitz's root line-height floor and per-span line-height
  pre-computation; Parley now owns line box sizing
- Export inline-block / inline flex / grid baselines to Parley
- Scale ch/ic linearly from font units to match shaped advances
- Position glyph runs, inline boxes and decorations by baseline offset
staging-devin-ai-integration Bot pushed a commit that referenced this pull request Sep 26, 2026
Rebased onto main as a single commit: main now includes #914 (Parley
upgrade to linebender main), which superseded the Parley repin commits
that made up most of this branch's history. The previous history is
preserved at backup/832-pre-rebase.

- Map stylo vertical-align / alignment-baseline / baseline-shift to
  Parley's VerticalAlign on text styles and inline boxes
- Drop Blitz's root line-height floor and per-span line-height
  pre-computation; Parley now owns line box sizing
- Export inline-block / inline flex / grid baselines to Parley
- Scale ch/ic linearly from font units to match shaped advances
- Position glyph runs, inline boxes and decorations by baseline offset
staging-devin-ai-integration Bot pushed a commit that referenced this pull request Sep 28, 2026
Rebased onto main as a single commit: main now includes #914 (Parley
upgrade to linebender main), which superseded the Parley repin commits
that made up most of this branch's history. The previous history is
preserved at backup/832-pre-rebase.

- Map stylo vertical-align / alignment-baseline / baseline-shift to
  Parley's VerticalAlign on text styles and inline boxes
- Drop Blitz's root line-height floor and per-span line-height
  pre-computation; Parley now owns line box sizing
- Export inline-block / inline flex / grid baselines to Parley
- Scale ch/ic linearly from font units to match shaped advances
- Position glyph runs, inline boxes and decorations by baseline offset
nicoburns added a commit that referenced this pull request Sep 28, 2026
* Implement vertical-align via Parley

Rebased onto main as a single commit: main now includes #914 (Parley
upgrade to linebender main), which superseded the Parley repin commits
that made up most of this branch's history. The previous history is
preserved at backup/832-pre-rebase.

- Map stylo vertical-align / alignment-baseline / baseline-shift to
  Parley's VerticalAlign on text styles and inline boxes
- Drop Blitz's root line-height floor and per-span line-height
  pre-computation; Parley now owns line box sizing
- Export inline-block / inline flex / grid baselines to Parley
- Scale ch/ic linearly from font units to match shaped advances
- Position glyph runs, inline boxes and decorations by baseline offset

* Paint text decorations at the decorating box's baseline; repin parley

Underlines/overlines/line-throughs of a decorating element are drawn at that
element's inline-box baseline on each line (via Line::style_baseline through
the parley style parent chain) instead of at each glyph run's shifted
baseline, so vertically aligned descendants no longer carry the decoration
with them. Pin parley to 1fd63fba72b38df9ec14892bd6f20e96fe2c1176, which adds
Style::parent / Line::style_baseline and stops a trailing space from starting
an extra empty line.

* Build FontContext via from_parts (fields are private in the repinned parley)

* wasm_hello: build FontContext via from_parts

* Repin parley to 5f93a92 (inline sort_inline_boxes)

* Repin parley to 754b67c; rustfmt after rebase onto main

* Repin parley to b4bf59f; drop removed quantize arg from append_inline_box_to_line

* Repin parley to linebender main 63927df (#766 merged)

Reverts the FontContext::from_parts adaptation and the decorating-box
baseline decoration painting, which depend on the not-yet-upstreamed
DioxusLabs/parley #19 / #23 (Style::parent, Line::style_baseline).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant