1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 04:17:35 +00:00

AK: Add a String factory to create a string from a single code point

This commit is contained in:
Timothy Flynn 2023-01-21 12:34:01 -05:00 committed by Linus Groh
parent 8aca8e82cb
commit 12c8bc3e85
2 changed files with 43 additions and 1 deletions

View file

@ -1,11 +1,13 @@
/*
* Copyright (c) 2018-2022, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/CharacterTypes.h>
#include <AK/Concepts.h>
#include <AK/Format.h>
#include <AK/Forward.h>
@ -16,6 +18,7 @@
#include <AK/StringView.h>
#include <AK/Traits.h>
#include <AK/Types.h>
#include <AK/UnicodeUtils.h>
#include <AK/Vector.h>
namespace AK {
@ -74,6 +77,22 @@ public:
return String { short_string };
}
// Creates a new String from a single code point.
static constexpr String from_code_point(u32 code_point)
{
VERIFY(is_unicode(code_point));
ShortString short_string;
size_t i = 0;
auto length = UnicodeUtils::code_point_to_utf8(code_point, [&](auto byte) {
short_string.storage[i++] = static_cast<u8>(byte);
});
short_string.byte_count_and_short_string_flag = (length << 1) | SHORT_STRING_FLAG;
return String { short_string };
}
// Creates a new String by case-transforming this String. Using these methods require linking LibUnicode into your application.
ErrorOr<String> to_lowercase(Optional<StringView> const& locale = {}) const;
ErrorOr<String> to_uppercase(Optional<StringView> const& locale = {}) const;