summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb
AgeCommit message (Collapse)Author
2021-07-11LibWeb: Correct parsing invalid list of declarationsSam Atkins
We were only discarding at most one token when a declaration is invalid, when we should discard all until we see a ; or EOF.
2021-07-11LibWeb: Correct escape handling in CSS TokenizerSam Atkins
Calling is_valid_escape_sequence() with no arguments hides what it is operating on, so I have removed that, so that you must explicitly tell it what you are testing. The call from consume_a_token() was using the wrong tokens, so it returned false incorrectly. This was resulting in corrupted output when faced with this code from Acid2. (Abbreviated) ```css .parser { error: \}; } .parser { } ```
2021-07-11LibWeb: Add more logging to CSS parserSam Atkins
2021-07-11LibWeb: Implement CSS::Parse::parse_nth_child_pattern()Sam Atkins
This is a modified copy of the code from Selector.cpp, to work on a TokenStream instead of a String.
2021-07-11LibWeb: Convert StyleFunctionRule.m_values to ComponentValuesSam Atkins
The input is ComponentValues, and the output is too, so storing as a String in the middle was inefficient and unnecessary.
2021-07-11LibWeb: Increase clarity with CSS token debug loggingSam Atkins
Had to adjust some places that were using Token.to_string() for non-debug-logging purposes. Changed its name to to_debug_string() to make the usage clearer.
2021-07-11LibWeb: Fix CSS attribute and ID selector parsingSam Atkins
There were several crashes here from out-of-bounds memory access.
2021-07-11LibWeb: Remove non-compliant whitespace stripping in CSS ParserSam Atkins
2021-07-11LibWeb: Fix whitespace handling in CSS selectorsSam Atkins
Whitespace marks the end of a compound-selector, no matter where it occurs. `check_for_eof_or_whitespace()` reconsumes the whitespace token for convenience.
2021-07-11LibWeb: Implement remaining CSS parse_as...() entry pointsSam Atkins
2021-07-11LibWeb: Enabling @import in new CSS parserSam Atkins
2021-07-11LibWeb: Implement CSS::parse_css_value()Sam Atkins
A lot of this is not spec-compliant and copied from the old parser. In future PRs, we can revise it.
2021-07-11LibWeb: Remove unnecessary CSS:: namespace from CSS Parser codeSam Atkins
It's feeling unwieldy having it everywhere.
2021-07-11LibWeb: Convert style declarations and at rules into CSSRulesSam Atkins
2021-07-11LibWeb: Add accessors to CSS::DeclarationOrAtRuleSam Atkins
2021-07-11LibWeb: Use TokenStream in CSS ParserSam Atkins
Each method can either be called with a TokenStream, or with no arguments to replicate the previous behaviour.
2021-07-11LibWeb: Add TokenStream class to CSS ParserSam Atkins
The entry points for CSS parsing in the spec are defined as accepting any of a stream of Tokens, or a stream of ComponentValues, or a String. TokenStream is an attempt to reduce the duplication of code for that.
2021-07-11LibWeb: Give CSS Token and StyleComponentValueRule matching is() funcsSam Atkins
The end goal here is to make the two classes mostly interchangeable, as the CSS spec requires that the various parser algorithms can take a stream of either class, and we want to have that functionality without needing to duplicate all of the code.
2021-07-11LibWeb: Rename CSS::Token::TokenType -> TypeSam Atkins
2021-07-11LibWeb: Add direct StyleComponentValueRule constructorsSam Atkins
Rather than passing a ComponentType, and then manually modifying the data fields, we now create them initialized. The constructor that takes a Token is intentionally left implicit, so that we can automatically convert when using the TokenStream later.
2021-07-11LibWeb: Merge CSS Parser's QualifiedStyleRule and AtStyleRuleSam Atkins
AtStyleRule being a subclass of QualifiedStyleRule was causing problems when trying to distinguish between them. Combining them and then distinguishing between them with a Type enum makes that check simpler, and is in line with how similar checks are done elsewhere in the parser.
2021-07-11LibWeb: Implement CSS selector parsing entry pointsSam Atkins
They're still using the same parsing code, so there's a lot of room for improvement, but it's good for now.
2021-07-11LibWeb: Add context to new CSS parser, and deprecate the old oneSam Atkins
The new one is the same as the old one, just in the new Parser's source files. This isn't the most elegant solution but it seemed like the best option. And it's all temporary, after all.
2021-07-11LibWeb: Bring CSS::Parser::parse_as_comma_separated_list...() to specSam Atkins
Previous implementation was returning everything in a single Vector, when what we really want is a Vector of Vectors, one for each comma- separated part of the list.
2021-07-11LibWeb: Use EOF code point instead of Optional in CSS TokenizerSam Atkins
Optional seems like a good idea, but in many places we were not checking if it had a value, which was causing crashes when the Tokenizer was given malformed input. Using an EOF value along with is_eof() makes things a lot simpler.
2021-07-11LibWeb: Convert CSS::Parser methods to return desired typesSam Atkins
This is very much stubbed out for now. Most notably is Parser::convert_rule() where most of the conversion will happen from the parser's internal rule classes to CSSRule and its children.
2021-07-11LibWeb: Remove broken CSS:Parser::is_combinator()Sam Atkins
A single DELIM token is only one character long, so the check for a "||" DELIM didn't work. We now just do the check inline.
2021-07-11LibWeb: Fix greedy CSS Tokenizer whitespace parsingSam Atkins
Whitespace parsing was too greedy, consuming the first non- whitespace character after it.
2021-07-11LibWeb: Fix Off-by-one error in CSS::Parser::next_token()Sam Atkins
2021-07-11LibWeb: Convert QualifiedStyleRule to a RefPtr type in new ParserSam Atkins
2021-07-11LibWeb: Add new CSS attribute match types to new parserSam Atkins
2021-07-11LibWeb: Add remaining CSS AttributeMatchTypesSam Atkins
This adds: - ContainsString [att*=val] - StartsWithSegment [att|=val] - StartsWithString [att^=val] - EndsWithString [att$=val] Renamed AttributeMatchType::Contains to ::ContainsWord for clarity.
2021-07-11LibWeb: Use StyleComponentValueRules for StyleBlockRule's valuesSam Atkins
Noticed while doing this that attribute selectors have two different ways of saying "starts with", and so AttributeMatchType::StartsWith needs a better name. But I'll change that when I add the missing types. These class names are a mouthful to fit in a commit message. :^)
2021-07-11LibWeb: Convert some CSS parser *Rule classes to using pointersSam Atkins
Previously these were all passed around by value, but some of them (StyleComponentValueRule and StyleBlockRule) want to include each other as fields, so this had to change.
2021-07-11LibWeb: Make CSS selector parsing use StyleComponentValueRulesSam Atkins
Also added some pseudo-classes that were handled in the deprecated parser: - :disabled - :enabled - :checked - :nth-child - :nth-last-child - :not
2021-07-11LibWeb: Add convenience methods to CSS::Parser::TokenSam Atkins
Some of these will be removed later, when we move to using is() exclusively.
2021-07-11LibWeb: Make CSS::QualifiedStyleRule's prelude StyleComponentValueRuleSam Atkins
2021-07-11LibWeb: Fix syntax for Table testAdam Hodgen
The parser fixes this by inserting the <tr> tags, but for this test it's better to have perfect syntax - we're not testing the parser here.
2021-07-11LibWeb: Fix HTMLTable Element attributesAdam Hodgen
`Element::tag_name` return an uppercase version of the tag name. However the `Web::HTML::TagNames` values are all lowercase. This change fixes that using `Element::local_name`, which returns a lowercase value.
2021-07-10LibWeb: Avoid HashMap copy in BrowsingContext::set_frame_nesting_levelsAndreas Kling
2021-07-08Everywhere: Add break after the last case label before `default`Daniel Bertalan
We already do this in most places, so the style should be consistent. Also, Clang does not like it, as this could cause an unexpected compile error if some statements are added to the default label or a new label is added above it.
2021-07-08Everywhere: Forward declare structs as structsDaniel Bertalan
While structs being forward declared as classes is not strictly an issue, Clang complains as this is not portable code, since some ABIs treat classes declared as `class` and `struct` differently. It's easier to fix these than to reason about explicitly disabling another warning.
2021-07-08AK+Userland: Add generic `AK::abs()` function and use itDaniel Bertalan
Previously, in LibGFX's `Point` class, calculated distances were passed to the integer `abs` function, even if the stored type was a float. This caused the value to unexpectedly be truncated. Luckily, this API was not used with floating point types, but that can change in the future, so why not fix it now :^) Since we are in C++, we can use function overloading to make things easy, and to automatically use the right version. This is even better than the LibC/LibM functions, as using a bit of hackery, they are able to be constant-evaluated. They use compiler intrinsics, so they do not depend on external code and the compiler can emit the most optimized code by default. Since we aren't using the C++ standard library's trick of importing everything into the `AK` namespace, this `abs` function cannot be exported to the global namespace, as the names would clash.
2021-07-08Everywhere: Remove unused local variables and lambda capturesDaniel Bertalan
2021-07-08Everywhere: Mark debug-only functions `[[maybe_unused]]`Daniel Bertalan
These functions are only used from within `dbgln_if` calls, so in certain build configurations, they go unused. Similarly to variables, we now signal to the compiler that we understand that these are not always in use.
2021-07-07LibJS: Remove the NativeProperty mechanism from LibJSIdan Horowitz
These were an ad-hoc way to implement special behaviour when reading or writing to specific object properties. Because these were effectively replaced by the abillity to override the internal methods of Object, they are no longer needed.
2021-07-06LibJS: Remove the non-standard put helper and replace it's usagesIdan Horowitz
This removes all usages of the non-standard put helper method and replaces all of it's usages with the specification required alternative or with define_direct_property where appropriate.
2021-07-06LibJS: Remove the default length & attributes from define_native_*Idan Horowitz
These are usually incorrect, and people sometimes forget to add the correct values as a result of them being optional, so they should just be specified explicitly.
2021-07-06LibJS: Add define_direct_property and remove the define_property helperIdan Horowitz
This removes all usages of the non-standard define_property helper method and replaces all it's usages with the specification required alternative or with define_direct_property where appropriate.
2021-07-05LibWeb: Use is_nullish instead of is_null for nullable typesLuke
As according to: https://heycam.github.io/webidl/#es-nullable-type Both null and undefined are treated as IDL null, but we were only treating null as IDL null.