From 46043b71cb6a7ea7c73232b4f3f8529f41b229b9 Mon Sep 17 00:00:00 2001 From: thankyouverycool <66646555+thankyouverycool@users.noreply.github.com> Date: Sat, 18 Sep 2021 16:31:47 -0400 Subject: [PATCH] LibGUI: Add number_of_words() to TextEditors Returns the total number of words in a document. --- Userland/Libraries/LibGUI/TextEditor.cpp | 23 +++++++++++++++++++++++ Userland/Libraries/LibGUI/TextEditor.h | 1 + 2 files changed, 24 insertions(+) diff --git a/Userland/Libraries/LibGUI/TextEditor.cpp b/Userland/Libraries/LibGUI/TextEditor.cpp index ba97cfa2ebc..b5ba7837149 100644 --- a/Userland/Libraries/LibGUI/TextEditor.cpp +++ b/Userland/Libraries/LibGUI/TextEditor.cpp @@ -1335,6 +1335,29 @@ size_t TextEditor::number_of_selected_words() const return word_count; } +size_t TextEditor::number_of_words() const +{ + if (document().is_empty()) + return 0; + + size_t word_count = 0; + bool in_word = false; + auto text = this->text(); + for (char c : text) { + if (in_word && is_ascii_space(c)) { + in_word = false; + word_count++; + continue; + } + if (!in_word && !is_ascii_space(c)) + in_word = true; + } + if (in_word) + word_count++; + + return word_count; +} + void TextEditor::delete_selection() { auto selection = normalized_selection(); diff --git a/Userland/Libraries/LibGUI/TextEditor.h b/Userland/Libraries/LibGUI/TextEditor.h index 1e2059d6e04..a0ea51005e5 100644 --- a/Userland/Libraries/LibGUI/TextEditor.h +++ b/Userland/Libraries/LibGUI/TextEditor.h @@ -126,6 +126,7 @@ public: bool write_to_file_and_close(int fd); bool has_selection() const { return m_selection.is_valid(); } String selected_text() const; + size_t number_of_words() const; size_t number_of_selected_words() const; void set_selection(TextRange const&); void clear_selection();