LibUnicode+LibWeb: Move should_continue_beyond_word helper in Segmenter

This commit is contained in:
Aliaksandr Kalenik 2024-10-31 17:56:42 +01:00 committed by Tim Ledbetter
parent fb23fd328b
commit 46db0febf7
Notes: github-actions[bot] 2024-10-31 19:05:03 +00:00
4 changed files with 16 additions and 24 deletions

View file

@ -6,6 +6,7 @@
#include <AK/Utf16View.h> #include <AK/Utf16View.h>
#include <AK/Utf32View.h> #include <AK/Utf32View.h>
#include <LibUnicode/CharacterTypes.h>
#include <LibUnicode/ICU.h> #include <LibUnicode/ICU.h>
#include <LibUnicode/Locale.h> #include <LibUnicode/Locale.h>
#include <LibUnicode/Segmenter.h> #include <LibUnicode/Segmenter.h>
@ -235,4 +236,13 @@ NonnullOwnPtr<Segmenter> Segmenter::create(StringView locale, SegmenterGranulari
return make<SegmenterImpl>(segmenter.release_nonnull(), segmenter_granularity); return make<SegmenterImpl>(segmenter.release_nonnull(), segmenter_granularity);
} }
bool Segmenter::should_continue_beyond_word(Utf8View const& word)
{
for (auto code_point : word) {
if (!code_point_has_punctuation_general_category(code_point) && !code_point_has_separator_general_category(code_point))
return false;
}
return true;
}
} }

View file

@ -27,6 +27,8 @@ public:
static NonnullOwnPtr<Segmenter> create(StringView locale, SegmenterGranularity segmenter_granularity); static NonnullOwnPtr<Segmenter> create(StringView locale, SegmenterGranularity segmenter_granularity);
virtual ~Segmenter() = default; virtual ~Segmenter() = default;
static bool should_continue_beyond_word(Utf8View const&);
SegmenterGranularity segmenter_granularity() const { return m_segmenter_granularity; } SegmenterGranularity segmenter_granularity() const { return m_segmenter_granularity; }
virtual NonnullOwnPtr<Segmenter> clone() const = 0; virtual NonnullOwnPtr<Segmenter> clone() const = 0;

View file

@ -166,16 +166,6 @@ void EditingHostManager::decrement_cursor_position_offset(CollapseSelection coll
} }
} }
static bool should_continue_beyond_word(Utf8View const& word)
{
for (auto code_point : word) {
if (!Unicode::code_point_has_punctuation_general_category(code_point) && !Unicode::code_point_has_separator_general_category(code_point))
return false;
}
return true;
}
void EditingHostManager::increment_cursor_position_to_next_word(CollapseSelection collapse) void EditingHostManager::increment_cursor_position_to_next_word(CollapseSelection collapse)
{ {
auto selection = m_document->get_selection(); auto selection = m_document->get_selection();
@ -200,7 +190,7 @@ void EditingHostManager::increment_cursor_position_to_next_word(CollapseSelectio
} else { } else {
MUST(selection->set_base_and_extent(*node, selection->anchor_offset(), *node, *offset)); MUST(selection->set_base_and_extent(*node, selection->anchor_offset(), *node, *offset));
} }
if (should_continue_beyond_word(word)) if (Unicode::Segmenter::should_continue_beyond_word(word))
continue; continue;
} }
break; break;
@ -227,7 +217,7 @@ void EditingHostManager::decrement_cursor_position_to_previous_word(CollapseSele
} else { } else {
MUST(selection->set_base_and_extent(*node, selection->anchor_offset(), *node, *offset)); MUST(selection->set_base_and_extent(*node, selection->anchor_offset(), *node, *offset));
} }
if (should_continue_beyond_word(word)) if (Unicode::Segmenter::should_continue_beyond_word(word))
continue; continue;
} }
break; break;

View file

@ -757,16 +757,6 @@ void FormAssociatedTextControlElement::decrement_cursor_position_offset(Collapse
selection_was_changed(); selection_was_changed();
} }
static bool should_continue_beyond_word(Utf8View const& word)
{
for (auto code_point : word) {
if (!Unicode::code_point_has_punctuation_general_category(code_point) && !Unicode::code_point_has_separator_general_category(code_point))
return false;
}
return true;
}
void FormAssociatedTextControlElement::increment_cursor_position_to_next_word(CollapseSelection collapse) void FormAssociatedTextControlElement::increment_cursor_position_to_next_word(CollapseSelection collapse)
{ {
auto const text_node = form_associated_element_to_text_node(); auto const text_node = form_associated_element_to_text_node();
@ -781,7 +771,7 @@ void FormAssociatedTextControlElement::increment_cursor_position_to_next_word(Co
} else { } else {
m_selection_end = *offset; m_selection_end = *offset;
} }
if (should_continue_beyond_word(word)) if (Unicode::Segmenter::should_continue_beyond_word(word))
continue; continue;
} }
break; break;
@ -804,7 +794,7 @@ void FormAssociatedTextControlElement::decrement_cursor_position_to_previous_wor
} else { } else {
m_selection_end = *offset; m_selection_end = *offset;
} }
if (should_continue_beyond_word(word)) if (Unicode::Segmenter::should_continue_beyond_word(word))
continue; continue;
} }
break; break;