mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 15:40:19 +00:00
LibUnicode+LibWeb: Move should_continue_beyond_word helper in Segmenter
This commit is contained in:
parent
fb23fd328b
commit
46db0febf7
Notes:
github-actions[bot]
2024-10-31 19:05:03 +00:00
Author: https://github.com/kalenikaliaksandr Commit: https://github.com/LadybirdBrowser/ladybird/commit/46db0febf73 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/2091 Reviewed-by: https://github.com/trflynn89 ✅
4 changed files with 16 additions and 24 deletions
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue