mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 00:07:34 +00:00
LibGUI: Add GTextDocument::text_in_range(GTextRange)
This function returns a String containing the text in a given range. GTextEditor::selected_text() is now just a wrapper around this.
This commit is contained in:
parent
c1efa4f336
commit
bddba567b3
3 changed files with 21 additions and 12 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
#include <AK/StringBuilder.h>
|
||||||
#include <LibGUI/GTextDocument.h>
|
#include <LibGUI/GTextDocument.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
|
@ -165,3 +166,20 @@ void GTextDocument::update_views(Badge<GTextDocumentLine>)
|
||||||
for (auto* client : m_clients)
|
for (auto* client : m_clients)
|
||||||
client->document_did_change();
|
client->document_did_change();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String GTextDocument::text_in_range(const GTextRange& a_range) const
|
||||||
|
{
|
||||||
|
auto range = a_range.normalized();
|
||||||
|
|
||||||
|
StringBuilder builder;
|
||||||
|
for (int i = range.start().line(); i <= range.end().line(); ++i) {
|
||||||
|
auto& line = lines()[i];
|
||||||
|
int selection_start_column_on_line = range.start().line() == i ? range.start().column() : 0;
|
||||||
|
int selection_end_column_on_line = range.end().line() == i ? range.end().column() : line.length();
|
||||||
|
builder.append(line.characters() + selection_start_column_on_line, selection_end_column_on_line - selection_start_column_on_line);
|
||||||
|
if (i != range.end().line())
|
||||||
|
builder.append('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.to_string();
|
||||||
|
}
|
||||||
|
|
|
@ -59,6 +59,8 @@ public:
|
||||||
|
|
||||||
void update_views(Badge<GTextDocumentLine>);
|
void update_views(Badge<GTextDocumentLine>);
|
||||||
|
|
||||||
|
String text_in_range(const GTextRange&) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit GTextDocument(Client* client);
|
explicit GTextDocument(Client* client);
|
||||||
|
|
||||||
|
|
|
@ -1002,18 +1002,7 @@ String GTextEditor::selected_text() const
|
||||||
if (!has_selection())
|
if (!has_selection())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
auto selection = normalized_selection();
|
return document().text_in_range(m_selection);
|
||||||
StringBuilder builder;
|
|
||||||
for (int i = selection.start().line(); i <= selection.end().line(); ++i) {
|
|
||||||
auto& line = lines()[i];
|
|
||||||
int selection_start_column_on_line = selection.start().line() == i ? selection.start().column() : 0;
|
|
||||||
int selection_end_column_on_line = selection.end().line() == i ? selection.end().column() : line.length();
|
|
||||||
builder.append(line.characters() + selection_start_column_on_line, selection_end_column_on_line - selection_start_column_on_line);
|
|
||||||
if (i != selection.end().line())
|
|
||||||
builder.append('\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
return builder.to_string();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GTextEditor::delete_selection()
|
void GTextEditor::delete_selection()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue