mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 21:12:43 +00:00 
			
		
		
		
	 1f0f96e6d7
			
		
	
	
		1f0f96e6d7
		
	
	
	
	
		
			
			Past a few hundred matches, the search is no longer useful, and takes an excessive amount of time to recalculate the column widths by measuring thousands of pieces of text. 250 seems like a reasonable arbitrary limit, and keeps things nice and snappy. :^)
		
			
				
	
	
		
			25 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			25 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2022-2023, Sam Atkins <atkinssj@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #include "SearchCharacters.h"
 | |
| #include <LibUnicode/CharacterTypes.h>
 | |
| 
 | |
| void for_each_character_containing(StringView query, Function<IterationDecision(u32 code_point, DeprecatedString const& display_name)> callback)
 | |
| {
 | |
|     DeprecatedString uppercase_query = query.to_uppercase_string();
 | |
|     StringView uppercase_query_view = uppercase_query.view();
 | |
|     constexpr u32 maximum_code_point = 0x10FFFF;
 | |
|     // FIXME: There's probably a better way to do this than just looping, but it still only takes ~150ms to run for me!
 | |
|     for (u32 code_point = 1; code_point <= maximum_code_point; ++code_point) {
 | |
|         if (auto maybe_display_name = Unicode::code_point_display_name(code_point); maybe_display_name.has_value()) {
 | |
|             auto display_name = maybe_display_name.release_value();
 | |
|             if (display_name.contains(uppercase_query_view, AK::CaseSensitivity::CaseSensitive)) {
 | |
|                 if (callback(code_point, move(display_name)) == IterationDecision::Break)
 | |
|                     break;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |