2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/*
  
						 
					
						
							
								
									
										
										
										
											2023-02-14 19:55:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  Copyright  ( c )  2021 - 2023 ,  Sam  Atkins  < atkinssj @ serenityos . org > 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  SPDX - License - Identifier :  BSD - 2 - Clause 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <AK/StringBuilder.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <AK/Utf8View.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <LibWeb/CSS/Serialize.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								namespace  Web : : CSS  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// https://www.w3.org/TR/cssom-1/#escape-a-character
  
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  escape_a_character ( StringBuilder &  builder ,  u32  character )  
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    builder . append ( ' \\ ' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    builder . append_code_point ( character ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// https://www.w3.org/TR/cssom-1/#escape-a-character-as-code-point
  
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  escape_a_character_as_code_point ( StringBuilder &  builder ,  u32  character )  
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    builder . appendff ( " \\ {:x}  " ,  character ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// https://www.w3.org/TR/cssom-1/#serialize-an-identifier
  
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  serialize_an_identifier ( StringBuilder &  builder ,  StringView  ident )  
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Utf8View  characters  {  ident  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    auto  first_character  =  characters . is_empty ( )  ?  0  :  * characters . begin ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // To serialize an identifier means to create a string represented by the concatenation of,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // for each character of the identifier:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( auto  character  :  characters )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD).
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( character  = =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            builder . append_code_point ( 0xFFFD ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // If the character is in the range [\1-\1f] (U+0001 to U+001F) or is U+007F,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // then the character escaped as code point.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ( character  > =  0x0001  & &  character  < =  0x001F )  | |  ( character  = =  0x007F ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            escape_a_character_as_code_point ( builder ,  character ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // If the character is the first character and is in the range [0-9] (U+0030 to U+0039),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // then the character escaped as code point.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( builder . is_empty ( )  & &  character  > =  ' 0 '  & &  character  < =  ' 9 ' )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            escape_a_character_as_code_point ( builder ,  character ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // If the character is the second character and is in the range [0-9] (U+0030 to U+0039)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // and the first character is a "-" (U+002D), then the character escaped as code point.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( builder . length ( )  = =  1  & &  first_character  = =  ' - '  & &  character  > =  ' 0 '  & &  character  < =  ' 9 ' )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            escape_a_character_as_code_point ( builder ,  character ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // If the character is the first character and is a "-" (U+002D), and there is no second
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // character, then the escaped character.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( builder . is_empty ( )  & &  character  = =  ' - '  & &  characters . length ( )  = =  1 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            escape_a_character ( builder ,  character ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // If the character is not handled by one of the above rules and is greater than or equal to U+0080, is "-" (U+002D) or "_" (U+005F), or is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to U+005A), or \[a-z] (U+0061 to U+007A), then the character itself.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ( character  > =  0x0080 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            | |  ( character  = =  ' - ' )  | |  ( character  = =  ' _ ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            | |  ( character  > =  ' 0 '  & &  character  < =  ' 9 ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            | |  ( character  > =  ' A '  & &  character  < =  ' Z ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            | |  ( character  > =  ' a '  & &  character  < =  ' z ' ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            builder . append_code_point ( character ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Otherwise, the escaped character.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        escape_a_character ( builder ,  character ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// https://www.w3.org/TR/cssom-1/#serialize-a-string
  
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  serialize_a_string ( StringBuilder &  builder ,  StringView  string )  
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Utf8View  characters  {  string  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // To serialize a string means to create a string represented by '"' (U+0022), followed by the result
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // of applying the rules below to each character of the given string, followed by '"' (U+0022):
 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    builder . append ( ' " ' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    for  ( auto  character  :  characters )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD).
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( character  = =  0 )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            builder . append_code_point ( 0xFFFD ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // If the character is in the range [\1-\1f] (U+0001 to U+001F) or is U+007F, the character escaped as code point.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( ( character  > =  0x0001  & &  character  < =  0x001F )  | |  ( character  = =  0x007F ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            escape_a_character_as_code_point ( builder ,  character ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // If the character is '"' (U+0022) or "\" (U+005C), the escaped character.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  ( character  = =  0x0022  | |  character  = =  0x005C )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            escape_a_character ( builder ,  character ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            continue ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        // Otherwise, the character itself.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        builder . append_code_point ( character ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    builder . append ( ' " ' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// https://www.w3.org/TR/cssom-1/#serialize-a-url
  
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  serialize_a_url ( StringBuilder &  builder ,  StringView  url )  
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // To serialize a URL means to create a string represented by "url(",
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // followed by the serialization of the URL as a string, followed by ")".
 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    builder . append ( " url( " sv ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-01 16:45:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    serialize_a_string ( builder ,  url ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    builder . append ( ' ) ' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-11 12:20:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// https://www.w3.org/TR/cssom-1/#serialize-a-local
  
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  serialize_a_local ( StringBuilder &  builder ,  StringView  path )  
						 
					
						
							
								
									
										
										
										
											2022-09-11 12:20:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // To serialize a LOCAL means to create a string represented by "local(",
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // followed by the serialization of the LOCAL as a string, followed by ")".
 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    builder . append ( " local( " sv ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-01 16:45:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    serialize_a_string ( builder ,  path ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    builder . append ( ' ) ' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-11 12:20:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// NOTE: No spec currently exists for serializing a <'unicode-range'>.
  
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  serialize_unicode_ranges ( StringBuilder &  builder ,  Vector < UnicodeRange >  const &  unicode_ranges )  
						 
					
						
							
								
									
										
										
										
											2022-09-11 12:20:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    serialize_a_comma_separated_list ( builder ,  unicode_ranges ,  [ ] ( auto &  builder ,  UnicodeRange  unicode_range )  - >  void  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:25:30 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        return  serialize_a_string ( builder ,  unicode_range . to_string ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-11 12:20:16 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-12 15:30:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// https://www.w3.org/TR/css-color-4/#serializing-sRGB-values
  
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  serialize_a_srgb_value ( StringBuilder &  builder ,  Color  color )  
						 
					
						
							
								
									
										
										
										
											2022-07-12 15:30:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // The serialized form is derived from the computed value and thus, uses either the rgb() or rgba() form
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // (depending on whether the alpha is exactly 1, or not), with lowercase letters for the function name.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // NOTE: Since we use Gfx::Color, having an "alpha of 1" means its value is 255.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( color . alpha ( )  = =  255 ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        builder . appendff ( " rgb({}, {}, {}) " sv ,  color . red ( ) ,  color . green ( ) ,  color . blue ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-12 15:30:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    else 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        builder . appendff ( " rgba({}, {}, {}, {}) " sv ,  color . red ( ) ,  color . green ( ) ,  color . blue ( ) ,  ( float ) ( color . alpha ( ) )  /  255.0f ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-12 15:30:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								String  escape_a_character ( u32  character )  
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    StringBuilder  builder ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    escape_a_character ( builder ,  character ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  MUST ( builder . to_string ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								String  escape_a_character_as_code_point ( u32  character )  
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    StringBuilder  builder ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    escape_a_character_as_code_point ( builder ,  character ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  MUST ( builder . to_string ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								String  serialize_an_identifier ( StringView  ident )  
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    StringBuilder  builder ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    serialize_an_identifier ( builder ,  ident ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  MUST ( builder . to_string ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								String  serialize_a_string ( StringView  string )  
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    StringBuilder  builder ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    serialize_a_string ( builder ,  string ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  MUST ( builder . to_string ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								String  serialize_a_url ( StringView  url )  
						 
					
						
							
								
									
										
										
										
											2021-10-14 16:50:43 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    StringBuilder  builder ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    serialize_a_url ( builder ,  url ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  MUST ( builder . to_string ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								String  serialize_a_srgb_value ( Color  color )  
						 
					
						
							
								
									
										
										
										
											2022-07-12 15:30:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    StringBuilder  builder ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-22 12:05:44 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    serialize_a_srgb_value ( builder ,  color ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  MUST ( builder . to_string ( ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-12 15:30:13 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-06 14:27:13 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}