mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-10-16 21:20:18 +00:00
LibWeb: Parse the position-visibility
value
This commit is contained in:
parent
47966ed589
commit
85a15ea1d4
Notes:
github-actions[bot]
2025-10-07 10:31:32 +00:00
Author: https://github.com/tcl3
Commit: 85a15ea1d4
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6363
Reviewed-by: https://github.com/AtkinsSJ ✅
11 changed files with 218 additions and 0 deletions
|
@ -752,6 +752,10 @@ Parser::ParseErrorOr<NonnullRefPtr<StyleValue const>> Parser::parse_css_value(Pr
|
|||
if (auto parsed_value = parse_position_try_fallbacks_value(tokens); parsed_value && !tokens.has_next_token())
|
||||
return parsed_value.release_nonnull();
|
||||
return ParseError::SyntaxError;
|
||||
case PropertyID::PositionVisibility:
|
||||
if (auto parsed_value = parse_position_visibility_value(tokens); parsed_value && !tokens.has_next_token())
|
||||
return parsed_value.release_nonnull();
|
||||
return ParseError::SyntaxError;
|
||||
case PropertyID::Quotes:
|
||||
if (auto parsed_value = parse_quotes_value(tokens); parsed_value && !tokens.has_next_token())
|
||||
return parsed_value.release_nonnull();
|
||||
|
@ -4524,6 +4528,60 @@ RefPtr<StyleValue const> Parser::parse_position_area_value(TokenStream<Component
|
|||
return parse_position_area(tokens);
|
||||
}
|
||||
|
||||
// https://drafts.csswg.org/css-anchor-position/#position-visibility
|
||||
RefPtr<StyleValue const> Parser::parse_position_visibility_value(TokenStream<ComponentValue>& tokens)
|
||||
{
|
||||
// always | [ anchors-valid || anchors-visible || no-overflow ]
|
||||
if (auto always = parse_all_as_single_keyword_value(tokens, Keyword::Always))
|
||||
return always;
|
||||
|
||||
RefPtr<StyleValue const> anchors_valid_value;
|
||||
RefPtr<StyleValue const> anchors_visible_value;
|
||||
RefPtr<StyleValue const> no_overflow_value;
|
||||
StyleValueVector values;
|
||||
auto transaction = tokens.begin_transaction();
|
||||
tokens.discard_whitespace();
|
||||
while (tokens.has_next_token()) {
|
||||
auto keyword_value = parse_keyword_value(tokens);
|
||||
if (!keyword_value)
|
||||
return nullptr;
|
||||
|
||||
switch (keyword_value->to_keyword()) {
|
||||
case Keyword::AnchorsValid:
|
||||
if (anchors_valid_value)
|
||||
return nullptr;
|
||||
anchors_valid_value = keyword_value.release_nonnull();
|
||||
break;
|
||||
case Keyword::AnchorsVisible:
|
||||
if (anchors_visible_value)
|
||||
return nullptr;
|
||||
anchors_visible_value = keyword_value.release_nonnull();
|
||||
break;
|
||||
case Keyword::NoOverflow:
|
||||
if (no_overflow_value)
|
||||
return nullptr;
|
||||
no_overflow_value = keyword_value.release_nonnull();
|
||||
break;
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
tokens.discard_whitespace();
|
||||
}
|
||||
|
||||
if (anchors_valid_value)
|
||||
values.append(anchors_valid_value.release_nonnull());
|
||||
if (anchors_visible_value)
|
||||
values.append(anchors_visible_value.release_nonnull());
|
||||
if (no_overflow_value)
|
||||
values.append(no_overflow_value.release_nonnull());
|
||||
|
||||
if (values.is_empty())
|
||||
return nullptr;
|
||||
|
||||
transaction.commit();
|
||||
return StyleValueList::create(move(values), StyleValueList::Separator::Space);
|
||||
}
|
||||
|
||||
RefPtr<StyleValue const> Parser::parse_quotes_value(TokenStream<ComponentValue>& tokens)
|
||||
{
|
||||
// https://www.w3.org/TR/css-content-3/#quotes-property
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue