LibWeb/CSS: Reimplement var()/attr() as arbitrary substitution functions

"Arbitrary substitution functions" are a family of functions that
includes var() and attr(). All of them resolve to an arbitrary set of
component values that are not known at parse-time, so they have to be
substituted at computed-value time.

Besides it being nice to follow the spec closely, this means we'll be
able to implement the others (such as `if()` and `inherit()`) more
easily.

The main omission here is the new "spread syntax", which can be
implemented in the future.
This commit is contained in:
Sam Atkins 2025-06-19 17:03:26 +01:00 committed by Tim Ledbetter
commit b6032b0fcd
Notes: github-actions[bot] 2025-07-09 15:45:46 +00:00
11 changed files with 480 additions and 346 deletions

View file

@ -2,19 +2,19 @@ Harness status: OK
Found 30 tests
4 Pass
26 Fail
9 Pass
21 Fail
Pass `initial` as a value for an unregistered custom property
Fail `inherit` as a value for an unregistered custom property
Fail `unset` as a value for an unregistered custom property
Pass `inherit` as a value for an unregistered custom property
Pass `unset` as a value for an unregistered custom property
Fail `revert` as a value for an unregistered custom property
Pass `revert-layer` as a value for an unregistered custom property
Fail `initial` as a value for a non-inheriting registered custom property
Fail `initial` as a value for an inheriting registered custom property
Fail `inherit` as a value for a non-inheriting registered custom property
Fail `inherit` as a value for an inheriting registered custom property
Pass `inherit` as a value for a non-inheriting registered custom property
Pass `inherit` as a value for an inheriting registered custom property
Fail `unset` as a value for a non-inheriting registered custom property
Fail `unset` as a value for an inheriting registered custom property
Pass `unset` as a value for an inheriting registered custom property
Fail `revert` as a value for a non-inheriting registered custom property
Fail `revert` as a value for an inheriting registered custom property
Pass `revert-layer` as a value for a non-inheriting registered custom property

View file

@ -2,16 +2,15 @@ Harness status: OK
Found 11 tests
4 Pass
7 Fail
11 Pass
Pass Self-cycle
Pass Simple a/b cycle
Pass Three-var cycle
Fail Cycle that starts in the middle of a chain
Fail Cycle with extra edge
Fail Cycle with extra edge (2)
Fail Cycle with extra edge (3)
Fail Cycle with secondary cycle
Fail Cycle with overlapping secondary cycle
Fail Cycle with deeper secondary cycle
Pass Cycle that starts in the middle of a chain
Pass Cycle with extra edge
Pass Cycle with extra edge (2)
Pass Cycle with extra edge (3)
Pass Cycle with secondary cycle
Pass Cycle with overlapping secondary cycle
Pass Cycle with deeper secondary cycle
Pass Cycle in unused fallback