@@ -1377,6 +1377,43 @@ RefPtr<StyleValue const> Parser::parse_time_percentage_value(TokenStream<Compone
13771377 return nullptr ;
13781378}
13791379
1380+ // https://drafts.csswg.org/scroll-animations-1/#view-timeline-inset
1381+ RefPtr<StyleValue const > Parser::parse_view_timeline_inset_value (TokenStream<ComponentValue>& tokens)
1382+ {
1383+ // [ [ auto | <length-percentage> ]{1,2} ]
1384+ auto transaction = tokens.begin_transaction ();
1385+
1386+ StyleValueVector inset_values;
1387+
1388+ while (tokens.has_next_token () && inset_values.size () < 2 ) {
1389+ tokens.discard_whitespace ();
1390+
1391+ if (tokens.next_token ().is_ident (" auto" sv)) {
1392+ tokens.discard_a_token (); // auto
1393+ inset_values.append (KeywordStyleValue::create (Keyword::Auto));
1394+ continue ;
1395+ }
1396+
1397+ if (auto length_percentage = parse_length_percentage_value (tokens)) {
1398+ inset_values.append (length_percentage.release_nonnull ());
1399+ continue ;
1400+ }
1401+
1402+ break ;
1403+ }
1404+
1405+ if (inset_values.is_empty ())
1406+ return nullptr ;
1407+
1408+ transaction.commit ();
1409+
1410+ // If the second value is omitted, it is set to the first.
1411+ if (inset_values.size () == 1 )
1412+ return StyleValueList::create ({ inset_values[0 ], inset_values[0 ] }, StyleValueList::Separator::Space);
1413+
1414+ return StyleValueList::create (move (inset_values), StyleValueList::Separator::Space);
1415+ }
1416+
13801417RefPtr<StyleValue const > Parser::parse_keyword_value (TokenStream<ComponentValue>& tokens)
13811418{
13821419 tokens.discard_whitespace ();
@@ -5049,6 +5086,8 @@ RefPtr<StyleValue const> Parser::parse_value(ValueType value_type, TokenStream<C
50495086 return parse_transform_list_value (tokens);
50505087 case ValueType::Url:
50515088 return parse_url_value (tokens);
5089+ case ValueType::ViewTimelineInset:
5090+ return parse_view_timeline_inset_value (tokens);
50525091 }
50535092 VERIFY_NOT_REACHED ();
50545093}
0 commit comments