mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:12:43 +00:00 
			
		
		
		
	AK: Make SourceGenerator::set() infallible
This commit is contained in:
		
							parent
							
								
									3d5728ef57
								
							
						
					
					
						commit
						8b936b5912
					
				
					 11 changed files with 141 additions and 142 deletions
				
			
		|  | @ -44,14 +44,13 @@ public: | ||||||
|         return SourceGenerator { m_builder, TRY(m_mapping.clone()), m_opening, m_closing }; |         return SourceGenerator { m_builder, TRY(m_mapping.clone()), m_opening, m_closing }; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     ErrorOr<void> set(StringView key, String value) |     void set(StringView key, String value) | ||||||
|     { |     { | ||||||
|         if (key.contains(m_opening) || key.contains(m_closing)) { |         if (key.contains(m_opening) || key.contains(m_closing)) { | ||||||
|             warnln("SourceGenerator keys cannot contain the opening/closing delimiters `{}` and `{}`. (Keys are only wrapped in these when using them, not when setting them.)", m_opening, m_closing); |             warnln("SourceGenerator keys cannot contain the opening/closing delimiters `{}` and `{}`. (Keys are only wrapped in these when using them, not when setting them.)", m_opening, m_closing); | ||||||
|             VERIFY_NOT_REACHED(); |             VERIFY_NOT_REACHED(); | ||||||
|         } |         } | ||||||
|         TRY(m_mapping.try_set(key, move(value))); |         m_mapping.set(key, move(value)); | ||||||
|         return {}; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     String get(StringView key) const |     String get(StringView key) const | ||||||
|  | @ -101,9 +100,9 @@ public: | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     template<size_t N> |     template<size_t N> | ||||||
|     ErrorOr<void> set(char const (&key)[N], String value) |     void set(char const (&key)[N], String value) | ||||||
|     { |     { | ||||||
|         return set(StringView { key, N - 1 }, value); |         set(StringView { key, N - 1 }, value); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     template<size_t N> |     template<size_t N> | ||||||
|  | @ -121,7 +120,7 @@ public: | ||||||
|     // FIXME: These are deprecated.
 |     // FIXME: These are deprecated.
 | ||||||
|     void set(StringView key, DeprecatedString value) |     void set(StringView key, DeprecatedString value) | ||||||
|     { |     { | ||||||
|         MUST(set(key, MUST(String::from_deprecated_string(value)))); |         set(key, MUST(String::from_deprecated_string(value))); | ||||||
|     } |     } | ||||||
|     template<size_t N> |     template<size_t N> | ||||||
|     void set(char const (&key)[N], DeprecatedString value) |     void set(char const (&key)[N], DeprecatedString value) | ||||||
|  |  | ||||||
|  | @ -891,8 +891,8 @@ static ErrorOr<void> generate_unicode_data_implementation(Core::InputBufferedFil | ||||||
|     generator.set("special_casing_size", DeprecatedString::number(unicode_data.special_casing.size())); |     generator.set("special_casing_size", DeprecatedString::number(unicode_data.special_casing.size())); | ||||||
|     generator.set("case_folding_size", DeprecatedString::number(unicode_data.case_folding.size())); |     generator.set("case_folding_size", DeprecatedString::number(unicode_data.case_folding.size())); | ||||||
| 
 | 
 | ||||||
|     TRY(generator.set("CODE_POINT_TABLES_LSB_COUNT", TRY(String::number(CODE_POINT_TABLES_LSB_COUNT)))); |     generator.set("CODE_POINT_TABLES_LSB_COUNT", TRY(String::number(CODE_POINT_TABLES_LSB_COUNT))); | ||||||
|     TRY(generator.set("CODE_POINT_TABLES_LSB_MASK", TRY(String::formatted("{:#x}", CODE_POINT_TABLES_LSB_MASK)))); |     generator.set("CODE_POINT_TABLES_LSB_MASK", TRY(String::formatted("{:#x}", CODE_POINT_TABLES_LSB_MASK))); | ||||||
| 
 | 
 | ||||||
|     generator.append(R"~~~( |     generator.append(R"~~~( | ||||||
| #include <AK/Array.h> | #include <AK/Array.h> | ||||||
|  | @ -1092,8 +1092,8 @@ static constexpr Array<@mapping_type@, @size@> s_@name@_mappings { { | ||||||
|     append_code_point_mappings("decomposition"sv, "CodePointDecompositionRaw"sv, unicode_data.code_points_with_decomposition_mapping, [](auto const& data) { return data.decomposition_mapping; }); |     append_code_point_mappings("decomposition"sv, "CodePointDecompositionRaw"sv, unicode_data.code_points_with_decomposition_mapping, [](auto const& data) { return data.decomposition_mapping; }); | ||||||
| 
 | 
 | ||||||
|     auto append_casing_table = [&](auto collection_snake, auto const& unique_properties) -> ErrorOr<void> { |     auto append_casing_table = [&](auto collection_snake, auto const& unique_properties) -> ErrorOr<void> { | ||||||
|         TRY(generator.set("name", TRY(String::formatted("{}_unique_properties", collection_snake)))); |         generator.set("name", TRY(String::formatted("{}_unique_properties", collection_snake))); | ||||||
|         TRY(generator.set("size", TRY(String::number(unique_properties.size())))); |         generator.set("size", TRY(String::number(unique_properties.size()))); | ||||||
| 
 | 
 | ||||||
|         auto optional_code_point_to_string = [](auto const& code_point) -> ErrorOr<String> { |         auto optional_code_point_to_string = [](auto const& code_point) -> ErrorOr<String> { | ||||||
|             if (!code_point.has_value()) |             if (!code_point.has_value()) | ||||||
|  | @ -1110,14 +1110,14 @@ static constexpr Array<@mapping_type@, @size@> s_@name@_mappings { { | ||||||
| static constexpr Array<CasingTable, @size@> @name@ { {)~~~"); | static constexpr Array<CasingTable, @size@> @name@ { {)~~~"); | ||||||
| 
 | 
 | ||||||
|         for (auto const& casing : unique_properties) { |         for (auto const& casing : unique_properties) { | ||||||
|             TRY(generator.set("canonical_combining_class", TRY(String::number(casing.canonical_combining_class)))); |             generator.set("canonical_combining_class", TRY(String::number(casing.canonical_combining_class))); | ||||||
|             TRY(generator.set("simple_uppercase_mapping", TRY(optional_code_point_to_string(casing.simple_uppercase_mapping)))); |             generator.set("simple_uppercase_mapping", TRY(optional_code_point_to_string(casing.simple_uppercase_mapping))); | ||||||
|             TRY(generator.set("simple_lowercase_mapping", TRY(optional_code_point_to_string(casing.simple_lowercase_mapping)))); |             generator.set("simple_lowercase_mapping", TRY(optional_code_point_to_string(casing.simple_lowercase_mapping))); | ||||||
|             TRY(generator.set("simple_titlecase_mapping", TRY(optional_code_point_to_string(casing.simple_titlecase_mapping)))); |             generator.set("simple_titlecase_mapping", TRY(optional_code_point_to_string(casing.simple_titlecase_mapping))); | ||||||
|             TRY(generator.set("special_casing_start_index", TRY(first_index_to_string(casing.special_casing_indices)))); |             generator.set("special_casing_start_index", TRY(first_index_to_string(casing.special_casing_indices))); | ||||||
|             TRY(generator.set("special_casing_size", TRY(String::number(casing.special_casing_indices.size())))); |             generator.set("special_casing_size", TRY(String::number(casing.special_casing_indices.size()))); | ||||||
|             TRY(generator.set("case_folding_start_index", TRY(first_index_to_string(casing.case_folding_indices)))); |             generator.set("case_folding_start_index", TRY(first_index_to_string(casing.case_folding_indices))); | ||||||
|             TRY(generator.set("case_folding_size", TRY(String::number(casing.case_folding_indices.size())))); |             generator.set("case_folding_size", TRY(String::number(casing.case_folding_indices.size()))); | ||||||
| 
 | 
 | ||||||
|             generator.append(R"~~~( |             generator.append(R"~~~( | ||||||
|     { @canonical_combining_class@, @simple_uppercase_mapping@, @simple_lowercase_mapping@, @simple_titlecase_mapping@, @special_casing_start_index@, @special_casing_size@, @case_folding_start_index@, @case_folding_size@ },)~~~"); |     { @canonical_combining_class@, @simple_uppercase_mapping@, @simple_lowercase_mapping@, @simple_titlecase_mapping@, @special_casing_start_index@, @special_casing_size@, @case_folding_start_index@, @case_folding_size@ },)~~~"); | ||||||
|  | @ -1131,9 +1131,9 @@ static constexpr Array<CasingTable, @size@> @name@ { {)~~~"); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     auto append_property_table = [&](auto collection_snake, auto const& unique_properties) -> ErrorOr<void> { |     auto append_property_table = [&](auto collection_snake, auto const& unique_properties) -> ErrorOr<void> { | ||||||
|         TRY(generator.set("name", TRY(String::formatted("{}_unique_properties", collection_snake)))); |         generator.set("name", TRY(String::formatted("{}_unique_properties", collection_snake))); | ||||||
|         TRY(generator.set("outer_size", TRY(String::number(unique_properties.size())))); |         generator.set("outer_size", TRY(String::number(unique_properties.size()))); | ||||||
|         TRY(generator.set("inner_size", TRY(String::number(unique_properties[0].size())))); |         generator.set("inner_size", TRY(String::number(unique_properties[0].size()))); | ||||||
| 
 | 
 | ||||||
|         generator.append(R"~~~( |         generator.append(R"~~~( | ||||||
| static constexpr Array<Array<bool, @inner_size@>, @outer_size@> @name@ { {)~~~"); | static constexpr Array<Array<bool, @inner_size@>, @outer_size@> @name@ { {)~~~"); | ||||||
|  | @ -1143,7 +1143,7 @@ static constexpr Array<Array<bool, @inner_size@>, @outer_size@> @name@ { {)~~~") | ||||||
|     { )~~~"); |     { )~~~"); | ||||||
| 
 | 
 | ||||||
|             for (auto value : property_set) { |             for (auto value : property_set) { | ||||||
|                 TRY(generator.set("value", TRY(String::formatted("{}", value)))); |                 generator.set("value", TRY(String::formatted("{}", value))); | ||||||
|                 generator.append("@value@, "); |                 generator.append("@value@, "); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  | @ -1159,8 +1159,8 @@ static constexpr Array<Array<bool, @inner_size@>, @outer_size@> @name@ { {)~~~") | ||||||
| 
 | 
 | ||||||
|     auto append_code_point_tables = [&](StringView collection_snake, auto const& tables, auto& append_unique_properties) -> ErrorOr<void> { |     auto append_code_point_tables = [&](StringView collection_snake, auto const& tables, auto& append_unique_properties) -> ErrorOr<void> { | ||||||
|         auto append_stage = [&](auto const& stage, auto name, auto type) -> ErrorOr<void> { |         auto append_stage = [&](auto const& stage, auto name, auto type) -> ErrorOr<void> { | ||||||
|             TRY(generator.set("name", TRY(String::formatted("{}_{}", collection_snake, name)))); |             generator.set("name", TRY(String::formatted("{}_{}", collection_snake, name))); | ||||||
|             TRY(generator.set("size", TRY(String::number(stage.size())))); |             generator.set("size", TRY(String::number(stage.size()))); | ||||||
|             generator.set("type", type); |             generator.set("type", type); | ||||||
| 
 | 
 | ||||||
|             generator.append(R"~~~( |             generator.append(R"~~~( | ||||||
|  | @ -1174,7 +1174,7 @@ static constexpr Array<@type@, @size@> @name@ { { | ||||||
|                 if (values_in_current_row++ > 0) |                 if (values_in_current_row++ > 0) | ||||||
|                     generator.append(", "); |                     generator.append(", "); | ||||||
| 
 | 
 | ||||||
|                 TRY(generator.set("value", TRY(String::number(value)))); |                 generator.set("value", TRY(String::number(value))); | ||||||
|                 generator.append("@value@"); |                 generator.append("@value@"); | ||||||
| 
 | 
 | ||||||
|                 if (values_in_current_row == max_values_per_row) { |                 if (values_in_current_row == max_values_per_row) { | ||||||
|  |  | ||||||
|  | @ -133,7 +133,7 @@ ErrorOr<void> generate_hash_table_member(SourceGenerator& generator, StringView | ||||||
|     member_generator.set("member_name"sv, member_name); |     member_generator.set("member_name"sv, member_name); | ||||||
|     member_generator.set("hash_table_name"sv, hash_table_name); |     member_generator.set("hash_table_name"sv, hash_table_name); | ||||||
|     member_generator.set("enum_class"sv, enum_class); |     member_generator.set("enum_class"sv, enum_class); | ||||||
|     TRY(member_generator.set("hash_table_size"sv, TRY(String::number(values.size())))); |     member_generator.set("hash_table_size"sv, TRY(String::number(values.size()))); | ||||||
| 
 | 
 | ||||||
|     if (values.size() == 0) { |     if (values.size() == 0) { | ||||||
|         member_generator.append(R"~~~( |         member_generator.append(R"~~~( | ||||||
|  |  | ||||||
|  | @ -58,7 +58,7 @@ namespace Web::CSS { | ||||||
|     TRY(generator.try_appendln("enum class EasingFunction {")); |     TRY(generator.try_appendln("enum class EasingFunction {")); | ||||||
|     TRY(easing_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { |     TRY(easing_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.try_appendln("    @name:titlecase@,")); |         TRY(member_generator.try_appendln("    @name:titlecase@,")); | ||||||
|         return {}; |         return {}; | ||||||
|     })); |     })); | ||||||
|  | @ -110,8 +110,8 @@ Optional<EasingFunction> easing_function_from_string(StringView name) | ||||||
| )~~~")); | )~~~")); | ||||||
|     TRY(easing_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { |     TRY(easing_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name", TRY(String::from_deprecated_string(name)))); |         member_generator.set("name", TRY(String::from_deprecated_string(name))); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     if (name.equals_ignoring_ascii_case("@name@"sv)) |     if (name.equals_ignoring_ascii_case("@name@"sv)) | ||||||
|         return EasingFunction::@name:titlecase@; |         return EasingFunction::@name:titlecase@; | ||||||
|  | @ -130,8 +130,8 @@ StringView to_string(EasingFunction easing_function) | ||||||
| )~~~")); | )~~~")); | ||||||
|     TRY(easing_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { |     TRY(easing_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name", TRY(String::from_deprecated_string(name)))); |         member_generator.set("name", TRY(String::from_deprecated_string(name))); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     case EasingFunction::@name:titlecase@: |     case EasingFunction::@name:titlecase@: | ||||||
|         return "@name@"sv; |         return "@name@"sv; | ||||||
|  | @ -154,7 +154,7 @@ EasingFunctionMetadata easing_function_metadata(EasingFunction easing_function) | ||||||
|         VERIFY(value.is_object()); |         VERIFY(value.is_object()); | ||||||
| 
 | 
 | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     case EasingFunction::@name:titlecase@: |     case EasingFunction::@name:titlecase@: | ||||||
|         return EasingFunctionMetadata { |         return EasingFunctionMetadata { | ||||||
|  |  | ||||||
|  | @ -59,19 +59,19 @@ enum class ValueID; | ||||||
|         auto& members = value.as_array(); |         auto& members = value.as_array(); | ||||||
| 
 | 
 | ||||||
|         auto enum_generator = TRY(generator.fork()); |         auto enum_generator = TRY(generator.fork()); | ||||||
|         TRY(enum_generator.set("name:titlecase", TRY(title_casify(name)))); |         enum_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(enum_generator.set("name:snakecase", TRY(snake_casify(name)))); |         enum_generator.set("name:snakecase", TRY(snake_casify(name))); | ||||||
| 
 | 
 | ||||||
|         // Find the smallest possible type to use.
 |         // Find the smallest possible type to use.
 | ||||||
|         auto member_max_value = members.size() - 1; |         auto member_max_value = members.size() - 1; | ||||||
|         if (NumericLimits<u8>::max() >= member_max_value) { |         if (NumericLimits<u8>::max() >= member_max_value) { | ||||||
|             TRY(enum_generator.set("enum_type", "u8"_string)); |             enum_generator.set("enum_type", "u8"_string); | ||||||
|         } else if (NumericLimits<u16>::max() >= member_max_value) { |         } else if (NumericLimits<u16>::max() >= member_max_value) { | ||||||
|             TRY(enum_generator.set("enum_type", "u16"_string)); |             enum_generator.set("enum_type", "u16"_string); | ||||||
|         } else if (NumericLimits<u32>::max() >= member_max_value) { |         } else if (NumericLimits<u32>::max() >= member_max_value) { | ||||||
|             TRY(enum_generator.set("enum_type", "u32"_string)); |             enum_generator.set("enum_type", "u32"_string); | ||||||
|         } else { |         } else { | ||||||
|             TRY(enum_generator.set("enum_type", "u64"_string)); |             enum_generator.set("enum_type", "u64"_string); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         TRY(enum_generator.try_appendln("enum class @name:titlecase@ : @enum_type@ {")); |         TRY(enum_generator.try_appendln("enum class @name:titlecase@ : @enum_type@ {")); | ||||||
|  | @ -82,7 +82,7 @@ enum class ValueID; | ||||||
|             if (member_name.contains('=')) |             if (member_name.contains('=')) | ||||||
|                 continue; |                 continue; | ||||||
|             auto member_generator = TRY(enum_generator.fork()); |             auto member_generator = TRY(enum_generator.fork()); | ||||||
|             TRY(member_generator.set("member:titlecase", TRY(title_casify(member_name)))); |             member_generator.set("member:titlecase", TRY(title_casify(member_name))); | ||||||
|             TRY(member_generator.try_appendln("    @member:titlecase@,")); |             TRY(member_generator.try_appendln("    @member:titlecase@,")); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | @ -117,8 +117,8 @@ namespace Web::CSS { | ||||||
|         auto& members = value.as_array(); |         auto& members = value.as_array(); | ||||||
| 
 | 
 | ||||||
|         auto enum_generator = TRY(generator.fork()); |         auto enum_generator = TRY(generator.fork()); | ||||||
|         TRY(enum_generator.set("name:titlecase", TRY(title_casify(name)))); |         enum_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(enum_generator.set("name:snakecase", TRY(snake_casify(name)))); |         enum_generator.set("name:snakecase", TRY(snake_casify(name))); | ||||||
| 
 | 
 | ||||||
|         TRY(enum_generator.try_append(R"~~~( |         TRY(enum_generator.try_append(R"~~~( | ||||||
| Optional<@name:titlecase@> value_id_to_@name:snakecase@(ValueID value_id) | Optional<@name:titlecase@> value_id_to_@name:snakecase@(ValueID value_id) | ||||||
|  | @ -130,11 +130,11 @@ Optional<@name:titlecase@> value_id_to_@name:snakecase@(ValueID value_id) | ||||||
|             auto member_name = member.to_deprecated_string(); |             auto member_name = member.to_deprecated_string(); | ||||||
|             if (member_name.contains('=')) { |             if (member_name.contains('=')) { | ||||||
|                 auto parts = member_name.split_view('='); |                 auto parts = member_name.split_view('='); | ||||||
|                 TRY(member_generator.set("valueid:titlecase", TRY(title_casify(parts[0])))); |                 member_generator.set("valueid:titlecase", TRY(title_casify(parts[0]))); | ||||||
|                 TRY(member_generator.set("member:titlecase", TRY(title_casify(parts[1])))); |                 member_generator.set("member:titlecase", TRY(title_casify(parts[1]))); | ||||||
|             } else { |             } else { | ||||||
|                 TRY(member_generator.set("valueid:titlecase", TRY(title_casify(member_name)))); |                 member_generator.set("valueid:titlecase", TRY(title_casify(member_name))); | ||||||
|                 TRY(member_generator.set("member:titlecase", TRY(title_casify(member_name)))); |                 member_generator.set("member:titlecase", TRY(title_casify(member_name))); | ||||||
|             } |             } | ||||||
|             TRY(member_generator.try_append(R"~~~( |             TRY(member_generator.try_append(R"~~~( | ||||||
|     case ValueID::@valueid:titlecase@: |     case ValueID::@valueid:titlecase@: | ||||||
|  | @ -158,7 +158,7 @@ ValueID to_value_id(@name:titlecase@ @name:snakecase@_value) | ||||||
|             auto member_name = member.to_deprecated_string(); |             auto member_name = member.to_deprecated_string(); | ||||||
|             if (member_name.contains('=')) |             if (member_name.contains('=')) | ||||||
|                 continue; |                 continue; | ||||||
|             TRY(member_generator.set("member:titlecase", TRY(title_casify(member_name)))); |             member_generator.set("member:titlecase", TRY(title_casify(member_name))); | ||||||
| 
 | 
 | ||||||
|             TRY(member_generator.try_append(R"~~~( |             TRY(member_generator.try_append(R"~~~( | ||||||
|     case @name:titlecase@::@member:titlecase@: |     case @name:titlecase@::@member:titlecase@: | ||||||
|  | @ -182,8 +182,8 @@ StringView to_string(@name:titlecase@ value) | ||||||
|             auto member_name = member.to_deprecated_string(); |             auto member_name = member.to_deprecated_string(); | ||||||
|             if (member_name.contains('=')) |             if (member_name.contains('=')) | ||||||
|                 continue; |                 continue; | ||||||
|             TRY(member_generator.set("member:css", TRY(String::from_deprecated_string(member_name)))); |             member_generator.set("member:css", TRY(String::from_deprecated_string(member_name))); | ||||||
|             TRY(member_generator.set("member:titlecase", TRY(title_casify(member_name)))); |             member_generator.set("member:titlecase", TRY(title_casify(member_name))); | ||||||
| 
 | 
 | ||||||
|             TRY(member_generator.try_append(R"~~~( |             TRY(member_generator.try_append(R"~~~( | ||||||
|     case @name:titlecase@::@member:titlecase@: |     case @name:titlecase@::@member:titlecase@: | ||||||
|  |  | ||||||
|  | @ -55,7 +55,7 @@ enum class MathFunction { | ||||||
| 
 | 
 | ||||||
|     TRY(functions_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { |     TRY(functions_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.try_appendln("    @name:titlecase@,"sv)); |         TRY(member_generator.try_appendln("    @name:titlecase@,"sv)); | ||||||
|         return {}; |         return {}; | ||||||
|     })); |     })); | ||||||
|  | @ -155,8 +155,8 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func | ||||||
|         auto& parameters = function_data.get_array("parameters"sv).value(); |         auto& parameters = function_data.get_array("parameters"sv).value(); | ||||||
| 
 | 
 | ||||||
|         auto function_generator = TRY(generator.fork()); |         auto function_generator = TRY(generator.fork()); | ||||||
|         TRY(function_generator.set("name:lowercase", TRY(String::from_deprecated_string(name)))); |         function_generator.set("name:lowercase", TRY(String::from_deprecated_string(name))); | ||||||
|         TRY(function_generator.set("name:titlecase", TRY(title_casify(name)))); |         function_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(function_generator.try_appendln("    if (function.name().equals_ignoring_ascii_case(\"@name:lowercase@\"sv)) {")); |         TRY(function_generator.try_appendln("    if (function.name().equals_ignoring_ascii_case(\"@name:lowercase@\"sv)) {")); | ||||||
|         if (function_data.get_bool("is-variadic"sv).value_or(false)) { |         if (function_data.get_bool("is-variadic"sv).value_or(false)) { | ||||||
|             // Variadic function
 |             // Variadic function
 | ||||||
|  | @ -184,7 +184,7 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func | ||||||
|             VERIFY(parameters.size() == 1); |             VERIFY(parameters.size() == 1); | ||||||
|             auto& parameter_data = parameters[0].as_object(); |             auto& parameter_data = parameters[0].as_object(); | ||||||
|             auto parameter_type_string = parameter_data.get_deprecated_string("type"sv).value(); |             auto parameter_type_string = parameter_data.get_deprecated_string("type"sv).value(); | ||||||
|             TRY(function_generator.set("type_check", TRY(generate_calculation_type_check("argument_type"sv, parameter_type_string)))); |             function_generator.set("type_check", TRY(generate_calculation_type_check("argument_type"sv, parameter_type_string))); | ||||||
|             TRY(function_generator.try_append(R"~~~( |             TRY(function_generator.try_append(R"~~~( | ||||||
|             if (!(@type_check@)) { |             if (!(@type_check@)) { | ||||||
|                 dbgln_if(CSS_PARSER_DEBUG, "@name:lowercase@() argument #{} type ({}) is not an accepted type", parsed_arguments.size(), MUST(argument_type.dump())); |                 dbgln_if(CSS_PARSER_DEBUG, "@name:lowercase@() argument #{} type ({}) is not an accepted type", parsed_arguments.size(), MUST(argument_type.dump())); | ||||||
|  | @ -216,8 +216,8 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func | ||||||
|                 if (parameter.get_bool("required"sv) == true) |                 if (parameter.get_bool("required"sv) == true) | ||||||
|                     min_argument_count++; |                     min_argument_count++; | ||||||
|             }); |             }); | ||||||
|             TRY(function_generator.set("min_argument_count", TRY(String::number(min_argument_count)))); |             function_generator.set("min_argument_count", TRY(String::number(min_argument_count))); | ||||||
|             TRY(function_generator.set("max_argument_count", TRY(String::number(max_argument_count)))); |             function_generator.set("max_argument_count", TRY(String::number(max_argument_count))); | ||||||
| 
 | 
 | ||||||
|             TRY(function_generator.try_append(R"~~~( |             TRY(function_generator.try_append(R"~~~( | ||||||
|         if (arguments.size() < @min_argument_count@ || arguments.size() > @max_argument_count@) { |         if (arguments.size() < @min_argument_count@ || arguments.size() > @max_argument_count@) { | ||||||
|  | @ -236,35 +236,35 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func | ||||||
|                 auto parameter_required = parameter.get_bool("required"sv).value(); |                 auto parameter_required = parameter.get_bool("required"sv).value(); | ||||||
| 
 | 
 | ||||||
|                 auto parameter_generator = TRY(function_generator.fork()); |                 auto parameter_generator = TRY(function_generator.fork()); | ||||||
|                 TRY(parameter_generator.set("parameter_name", TRY(String::from_deprecated_string(parameter.get_deprecated_string("name"sv).value())))); |                 parameter_generator.set("parameter_name", TRY(String::from_deprecated_string(parameter.get_deprecated_string("name"sv).value()))); | ||||||
|                 TRY(parameter_generator.set("parameter_index", TRY(String::number(parameter_index)))); |                 parameter_generator.set("parameter_index", TRY(String::number(parameter_index))); | ||||||
| 
 | 
 | ||||||
|                 bool parameter_is_calculation; |                 bool parameter_is_calculation; | ||||||
|                 if (parameter_type_string == "<rounding-strategy>") { |                 if (parameter_type_string == "<rounding-strategy>") { | ||||||
|                     parameter_is_calculation = false; |                     parameter_is_calculation = false; | ||||||
|                     TRY(parameter_generator.set("parameter_type", "RoundingStrategy"_string)); |                     parameter_generator.set("parameter_type", "RoundingStrategy"_string); | ||||||
|                     TRY(parameter_generator.set("parse_function", "parse_rounding_strategy(arguments[argument_index])"_string)); |                     parameter_generator.set("parse_function", "parse_rounding_strategy(arguments[argument_index])"_string); | ||||||
|                     TRY(parameter_generator.set("check_function", ".has_value()"_string)); |                     parameter_generator.set("check_function", ".has_value()"_string); | ||||||
|                     TRY(parameter_generator.set("release_function", ".release_value()"_string)); |                     parameter_generator.set("release_function", ".release_value()"_string); | ||||||
|                     if (auto default_value = parameter.get_deprecated_string("default"sv); default_value.has_value()) { |                     if (auto default_value = parameter.get_deprecated_string("default"sv); default_value.has_value()) { | ||||||
|                         TRY(parameter_generator.set("parameter_default", TRY(String::formatted(" = RoundingStrategy::{}", TRY(title_casify(default_value.value())))))); |                         parameter_generator.set("parameter_default", TRY(String::formatted(" = RoundingStrategy::{}", TRY(title_casify(default_value.value()))))); | ||||||
|                     } else { |                     } else { | ||||||
|                         TRY(parameter_generator.set("parameter_default", ""_string)); |                         parameter_generator.set("parameter_default", ""_string); | ||||||
|                     } |                     } | ||||||
|                 } else { |                 } else { | ||||||
|                     // NOTE: This assumes everything not handled above is a calculation node of some kind.
 |                     // NOTE: This assumes everything not handled above is a calculation node of some kind.
 | ||||||
|                     parameter_is_calculation = true; |                     parameter_is_calculation = true; | ||||||
|                     TRY(parameter_generator.set("parameter_type", "OwnPtr<CalculationNode>"_string)); |                     parameter_generator.set("parameter_type", "OwnPtr<CalculationNode>"_string); | ||||||
|                     TRY(parameter_generator.set("parse_function", "parse_a_calculation(arguments[argument_index])"_string)); |                     parameter_generator.set("parse_function", "parse_a_calculation(arguments[argument_index])"_string); | ||||||
|                     TRY(parameter_generator.set("check_function", " != nullptr"_string)); |                     parameter_generator.set("check_function", " != nullptr"_string); | ||||||
|                     TRY(parameter_generator.set("release_function", ".release_nonnull()"_string)); |                     parameter_generator.set("release_function", ".release_nonnull()"_string); | ||||||
| 
 | 
 | ||||||
|                     // NOTE: We have exactly one default value in the data right now, and it's a `<calc-constant>`,
 |                     // NOTE: We have exactly one default value in the data right now, and it's a `<calc-constant>`,
 | ||||||
|                     //       so that's all we handle.
 |                     //       so that's all we handle.
 | ||||||
|                     if (auto default_value = parameter.get_deprecated_string("default"sv); default_value.has_value()) { |                     if (auto default_value = parameter.get_deprecated_string("default"sv); default_value.has_value()) { | ||||||
|                         TRY(parameter_generator.set("parameter_default", TRY(String::formatted(" = ConstantCalculationNode::create(CalculationNode::constant_type_from_string(\"{}\"sv).value())", TRY(String::from_deprecated_string(default_value.value())))))); |                         parameter_generator.set("parameter_default", TRY(String::formatted(" = ConstantCalculationNode::create(CalculationNode::constant_type_from_string(\"{}\"sv).value())", TRY(String::from_deprecated_string(default_value.value()))))); | ||||||
|                     } else { |                     } else { | ||||||
|                         TRY(parameter_generator.set("parameter_default", ""_string)); |                         parameter_generator.set("parameter_default", ""_string); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|  | @ -305,7 +305,7 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func | ||||||
| 
 | 
 | ||||||
|                 if (parameter_is_calculation) { |                 if (parameter_is_calculation) { | ||||||
|                     auto parameter_type_variable = TRY(String::formatted("argument_type_{}", parameter_index)); |                     auto parameter_type_variable = TRY(String::formatted("argument_type_{}", parameter_index)); | ||||||
|                     TRY(parameter_generator.set("type_check", TRY(generate_calculation_type_check(parameter_type_variable, parameter_type_string)))); |                     parameter_generator.set("type_check", TRY(generate_calculation_type_check(parameter_type_variable, parameter_type_string))); | ||||||
|                     TRY(parameter_generator.try_append(R"~~~( |                     TRY(parameter_generator.try_append(R"~~~( | ||||||
|         auto maybe_argument_type_@parameter_index@ = parameter_@parameter_index@->determine_type(property_id); |         auto maybe_argument_type_@parameter_index@ = parameter_@parameter_index@->determine_type(property_id); | ||||||
|         if (!maybe_argument_type_@parameter_index@.has_value()) { |         if (!maybe_argument_type_@parameter_index@.has_value()) { | ||||||
|  | @ -348,13 +348,13 @@ OwnPtr<CalculationNode> Parser::parse_math_function(PropertyID property_id, Func | ||||||
|                 auto parameter_type_string = parameter.get_deprecated_string("type"sv).value(); |                 auto parameter_type_string = parameter.get_deprecated_string("type"sv).value(); | ||||||
| 
 | 
 | ||||||
|                 auto parameter_generator = TRY(function_generator.fork()); |                 auto parameter_generator = TRY(function_generator.fork()); | ||||||
|                 TRY(parameter_generator.set("parameter_index"sv, TRY(String::number(parameter_index)))); |                 parameter_generator.set("parameter_index"sv, TRY(String::number(parameter_index))); | ||||||
| 
 | 
 | ||||||
|                 if (parameter_type_string == "<rounding-strategy>"sv) { |                 if (parameter_type_string == "<rounding-strategy>"sv) { | ||||||
|                     TRY(parameter_generator.set("release_value"sv, ""_string)); |                     parameter_generator.set("release_value"sv, ""_string); | ||||||
|                 } else { |                 } else { | ||||||
|                     // NOTE: This assumes everything not handled above is a calculation node of some kind.
 |                     // NOTE: This assumes everything not handled above is a calculation node of some kind.
 | ||||||
|                     TRY(parameter_generator.set("release_value"sv, ".release_nonnull()"_string)); |                     parameter_generator.set("release_value"sv, ".release_nonnull()"_string); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 if (parameter_index == 0) { |                 if (parameter_index == 0) { | ||||||
|  |  | ||||||
|  | @ -62,7 +62,7 @@ enum class MediaFeatureID {)~~~")); | ||||||
| 
 | 
 | ||||||
|     TRY(media_feature_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { |     TRY(media_feature_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     @name:titlecase@,)~~~")); |     @name:titlecase@,)~~~")); | ||||||
|         return {}; |         return {}; | ||||||
|  | @ -100,8 +100,8 @@ Optional<MediaFeatureID> media_feature_id_from_string(StringView string) | ||||||
| 
 | 
 | ||||||
|     TRY(media_feature_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { |     TRY(media_feature_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name", TRY(String::from_deprecated_string(name)))); |         member_generator.set("name", TRY(String::from_deprecated_string(name))); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     if (Infra::is_ascii_case_insensitive_match(string, "@name@"sv)) |     if (Infra::is_ascii_case_insensitive_match(string, "@name@"sv)) | ||||||
|         return MediaFeatureID::@name:titlecase@; |         return MediaFeatureID::@name:titlecase@; | ||||||
|  | @ -119,8 +119,8 @@ StringView string_from_media_feature_id(MediaFeatureID media_feature_id) | ||||||
| 
 | 
 | ||||||
|     TRY(media_feature_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { |     TRY(media_feature_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name", TRY(String::from_deprecated_string(name)))); |         member_generator.set("name", TRY(String::from_deprecated_string(name))); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     case MediaFeatureID::@name:titlecase@: |     case MediaFeatureID::@name:titlecase@: | ||||||
|         return "@name@"sv;)~~~")); |         return "@name@"sv;)~~~")); | ||||||
|  | @ -141,11 +141,11 @@ bool media_feature_type_is_range(MediaFeatureID media_feature_id) | ||||||
|         auto& feature = value.as_object(); |         auto& feature = value.as_object(); | ||||||
| 
 | 
 | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         VERIFY(feature.has("type"sv)); |         VERIFY(feature.has("type"sv)); | ||||||
|         auto feature_type = feature.get_deprecated_string("type"sv); |         auto feature_type = feature.get_deprecated_string("type"sv); | ||||||
|         VERIFY(feature_type.has_value()); |         VERIFY(feature_type.has_value()); | ||||||
|         TRY(member_generator.set("is_range", feature_type.value() == "range" ? "true"_string : "false"_string)); |         member_generator.set("is_range", feature_type.value() == "range" ? "true"_string : "false"_string); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     case MediaFeatureID::@name:titlecase@: |     case MediaFeatureID::@name:titlecase@: | ||||||
|         return @is_range@;)~~~")); |         return @is_range@;)~~~")); | ||||||
|  | @ -166,7 +166,7 @@ bool media_feature_accepts_type(MediaFeatureID media_feature_id, MediaFeatureVal | ||||||
|         auto& feature = member.as_object(); |         auto& feature = member.as_object(); | ||||||
| 
 | 
 | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     case MediaFeatureID::@name:titlecase@:)~~~")); |     case MediaFeatureID::@name:titlecase@:)~~~")); | ||||||
| 
 | 
 | ||||||
|  | @ -246,7 +246,7 @@ bool media_feature_accepts_identifier(MediaFeatureID media_feature_id, ValueID i | ||||||
|         auto& feature = member.as_object(); |         auto& feature = member.as_object(); | ||||||
| 
 | 
 | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     case MediaFeatureID::@name:titlecase@:)~~~")); |     case MediaFeatureID::@name:titlecase@:)~~~")); | ||||||
| 
 | 
 | ||||||
|  | @ -272,7 +272,7 @@ bool media_feature_accepts_identifier(MediaFeatureID media_feature_id, ValueID i | ||||||
|                 TRY(append_identifier_switch_if_needed()); |                 TRY(append_identifier_switch_if_needed()); | ||||||
| 
 | 
 | ||||||
|                 auto ident_generator = TRY(member_generator.fork()); |                 auto ident_generator = TRY(member_generator.fork()); | ||||||
|                 TRY(ident_generator.set("identifier:titlecase", TRY(title_casify(identifier_name)))); |                 ident_generator.set("identifier:titlecase", TRY(title_casify(identifier_name))); | ||||||
|                 TRY(ident_generator.try_append(R"~~~( |                 TRY(ident_generator.try_append(R"~~~( | ||||||
|         case ValueID::@identifier:titlecase@: |         case ValueID::@identifier:titlecase@: | ||||||
|             return true;)~~~")); |             return true;)~~~")); | ||||||
|  |  | ||||||
|  | @ -124,7 +124,7 @@ enum class PropertyID { | ||||||
| 
 | 
 | ||||||
|     for (auto& name : shorthand_property_ids) { |     for (auto& name : shorthand_property_ids) { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
| 
 | 
 | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     @name:titlecase@, |     @name:titlecase@, | ||||||
|  | @ -133,21 +133,21 @@ enum class PropertyID { | ||||||
| 
 | 
 | ||||||
|     for (auto& name : longhand_property_ids) { |     for (auto& name : longhand_property_ids) { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
| 
 | 
 | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     @name:titlecase@, |     @name:titlecase@, | ||||||
| )~~~")); | )~~~")); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     TRY(generator.set("first_property_id", TRY(title_casify(first_property_id)))); |     generator.set("first_property_id", TRY(title_casify(first_property_id))); | ||||||
|     TRY(generator.set("last_property_id", TRY(title_casify(last_property_id)))); |     generator.set("last_property_id", TRY(title_casify(last_property_id))); | ||||||
| 
 | 
 | ||||||
|     TRY(generator.set("first_shorthand_property_id", TRY(title_casify(shorthand_property_ids.first())))); |     generator.set("first_shorthand_property_id", TRY(title_casify(shorthand_property_ids.first()))); | ||||||
|     TRY(generator.set("last_shorthand_property_id", TRY(title_casify(shorthand_property_ids.last())))); |     generator.set("last_shorthand_property_id", TRY(title_casify(shorthand_property_ids.last()))); | ||||||
| 
 | 
 | ||||||
|     TRY(generator.set("first_longhand_property_id", TRY(title_casify(longhand_property_ids.first())))); |     generator.set("first_longhand_property_id", TRY(title_casify(longhand_property_ids.first()))); | ||||||
|     TRY(generator.set("last_longhand_property_id", TRY(title_casify(longhand_property_ids.last())))); |     generator.set("last_longhand_property_id", TRY(title_casify(longhand_property_ids.last()))); | ||||||
| 
 | 
 | ||||||
|     TRY(generator.try_append(R"~~~( |     TRY(generator.try_append(R"~~~( | ||||||
| }; | }; | ||||||
|  | @ -232,8 +232,8 @@ struct Traits<Web::CSS::PropertyID> : public GenericTraits<Web::CSS::PropertyID> | ||||||
| ErrorOr<void> generate_bounds_checking_function(JsonObject& properties, SourceGenerator& parent_generator, StringView css_type_name, StringView type_name, Optional<StringView> default_unit_name, Optional<StringView> value_getter) | ErrorOr<void> generate_bounds_checking_function(JsonObject& properties, SourceGenerator& parent_generator, StringView css_type_name, StringView type_name, Optional<StringView> default_unit_name, Optional<StringView> value_getter) | ||||||
| { | { | ||||||
|     auto generator = TRY(parent_generator.fork()); |     auto generator = TRY(parent_generator.fork()); | ||||||
|     TRY(generator.set("css_type_name", TRY(String::from_utf8(css_type_name)))); |     generator.set("css_type_name", TRY(String::from_utf8(css_type_name))); | ||||||
|     TRY(generator.set("type_name", TRY(String::from_utf8(type_name)))); |     generator.set("type_name", TRY(String::from_utf8(type_name))); | ||||||
| 
 | 
 | ||||||
|     TRY(generator.try_append(R"~~~( |     TRY(generator.try_append(R"~~~( | ||||||
| bool property_accepts_@css_type_name@(PropertyID property_id, [[maybe_unused]] @type_name@ const& value) | bool property_accepts_@css_type_name@(PropertyID property_id, [[maybe_unused]] @type_name@ const& value) | ||||||
|  | @ -250,7 +250,7 @@ bool property_accepts_@css_type_name@(PropertyID property_id, [[maybe_unused]] @ | ||||||
|                     continue; |                     continue; | ||||||
| 
 | 
 | ||||||
|                 auto property_generator = TRY(generator.fork()); |                 auto property_generator = TRY(generator.fork()); | ||||||
|                 TRY(property_generator.set("property_name:titlecase", TRY(title_casify(name)))); |                 property_generator.set("property_name:titlecase", TRY(title_casify(name))); | ||||||
| 
 | 
 | ||||||
|                 TRY(property_generator.try_append(R"~~~( |                 TRY(property_generator.try_append(R"~~~( | ||||||
|     case PropertyID::@property_name:titlecase@: |     case PropertyID::@property_name:titlecase@: | ||||||
|  | @ -276,9 +276,9 @@ bool property_accepts_@css_type_name@(PropertyID property_id, [[maybe_unused]] @ | ||||||
| 
 | 
 | ||||||
|                     auto output_check = [&](auto& value_string, StringView comparator) -> ErrorOr<void> { |                     auto output_check = [&](auto& value_string, StringView comparator) -> ErrorOr<void> { | ||||||
|                         if (value_getter.has_value()) { |                         if (value_getter.has_value()) { | ||||||
|                             TRY(property_generator.set("value_number", TRY(String::from_utf8(value_string)))); |                             property_generator.set("value_number", TRY(String::from_utf8(value_string))); | ||||||
|                             TRY(property_generator.set("value_getter", TRY(String::from_utf8(value_getter.value())))); |                             property_generator.set("value_getter", TRY(String::from_utf8(value_getter.value()))); | ||||||
|                             TRY(property_generator.set("comparator", TRY(String::from_utf8(comparator)))); |                             property_generator.set("comparator", TRY(String::from_utf8(comparator))); | ||||||
|                             TRY(property_generator.try_append("@value_getter@ @comparator@ @value_number@")); |                             TRY(property_generator.try_append("@value_getter@ @comparator@ @value_number@")); | ||||||
|                             return {}; |                             return {}; | ||||||
|                         } |                         } | ||||||
|  | @ -289,9 +289,9 @@ bool property_accepts_@css_type_name@(PropertyID property_id, [[maybe_unused]] @ | ||||||
|                         if (value_unit.is_empty()) |                         if (value_unit.is_empty()) | ||||||
|                             value_unit = default_unit_name.value(); |                             value_unit = default_unit_name.value(); | ||||||
|                         VERIFY(lexer.is_eof()); |                         VERIFY(lexer.is_eof()); | ||||||
|                         TRY(property_generator.set("value_number", TRY(String::from_utf8(value_number)))); |                         property_generator.set("value_number", TRY(String::from_utf8(value_number))); | ||||||
|                         TRY(property_generator.set("value_unit", TRY(title_casify(value_unit)))); |                         property_generator.set("value_unit", TRY(title_casify(value_unit))); | ||||||
|                         TRY(property_generator.set("comparator", TRY(String::from_utf8(comparator)))); |                         property_generator.set("comparator", TRY(String::from_utf8(comparator))); | ||||||
|                         TRY(property_generator.try_append("value @comparator@ @type_name@(@value_number@, @type_name@::Type::@value_unit@)")); |                         TRY(property_generator.try_append("value @comparator@ @type_name@(@value_number@, @type_name@::Type::@value_unit@)")); | ||||||
|                         return {}; |                         return {}; | ||||||
|                     }; |                     }; | ||||||
|  | @ -346,9 +346,9 @@ Optional<PropertyID> property_id_from_camel_case_string(StringView string) | ||||||
|         VERIFY(value.is_object()); |         VERIFY(value.is_object()); | ||||||
| 
 | 
 | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name", TRY(String::from_deprecated_string(name)))); |         member_generator.set("name", TRY(String::from_deprecated_string(name))); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.set("name:camelcase", TRY(camel_casify(name)))); |         member_generator.set("name:camelcase", TRY(camel_casify(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     if (string.equals_ignoring_ascii_case("@name:camelcase@"sv)) |     if (string.equals_ignoring_ascii_case("@name:camelcase@"sv)) | ||||||
|         return PropertyID::@name:titlecase@; |         return PropertyID::@name:titlecase@; | ||||||
|  | @ -370,8 +370,8 @@ Optional<PropertyID> property_id_from_string(StringView string) | ||||||
|         VERIFY(value.is_object()); |         VERIFY(value.is_object()); | ||||||
| 
 | 
 | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name", TRY(String::from_deprecated_string(name)))); |         member_generator.set("name", TRY(String::from_deprecated_string(name))); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     if (Infra::is_ascii_case_insensitive_match(string, "@name@"sv)) |     if (Infra::is_ascii_case_insensitive_match(string, "@name@"sv)) | ||||||
|         return PropertyID::@name:titlecase@; |         return PropertyID::@name:titlecase@; | ||||||
|  | @ -391,8 +391,8 @@ StringView string_from_property_id(PropertyID property_id) { | ||||||
|         VERIFY(value.is_object()); |         VERIFY(value.is_object()); | ||||||
| 
 | 
 | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name", TRY(String::from_deprecated_string(name)))); |         member_generator.set("name", TRY(String::from_deprecated_string(name))); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     case PropertyID::@name:titlecase@: |     case PropertyID::@name:titlecase@: | ||||||
|         return "@name@"sv; |         return "@name@"sv; | ||||||
|  | @ -423,7 +423,7 @@ bool is_inherited_property(PropertyID property_id) | ||||||
| 
 | 
 | ||||||
|         if (inherited) { |         if (inherited) { | ||||||
|             auto member_generator = TRY(generator.fork()); |             auto member_generator = TRY(generator.fork()); | ||||||
|             TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |             member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|             TRY(member_generator.try_append(R"~~~( |             TRY(member_generator.try_append(R"~~~( | ||||||
|     case PropertyID::@name:titlecase@: |     case PropertyID::@name:titlecase@: | ||||||
|         return true; |         return true; | ||||||
|  | @ -452,7 +452,7 @@ bool property_affects_layout(PropertyID property_id) | ||||||
| 
 | 
 | ||||||
|         if (affects_layout) { |         if (affects_layout) { | ||||||
|             auto member_generator = TRY(generator.fork()); |             auto member_generator = TRY(generator.fork()); | ||||||
|             TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |             member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|             TRY(member_generator.try_append(R"~~~( |             TRY(member_generator.try_append(R"~~~( | ||||||
|     case PropertyID::@name:titlecase@: |     case PropertyID::@name:titlecase@: | ||||||
| )~~~")); | )~~~")); | ||||||
|  | @ -481,7 +481,7 @@ bool property_affects_stacking_context(PropertyID property_id) | ||||||
| 
 | 
 | ||||||
|         if (affects_stacking_context) { |         if (affects_stacking_context) { | ||||||
|             auto member_generator = TRY(generator.fork()); |             auto member_generator = TRY(generator.fork()); | ||||||
|             TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |             member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|             TRY(member_generator.try_append(R"~~~( |             TRY(member_generator.try_append(R"~~~( | ||||||
|     case PropertyID::@name:titlecase@: |     case PropertyID::@name:titlecase@: | ||||||
| )~~~")); | )~~~")); | ||||||
|  | @ -520,8 +520,8 @@ NonnullRefPtr<StyleValue> property_initial_value(JS::Realm& context_realm, Prope | ||||||
|         auto& initial_value_string = initial_value.value(); |         auto& initial_value_string = initial_value.value(); | ||||||
| 
 | 
 | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.set("initial_value_string", TRY(String::from_deprecated_string(initial_value_string)))); |         member_generator.set("initial_value_string", TRY(String::from_deprecated_string(initial_value_string))); | ||||||
|         TRY(member_generator.try_append( |         TRY(member_generator.try_append( | ||||||
|             R"~~~(        case PropertyID::@name:titlecase@: |             R"~~~(        case PropertyID::@name:titlecase@: | ||||||
|         { |         { | ||||||
|  | @ -561,7 +561,7 @@ bool property_has_quirk(PropertyID property_id, Quirk quirk) | ||||||
| 
 | 
 | ||||||
|             if (!quirks.is_empty()) { |             if (!quirks.is_empty()) { | ||||||
|                 auto property_generator = TRY(generator.fork()); |                 auto property_generator = TRY(generator.fork()); | ||||||
|                 TRY(property_generator.set("name:titlecase", TRY(title_casify(name)))); |                 property_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|                 TRY(property_generator.try_append(R"~~~( |                 TRY(property_generator.try_append(R"~~~( | ||||||
|     case PropertyID::@name:titlecase@: { |     case PropertyID::@name:titlecase@: { | ||||||
|         switch (quirk) { |         switch (quirk) { | ||||||
|  | @ -569,7 +569,7 @@ bool property_has_quirk(PropertyID property_id, Quirk quirk) | ||||||
|                 for (auto& quirk : quirks.values()) { |                 for (auto& quirk : quirks.values()) { | ||||||
|                     VERIFY(quirk.is_string()); |                     VERIFY(quirk.is_string()); | ||||||
|                     auto quirk_generator = TRY(property_generator.fork()); |                     auto quirk_generator = TRY(property_generator.fork()); | ||||||
|                     TRY(quirk_generator.set("quirk:titlecase", TRY(title_casify(quirk.as_string())))); |                     quirk_generator.set("quirk:titlecase", TRY(title_casify(quirk.as_string()))); | ||||||
|                     TRY(quirk_generator.try_append(R"~~~( |                     TRY(quirk_generator.try_append(R"~~~( | ||||||
|         case Quirk::@quirk:titlecase@: |         case Quirk::@quirk:titlecase@: | ||||||
|             return true; |             return true; | ||||||
|  | @ -602,7 +602,7 @@ bool property_accepts_type(PropertyID property_id, ValueType value_type) | ||||||
|         if (auto maybe_valid_types = object.get_array("valid-types"sv); maybe_valid_types.has_value() && !maybe_valid_types->is_empty()) { |         if (auto maybe_valid_types = object.get_array("valid-types"sv); maybe_valid_types.has_value() && !maybe_valid_types->is_empty()) { | ||||||
|             auto& valid_types = maybe_valid_types.value(); |             auto& valid_types = maybe_valid_types.value(); | ||||||
|             auto property_generator = TRY(generator.fork()); |             auto property_generator = TRY(generator.fork()); | ||||||
|             TRY(property_generator.set("name:titlecase", TRY(title_casify(name)))); |             property_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|             TRY(property_generator.try_append(R"~~~( |             TRY(property_generator.try_append(R"~~~( | ||||||
|     case PropertyID::@name:titlecase@: { |     case PropertyID::@name:titlecase@: { | ||||||
|         switch (value_type) { |         switch (value_type) { | ||||||
|  | @ -682,7 +682,7 @@ bool property_accepts_identifier(PropertyID property_id, ValueID identifier) | ||||||
|         auto& object = value.as_object(); |         auto& object = value.as_object(); | ||||||
| 
 | 
 | ||||||
|         auto property_generator = TRY(generator.fork()); |         auto property_generator = TRY(generator.fork()); | ||||||
|         TRY(property_generator.set("name:titlecase", TRY(title_casify(name)))); |         property_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(property_generator.try_appendln("    case PropertyID::@name:titlecase@: {")); |         TRY(property_generator.try_appendln("    case PropertyID::@name:titlecase@: {")); | ||||||
| 
 | 
 | ||||||
|         if (auto maybe_valid_identifiers = object.get_array("valid-identifiers"sv); maybe_valid_identifiers.has_value() && !maybe_valid_identifiers->is_empty()) { |         if (auto maybe_valid_identifiers = object.get_array("valid-identifiers"sv); maybe_valid_identifiers.has_value() && !maybe_valid_identifiers->is_empty()) { | ||||||
|  | @ -690,7 +690,7 @@ bool property_accepts_identifier(PropertyID property_id, ValueID identifier) | ||||||
|             auto& valid_identifiers = maybe_valid_identifiers.value(); |             auto& valid_identifiers = maybe_valid_identifiers.value(); | ||||||
|             for (auto& identifier : valid_identifiers.values()) { |             for (auto& identifier : valid_identifiers.values()) { | ||||||
|                 auto identifier_generator = TRY(generator.fork()); |                 auto identifier_generator = TRY(generator.fork()); | ||||||
|                 TRY(identifier_generator.set("identifier:titlecase", TRY(title_casify(identifier.as_string())))); |                 identifier_generator.set("identifier:titlecase", TRY(title_casify(identifier.as_string()))); | ||||||
|                 TRY(identifier_generator.try_appendln("        case ValueID::@identifier:titlecase@:")); |                 TRY(identifier_generator.try_appendln("        case ValueID::@identifier:titlecase@:")); | ||||||
|             } |             } | ||||||
|             TRY(property_generator.try_append(R"~~~( |             TRY(property_generator.try_append(R"~~~( | ||||||
|  | @ -709,7 +709,7 @@ bool property_accepts_identifier(PropertyID property_id, ValueID identifier) | ||||||
|                     continue; |                     continue; | ||||||
| 
 | 
 | ||||||
|                 auto type_generator = TRY(generator.fork()); |                 auto type_generator = TRY(generator.fork()); | ||||||
|                 TRY(type_generator.set("type_name:snakecase", TRY(snake_casify(type_name)))); |                 type_generator.set("type_name:snakecase", TRY(snake_casify(type_name))); | ||||||
|                 TRY(type_generator.try_append(R"~~~( |                 TRY(type_generator.try_append(R"~~~( | ||||||
|         if (value_id_to_@type_name:snakecase@(identifier).has_value()) |         if (value_id_to_@type_name:snakecase@(identifier).has_value()) | ||||||
|             return true; |             return true; | ||||||
|  | @ -737,8 +737,8 @@ Optional<ValueType> property_resolves_percentages_relative_to(PropertyID propert | ||||||
|         VERIFY(value.is_object()); |         VERIFY(value.is_object()); | ||||||
|         if (auto resolved_type = value.as_object().get_deprecated_string("percentages-resolve-to"sv); resolved_type.has_value()) { |         if (auto resolved_type = value.as_object().get_deprecated_string("percentages-resolve-to"sv); resolved_type.has_value()) { | ||||||
|             auto property_generator = TRY(generator.fork()); |             auto property_generator = TRY(generator.fork()); | ||||||
|             TRY(property_generator.set("name:titlecase", TRY(title_casify(name)))); |             property_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|             TRY(property_generator.set("resolved_type:titlecase", TRY(title_casify(resolved_type.value())))); |             property_generator.set("resolved_type:titlecase", TRY(title_casify(resolved_type.value()))); | ||||||
|             TRY(property_generator.try_append(R"~~~( |             TRY(property_generator.try_append(R"~~~( | ||||||
|     case PropertyID::@name:titlecase@: |     case PropertyID::@name:titlecase@: | ||||||
|         return ValueType::@resolved_type:titlecase@; |         return ValueType::@resolved_type:titlecase@; | ||||||
|  | @ -764,8 +764,8 @@ size_t property_maximum_value_count(PropertyID property_id) | ||||||
|             auto max_values = value.as_object().get("max-values"sv); |             auto max_values = value.as_object().get("max-values"sv); | ||||||
|             VERIFY(max_values.has_value() && max_values->is_number() && !max_values->is_double()); |             VERIFY(max_values.has_value() && max_values->is_number() && !max_values->is_double()); | ||||||
|             auto property_generator = TRY(generator.fork()); |             auto property_generator = TRY(generator.fork()); | ||||||
|             TRY(property_generator.set("name:titlecase", TRY(title_casify(name)))); |             property_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|             TRY(property_generator.set("max_values", TRY(String::from_deprecated_string(max_values->to_deprecated_string())))); |             property_generator.set("max_values", TRY(String::from_deprecated_string(max_values->to_deprecated_string()))); | ||||||
|             TRY(property_generator.try_append(R"~~~( |             TRY(property_generator.try_append(R"~~~( | ||||||
|     case PropertyID::@name:titlecase@: |     case PropertyID::@name:titlecase@: | ||||||
|         return @max_values@; |         return @max_values@; | ||||||
|  | @ -800,7 +800,7 @@ Vector<PropertyID> longhands_for_shorthand(PropertyID property_id) | ||||||
|             VERIFY(longhands.has_value() && longhands->is_array()); |             VERIFY(longhands.has_value() && longhands->is_array()); | ||||||
|             auto longhand_values = longhands->as_array(); |             auto longhand_values = longhands->as_array(); | ||||||
|             auto property_generator = TRY(generator.fork()); |             auto property_generator = TRY(generator.fork()); | ||||||
|             TRY(property_generator.set("name:titlecase", TRY(title_casify(name)))); |             property_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|             StringBuilder builder; |             StringBuilder builder; | ||||||
|             bool first = true; |             bool first = true; | ||||||
|             TRY(longhand_values.try_for_each([&](auto& longhand) -> ErrorOr<IterationDecision> { |             TRY(longhand_values.try_for_each([&](auto& longhand) -> ErrorOr<IterationDecision> { | ||||||
|  |  | ||||||
|  | @ -55,7 +55,7 @@ enum class PseudoClass { | ||||||
| 
 | 
 | ||||||
|     TRY(pseudo_classes_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { |     TRY(pseudo_classes_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
| 
 | 
 | ||||||
|         TRY(member_generator.try_appendln("    @name:titlecase@,")); |         TRY(member_generator.try_appendln("    @name:titlecase@,")); | ||||||
|         return {}; |         return {}; | ||||||
|  | @ -105,8 +105,8 @@ Optional<PseudoClass> pseudo_class_from_string(StringView string) | ||||||
| 
 | 
 | ||||||
|     TRY(pseudo_classes_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { |     TRY(pseudo_classes_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name", TRY(String::from_deprecated_string(name)))); |         member_generator.set("name", TRY(String::from_deprecated_string(name))); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
| 
 | 
 | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     if (string.equals_ignoring_ascii_case("@name@"sv)) |     if (string.equals_ignoring_ascii_case("@name@"sv)) | ||||||
|  | @ -127,8 +127,8 @@ StringView pseudo_class_name(PseudoClass pseudo_class) | ||||||
| 
 | 
 | ||||||
|     TRY(pseudo_classes_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { |     TRY(pseudo_classes_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name", TRY(String::from_deprecated_string(name)))); |         member_generator.set("name", TRY(String::from_deprecated_string(name))); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
| 
 | 
 | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     case PseudoClass::@name:titlecase@: |     case PseudoClass::@name:titlecase@: | ||||||
|  | @ -182,10 +182,10 @@ PseudoClassMetadata pseudo_class_metadata(PseudoClass pseudo_class) | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name)))); |         member_generator.set("name:titlecase", TRY(title_casify(name))); | ||||||
|         TRY(member_generator.set("parameter_type", parameter_type)); |         member_generator.set("parameter_type", parameter_type); | ||||||
|         TRY(member_generator.set("is_valid_as_function", is_valid_as_function ? "true"_string : "false"_string)); |         member_generator.set("is_valid_as_function", is_valid_as_function ? "true"_string : "false"_string); | ||||||
|         TRY(member_generator.set("is_valid_as_identifier", is_valid_as_identifier ? "true"_string : "false"_string)); |         member_generator.set("is_valid_as_identifier", is_valid_as_identifier ? "true"_string : "false"_string); | ||||||
| 
 | 
 | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     case PseudoClass::@name:titlecase@: |     case PseudoClass::@name:titlecase@: | ||||||
|  |  | ||||||
|  | @ -67,7 +67,7 @@ namespace Web::CSS { | ||||||
|     TRY(generator.try_appendln("enum class TransformFunction {")); |     TRY(generator.try_appendln("enum class TransformFunction {")); | ||||||
|     TRY(transforms_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { |     TRY(transforms_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify_transform_function(name)))); |         member_generator.set("name:titlecase", TRY(title_casify_transform_function(name))); | ||||||
|         TRY(member_generator.try_appendln("    @name:titlecase@,")); |         TRY(member_generator.try_appendln("    @name:titlecase@,")); | ||||||
|         return {}; |         return {}; | ||||||
|     })); |     })); | ||||||
|  | @ -119,8 +119,8 @@ Optional<TransformFunction> transform_function_from_string(StringView name) | ||||||
| )~~~")); | )~~~")); | ||||||
|     TRY(transforms_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { |     TRY(transforms_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name", TRY(String::from_deprecated_string(name)))); |         member_generator.set("name", TRY(String::from_deprecated_string(name))); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify_transform_function(name)))); |         member_generator.set("name:titlecase", TRY(title_casify_transform_function(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     if (name.equals_ignoring_ascii_case("@name@"sv)) |     if (name.equals_ignoring_ascii_case("@name@"sv)) | ||||||
|         return TransformFunction::@name:titlecase@; |         return TransformFunction::@name:titlecase@; | ||||||
|  | @ -139,8 +139,8 @@ StringView to_string(TransformFunction transform_function) | ||||||
| )~~~")); | )~~~")); | ||||||
|     TRY(transforms_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { |     TRY(transforms_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name", TRY(String::from_deprecated_string(name)))); |         member_generator.set("name", TRY(String::from_deprecated_string(name))); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify_transform_function(name)))); |         member_generator.set("name:titlecase", TRY(title_casify_transform_function(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     case TransformFunction::@name:titlecase@: |     case TransformFunction::@name:titlecase@: | ||||||
|         return "@name@"sv; |         return "@name@"sv; | ||||||
|  | @ -163,7 +163,7 @@ TransformFunctionMetadata transform_function_metadata(TransformFunction transfor | ||||||
|         VERIFY(value.is_object()); |         VERIFY(value.is_object()); | ||||||
| 
 | 
 | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify_transform_function(name)))); |         member_generator.set("name:titlecase", TRY(title_casify_transform_function(name))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     case TransformFunction::@name:titlecase@: |     case TransformFunction::@name:titlecase@: | ||||||
|         return TransformFunctionMetadata { |         return TransformFunctionMetadata { | ||||||
|  |  | ||||||
|  | @ -57,7 +57,7 @@ enum class ValueID { | ||||||
| 
 | 
 | ||||||
|     TRY(identifier_data.try_for_each([&](auto& name) -> ErrorOr<void> { |     TRY(identifier_data.try_for_each([&](auto& name) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name.to_deprecated_string())))); |         member_generator.set("name:titlecase", TRY(title_casify(name.to_deprecated_string()))); | ||||||
| 
 | 
 | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     @name:titlecase@, |     @name:titlecase@, | ||||||
|  | @ -96,8 +96,8 @@ HashMap<StringView, ValueID, AK::CaseInsensitiveASCIIStringViewTraits> g_stringv | ||||||
| 
 | 
 | ||||||
|     TRY(identifier_data.try_for_each([&](auto& name) -> ErrorOr<void> { |     TRY(identifier_data.try_for_each([&](auto& name) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name", TRY(String::from_deprecated_string(name.to_deprecated_string())))); |         member_generator.set("name", TRY(String::from_deprecated_string(name.to_deprecated_string()))); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name.to_deprecated_string())))); |         member_generator.set("name:titlecase", TRY(title_casify(name.to_deprecated_string()))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     {"@name@"sv, ValueID::@name:titlecase@}, |     {"@name@"sv, ValueID::@name:titlecase@}, | ||||||
| )~~~")); | )~~~")); | ||||||
|  | @ -118,8 +118,8 @@ StringView string_from_value_id(ValueID value_id) { | ||||||
| 
 | 
 | ||||||
|     TRY(identifier_data.try_for_each([&](auto& name) -> ErrorOr<void> { |     TRY(identifier_data.try_for_each([&](auto& name) -> ErrorOr<void> { | ||||||
|         auto member_generator = TRY(generator.fork()); |         auto member_generator = TRY(generator.fork()); | ||||||
|         TRY(member_generator.set("name", TRY(String::from_deprecated_string(name.to_deprecated_string())))); |         member_generator.set("name", TRY(String::from_deprecated_string(name.to_deprecated_string()))); | ||||||
|         TRY(member_generator.set("name:titlecase", TRY(title_casify(name.to_deprecated_string())))); |         member_generator.set("name:titlecase", TRY(title_casify(name.to_deprecated_string()))); | ||||||
|         TRY(member_generator.try_append(R"~~~( |         TRY(member_generator.try_append(R"~~~( | ||||||
|     case ValueID::@name:titlecase@: |     case ValueID::@name:titlecase@: | ||||||
|         return "@name@"sv; |         return "@name@"sv; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling