From 3974996e95582fb9fb3f952ac0cc76c11d239061 Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Wed, 19 Jun 2024 13:14:54 -0400 Subject: [PATCH] LibLine: Port text segmentation to the ICU text segmenter --- Userland/Libraries/LibLine/CMakeLists.txt | 2 +- Userland/Libraries/LibLine/Editor.cpp | 12 ++++-------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/Userland/Libraries/LibLine/CMakeLists.txt b/Userland/Libraries/LibLine/CMakeLists.txt index b9bda963671..03fbdfc2dec 100644 --- a/Userland/Libraries/LibLine/CMakeLists.txt +++ b/Userland/Libraries/LibLine/CMakeLists.txt @@ -7,4 +7,4 @@ set(SOURCES ) serenity_lib(LibLine line) -target_link_libraries(LibLine PRIVATE LibCore LibUnicode) +target_link_libraries(LibLine PRIVATE LibCore LibLocale) diff --git a/Userland/Libraries/LibLine/Editor.cpp b/Userland/Libraries/LibLine/Editor.cpp index fb2d553b8d6..8add754e176 100644 --- a/Userland/Libraries/LibLine/Editor.cpp +++ b/Userland/Libraries/LibLine/Editor.cpp @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include #include @@ -1916,8 +1916,10 @@ StringMetrics Editor::actual_rendered_string_metrics(Utf32View const& view, RedB auto mask_it = masks.begin(); + auto segmenter = Locale::Segmenter::create(Locale::SegmenterGranularity::Grapheme); Vector grapheme_breaks; - Unicode::for_each_grapheme_segmentation_boundary(view, [&](size_t offset) -> IterationDecision { + + segmenter->for_each_boundary(view, [&](size_t offset) -> IterationDecision { if (offset >= view.length()) return IterationDecision::Break; @@ -1925,12 +1927,6 @@ StringMetrics Editor::actual_rendered_string_metrics(Utf32View const& view, RedB return IterationDecision::Continue; }); - // In case Unicode data isn't available, default to using code points as grapheme boundaries. - if (grapheme_breaks.is_empty()) { - for (size_t i = 0; i < view.length(); ++i) - grapheme_breaks.append(i); - } - for (size_t break_index = 0; break_index < grapheme_breaks.size(); ++break_index) { auto i = grapheme_breaks[break_index]; auto c = view[i];