ladybird/Userland/Libraries/LibWeb/CSS
Sam Atkins bcacc2357e LibWeb: Implement smarter CSS StyleValue parsing
We know what types and identifiers a property can accept, so we can use
that information to only parse things that can be accepted. This solves
some awkward ambiguity problems that we have now or will face in the
future, including:

- Is `0` a number or a length with no unit?
- Is `3.5` a number or a ratio?
- Is `bottom` an identifier, or a custom-ident?

Two CSS Parser methods are introduced here:

`parse_css_value_for_property()` attempts to parse a StyleValue that the
property can accept, skipping any types that it doesn't want.

`parse_css_value_for_properties()` does the same, but takes multiple
PropertyIDs and additionally returns which one the parsed StyleValue is
for. This is intended for parsing shorthands, so you can give it a list
of longhands you haven't yet parsed.

Subsequent commits will actually use these new methods.
2023-05-25 06:36:10 +02:00
..
Parser LibWeb: Implement smarter CSS StyleValue parsing 2023-05-25 06:36:10 +02:00
StyleValues LibWeb: Make CSSPixels and Length use 64-bit (double) floating point 2023-05-24 14:40:35 +02:00
SyntaxHighlighter LibGfx+Userland: Make TextAttributes::underline_style optional 2023-03-15 14:55:49 +01:00
Angle.cpp LibWeb: Remove CalculatedStyleValue from Angle 2023-03-30 21:29:50 +02:00
Angle.h LibWeb: Expose type and raw values of basic CSS types 2023-04-13 09:53:47 +02:00
BackdropFilter.h LibWeb: Split FilterValueListStyleValue out of StyleValue.{h,cpp} 2023-03-25 16:56:04 +00:00
CalculatedOr.cpp LibWeb: Introduce CalculatedOr type 2023-03-30 21:29:50 +02:00
CalculatedOr.h LibWeb: Split CalculatedStyleValue out of StyleValue.{h,cpp} 2023-03-30 21:29:50 +02:00
Clip.cpp LibWeb: Move CSS::EdgeRect into its own files 2023-03-30 21:29:50 +02:00
Clip.h LibWeb: Move CSS::EdgeRect into its own files 2023-03-30 21:29:50 +02:00
ComputedValues.h LibWeb: Make CSSPixels and Length use 64-bit (double) floating point 2023-05-24 14:40:35 +02:00
CSS.cpp LibWeb: Make property_id_from_string() return Optional 2023-05-25 06:36:10 +02:00
CSS.h LibWeb: Port the CSS namespace to IDL 2023-03-15 12:48:25 -04:00
CSS.idl LibWeb: Port the CSS namespace to IDL 2023-03-15 12:48:25 -04:00
CSSConditionRule.cpp
CSSConditionRule.h
CSSConditionRule.idl
CSSFontFaceRule.cpp LibWeb: Include weight and style in CSSFontFaceRule serialization 2023-05-24 20:58:46 +02:00
CSSFontFaceRule.h
CSSFontFaceRule.idl
CSSGroupingRule.cpp LibJS+LibWeb: Wrap raw JS::Cell*/& fields in GCPtr/NonnullGCPtr 2023-03-15 08:48:49 +01:00
CSSGroupingRule.h LibJS+LibWeb: Wrap raw JS::Cell*/& fields in GCPtr/NonnullGCPtr 2023-03-15 08:48:49 +01:00
CSSGroupingRule.idl
CSSImportRule.cpp LibWeb: Don't include CSS/StyleComputer.h from Element.h and Document.h 2023-05-08 09:29:44 +02:00
CSSImportRule.h LibWeb: Actually visit rules and media queries in imported style sheets 2023-03-30 16:54:15 +02:00
CSSImportRule.idl
CSSMediaRule.cpp LibJS+LibWeb: Wrap raw JS::Cell*/& fields in GCPtr/NonnullGCPtr 2023-03-15 08:48:49 +01:00
CSSMediaRule.h LibJS+LibWeb: Wrap raw JS::Cell*/& fields in GCPtr/NonnullGCPtr 2023-03-15 08:48:49 +01:00
CSSMediaRule.idl
CSSRule.cpp
CSSRule.h
CSSRule.idl
CSSRuleList.cpp LibWeb: Actually visit rules and media queries in imported style sheets 2023-03-30 16:54:15 +02:00
CSSRuleList.h LibJS+LibWeb: Wrap raw JS::Cell*/& fields in GCPtr/NonnullGCPtr 2023-03-15 08:48:49 +01:00
CSSRuleList.idl
CSSStyleDeclaration.cpp LibWeb: Make property_id_from_string() return Optional 2023-05-25 06:36:10 +02:00
CSSStyleDeclaration.h LibWeb+LibJS: Don't lazily construct web prototypes in cell constructors 2023-05-21 14:23:58 +02:00
CSSStyleDeclaration.idl LibIDL: Also parse extended attributes after 'optional' 2023-03-05 21:59:16 +00:00
CSSStyleRule.cpp LibJS+LibWeb: Wrap raw JS::Cell*/& fields in GCPtr/NonnullGCPtr 2023-03-15 08:48:49 +01:00
CSSStyleRule.h LibJS+LibWeb: Wrap raw JS::Cell*/& fields in GCPtr/NonnullGCPtr 2023-03-15 08:48:49 +01:00
CSSStyleRule.idl
CSSStyleSheet.cpp LibWeb: Don't include CSS/StyleComputer.h from Element.h and Document.h 2023-05-08 09:29:44 +02:00
CSSStyleSheet.h LibJS+LibWeb: Wrap raw JS::Cell*/& fields in GCPtr/NonnullGCPtr 2023-03-15 08:48:49 +01:00
CSSStyleSheet.idl
CSSSupportsRule.cpp LibWeb: Remove CSS::Parser::ParsingContext's default constructor 2023-03-07 11:51:12 +00:00
CSSSupportsRule.h Everywhere: Remove NonnullRefPtr.h includes 2023-03-06 23:46:35 +01:00
CSSSupportsRule.idl
Default.css LibWeb: Add scaleable checkboxes (with theme/accent-color support) 2023-03-23 08:27:51 +00:00
Display.cpp
Display.h LibWeb: Support multi-keyword syntax for CSS display property 2023-05-02 20:27:28 +02:00
EdgeRect.cpp LibWeb: Make CSSPixels and Length use 64-bit (double) floating point 2023-05-24 14:40:35 +02:00
EdgeRect.h LibWeb: Make CSSPixels and Length use 64-bit (double) floating point 2023-05-24 14:40:35 +02:00
ElementCSSInlineStyle.idl LibWeb: Move Element.prototype.style to ElementCSSInlineStyle mixin 2023-03-20 20:37:40 -04:00
Enums.json
FontFace.cpp LibWeb: Parse font-weight and font-style inside @font-face rules 2023-05-24 17:19:18 +02:00
FontFace.h LibWeb: Parse font-weight and font-style inside @font-face rules 2023-05-24 17:19:18 +02:00
Frequency.cpp LibWeb: Remove CalculatedStyleValue from Frequency 2023-03-30 21:29:50 +02:00
Frequency.h LibWeb: Expose type and raw values of basic CSS types 2023-04-13 09:53:47 +02:00
GeneralEnclosed.h
GridTrackPlacement.cpp
GridTrackPlacement.h
GridTrackSize.cpp LibWeb: Make CSSPixels and Length use 64-bit (double) floating point 2023-05-24 14:40:35 +02:00
GridTrackSize.h LibWeb: Make CSSPixels and Length use 64-bit (double) floating point 2023-05-24 14:40:35 +02:00
Identifiers.json LibWeb: Add missing inline-grid for display CSS property 2023-05-02 20:27:28 +02:00
Length.cpp LibWeb: Make CSSPixels and Length use 64-bit (double) floating point 2023-05-24 14:40:35 +02:00
Length.h LibWeb: Make CSSPixels and Length use 64-bit (double) floating point 2023-05-24 14:40:35 +02:00
LengthBox.cpp LibWeb: Move PercentageOr and subclasses into PercentageOr.{h,cpp} 2023-03-30 21:29:50 +02:00
LengthBox.h LibWeb: Move PercentageOr and subclasses into PercentageOr.{h,cpp} 2023-03-30 21:29:50 +02:00
LinkStyle.idl
MediaFeatures.json
MediaList.cpp LibWeb: Remove CSS::Parser::ParsingContext's default constructor 2023-03-07 11:51:12 +00:00
MediaList.h Everywhere: Remove NonnullRefPtr.h includes 2023-03-06 23:46:35 +01:00
MediaList.idl
MediaQuery.cpp LibWeb: Don't include CSS/StyleComputer.h from Element.h and Document.h 2023-05-08 09:29:44 +02:00
MediaQuery.h LibWeb: Move PercentageOr and subclasses into PercentageOr.{h,cpp} 2023-03-30 21:29:50 +02:00
MediaQueryList.cpp LibWeb: Port EventTarget to new {Fly}String 2023-04-09 17:27:27 +02:00
MediaQueryList.h Everywhere: Stop using NonnullRefPtrVector 2023-03-06 23:46:35 +01:00
MediaQueryList.idl
MediaQueryListEvent.cpp LibWeb: Port {Mouse,UI,Wheel,}Event to new String 2023-04-07 22:41:01 +02:00
MediaQueryListEvent.h LibWeb: Port MediaQueryListEvent to new String 2023-03-05 18:25:59 +00:00
MediaQueryListEvent.idl LibWeb: Port MediaQueryListEvent to new String 2023-03-05 18:25:59 +00:00
Number.h LibWeb: Expose type and raw values of basic CSS types 2023-04-13 09:53:47 +02:00
Percentage.h LibWeb: Move PercentageOr and subclasses into PercentageOr.{h,cpp} 2023-03-30 21:29:50 +02:00
PercentageOr.cpp LibWeb: Move PercentageOr and subclasses into PercentageOr.{h,cpp} 2023-03-30 21:29:50 +02:00
PercentageOr.h LibWeb: Make PercentageOr<T> equality comparison work for calc() values 2023-05-13 07:38:08 +02:00
Position.cpp LibWeb: Make CSSPixels and Length use 64-bit (double) floating point 2023-05-24 14:40:35 +02:00
Position.h LibWeb: Move PercentageOr and subclasses into PercentageOr.{h,cpp} 2023-03-30 21:29:50 +02:00
PreferredColorScheme.cpp Everywhere: Rename equals_ignoring_case => equals_ignoring_ascii_case 2023-03-10 13:15:44 +01:00
PreferredColorScheme.h
Properties.json LibWeb: Fill in some missing property data and bodge extra types 2023-05-25 06:36:10 +02:00
QuirksMode.css
Ratio.cpp
Ratio.h
Resolution.cpp LibWeb: Move PercentageOr and subclasses into PercentageOr.{h,cpp} 2023-03-30 21:29:50 +02:00
Resolution.h
ResolvedCSSStyleDeclaration.cpp LibWeb: Don't resolve CSS property values for unconnected elements 2023-05-10 17:27:07 +02:00
ResolvedCSSStyleDeclaration.h LibWeb: Propagate errors from ResolvedCSSStyleDeclaration 2023-05-06 08:07:28 +02:00
Screen.cpp
Screen.h
Screen.idl
Selector.cpp LibWeb: Implement the :defined pseudo class 2023-04-06 11:36:56 +02:00
Selector.h LibWeb: Implement the :defined pseudo class 2023-04-06 11:36:56 +02:00
SelectorEngine.cpp LibWeb: Implement the :defined pseudo class 2023-04-06 11:36:56 +02:00
SelectorEngine.h LibWeb: Support the :scope pseudo class 2023-03-21 10:45:19 +01:00
Serialize.cpp
Serialize.h
Size.cpp LibWeb: Add to_px() helpers to CSS::Size and CSS::PercentageOr<T> 2023-05-06 18:41:34 +02:00
Size.h LibWeb: Add to_px() helpers to CSS::Size and CSS::PercentageOr<T> 2023-05-06 18:41:34 +02:00
StyleComputer.cpp LibWeb: Honor font-weight and font-style when using downloaded fonts 2023-05-24 17:19:18 +02:00
StyleComputer.h LibWeb: Honor font-weight and font-style when using downloaded fonts 2023-05-24 17:19:18 +02:00
StyleProperties.cpp LibWeb/CSS: Implement parsing of grid-auto-columns and grid-auto-rows 2023-05-22 06:05:19 +02:00
StyleProperties.h LibWeb/CSS: Implement parsing of grid-auto-columns and grid-auto-rows 2023-05-22 06:05:19 +02:00
StyleProperty.cpp LibWeb: Don't include Layout/Node.h from DOM/Element.h 2023-05-08 09:29:44 +02:00
StyleProperty.h LibWeb: Don't include Layout/Node.h from DOM/Element.h 2023-05-08 09:29:44 +02:00
StyleSheet.cpp
StyleSheet.h LibJS+LibWeb: Wrap raw JS::Cell*/& fields in GCPtr/NonnullGCPtr 2023-03-15 08:48:49 +01:00
StyleSheet.idl
StyleSheetList.cpp LibWeb: Don't include CSS/StyleComputer.h from Element.h and Document.h 2023-05-08 09:29:44 +02:00
StyleSheetList.h LibJS+LibWeb: Wrap raw JS::Cell*/& fields in GCPtr/NonnullGCPtr 2023-03-15 08:48:49 +01:00
StyleSheetList.idl
StyleValue.cpp LibWeb: Stop aggressively quantizing font-weight values 2023-05-24 20:58:46 +02:00
StyleValue.h LibWeb: Remove "Invalid" StyleValue type 2023-05-25 06:36:10 +02:00
Supports.cpp LibWeb: Remove CSS::Parser::ParsingContext's default constructor 2023-03-07 11:51:12 +00:00
Supports.h LibWeb: Remove CSS::Parser::ParsingContext's default constructor 2023-03-07 11:51:12 +00:00
Time.cpp LibWeb: Remove CalculatedStyleValue from Time 2023-03-30 21:29:50 +02:00
Time.h LibWeb: Expose type and raw values of basic CSS types 2023-04-13 09:53:47 +02:00
TransformFunctions.json
UnicodeRange.h