From 71967bc5de7c11801b7ce152da624458243cb0d0 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Mon, 20 Feb 2023 14:06:19 -0500 Subject: [PATCH] LibGfx: Implement Emoji::emoji_for_code_point_iterator for UTF-32 views --- Userland/Libraries/LibGfx/Font/Emoji.cpp | 16 ++++++++++++++-- Userland/Libraries/LibGfx/Font/Emoji.h | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibGfx/Font/Emoji.cpp b/Userland/Libraries/LibGfx/Font/Emoji.cpp index fcb81f895c..17aa9bcd15 100644 --- a/Userland/Libraries/LibGfx/Font/Emoji.cpp +++ b/Userland/Libraries/LibGfx/Font/Emoji.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -44,7 +45,8 @@ Bitmap const* Emoji::emoji_for_code_points(ReadonlySpan const& code_points) return bitmap.ptr(); } -Bitmap const* Emoji::emoji_for_code_point_iterator(Utf8CodePointIterator& it) +template +static Bitmap const* emoji_for_code_point_iterator_impl(CodePointIterator& it) { // NOTE: I'm sure this could be more efficient, e.g. by checking if each code point falls // into a certain range in the loop below (emojis, modifiers, variation selectors, ZWJ), @@ -105,7 +107,7 @@ Bitmap const* Emoji::emoji_for_code_point_iterator(Utf8CodePointIterator& it) } else { code_points.append(*code_point); } - if (auto const* emoji = emoji_for_code_points(code_points)) { + if (auto const* emoji = Emoji::emoji_for_code_points(code_points)) { u8 real_codepoint_length = i + 1; possible_emojis.empend(emoji, code_points, real_codepoint_length); last_codepoint_sequence_found = true; @@ -130,4 +132,14 @@ Bitmap const* Emoji::emoji_for_code_point_iterator(Utf8CodePointIterator& it) return emoji; } +Bitmap const* Emoji::emoji_for_code_point_iterator(Utf8CodePointIterator& it) +{ + return emoji_for_code_point_iterator_impl(it); +} + +Bitmap const* Emoji::emoji_for_code_point_iterator(Utf32CodePointIterator& it) +{ + return emoji_for_code_point_iterator_impl(it); +} + } diff --git a/Userland/Libraries/LibGfx/Font/Emoji.h b/Userland/Libraries/LibGfx/Font/Emoji.h index 3e003c9208..e59ca8a6b0 100644 --- a/Userland/Libraries/LibGfx/Font/Emoji.h +++ b/Userland/Libraries/LibGfx/Font/Emoji.h @@ -8,6 +8,7 @@ #pragma once #include +#include #include namespace Gfx { @@ -19,6 +20,7 @@ public: static Gfx::Bitmap const* emoji_for_code_point(u32 code_point); static Gfx::Bitmap const* emoji_for_code_points(ReadonlySpan const&); static Gfx::Bitmap const* emoji_for_code_point_iterator(Utf8CodePointIterator&); + static Gfx::Bitmap const* emoji_for_code_point_iterator(Utf32CodePointIterator&); }; }