Skip to content

Paint text decorations at the decorating box's baseline; repin parley - #833

Open
nicoburns wants to merge 4 commits into
devin/1788386630-vertical-alignfrom
devin/1788397525-vertical-align-fixes
Open

Paint text decorations at the decorating box's baseline; repin parley#833
nicoburns wants to merge 4 commits into
devin/1788386630-vertical-alignfrom
devin/1788397525-vertical-align-fixes

Conversation

@nicoburns

@nicoburns nicoburns commented Sep 3, 2026

Copy link
Copy Markdown
Member

Summary

Follow-up to #832, from running the WPT suite against it (report posted on #832).

Decoration baseline (blitz-paint/src/text.rs). Underline/overline/line-through of an element were drawn per glyph run at that run's shifted baseline, so <u>a <sup>b</sup></u> drew the b part of the underline raised with the sup. CSS 2 §16.3.1: the decoration is positioned by the decorating box, and descendants with vertical-align don't move it. stroke_text now takes the whole parley::Layout (not just the line iterator) and, for each decoration entry owned by node_id, walks the run's style up the Parley style tree (Style::parent()) to the style whose brush is that node and uses Line::style_baseline(index):

fn decorating_box_baseline(line, styles, run_style, node_id) -> f32 {
    let mut index = run_style;
    loop {
        if styles[index].brush.id == node_id { return line.style_baseline(index); }
        let parent = styles[index].parent();
        if parent == index { return line.style_baseline(run_style); } // root reached: fall back
        index = parent;
    }
}

DecorationRunGeometry::baseline is now "baseline of the decorating box on this line". Fixes css/CSS2/text/text-decoration-va-length-001.xht.

