diff --git a/AK/StringBuilder.cpp b/AK/StringBuilder.cpp index bd375900a0..5a12df2a63 100644 --- a/AK/StringBuilder.cpp +++ b/AK/StringBuilder.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include namespace AK { @@ -112,6 +113,16 @@ void StringBuilder::append_code_point(u32 code_point) } } +void StringBuilder::append(Utf16View const& utf16_view) +{ + for (size_t i = 0; i < utf16_view.length_in_code_units();) { + auto code_point = utf16_view.code_point_at(i); + append_code_point(code_point); + + i += (code_point > 0xffff ? 2 : 1); + } +} + void StringBuilder::append(Utf32View const& utf32_view) { for (size_t i = 0; i < utf32_view.length(); ++i) { diff --git a/AK/StringBuilder.h b/AK/StringBuilder.h index 0bc99c450b..6f3d0b5380 100644 --- a/AK/StringBuilder.h +++ b/AK/StringBuilder.h @@ -22,6 +22,7 @@ public: ~StringBuilder() = default; void append(StringView const&); + void append(Utf16View const&); void append(Utf32View const&); void append(char); void append_code_point(u32); diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index 1ac315a2d8..b0b12804f9 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -312,6 +312,8 @@ set(AK_SOURCES ../AK/Time.cpp ../AK/Format.cpp ../AK/UUID.cpp + ../AK/Utf8View.cpp + ../AK/Utf16View.cpp ) set(ELF_SOURCES