mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 06:12:43 +00:00 
			
		
		
		
	LibWeb: Implement ASCII case-insensitive matching
While DeprecatedString and StringView use ASCII case-insensitivity when matching, String uses the Unicode rules, so in order to match the spec, we need to *not* use `String::equals_ignoring_case()`. This function needs to be used everywhere that the spec refers to an "ASCII case-insensitive match".
This commit is contained in:
		
							parent
							
								
									1453ac79e7
								
							
						
					
					
						commit
						a419039bb2
					
				
					 2 changed files with 28 additions and 0 deletions
				
			
		|  | @ -2,10 +2,12 @@ | |||
|  * Copyright (c) 2022, Linus Groh <linusg@serenityos.org> | ||||
|  * Copyright (c) 2022, networkException <networkexception@serenityos.org> | ||||
|  * Copyright (c) 2023, Kenneth Myhra <kennethmyhra@serenityos.org> | ||||
|  * Copyright (c) 2023, Sam Atkins <atkinssj@serenityos.org> | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
| 
 | ||||
| #include <AK/CharacterTypes.h> | ||||
| #include <AK/DeprecatedString.h> | ||||
| #include <AK/Utf16View.h> | ||||
| #include <AK/Utf8View.h> | ||||
|  | @ -14,6 +16,30 @@ | |||
| 
 | ||||
| namespace Web::Infra { | ||||
| 
 | ||||
| // https://infra.spec.whatwg.org/#ascii-case-insensitive
 | ||||
| bool is_ascii_case_insensitive_match(StringView a, StringView b) | ||||
| { | ||||
|     // A string A is an ASCII case-insensitive match for a string B,
 | ||||
|     // if the ASCII lowercase of A is the ASCII lowercase of B.
 | ||||
| 
 | ||||
|     Utf8View a_view { a }; | ||||
|     Utf8View b_view { b }; | ||||
| 
 | ||||
|     if (a_view.length() != b_view.length()) | ||||
|         return false; | ||||
| 
 | ||||
|     auto b_iterator = b_view.begin(); | ||||
|     for (auto a_char : a_view) { | ||||
|         auto b_char = *b_iterator; | ||||
|         ++b_iterator; | ||||
| 
 | ||||
|         if (to_ascii_lowercase(a_char) != to_ascii_lowercase(b_char)) | ||||
|             return false; | ||||
|     } | ||||
| 
 | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
 | ||||
| DeprecatedString strip_and_collapse_whitespace(StringView string) | ||||
| { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Sam Atkins
						Sam Atkins