mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-28 11:49:44 +00:00
LibWeb: Plumbing for svg stroke-dasharray
This commit is contained in:
parent
c0e90a2a68
commit
94b97aa365
Notes:
github-actions[bot]
2024-11-21 17:57:47 +00:00
Author: https://github.com/nico
Commit: 94b97aa365
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/2472
Reviewed-by: https://github.com/AtkinsSJ ✅
Reviewed-by: https://github.com/gmta
10 changed files with 277 additions and 172 deletions
|
@ -5017,6 +5017,38 @@ RefPtr<CSSStyleValue> Parser::parse_rotate_value(TokenStream<ComponentValue>& to
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
RefPtr<CSSStyleValue> Parser::parse_stroke_dasharray_value(TokenStream<ComponentValue>& tokens)
|
||||
{
|
||||
// https://svgwg.org/svg2-draft/painting.html#StrokeDashing
|
||||
// Value: none | <dasharray>
|
||||
if (auto none = parse_all_as_single_keyword_value(tokens, Keyword::None))
|
||||
return none;
|
||||
|
||||
// https://svgwg.org/svg2-draft/painting.html#DataTypeDasharray
|
||||
// <dasharray> = [ [ <length-percentage> | <number> ]+ ]#
|
||||
Vector<ValueComparingNonnullRefPtr<CSSStyleValue const>> dashes;
|
||||
while (tokens.has_next_token()) {
|
||||
tokens.discard_whitespace();
|
||||
|
||||
// A <dasharray> is a list of comma and/or white space separated <number> or <length-percentage> values. A <number> value represents a value in user units.
|
||||
auto value = parse_number_value(tokens);
|
||||
if (value) {
|
||||
dashes.append(value.release_nonnull());
|
||||
} else {
|
||||
auto value = parse_length_percentage_value(tokens);
|
||||
if (!value)
|
||||
return {};
|
||||
dashes.append(value.release_nonnull());
|
||||
}
|
||||
|
||||
tokens.discard_whitespace();
|
||||
if (tokens.has_next_token() && tokens.next_token().is(Token::Type::Comma))
|
||||
tokens.discard_a_token();
|
||||
}
|
||||
|
||||
return StyleValueList::create(move(dashes), StyleValueList::Separator::Comma);
|
||||
}
|
||||
|
||||
RefPtr<CSSStyleValue> Parser::parse_content_value(TokenStream<ComponentValue>& tokens)
|
||||
{
|
||||
// FIXME: `content` accepts several kinds of function() type, which we don't handle in property_accepts_value() yet.
|
||||
|
@ -7885,6 +7917,10 @@ Parser::ParseErrorOr<NonnullRefPtr<CSSStyleValue>> Parser::parse_css_value(Prope
|
|||
if (auto parsed_value = parse_scrollbar_gutter_value(tokens); parsed_value && !tokens.has_next_token())
|
||||
return parsed_value.release_nonnull();
|
||||
return ParseError::SyntaxError;
|
||||
case PropertyID::StrokeDasharray:
|
||||
if (auto parsed_value = parse_stroke_dasharray_value(tokens); parsed_value && !tokens.has_next_token())
|
||||
return parsed_value.release_nonnull();
|
||||
return ParseError::SyntaxError;
|
||||
case PropertyID::TextDecoration:
|
||||
if (auto parsed_value = parse_text_decoration_value(tokens); parsed_value && !tokens.has_next_token())
|
||||
return parsed_value.release_nonnull();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue