| 
									
										
										
										
											2022-03-08 14:36:18 +00:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2024-10-04 13:19:50 +02:00
										 |  |  |  * Copyright (c) 2019-2021, Andreas Kling <andreas@ladybird.org> | 
					
						
							| 
									
										
										
										
											2023-06-17 12:40:43 +01:00
										 |  |  |  * Copyright (c) 2022-2023, Sam Atkins <atkinssj@serenityos.org> | 
					
						
							| 
									
										
										
										
											2022-03-08 14:36:18 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-08 15:00:27 +00:00
										 |  |  | #include <AK/JsonObject.h>
 | 
					
						
							| 
									
										
										
										
											2023-06-17 12:40:43 +01:00
										 |  |  | #include <AK/String.h>
 | 
					
						
							| 
									
										
										
										
											2022-03-08 14:36:18 +00:00
										 |  |  | #include <AK/Vector.h>
 | 
					
						
							| 
									
										
										
										
											2023-02-09 03:02:46 +01:00
										 |  |  | #include <LibCore/File.h>
 | 
					
						
							| 
									
										
										
										
											2022-03-08 14:36:18 +00:00
										 |  |  | #include <ctype.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-14 18:29:33 +02:00
										 |  |  | inline String title_casify(StringView dashy_name) | 
					
						
							| 
									
										
										
										
											2022-03-08 14:36:18 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2023-06-17 12:40:43 +01:00
										 |  |  |     auto parts = dashy_name.split_view('-'); | 
					
						
							| 
									
										
										
										
											2022-03-08 14:36:18 +00:00
										 |  |  |     StringBuilder builder; | 
					
						
							|  |  |  |     for (auto& part : parts) { | 
					
						
							|  |  |  |         if (part.is_empty()) | 
					
						
							|  |  |  |             continue; | 
					
						
							| 
									
										
										
										
											2023-08-21 16:59:41 +02:00
										 |  |  |         builder.append(toupper(part[0])); | 
					
						
							| 
									
										
										
										
											2022-03-08 14:36:18 +00:00
										 |  |  |         if (part.length() == 1) | 
					
						
							|  |  |  |             continue; | 
					
						
							| 
									
										
										
										
											2023-08-21 16:59:41 +02:00
										 |  |  |         builder.append(part.substring_view(1, part.length() - 1)); | 
					
						
							| 
									
										
										
										
											2022-03-08 14:36:18 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-08-21 16:59:41 +02:00
										 |  |  |     return MUST(builder.to_string()); | 
					
						
							| 
									
										
										
										
											2022-03-08 14:36:18 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-14 18:29:33 +02:00
										 |  |  | inline String camel_casify(StringView dashy_name) | 
					
						
							| 
									
										
										
										
											2022-03-08 14:36:18 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     auto parts = dashy_name.split_view('-'); | 
					
						
							|  |  |  |     StringBuilder builder; | 
					
						
							|  |  |  |     bool first = true; | 
					
						
							|  |  |  |     for (auto& part : parts) { | 
					
						
							|  |  |  |         if (part.is_empty()) | 
					
						
							|  |  |  |             continue; | 
					
						
							|  |  |  |         char ch = part[0]; | 
					
						
							|  |  |  |         if (!first) | 
					
						
							|  |  |  |             ch = toupper(ch); | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             first = false; | 
					
						
							| 
									
										
										
										
											2023-08-21 16:59:41 +02:00
										 |  |  |         builder.append(ch); | 
					
						
							| 
									
										
										
										
											2022-03-08 14:36:18 +00:00
										 |  |  |         if (part.length() == 1) | 
					
						
							|  |  |  |             continue; | 
					
						
							| 
									
										
										
										
											2023-08-21 16:59:41 +02:00
										 |  |  |         builder.append(part.substring_view(1, part.length() - 1)); | 
					
						
							| 
									
										
										
										
											2022-03-08 14:36:18 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-08-21 16:59:41 +02:00
										 |  |  |     return MUST(builder.to_string()); | 
					
						
							| 
									
										
										
										
											2022-03-08 14:36:18 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2022-03-08 15:00:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-14 18:29:33 +02:00
										 |  |  | inline String snake_casify(StringView dashy_name) | 
					
						
							| 
									
										
										
										
											2022-04-13 17:46:47 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2023-06-17 12:40:43 +01:00
										 |  |  |     // FIXME: We don't really need to convert dashy_name to a String first, but currently
 | 
					
						
							| 
									
										
										
										
											2023-12-16 17:49:34 +03:30
										 |  |  |     //        all the `replace` functions that take a StringView return ByteString.
 | 
					
						
							| 
									
										
										
										
											2023-08-21 16:59:41 +02:00
										 |  |  |     return MUST(MUST(String::from_utf8(dashy_name)).replace("-"sv, "_"sv, ReplaceMode::All)); | 
					
						
							| 
									
										
										
										
											2022-04-13 17:46:47 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-14 18:29:33 +02:00
										 |  |  | inline ErrorOr<JsonValue> read_entire_file_as_json(StringView filename) | 
					
						
							| 
									
										
										
										
											2022-03-08 15:00:27 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2023-02-09 03:02:46 +01:00
										 |  |  |     auto file = TRY(Core::File::open(filename, Core::File::OpenMode::Read)); | 
					
						
							| 
									
										
										
										
											2022-03-08 15:00:27 +00:00
										 |  |  |     auto json_size = TRY(file->size()); | 
					
						
							|  |  |  |     auto json_data = TRY(ByteBuffer::create_uninitialized(json_size)); | 
					
						
							| 
									
										
										
										
											2023-03-01 15:27:35 +01:00
										 |  |  |     TRY(file->read_until_filled(json_data.bytes())); | 
					
						
							| 
									
										
										
										
											2022-03-08 15:00:27 +00:00
										 |  |  |     return JsonValue::from_string(json_data); | 
					
						
							|  |  |  | } |