LibWeb: Support top-level tree counting functions

Adds support for `sibling-index()` and `sibling-count()` when parsing
`<number>` and `<integer>`. This is achieved by a new
`TreeCountingFunctionStyleValue` class which is converted within
`absolutized` to `NumberStyleValue` and `IntegerStyleValue` respectively

There are still a few kinks to work out in order to support these
everywhere, namely:
 - There are some `StyleValue`s which aren't absolutized (i.e. those
   which are stored within another `StyleValue` without an
   `absolutize()` method.
 - We don't have a way to represent this new `StyleValue` within
   `{Number,Integer}OrCalculated`. This would be fixed if we were to
   instead just use the `StyleValue` classes until style computation at
   which time they would be absolutized into their respective
   primitives (double, i64, etc) bypassing the need for *OrCalculated
   entirely.
This commit is contained in:
Callum Law
2025-10-01 20:02:33 +13:00
committed by Tim Ledbetter
parent 9cd23e3ae5
commit 831e471444
Notes: github-actions[bot] 2025-10-20 15:13:44 +00:00
17 changed files with 184 additions and 32 deletions

View File

@@ -2,8 +2,7 @@ Harness status: OK
Found 22 tests
21 Pass
1 Fail
22 Pass
Pass e.style['animation-timing-function'] = "linear" should set the property value
Pass e.style['animation-timing-function'] = "ease" should set the property value
Pass e.style['animation-timing-function'] = "ease-in" should set the property value
@@ -13,7 +12,7 @@ Pass e.style['animation-timing-function'] = "cubic-bezier(0.1, 0.2, 0.8, 0.9)" s
Pass e.style['animation-timing-function'] = "cubic-bezier(0, -2, 1, 3)" should set the property value
Pass e.style['animation-timing-function'] = "cubic-bezier(0, 0.7, 1, 1.3)" should set the property value
Pass e.style['animation-timing-function'] = "cubic-bezier(calc(-2), calc(0.7 / 2), calc(1.5), calc(0))" should set the property value
Fail e.style['animation-timing-function'] = "cubic-bezier(0, sibling-index(), 1, sign(2em - 20px))" should set the property value
Pass e.style['animation-timing-function'] = "cubic-bezier(0, sibling-index(), 1, sign(2em - 20px))" should set the property value
Pass e.style['animation-timing-function'] = "steps(4, start)" should set the property value
Pass e.style['animation-timing-function'] = "steps(2, end)" should set the property value
Pass e.style['animation-timing-function'] = "steps( 2, end )" should set the property value