Commit graph

1058 commits

Author SHA1 Message Date
Andrew Kaster
f1d47ea618 LibWeb+AudioServer: Remove unused spaceship operators
We aren't actually using these for anything, and the spaceship operator
requires ``<compare>`` from the STL, which we'd rather not include.
2022-04-23 10:43:32 -07:00
Sam Atkins
9272c3283b LibWeb: Add missing StyleValue::equals() methods
Every StyleValue type now has its own `equals()` method, rather than
relying on the default "compare the to_string() output" method, which
has now been removed. This logic is still used by UnresolvedSV and
CalculatedSV, because it's probably the best option for them unless
performance becomes a real issue.

Also took this opportunity to move all the `equals()` implementations
into the .cpp file, which may or may not actually help with compile
times but StyleValue.h is huge and included everywhere, so it can't
hurt.
2022-04-18 21:30:51 +02:00
Sam Atkins
ce5914230f LibWeb: Actually use BorderRadiusShorthandStyleValue
Somehow we were never actually using this before, but parsing the
property as a StyleValueList instead.
2022-04-18 21:30:51 +02:00
Sam Atkins
025ee02144 LibWeb: Add missing [as/is]_border_radius_shorthand() methods 2022-04-18 21:30:51 +02:00
Sam Atkins
d9afc2d6f2 LibWeb: Rename CombinedBorderRadiusSV -> BorderRadiusShorthandSV 2022-04-18 21:30:51 +02:00
Sam Atkins
00782d9a59 LibWeb: Disallow trailing commas in transform function arguments 2022-04-18 14:16:28 +02:00
Sam Atkins
b3a6044fd8 LibWeb: Disallow non-whitespace tokens after "none" in transform
Before this, a declaration like `transform: none yellow 20;` would be
parsed as `transform: none;`. Now it's correctly rejected as invalid.
2022-04-18 14:16:28 +02:00
Sam Atkins
a52f6fb5b0 LibWeb: Use TransformFunctionMetadata when parsing their arguments
Now, the parser will reject a transform function if:
- There are too many arguments.
- There are too few arguments.
- An argument is the wrong type.
2022-04-18 14:16:28 +02:00
Sam Atkins
61ad39b110 LibWeb: Use generated TransformFunction enum and functions 2022-04-18 14:16:28 +02:00
Sam Atkins
5f3498d50f LibWeb: Add code generator for CSS transform functions
This first step just generates the TransformFunction enum, but more will
follow.
2022-04-18 14:16:28 +02:00
Sam Atkins
7c91fda088 LibWeb: Allow multiple text-decoration-lines
The spec grammar for `text-decoration-line` is:

`none | [ underline || overline || line-through || blink ]`

Which means that it's either `none`, or any combination of the other
values. This patch makes that parse for `text-decoration-line` and
`text-decoration`, stores the results as a Vector, and adjusts
`paint_text_decoration()` to run as a loop over all the values that are
provided.

As noted, storing a Vector of values is a bit wasteful, as they could be
stored as flags in a single `u8`. But I was getting too confused trying
to do that in a nice way.
2022-04-14 21:54:10 +02:00
Sam Atkins
e941f07931 LibWeb: Make StyleProperties::property() always return a value
By the time that property() gets called, we've already given every
single property a value, so we can just return it. This simplifies a
lot of places that were manually handling a lack of value
unnecessarily.
2022-04-14 14:54:06 +02:00
Sam Atkins
a20188cd91 LibWeb: Use generated enum code for property value validation
This has the nice benefit of removing a lot of duplicated lists of
values from Properties.json. :^)
2022-04-14 14:54:06 +02:00
Sam Atkins
a797a92990 LibWeb: Stop including StyleValue.h in a few places
I don't know how much this will actually help compile times, but it's
something!
2022-04-14 14:54:06 +02:00
Sam Atkins
c50661067d LibWeb: Generate and use to_string(css_enum) functions
The only one that's actually used is for Repeat, but it's easy to
generate them so might as well. :^)
2022-04-14 14:54:06 +02:00
Sam Atkins
ae40e9a66c LibWeb: Use generated to_value_id() functions 2022-04-14 14:54:06 +02:00
Sam Atkins
3cc6cba4fe LibWeb: Use generated value_id_to_foo() functions 2022-04-14 14:54:06 +02:00
Sam Atkins
4d42885327 LibWeb: Return Optional from StyleProperties::box_sizing()
This function was written as if it returned `Optional<CSS::BoxSizing>`
but actually returned a plain `CSS::BoxSizing`, meaning if the property
was not set or was invalid, it would return whichever enum value was
first. This wasn't visible because we don't yet pay any attention to
the `box-sizing` property.
2022-04-14 14:54:06 +02:00
Sam Atkins
823d67bfc1 LibWeb: Use the generated enums instead of defining them in StyleValue.h
The remaining enums here are special cases that don't directly
correspond to a list of identifiers. But the majority can go. :^)
2022-04-14 14:54:06 +02:00
Sam Atkins
a97944e483 LibWeb: Add a new code generator for CSS enums
Alias values are represented by "alias-name=real-name".

We have a lot of repetitive code for converting between ValueID and
property-specific enums. Let's see if we can generate it. :^)

