diff --git a/Libraries/LibGUI/TextDocument.cpp b/Libraries/LibGUI/TextDocument.cpp index 32ba3a42355..b6d4ef34727 100644 --- a/Libraries/LibGUI/TextDocument.cpp +++ b/Libraries/LibGUI/TextDocument.cpp @@ -117,6 +117,12 @@ void TextDocumentLine::clear(TextDocument& document) document.update_views({}); } +void TextDocumentLine::set_text(TextDocument& document, const Vector text) +{ + m_text = move(text); + document.update_views({}); +} + void TextDocumentLine::set_text(TextDocument& document, const StringView& text) { if (text.is_empty()) { @@ -132,6 +138,8 @@ void TextDocumentLine::set_text(TextDocument& document, const StringView& text) void TextDocumentLine::append(TextDocument& document, const u32* codepoints, size_t length) { + if (length == 0) + return; m_text.append(codepoints, length); document.update_views({}); } @@ -588,9 +596,10 @@ void TextDocument::remove(const TextRange& unnormalized_range) ASSERT(range.start().line() == range.end().line() - 1); auto& first_line = line(range.start().line()); auto& second_line = line(range.end().line()); - first_line.clear(*this); - first_line.append(*this, first_line.codepoints(), range.start().column()); - first_line.append(*this, second_line.codepoints() + range.end().column(), second_line.length() - range.end().column()); + Vector codepoints; + codepoints.append(first_line.codepoints(), range.start().column()); + codepoints.append(second_line.codepoints() + range.end().column(), second_line.length() - range.end().column()); + first_line.set_text(*this, move(codepoints)); remove_line(range.end().line()); } diff --git a/Libraries/LibGUI/TextDocument.h b/Libraries/LibGUI/TextDocument.h index 53aed50f4d5..07a858624af 100644 --- a/Libraries/LibGUI/TextDocument.h +++ b/Libraries/LibGUI/TextDocument.h @@ -160,6 +160,7 @@ public: const u32* codepoints() const { return m_text.data(); } size_t length() const { return m_text.size(); } void set_text(TextDocument&, const StringView&); + void set_text(TextDocument&, Vector); void append(TextDocument&, u32); void prepend(TextDocument&, u32); void insert(TextDocument&, size_t index, u32);