summaryrefslogtreecommitdiff
path: root/Userland/Libraries
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries')
-rw-r--r--Userland/Libraries/LibGUI/EditingEngine.cpp254
-rw-r--r--Userland/Libraries/LibGUI/EditingEngine.h8
2 files changed, 0 insertions, 262 deletions
diff --git a/Userland/Libraries/LibGUI/EditingEngine.cpp b/Userland/Libraries/LibGUI/EditingEngine.cpp
index 34f6f56e69..46d43eb90c 100644
--- a/Userland/Libraries/LibGUI/EditingEngine.cpp
+++ b/Userland/Libraries/LibGUI/EditingEngine.cpp
@@ -11,16 +11,6 @@
namespace GUI {
-constexpr bool is_vim_alphanumeric(u32 code_point)
-{
- return is_ascii_alphanumeric(code_point) || code_point == '_';
-}
-
-constexpr bool is_vim_punctuation(u32 code_point)
-{
- return is_ascii_punctuation(code_point) && code_point != '_';
-}
-
void EditingEngine::attach(TextEditor& editor)
{
VERIFY(!m_editor);
@@ -378,250 +368,6 @@ void EditingEngine::get_selection_line_boundaries(size_t& first_line, size_t& la
last_line -= 1;
}
-TextPosition EditingEngine::find_beginning_of_next_word()
-{
- /* The rules that have been coded in:
- * Jump to the next punct or alnum after any whitespace
- * Jump to the next non-consecutive punct regardless of whitespace
- * Jump to the next alnum if started on punct regardless of whitespace
- * If the end of the input is reached, jump there
- */
-
- bool started_on_punct = is_vim_punctuation(m_editor->current_line().to_utf8().characters()[m_editor->cursor().column()]);
- bool has_seen_whitespace = false;
- bool is_first_line = true;
- auto& lines = m_editor->lines();
- auto cursor = m_editor->cursor();
- for (size_t line_index = cursor.line(); line_index < lines.size(); line_index++) {
- auto& line = lines.at(line_index);
-
- if (line.is_empty() && !is_first_line) {
- return { line_index, 0 };
- } else if (line.is_empty()) {
- has_seen_whitespace = true;
- }
-
- is_first_line = false;
-
- for (size_t column_index = 0; column_index < lines.at(line_index).length(); column_index++) {
- if (line_index == cursor.line() && column_index < cursor.column())
- continue;
- u32 const* line_chars = line.view().code_points();
- const u32 current_char = line_chars[column_index];
-
- if (started_on_punct && is_vim_alphanumeric(current_char)) {
- return { line_index, column_index };
- }
-
- if (is_vim_punctuation(current_char) && !started_on_punct) {
- return { line_index, column_index };
- }
-
- if (is_ascii_space(current_char))
- has_seen_whitespace = true;
-
- if (has_seen_whitespace && (is_vim_alphanumeric(current_char) || is_vim_punctuation(current_char))) {
- return { line_index, column_index };
- }
-
- if (line_index == lines.size() - 1 && column_index == line.length() - 1) {
- return { line_index, column_index };
- }
-
- // Implicit newline
- if (column_index == line.length() - 1)
- has_seen_whitespace = true;
- }
- }
- VERIFY_NOT_REACHED();
-}
-
-void EditingEngine::move_to_beginning_of_next_word()
-{
- m_editor->set_cursor(find_beginning_of_next_word());
-}
-
-TextPosition EditingEngine::find_end_of_next_word()
-{
- /* The rules that have been coded in:
- * If the current_char is alnum and the next is whitespace or punct
- * If the current_char is punct and the next is whitespace or alnum
- * If the end of the input is reached, jump there
- */
-
- bool is_first_line = true;
- bool is_first_iteration = true;
- auto& lines = m_editor->lines();
- auto cursor = m_editor->cursor();
-
- if ((lines.at(cursor.line()).length() - cursor.column()) <= 1)
- return { cursor.line(), cursor.column() };
-
- for (size_t line_index = cursor.line(); line_index < lines.size(); line_index++) {
- auto& line = lines.at(line_index);
-
- if (line.is_empty() && !is_first_line) {
- return { line_index, 0 };
- }
-
- is_first_line = false;
-
- for (size_t column_index = 0; column_index < lines.at(line_index).length(); column_index++) {
- if (line_index == cursor.line() && column_index < cursor.column())
- continue;
-
- u32 const* line_chars = line.view().code_points();
- const u32 current_char = line_chars[column_index];
-
- if (column_index == lines.at(line_index).length() - 1 && !is_first_iteration && (is_vim_alphanumeric(current_char) || is_vim_punctuation(current_char)))
- return { line_index, column_index };
- else if (column_index == lines.at(line_index).length() - 1) {
- is_first_iteration = false;
- continue;
- }
-
- const u32 next_char = line_chars[column_index + 1];
-
- if (!is_first_iteration && is_vim_alphanumeric(current_char) && (is_ascii_space(next_char) || is_vim_punctuation(next_char)))
- return { line_index, column_index };
-
- if (!is_first_iteration && is_vim_punctuation(current_char) && (is_ascii_space(next_char) || is_vim_alphanumeric(next_char)))
- return { line_index, column_index };
-
- if (line_index == lines.size() - 1 && column_index == line.length() - 1) {
- return { line_index, column_index };
- }
-
- is_first_iteration = false;
- }
- }
- VERIFY_NOT_REACHED();
-}
-
-void EditingEngine::move_to_end_of_next_word()
-{
- m_editor->set_cursor(find_end_of_next_word());
-}
-
-TextPosition EditingEngine::find_end_of_previous_word()
-{
- bool started_on_punct = is_vim_punctuation(m_editor->current_line().to_utf8().characters()[m_editor->cursor().column()]);
- bool is_first_line = true;
- bool has_seen_whitespace = false;
- auto& lines = m_editor->lines();
- auto cursor = m_editor->cursor();
- for (size_t line_index = cursor.line(); (int)line_index >= 0; line_index--) {
- auto& line = lines.at(line_index);
-
- if (line.is_empty() && !is_first_line) {
- return { line_index, 0 };
- } else if (line.is_empty()) {
- has_seen_whitespace = true;
- }
-
- is_first_line = false;
-
- size_t line_length = lines.at(line_index).length();
- for (size_t column_index = line_length - 1; (int)column_index >= 0; column_index--) {
- if (line_index == cursor.line() && column_index > cursor.column())
- continue;
-
- u32 const* line_chars = line.view().code_points();
- const u32 current_char = line_chars[column_index];
-
- if (started_on_punct && is_vim_alphanumeric(current_char)) {
- return { line_index, column_index };
- }
-
- if (is_vim_punctuation(current_char) && !started_on_punct) {
- return { line_index, column_index };
- }
-
- if (is_ascii_space(current_char)) {
- has_seen_whitespace = true;
- }
-
- if (has_seen_whitespace && (is_vim_alphanumeric(current_char) || is_vim_punctuation(current_char))) {
- return { line_index, column_index };
- }
-
- if (line_index == 0 && column_index == 0) {
- return { line_index, column_index };
- }
-
- // Implicit newline when wrapping back up to the end of the previous line.
- if (column_index == 0)
- has_seen_whitespace = true;
- }
- }
- VERIFY_NOT_REACHED();
-}
-
-void EditingEngine::move_to_end_of_previous_word()
-{
- m_editor->set_cursor(find_end_of_previous_word());
-}
-
-TextPosition EditingEngine::find_beginning_of_previous_word()
-{
- bool is_first_iterated_line = true;
- bool is_first_iteration = true;
- auto& lines = m_editor->lines();
- auto cursor = m_editor->cursor();
-
- if ((lines.at(cursor.line()).length() - cursor.column()) <= 1)
- return { cursor.line(), cursor.column() };
-
- for (size_t line_index = cursor.line(); (int)line_index >= 0; line_index--) {
- auto& line = lines.at(line_index);
-
- if (line.is_empty() && !is_first_iterated_line) {
- return { line_index, 0 };
- }
-
- is_first_iterated_line = false;
-
- size_t line_length = lines.at(line_index).length();
- for (size_t column_index = line_length; (int)column_index >= 0; column_index--) {
- if (line_index == cursor.line() && column_index > cursor.column())
- continue;
-
- if (column_index == line_length) {
- is_first_iteration = false;
- continue;
- }
-
- u32 const* line_chars = line.view().code_points();
- const u32 current_char = line_chars[column_index];
-
- if (column_index == 0 && !is_first_iteration && (is_vim_alphanumeric(current_char) || is_vim_punctuation(current_char))) {
- return { line_index, column_index };
- } else if (line_index == 0 && column_index == 0) {
- return { line_index, column_index };
- } else if (column_index == 0 && is_first_iteration) {
- is_first_iteration = false;
- continue;
- }
-
- const u32 next_char = line_chars[column_index - 1];
-
- if (!is_first_iteration && is_vim_alphanumeric(current_char) && (is_ascii_space(next_char) || is_vim_punctuation(next_char)))
- return { line_index, column_index };
-
- if (!is_first_iteration && is_vim_punctuation(current_char) && (is_ascii_space(next_char) || is_vim_alphanumeric(next_char)))
- return { line_index, column_index };
-
- is_first_iteration = false;
- }
- }
- VERIFY_NOT_REACHED();
-}
-
-void EditingEngine::move_to_beginning_of_previous_word()
-{
- m_editor->set_cursor(find_beginning_of_previous_word());
-}
-
void EditingEngine::move_selected_lines_up()
{
if (!m_editor->is_editable())
diff --git a/Userland/Libraries/LibGUI/EditingEngine.h b/Userland/Libraries/LibGUI/EditingEngine.h
index bef68b2200..e3692feb03 100644
--- a/Userland/Libraries/LibGUI/EditingEngine.h
+++ b/Userland/Libraries/LibGUI/EditingEngine.h
@@ -64,14 +64,6 @@ protected:
void move_page_down();
void move_to_first_line();
void move_to_last_line();
- TextPosition find_beginning_of_next_word();
- void move_to_beginning_of_next_word();
- TextPosition find_end_of_next_word();
- void move_to_end_of_next_word();
- TextPosition find_end_of_previous_word();
- void move_to_end_of_previous_word();
- TextPosition find_beginning_of_previous_word();
- void move_to_beginning_of_previous_word();
void move_up(double page_height_factor);
void move_down(double page_height_factor);