| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2021-04-28 22:46:44 +02:00
										 |  |  |  * Copyright (c) 2020-2021, the SerenityOS developers. | 
					
						
							| 
									
										
										
										
											2025-07-09 12:59:31 +01:00
										 |  |  |  * Copyright (c) 2022-2025, Sam Atkins <sam@ladybird.org> | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2021-04-22 01:24:48 -07:00
										 |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-09 12:59:31 +01:00
										 |  |  | #include <AK/GenericShorthands.h>
 | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | #include <LibWeb/CSS/Parser/Token.h>
 | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  | #include <LibWeb/CSS/Serialize.h>
 | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-12 15:10:08 +01:00
										 |  |  | namespace Web::CSS::Parser { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-09 12:59:31 +01:00
										 |  |  | Token Token::create(Type type, String original_source_text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     VERIFY(first_is_one_of(type, | 
					
						
							|  |  |  |         Type::Invalid, | 
					
						
							|  |  |  |         Type::EndOfFile, | 
					
						
							|  |  |  |         Type::BadString, | 
					
						
							|  |  |  |         Type::BadUrl, | 
					
						
							|  |  |  |         Type::CDO, | 
					
						
							|  |  |  |         Type::CDC, | 
					
						
							|  |  |  |         Type::Colon, | 
					
						
							|  |  |  |         Type::Semicolon, | 
					
						
							|  |  |  |         Type::Comma, | 
					
						
							|  |  |  |         Type::OpenSquare, | 
					
						
							|  |  |  |         Type::CloseSquare, | 
					
						
							|  |  |  |         Type::OpenParen, | 
					
						
							|  |  |  |         Type::CloseParen, | 
					
						
							|  |  |  |         Type::OpenCurly, | 
					
						
							|  |  |  |         Type::CloseCurly)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Token token; | 
					
						
							|  |  |  |     token.m_type = type; | 
					
						
							|  |  |  |     token.m_original_source_text = move(original_source_text); | 
					
						
							|  |  |  |     return token; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Token Token::create_ident(FlyString ident, String original_source_text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Token token; | 
					
						
							|  |  |  |     token.m_type = Type::Ident; | 
					
						
							|  |  |  |     token.m_value = move(ident); | 
					
						
							|  |  |  |     token.m_original_source_text = move(original_source_text); | 
					
						
							|  |  |  |     return token; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Token Token::create_function(FlyString name, String original_source_text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Token token; | 
					
						
							|  |  |  |     token.m_type = Type::Function; | 
					
						
							|  |  |  |     token.m_value = move(name); | 
					
						
							|  |  |  |     token.m_original_source_text = move(original_source_text); | 
					
						
							|  |  |  |     return token; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Token Token::create_at_keyword(FlyString name, String original_source_text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Token token; | 
					
						
							|  |  |  |     token.m_type = Type::AtKeyword; | 
					
						
							|  |  |  |     token.m_value = move(name); | 
					
						
							|  |  |  |     token.m_original_source_text = move(original_source_text); | 
					
						
							|  |  |  |     return token; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Token Token::create_hash(FlyString value, HashType hash_type, String original_source_text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Token token; | 
					
						
							|  |  |  |     token.m_type = Type::Hash; | 
					
						
							|  |  |  |     token.m_value = move(value); | 
					
						
							|  |  |  |     token.m_hash_type = hash_type; | 
					
						
							|  |  |  |     token.m_original_source_text = move(original_source_text); | 
					
						
							|  |  |  |     return token; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Token Token::create_string(FlyString value, String original_source_text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Token token; | 
					
						
							|  |  |  |     token.m_type = Type::String; | 
					
						
							|  |  |  |     token.m_value = move(value); | 
					
						
							|  |  |  |     token.m_original_source_text = move(original_source_text); | 
					
						
							|  |  |  |     return token; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Token Token::create_url(FlyString url, String original_source_text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Token token; | 
					
						
							|  |  |  |     token.m_type = Type::Url; | 
					
						
							|  |  |  |     token.m_value = move(url); | 
					
						
							|  |  |  |     token.m_original_source_text = move(original_source_text); | 
					
						
							|  |  |  |     return token; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Token Token::create_delim(u32 delim, String original_source_text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Token token; | 
					
						
							|  |  |  |     token.m_type = Type::Delim; | 
					
						
							|  |  |  |     token.m_value = String::from_code_point(delim); | 
					
						
							|  |  |  |     token.m_original_source_text = move(original_source_text); | 
					
						
							|  |  |  |     return token; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Token Token::create_number(Number value, String original_source_text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Token token; | 
					
						
							|  |  |  |     token.m_type = Type::Number; | 
					
						
							|  |  |  |     token.m_number_value = value; | 
					
						
							|  |  |  |     token.m_original_source_text = move(original_source_text); | 
					
						
							|  |  |  |     return token; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Token Token::create_percentage(Number value, String original_source_text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Token token; | 
					
						
							|  |  |  |     token.m_type = Type::Percentage; | 
					
						
							|  |  |  |     token.m_number_value = value; | 
					
						
							|  |  |  |     token.m_original_source_text = move(original_source_text); | 
					
						
							|  |  |  |     return token; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Token Token::create_dimension(Number value, FlyString unit, String original_source_text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Token token; | 
					
						
							|  |  |  |     token.m_type = Type::Dimension; | 
					
						
							|  |  |  |     token.m_number_value = value; | 
					
						
							|  |  |  |     token.m_value = move(unit); | 
					
						
							|  |  |  |     token.m_original_source_text = move(original_source_text); | 
					
						
							|  |  |  |     return token; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Token Token::create_whitespace(String original_source_text) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Token token; | 
					
						
							|  |  |  |     token.m_type = Type::Whitespace; | 
					
						
							|  |  |  |     token.m_original_source_text = move(original_source_text); | 
					
						
							|  |  |  |     return token; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  | String Token::to_string() const | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     StringBuilder builder; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     switch (m_type) { | 
					
						
							|  |  |  |     case Type::EndOfFile: | 
					
						
							| 
									
										
										
										
											2023-02-11 16:47:52 +00:00
										 |  |  |         return String {}; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::Ident: | 
					
						
							| 
									
										
										
										
											2023-02-14 20:50:41 +00:00
										 |  |  |         return serialize_an_identifier(ident()); | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::Function: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("{}(", serialize_an_identifier(function()))); | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::AtKeyword: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("@{}", serialize_an_identifier(at_keyword()))); | 
					
						
							| 
									
										
										
										
											2022-03-19 12:16:50 +00:00
										 |  |  |     case Type::Hash: { | 
					
						
							|  |  |  |         switch (m_hash_type) { | 
					
						
							|  |  |  |         case HashType::Id: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |             return MUST(String::formatted("#{}", serialize_an_identifier(hash_value()))); | 
					
						
							| 
									
										
										
										
											2022-03-19 12:16:50 +00:00
										 |  |  |         case HashType::Unrestricted: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |             return MUST(String::formatted("#{}", hash_value())); | 
					
						
							| 
									
										
										
										
											2022-03-19 12:16:50 +00:00
										 |  |  |         } | 
					
						
							|  |  |  |         VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::String: | 
					
						
							| 
									
										
										
										
											2023-02-14 20:50:41 +00:00
										 |  |  |         return serialize_a_string(string()); | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::BadString: | 
					
						
							| 
									
										
										
										
											2023-02-11 16:47:52 +00:00
										 |  |  |         return String {}; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::Url: | 
					
						
							| 
									
										
										
										
											2023-02-14 20:50:41 +00:00
										 |  |  |         return serialize_a_url(url()); | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::BadUrl: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "url()"_string; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::Delim: | 
					
						
							| 
									
										
										
										
											2023-02-11 16:47:52 +00:00
										 |  |  |         return String { m_value }; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::Number: | 
					
						
							| 
									
										
										
										
											2024-10-14 10:05:01 +02:00
										 |  |  |         return String::number(m_number_value.value()); | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::Percentage: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("{}%", m_number_value.value())); | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::Dimension: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("{}{}", m_number_value.value(), dimension_unit())); | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::Whitespace: | 
					
						
							| 
									
										
										
										
											2023-08-07 22:26:17 -04:00
										 |  |  |         return " "_string; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::CDO: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "<!--"_string; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::CDC: | 
					
						
							| 
									
										
										
										
											2023-08-07 22:26:17 -04:00
										 |  |  |         return "-->"_string; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::Colon: | 
					
						
							| 
									
										
										
										
											2023-08-07 22:26:17 -04:00
										 |  |  |         return ":"_string; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::Semicolon: | 
					
						
							| 
									
										
										
										
											2023-08-07 22:26:17 -04:00
										 |  |  |         return ";"_string; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::Comma: | 
					
						
							| 
									
										
										
										
											2023-08-07 22:26:17 -04:00
										 |  |  |         return ","_string; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::OpenSquare: | 
					
						
							| 
									
										
										
										
											2023-08-07 22:26:17 -04:00
										 |  |  |         return "["_string; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::CloseSquare: | 
					
						
							| 
									
										
										
										
											2023-08-07 22:26:17 -04:00
										 |  |  |         return "]"_string; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::OpenParen: | 
					
						
							| 
									
										
										
										
											2023-08-07 22:26:17 -04:00
										 |  |  |         return "("_string; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::CloseParen: | 
					
						
							| 
									
										
										
										
											2023-08-07 22:26:17 -04:00
										 |  |  |         return ")"_string; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::OpenCurly: | 
					
						
							| 
									
										
										
										
											2023-08-07 22:26:17 -04:00
										 |  |  |         return "{"_string; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::CloseCurly: | 
					
						
							| 
									
										
										
										
											2023-08-07 22:26:17 -04:00
										 |  |  |         return "}"_string; | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  |     case Type::Invalid: | 
					
						
							|  |  |  |     default: | 
					
						
							|  |  |  |         VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  | String Token::to_debug_string() const | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     switch (m_type) { | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Invalid: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::EndOfFile: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "__EOF__"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Ident: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("Ident: {}", ident())); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Function: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("Function: {}", function())); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::AtKeyword: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("AtKeyword: {}", at_keyword())); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Hash: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("Hash: {} (hash_type: {})", hash_value(), m_hash_type == HashType::Unrestricted ? "Unrestricted" : "Id")); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::String: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("String: {}", string())); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::BadString: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "BadString"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Url: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("Url: {}", url())); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::BadUrl: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "BadUrl"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Delim: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("Delim: {}", m_value)); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Number: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("Number: {}{} (number_type: {})", m_number_value.value() > 0 && m_number_value.is_integer_with_explicit_sign() ? "+" : "", m_number_value.value(), m_number_value.is_integer() ? "Integer" : "Number")); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Percentage: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("Percentage: {}% (number_type: {})", percentage(), m_number_value.is_integer() ? "Integer" : "Number")); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Dimension: | 
					
						
							| 
									
										
										
										
											2023-08-22 13:00:28 +01:00
										 |  |  |         return MUST(String::formatted("Dimension: {}{} (number_type: {})", dimension_value(), dimension_unit(), m_number_value.is_integer() ? "Integer" : "Number")); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Whitespace: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "Whitespace"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::CDO: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "CDO"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::CDC: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "CDC"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Colon: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "Colon"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Semicolon: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "Semicolon"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Comma: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "Comma"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::OpenSquare: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "OpenSquare"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::CloseSquare: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "CloseSquare"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::OpenParen: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "OpenParen"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::CloseParen: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "CloseParen"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::OpenCurly: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "OpenCurly"_string; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::CloseCurly: | 
					
						
							| 
									
										
										
										
											2023-02-25 16:40:37 +01:00
										 |  |  |         return "CloseCurly"_string; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-03-22 12:32:40 +00:00
										 |  |  |     VERIFY_NOT_REACHED(); | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  | Token::Type Token::mirror_variant() const | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenCurly)) { | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |         return Type::CloseCurly; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenSquare)) { | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |         return Type::CloseSquare; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenParen)) { | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |         return Type::CloseParen; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     return Type::Invalid; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  | StringView Token::bracket_string() const | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenCurly)) { | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |         return "{"sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::CloseCurly)) { | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |         return "}"sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenSquare)) { | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |         return "["sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::CloseSquare)) { | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |         return "]"sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenParen)) { | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |         return "("sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::CloseParen)) { | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |         return ")"sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |     return ""sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  | StringView Token::bracket_mirror_string() const | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenCurly)) { | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |         return "}"sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::CloseCurly)) { | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |         return "{"sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenSquare)) { | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |         return "]"sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::CloseSquare)) { | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |         return "["sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenParen)) { | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |         return ")"sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::CloseParen)) { | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |         return "("sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-11 15:54:53 +00:00
										 |  |  |     return ""sv; | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-09 12:59:31 +01:00
										 |  |  | void Token::set_position_range(Badge<Tokenizer>, Position start, Position end) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_start_position = start; | 
					
						
							|  |  |  |     m_end_position = end; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | } |