Serenity Operating System
at master 25 lines 1.1 kB view raw
1/* 2 * Copyright (c) 2022-2023, Sam Atkins <atkinssj@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include "SearchCharacters.h" 8#include <LibUnicode/CharacterTypes.h> 9 10void for_each_character_containing(StringView query, Function<IterationDecision(u32 code_point, DeprecatedString const& display_name)> callback) 11{ 12 DeprecatedString uppercase_query = query.to_uppercase_string(); 13 StringView uppercase_query_view = uppercase_query.view(); 14 constexpr u32 maximum_code_point = 0x10FFFF; 15 // FIXME: There's probably a better way to do this than just looping, but it still only takes ~150ms to run for me! 16 for (u32 code_point = 1; code_point <= maximum_code_point; ++code_point) { 17 if (auto maybe_display_name = Unicode::code_point_display_name(code_point); maybe_display_name.has_value()) { 18 auto display_name = maybe_display_name.release_value(); 19 if (display_name.contains(uppercase_query_view, AK::CaseSensitivity::CaseSensitive)) { 20 if (callback(code_point, move(display_name)) == IterationDecision::Break) 21 break; 22 } 23 } 24 } 25}