| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2021-04-28 22:46:44 +02:00
										 |  |  |  * Copyright (c) 2020-2021, the SerenityOS developers. | 
					
						
							| 
									
										
										
										
											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
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <AK/String.h>
 | 
					
						
							|  |  |  | #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
										 |  |  | 
 | 
					
						
							|  |  |  | namespace Web::CSS { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 12:57:21 +00:00
										 |  |  | String Token::to_string() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     StringBuilder builder; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     switch (m_type) { | 
					
						
							|  |  |  |     case Type::EndOfFile: | 
					
						
							|  |  |  |         return ""; | 
					
						
							|  |  |  |     case Type::Ident: | 
					
						
							|  |  |  |         return serialize_an_identifier(ident()); | 
					
						
							|  |  |  |     case Type::Function: | 
					
						
							|  |  |  |         return String::formatted("{}(", serialize_an_identifier(function())); | 
					
						
							|  |  |  |     case Type::AtKeyword: | 
					
						
							|  |  |  |         return String::formatted("@{}", serialize_an_identifier(at_keyword())); | 
					
						
							|  |  |  |     case Type::Hash: | 
					
						
							|  |  |  |         return String::formatted("#{}", serialize_an_identifier(hash_value())); | 
					
						
							|  |  |  |     case Type::String: | 
					
						
							|  |  |  |         return serialize_a_string(string()); | 
					
						
							|  |  |  |     case Type::BadString: | 
					
						
							|  |  |  |         return ""; | 
					
						
							|  |  |  |     case Type::Url: | 
					
						
							|  |  |  |         return serialize_a_url(url()); | 
					
						
							|  |  |  |     case Type::BadUrl: | 
					
						
							|  |  |  |         return "url()"; | 
					
						
							|  |  |  |     case Type::Delim: | 
					
						
							|  |  |  |         return m_value; | 
					
						
							|  |  |  |     case Type::Number: | 
					
						
							|  |  |  |         return String::number(m_number_value); | 
					
						
							|  |  |  |     case Type::Percentage: | 
					
						
							|  |  |  |         return String::formatted("{}%", m_number_value); | 
					
						
							|  |  |  |     case Type::Dimension: | 
					
						
							|  |  |  |         return String::formatted("{}{}", m_number_value, m_unit); | 
					
						
							|  |  |  |     case Type::Whitespace: | 
					
						
							|  |  |  |         return " "; | 
					
						
							|  |  |  |     case Type::CDO: | 
					
						
							|  |  |  |         return "<!--"; | 
					
						
							|  |  |  |     case Type::CDC: | 
					
						
							|  |  |  |         return "-->"; | 
					
						
							|  |  |  |     case Type::Colon: | 
					
						
							|  |  |  |         return ":"; | 
					
						
							|  |  |  |     case Type::Semicolon: | 
					
						
							|  |  |  |         return ";"; | 
					
						
							|  |  |  |     case Type::Comma: | 
					
						
							|  |  |  |         return ","; | 
					
						
							|  |  |  |     case Type::OpenSquare: | 
					
						
							|  |  |  |         return "["; | 
					
						
							|  |  |  |     case Type::CloseSquare: | 
					
						
							|  |  |  |         return "]"; | 
					
						
							|  |  |  |     case Type::OpenParen: | 
					
						
							|  |  |  |         return "("; | 
					
						
							|  |  |  |     case Type::CloseParen: | 
					
						
							|  |  |  |         return ")"; | 
					
						
							|  |  |  |     case Type::OpenCurly: | 
					
						
							|  |  |  |         return "{"; | 
					
						
							|  |  |  |     case Type::CloseCurly: | 
					
						
							|  |  |  |         return "}"; | 
					
						
							|  |  |  |     case Type::Invalid: | 
					
						
							|  |  |  |     default: | 
					
						
							|  |  |  |         VERIFY_NOT_REACHED(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-07 21:29:24 +01:00
										 |  |  | String Token::to_debug_string() const | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     StringBuilder builder; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("__EOF__"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Ident: | 
					
						
							| 
									
										
										
										
											2021-07-07 21:29:24 +01:00
										 |  |  |         builder.append("Identifier: "); | 
					
						
							| 
									
										
										
										
											2021-11-18 12:30:46 +00:00
										 |  |  |         builder.append(m_value); | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return builder.to_string(); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Function: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("Function"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::AtKeyword: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("@"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Hash: | 
					
						
							| 
									
										
										
										
											2021-07-07 21:29:24 +01:00
										 |  |  |         builder.append("Hash: "); | 
					
						
							| 
									
										
										
										
											2021-11-18 12:30:46 +00:00
										 |  |  |         builder.append(m_value); | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return builder.to_string(); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::String: | 
					
						
							| 
									
										
										
										
											2021-07-07 21:29:24 +01:00
										 |  |  |         builder.append("String: "); | 
					
						
							| 
									
										
										
										
											2021-11-18 12:30:46 +00:00
										 |  |  |         builder.append(m_value); | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return builder.to_string(); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::BadString: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("Invalid String"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Url: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("Url"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::BadUrl: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("Invalid Url"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Delim: | 
					
						
							| 
									
										
										
										
											2021-07-07 21:29:24 +01:00
										 |  |  |         builder.append("Delimiter: "); | 
					
						
							| 
									
										
										
										
											2021-11-18 12:30:46 +00:00
										 |  |  |         builder.append(m_value); | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return builder.to_string(); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Number: | 
					
						
							| 
									
										
										
										
											2021-07-07 21:29:24 +01:00
										 |  |  |         builder.append("Number: "); | 
					
						
							| 
									
										
										
										
											2021-11-18 12:30:46 +00:00
										 |  |  |         builder.append(m_value); | 
					
						
							| 
									
										
										
										
											2021-07-24 21:22:44 +01:00
										 |  |  |         builder.append(m_number_type == NumberType::Integer ? " (int)" : " (float)"); | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return builder.to_string(); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Percentage: | 
					
						
							| 
									
										
										
										
											2021-07-07 21:29:24 +01:00
										 |  |  |         builder.append("Percentage: "); | 
					
						
							| 
									
										
										
										
											2021-11-18 12:30:46 +00:00
										 |  |  |         builder.append(m_value); | 
					
						
							| 
									
										
										
										
											2021-10-28 12:01:15 +01:00
										 |  |  |         builder.append('%'); | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return builder.to_string(); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Dimension: | 
					
						
							| 
									
										
										
										
											2021-07-07 21:29:24 +01:00
										 |  |  |         builder.append("Dimension: "); | 
					
						
							| 
									
										
										
										
											2021-11-18 12:30:46 +00:00
										 |  |  |         builder.append(m_value); | 
					
						
							| 
									
										
										
										
											2021-10-28 12:01:15 +01:00
										 |  |  |         builder.append(m_unit); | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return builder.to_string(); | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Whitespace: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("Whitespace"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::CDO: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("CDO"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::CDC: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("CDC"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Colon: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append(":"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Semicolon: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append(";"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::Comma: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append(","); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::OpenSquare: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("["); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::CloseSquare: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("]"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::OpenParen: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("("); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::CloseParen: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append(")"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::OpenCurly: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("{"); | 
					
						
							|  |  |  |         break; | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     case Type::CloseCurly: | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("}"); | 
					
						
							|  |  |  |         break; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (m_value.is_empty()) { | 
					
						
							|  |  |  |         return builder.to_string(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     builder.append(" "); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     builder.append(" { value: '"); | 
					
						
							| 
									
										
										
										
											2021-11-18 12:30:46 +00:00
										 |  |  |     builder.append(m_value); | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     if (m_type == Token::Type::Hash) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("', hash_type: '"); | 
					
						
							|  |  |  |         if (m_hash_type == Token::HashType::Unrestricted) { | 
					
						
							|  |  |  |             builder.append("Unrestricted"); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             builder.append("Id"); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     if (m_type == Token::Type::Number) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("', number_type: '"); | 
					
						
							|  |  |  |         if (m_number_type == Token::NumberType::Integer) { | 
					
						
							|  |  |  |             builder.append("Integer"); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             builder.append("Number"); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-09 20:54:06 +01:00
										 |  |  |     if (m_type == Token::Type::Dimension) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         builder.append("', number_type: '"); | 
					
						
							|  |  |  |         if (m_number_type == Token::NumberType::Integer) { | 
					
						
							|  |  |  |             builder.append("Integer"); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             builder.append("Number"); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         builder.append("', unit: '"); | 
					
						
							| 
									
										
										
										
											2021-10-28 12:01:15 +01:00
										 |  |  |         builder.append(m_unit); | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     builder.append("' }"); | 
					
						
							|  |  |  |     return builder.to_string(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | String Token::bracket_string() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenCurly)) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return "{"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::CloseCurly)) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return "}"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenSquare)) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return "["; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::CloseSquare)) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return "]"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenParen)) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return "("; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::CloseParen)) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return ")"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return ""; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | String Token::bracket_mirror_string() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenCurly)) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return "}"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::CloseCurly)) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return "{"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenSquare)) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return "]"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::CloseSquare)) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return "["; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::OpenParen)) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return ")"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-03 15:06:53 +01:00
										 |  |  |     if (is(Token::Type::CloseParen)) { | 
					
						
							| 
									
										
										
										
											2021-03-09 17:18:08 +01:00
										 |  |  |         return "("; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return ""; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |