From 9aa00a6d706fddd22d802df554a3e63c138d22f9 Mon Sep 17 00:00:00 2001 From: Kyle Lanmon Date: Wed, 2 Nov 2022 23:23:00 -0500 Subject: [PATCH] TextEditor: Add utility to keep a range of text within a line --- Userland/Libraries/LibGUI/TextDocument.cpp | 13 +++++++++++++ Userland/Libraries/LibGUI/TextDocument.h | 1 + 2 files changed, 14 insertions(+) diff --git a/Userland/Libraries/LibGUI/TextDocument.cpp b/Userland/Libraries/LibGUI/TextDocument.cpp index 79f5a0723d..2148d02e69 100644 --- a/Userland/Libraries/LibGUI/TextDocument.cpp +++ b/Userland/Libraries/LibGUI/TextDocument.cpp @@ -246,6 +246,19 @@ void TextDocumentLine::remove_range(TextDocument& document, size_t start, size_t document.update_views({}); } +void TextDocumentLine::keep_range(TextDocument& document, size_t start_index, size_t length) +{ + VERIFY(start_index + length < m_text.size()); + + Vector new_data; + new_data.ensure_capacity(m_text.size()); + for (size_t i = start_index; i <= (start_index + length); i++) + new_data.append(m_text[i]); + + m_text = move(new_data); + document.update_views({}); +} + void TextDocumentLine::truncate(TextDocument& document, size_t length) { m_text.resize(length); diff --git a/Userland/Libraries/LibGUI/TextDocument.h b/Userland/Libraries/LibGUI/TextDocument.h index f2c661a72b..5f6a4a0d9c 100644 --- a/Userland/Libraries/LibGUI/TextDocument.h +++ b/Userland/Libraries/LibGUI/TextDocument.h @@ -179,6 +179,7 @@ public: void truncate(TextDocument&, size_t length); void clear(TextDocument&); void remove_range(TextDocument&, size_t start, size_t length); + void keep_range(TextDocument&, size_t start_index, size_t end_index); size_t first_non_whitespace_column() const; Optional last_non_whitespace_column() const;