This first step just produces the enums, from a JSON file. The values in
there are a duplication of what's in Properties.json, but eventually
those will go away.
2022-04-14 14:54:06 +02:00
Andreas Kling
de5de4d99a LibWeb: Fix typo in CSS::Display::is_outside_and_inside() name 2022-04-13 16:40:46 +02:00
Sam Atkins
431a9938a8 LibWeb: Rename StyleRule -> Rule
This name is what's used in the spec, and is a little less confusing.
2022-04-12 23:03:46 +02:00
Sam Atkins
cf24dc2e0c LibWeb: Break friendship between CSS StyleRule and Parser
As before, this requires deviating from the spec slightly to create the
StyleRule fully-formed instead of creating it empty and then modifying
its internals.
2022-04-12 23:03:46 +02:00
Sam Atkins
4bdfc2bb32 LibWeb: Make StyleRule.m_at_rule_name a FlyString 2022-04-12 23:03:46 +02:00
Sam Atkins
d67e817d8e LibWeb: Break friendship between CSS Function and Parser
Again, this means deviating from the spec by creating a complete
Function in one go instead of creating it empty and then poking at its
internals.
2022-04-12 23:03:46 +02:00
Sam Atkins
7d67e428a6 LibWeb: Make Function.m_name a FlyString 2022-04-12 23:03:46 +02:00
Sam Atkins
128d08ecef LibWeb: Empend instead of Appending DeclarationOrAtRules 2022-04-12 23:03:46 +02:00
Sam Atkins
782cdd6b91 LibWeb: Break friendship between CSS DeclarationOrAtRule and Parser
This actually wasn't needed for anything, hooray!
2022-04-12 23:03:46 +02:00
Sam Atkins
269810b954 LibWeb: Break friendship between CSS Declaration and Parser
This means deviating slightly from the spec in order to construct a
fully-initialized Declaration instead of creating an empty one and then
poking at its internals.

DeclarationOrAtRule should probably use a Variant, but for now, making
its Declaration member optional is quick and easy.
2022-04-12 23:03:46 +02:00
Sam Atkins
69496f4afd LibWeb: Make Declaration.m_name a FlyString 2022-04-12 23:03:46 +02:00
Sam Atkins
f235da27d9 LibWeb: Break friendship between CSS Block and Parser
This means deviating a little from the spec, so that we create a
complete Block in one go instead of creating an empty one and then
poking at its internals.
2022-04-12 23:03:46 +02:00
Sam Atkins
7128e8e2e6 LibWeb: Break friendship between CSS Number and Tokenizer 2022-04-12 23:03:46 +02:00
Sam Atkins
bf786d66b1 LibWeb: Move Token and Tokenizer into Parser namespace 2022-04-12 23:03:46 +02:00
Sam Atkins
7272997b1b LibWeb: Move StyleRule to Parser namespace 2022-04-12 23:03:46 +02:00
Sam Atkins
add6babef4 LibWeb: Move Declaration and DeclarationOrAtRule into Parser namespace 2022-04-12 23:03:46 +02:00
Sam Atkins
5f316cffba LibWeb: Rename StyleRules.cpp -> StyleRule.cpp and tidy up
`append_with_to_string()` is no longer needed now that ComponentValue
has a Formatter.
2022-04-12 23:03:46 +02:00
Sam Atkins
ba7149a27d LibWeb: Move DeclarationOrAtRule code into DeclarationOrAtRule.cpp 2022-04-12 23:03:46 +02:00
Sam Atkins
92320f3000 LibWeb: Add missing include to ComponentValue.h 2022-04-12 23:03:46 +02:00
Sam Atkins
6848a0ef05 LibWeb: Move Declaration code into Declaration.cpp 2022-04-12 23:03:46 +02:00
Sam Atkins
3e49036edf LibWeb: Move/rename StyleBlockRule to Parser::Block 2022-04-12 23:03:46 +02:00
Sam Atkins
624df40e20 LibWeb: Move StyleBlockRule code into StyleBlockRule.cpp 2022-04-12 23:03:46 +02:00
Sam Atkins
e0b2ebcc7b LibWeb: Move/rename StyleFunctionRule to Parser::Function 2022-04-12 23:03:46 +02:00
Sam Atkins
084780a0a2 LibWeb: Move StyleFunctionRule code into StyleFunctionRule.cpp 2022-04-12 23:03:46 +02:00
Sam Atkins
d2b8686ae4 LibWeb: Add Formatter for ComponentValues 2022-04-12 23:03:46 +02:00
Sam Atkins
fff2c35f51 LibWeb: Move ComponentValue to CSS::Parser namespace 2022-04-12 23:03:46 +02:00
Sam Atkins
c449cabae3 LibWeb: Move CSS Parser into new Web::CSS::Parser namespace
The goal here is to move the parser-internal classes into this namespace
so they can have more convenient names without causing collisions. The
Parser itself won't collide, and would be more convenient to just
remain `CSS::Parser`, but having a namespace and a class with the same
name makes C++ unhappy.
2022-04-12 23:03:46 +02:00
Sam Atkins
1304bf5a21 LibWeb: Stop manually forward-declaring types in CSS Parser.h 2022-04-12 23:03:46 +02:00
Sam Atkins
b7453eafbb LibWeb: Move ComponentValue code into ComponentValue.cpp 2022-04-12 23:03:46 +02:00
Andreas Kling
f4f850aaf2 LibWeb: Support CSSRule.type
We already had the CSSRule::Type enum, but the values were not aligned
with the CSSOM spec. This patch takes care of that, and then exposes
the type of a CSSRule to JavaScript via the "type" attribute.
2022-04-11 21:10:08 +02:00
Andreas Kling
a0ba49a50a LibWeb: Support CSSStyleDeclaration.getPropertyPriority() 2022-04-11 21:10:07 +02:00