Parley repinc12395697bc595007febe3dab7ed7219b4590899 (DioxusLabs/parley#23 = #18's head + linebender/parley#762 + the fixes): adds the two accessors above, and stops a trailing space from starting an empty final line / breaking after the first hanging space. This is what fixes the pre-wrap-00[1-7], white-space-pre-wrap-trailing-spaces-*, hanging-whitespace-004 WPTs; #762 itself brings the text-justify-and-trailing-spaces-*, word-break-break-all-018/021, inline-block-zorder-004/005 passes.

WPT (4 required dirs + visudet/normal-flow/css1/css-values, 4188 run): main 2420 → #832 2507 → this 2533 passing. PASS→FAIL: break-spaces-001/010, white-space-intrinsic-size-001 (white-space: break-spaces is mapped to pre-wrap, stylo_to_parley.rs:291 TODO; they only passed via the old break-after-first-space bug) and line-break-anywhere-overrides-uax-behavior-004/006 (accidental passes noted in #762's description).

Note: cargo clippy -p blitz-paint -D warnings fails on a pre-existing needless_return in blitz-dom/src/mutator.rs:1250 (not touched here); cargo clippy -p blitz-dom -D warnings and cargo check --workspace --all-targets pass.

Link to Devin session: https://dioxus.staging.devinenterprise.com/sessions/881b791ebc35447fb39a382f186fa28c
Open in Devin Desktop: https://dioxus.staging.devinenterprise.com/desktop/session/881b791ebc35447fb39a382f186fa28c?variant=devin-insiders
Requested by: @nicoburns

WPT results

Subtests: 424 newly passing, 99 newly failing (net +325).

Full diff (407 changed tests)
+ FAIL => PASS      [1/1]   +1  css/CSS2/abspos/between-float-and-text.html
+ FAIL => PASS      [1/1]   +1  css/CSS2/backgrounds/background-position-applies-to-007.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/backgrounds/background-position-applies-to-009.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/backgrounds/background-position-applies-to-012.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/backgrounds/background-position-applies-to-013.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/backgrounds/background-position-applies-to-014.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/bidi-text/bidi-001.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/box-display/anonymous-box-generation-001.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/box-display/containing-block-030.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/box-display/display-002.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/box-display/display-011.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/box-display/display-017.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/colors/color-applies-to-007.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/colors/color-applies-to-008.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/colors/color-applies-to-009.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/colors/color-applies-to-012.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/css1/c414-flt-fit-004.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/css1/c43-rpl-ibx-000.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/css1/c44-ln-box-000.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/css1/c44-ln-box-001.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/c544-valgn-001.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/css1/c547-indent-000.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/css1/c5502-mrgn-r-000.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/css1/c5504-mrgn-l-000.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/css1/c5505-mrgn-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/c61-rel-len-000.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/floats-clear/clear-003.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/floats-clear/clear-inline-001.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/floats-clear/floats-007.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/floats-clear/floats-038.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/floats-clear/floats-040.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/floats-clear/floats-124.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/floats-clear/floats-138.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/floats-clear/floats-141.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/floats-clear/floats-149.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/floats-clear/margin-collapse-clear-014.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-011.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-012.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-013.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-014.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-015.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-016.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-029.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-030.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-031.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-032.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-042.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-043.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/fonts/font-applies-to-017.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-family-applies-to-001.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-family-applies-to-002.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/fonts/font-family-applies-to-005.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-family-applies-to-006.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-family-applies-to-007.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-family-applies-to-008.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-family-applies-to-009.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-family-applies-to-010.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-family-applies-to-011.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-family-applies-to-014.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-family-applies-to-017.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-family-rule-005.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-size-122.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/fonts/font-size-124.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/fonts/font-variant-applies-to-017.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/fonts/font-weight-applies-to-017.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/generated-content/content-174.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/linebox/baseline-block-with-overflow-001.html
- PASS => FAIL      [0/1]   -1  css/CSS2/linebox/inline-formatting-context-012.xht
+ FAIL => FAIL     [7/13]   +5  css/CSS2/linebox/inline-negative-margin-001.html
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/line-breaking-font-size-zero-001.html
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/line-height-127.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
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-007.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-008.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-019.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-020.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-031.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-032.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-043.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-044.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-055.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-056.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-067.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-068.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-079.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-080.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-091.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-092.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-103.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-104.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-122.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/linebox/vertical-align-applies-to-008.xht
+ FAIL => PASS    [20/20]  +16  css/CSS2/linebox/vertical-align-top-bottom-001.html
+ FAIL => PASS      [1/1]   +1  css/CSS2/margin-padding-clear/padding-applies-to-017.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/normal-flow/block-formatting-contexts-011.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/normal-flow/block-in-inline-first-line-001.html
- PASS => FAIL      [0/1]   -1  css/CSS2/normal-flow/inline-block-width-002a.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/normal-flow/inline-block-width-002b.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-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
+ 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
+ FAIL => PASS      [1/1]   +1  css/CSS2/positioning/absolute-non-replaced-max-height-002.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
- PASS => FAIL      [0/1]   -1  css/CSS2/sec5/first-child-000.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/sec5/first-child-001.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/selectors/first-line-pseudo-014.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/selectors/first-line-pseudo-015.xht
- PASS => FAIL      [0/1]   -1  css/CSS2/tables/border-spacing-percentage-001.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/tables/table-anonymous-objects-171.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-007.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/text/white-space-normal-003.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/text/white-space-pre-001.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/text/white-space-pre-002.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/text/white-space-processing-002.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/text/white-space-processing-003.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/text/white-space-processing-008.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/text/white-space-processing-009.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/text/white-space-processing-010.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/values/numbers-units-007.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/values/numbers-units-009.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/values/numbers-units-010.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/values/numbers-units-021.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/values/units-003.xht
+ FAIL => PASS      [1/1]   +1  css/CSS2/visudet/content-height-001.html
+ FAIL => PASS      [1/1]   +1  css/CSS2/visudet/content-height-002.html
+ FAIL => PASS      [1/1]   +1  css/CSS2/visudet/content-height-003.html
- PASS => FAIL      [0/1]   -1  css/CSS2/visudet/line-height-204.html
- PASS => FAIL      [0/1]   -1  css/CSS2/visufx/overflow-applies-to-001.xht
- PASS => FAIL      [0/1]   -1  css/css-align/baseline-of-scrollable-1b.html
- FAIL => FAIL      [0/2]   -1  css/css-align/baseline-of-single-axis-scroll-container.html
+ FAIL => PASS      [7/7]   +5  css/css-align/baseline-rules/synthesized-baseline-flexbox-001.html
+ FAIL => PASS      [7/7]   +5  css/css-align/baseline-rules/synthesized-baseline-grid-001.html
+ FAIL => PASS      [3/3]   +3  css/css-align/baseline-rules/synthesized-baseline-inline-block-001.html
+ FAIL => PASS      [1/1]   +1  css/css-backgrounds/box-shadow-outset-without-border-radius-001.html
+ FAIL => PASS      [1/1]   +1  css/css-break/flexbox/multi-line-row-flex-fragmentation-081a-print.html
+ FAIL => PASS      [1/1]   +1  css/css-break/flexbox/multi-line-row-flex-fragmentation-081b-print.html
+ FAIL => PASS      [1/1]   +1  css/css-break/flexbox/multi-line-row-flex-fragmentation-081c-print.html
+ FAIL => PASS      [1/1]   +1  css/css-break/flexbox/multi-line-row-flex-fragmentation-081d-print.html
+ FAIL => PASS      [1/1]   +1  css/css-break/flexbox/multi-line-row-flex-fragmentation-082a-print.html
+ FAIL => PASS      [1/1]   +1  css/css-break/flexbox/multi-line-row-flex-fragmentation-082b-print.html
+ FAIL => PASS      [1/1]   +1  css/css-break/flexbox/multi-line-row-flex-fragmentation-082c-print.html
+ FAIL => PASS      [1/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
+ FAIL => PASS      [1/1]   +1  css/css-break/widows-orphans-001.html
+ FAIL => PASS      [1/1]   +1  css/css-break/widows-orphans-002.html
+ FAIL => PASS      [1/1]   +1  css/css-break/widows-orphans-003.html
+ FAIL => PASS      [1/1]   +1  css/css-break/widows-orphans-004.html
- PASS => FAIL      [0/1]   -1  css/css-contain/contain-animation-001.html
+ FAIL => PASS      [1/1]   +1  css/css-contain/contain-content-004.html
+ FAIL => PASS      [1/1]   +1  css/css-contain/contain-layout-cell-002.html
- PASS => FAIL      [0/1]   -1  css/css-contain/contain-layout-independent-formatting-context-002.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
+ FAIL => PASS      [1/1]   +1  css/css-contain/contain-paint-023.html
- PASS => FAIL      [0/1]   -1  css/css-contain/contain-size-064.html
- PASS => FAIL      [0/1]   -1  css/css-contain/contain-size-flexbox-002.html
+ FAIL => PASS      [2/2]   +2  css/css-display/empty-text-baseline-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/flex-direction-row-reverse.html
+ FAIL => PASS      [1/1]   +1  css/css-flexbox/flexbox-align-self-horiz-001-block.xhtml
+ FAIL => PASS      [1/1]   +1  css/css-flexbox/flexbox-align-self-vert-003.xhtml
+ FAIL => PASS      [1/1]   +1  css/css-flexbox/flexbox-baseline-align-self-baseline-vert-001.html
+ FAIL => PASS      [1/1]   +1  css/css-flexbox/flexbox-baseline-multi-item-vert-001a.html
+ FAIL => PASS      [1/1]   +1  css/css-flexbox/flexbox-baseline-multi-item-vert-001b.html
+ FAIL => PASS      [1/1]   +1  css/css-flexbox/flexbox-baseline-multi-line-horiz-001.html
+ FAIL => PASS      [1/1]   +1  css/css-flexbox/flexbox-baseline-multi-line-horiz-002.html
- PASS => FAIL      [0/1]   -1  css/css-flexbox/flexbox-baseline-multi-line-vert-002.html
+ FAIL => PASS      [1/1]   +1  css/css-flexbox/flexbox-baseline-wrap-reverse-unequal-lines.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/flexbox-justify-content-horiz-002.xhtml
+ FAIL => PASS      [1/1]   +1  css/css-flexbox/flexbox-justify-content-horiz-004.xhtml
- PASS => FAIL      [0/1]   -1  css/css-flexbox/flexbox_first-line.html
+ FAIL => PASS      [1/1]   +1  css/css-flexbox/flexible-box-float.html
- PASS => FAIL      [0/1]   -1  css/css-flexbox/position-fixed-001.html
- PASS => FAIL      [0/1]   -1  css/css-fonts/first-available-font-003.html
- PASS => FAIL      [0/1]   -1  css/css-fonts/first-available-font-004.html
+ FAIL => PASS      [1/1]   +1  css/css-fonts/font-size-zero-2.html
+ FAIL => PASS      [1/1]   +1  css/css-fonts/font-variant-emoji-005.html
+ FAIL => PASS      [1/1]   +1  css/css-fonts/rcap-in-monospace.html
- PASS => FAIL      [0/1]   -1  css/css-fonts/ric-in-monospace.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 => FAIL      [7/9]   +1  css/css-grid/alignment/grid-align-baseline.html
- PASS => FAIL      [0/1]   -1  css/css-grid/alignment/grid-baseline-001.html
- PASS => FAIL      [0/1]   -1  css/css-grid/alignment/grid-baseline-002.html
+ FAIL => FAIL    [16/18]  +16  css/css-grid/alignment/grid-baseline-004.html
+ FAIL => FAIL     [3/11]   +3  css/css-grid/alignment/grid-container-baseline-001.html
- PASS => FAIL      [0/1]   -1  css/css-grid/alignment/grid-inline-baseline.html
+ FAIL => PASS      [1/1]   +1  css/css-grid/alignment/self-baseline/grid-self-baseline-horiz-001.html
+ FAIL => PASS      [1/1]   +1  css/css-grid/alignment/self-baseline/grid-self-baseline-horiz-003.html
+ FAIL => PASS      [1/1]   +1  css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-lr-001.html
+ FAIL => PASS      [1/1]   +1  css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-rl-001.html
- PASS => FAIL      [0/1]   -1  css/css-grid/grid-items/grid-inline-items-002.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-grid/grid-model/grid-margins-no-collapse-002.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-images/image-orientation/image-orientation-none-cross-origin.html
+ FAIL => PASS      [1/1]   +1  css/css-inline/baseline-shift/baseline-shift-bottom.html
+ FAIL => PASS      [1/1]   +1  css/css-inline/baseline-shift/baseline-shift-center.html
+ FAIL => PASS      [1/1]   +1  css/css-inline/baseline-shift/baseline-shift-top.html
+ FAIL => FAIL    [15/22]  +15  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/dominant-baseline/dominant-baseline-mixed-writing-modes-002.html
- PASS => FAIL      [0/1]   -1  css/css-lists/list-and-block-in-inline.html
+ FAIL => PASS      [1/1]   +1  css/css-multicol/multicol-width-negative-001.xht
+ FAIL => PASS      [1/1]   +1  css/css-overflow/text-overflow-023.html
+ FAIL => PASS      [1/1]   +1  css/css-page/monolithic-overflow-014-print.html
- PASS => FAIL      [0/1]   -1  css/css-page/page-name-propagated-007-print.html
- PASS => FAIL      [0/1]   -1  css/css-page/page-name-siblings-002-print.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
- PASS => FAIL      [0/1]   -1  css/css-sizing/intrinsic-percent-replaced-008.html
- PASS => FAIL      [0/1]   -1  css/css-sizing/intrinsic-percent-replaced-dynamic-008.html
- PASS => FAIL      [0/1]   -1  css/css-sizing/min-content-le-max-content.tentative.html
+ FAIL => FAIL     [7/15]   +5  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-decor/text-emphasis-style-none-001.xht
- 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/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/line-breaking/line-breaking-atomic-009.html
- PASS => FAIL      [0/1]   -1  css/css-text/overflow-wrap/overflow-wrap-cluster-001.html
- PASS => FAIL      [0/1]   -1  css/css-text/overflow-wrap/overflow-wrap-cluster-002.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-join-003.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
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-001.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-010.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-before-first-ideographic-char-001.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-before-first-ideographic-char-002.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-before-first-ideographic-char-003.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-before-first-ideographic-char-004.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-before-first-ideographic-char-005.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-before-first-ideographic-char-006.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-before-first-ideographic-char-012.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-before-first-ideographic-char-013.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-before-first-ideographic-char-014.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-before-first-ideographic-char-015.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-before-first-ideographic-char-018.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-with-ideographic-space-002.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-with-ideographic-space-003.html
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/break-spaces-with-ideographic-space-008.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-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-008.html
+ FAIL => PASS      [1/1]   +1  css/css-text/white-space/pre-wrap-009.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-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
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/trailing-other-space-separators-break-spaces-015.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
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/white-space-intrinsic-size-001.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-018.html
+ FAIL => PASS      [1/1]   +1  css/css-text/white-space/white-space-intrinsic-size-019.html
+ FAIL => FAIL  [144/192]  +14  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-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
- PASS => FAIL      [0/1]   -1  css/css-text/white-space/white-space-zero-fontsize-001.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-018.html
+ FAIL => PASS      [1/1]   +1  css/css-text/word-break/word-break-break-all-021.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-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 => FAIL     [7/33]   +5  css/css-values/calc-size/calc-size-flex-basis-on-column.html
+ FAIL => PASS      [1/1]   +1  css/css-values/ch-unit-001.html
- FAIL => FAIL      [2/8]   -2  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
- PASS => FAIL      [0/1]   -1  css/css-viewport/zoom/vertical-align.html
- PASS => FAIL      [0/1]   -1  css/css-writing-modes/abs-pos-with-replaced-child.html
+ FAIL => PASS      [1/1]   +1  css/css-writing-modes/baseline-with-orthogonal-flow-001.html
+ FAIL => PASS      [1/1]   +1  css/css-writing-modes/text-combine-upright-decorations-001.html
+ FAIL => PASS      [1/1]   +1  css/css-writing-modes/text-combine-upright-shadow.html
+ FAIL => FAIL     [5/11]   +2  css/cssom-view/elementFromPoint.html
+ FAIL => FAIL      [5/9]   +2  css/cssom-view/elementsFromPoint.html
+ FAIL => PASS      [1/1]   +1  css/filter-effects/effect-reference-after-001.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-021.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-022.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-024.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-025.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-026.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-027.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-028.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-029.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-030.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-031.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-032.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-034.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-035.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-036.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-041.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-042.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-044.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-045.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-046.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-047.html
+ FAIL => PASS      [1/1]   +1  css/selectors/i18n/css3-selectors-lang-048.html
# ... and 7 more (see the workflow logs)

Generated by the WPT workflow.

@staging-devin-ai-integration

Copy link
Copy Markdown
Contributor

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR that start with 'DevinAI' or '@devin'.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

@staging-devin-ai-integration
staging-devin-ai-integration Bot force-pushed the devin/1788386630-vertical-align branch from e96d37d to 8db3deb Compare September 8, 2026 14:37
@staging-devin-ai-integration
staging-devin-ai-integration Bot force-pushed the devin/1788397525-vertical-align-fixes branch 5 times, most recently from 6daf4dc to 87a1e04 Compare September 9, 2026 16:24
@staging-devin-ai-integration
staging-devin-ai-integration Bot force-pushed the devin/1788386630-vertical-align branch from 1d54d87 to 69a9265 Compare September 10, 2026 20:45
@staging-devin-ai-integration
staging-devin-ai-integration Bot force-pushed the devin/1788397525-vertical-align-fixes branch from 87a1e04 to ba8dd10 Compare September 10, 2026 20:46
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.
@staging-devin-ai-integration
staging-devin-ai-integration Bot force-pushed the devin/1788397525-vertical-align-fixes branch from ba8dd10 to c3e984a Compare September 10, 2026 21:12
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