1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-28 08:17:34 +00:00

Everywhere: Add sv suffix to strings relying on StringView(char const*)

Each of these strings would previously rely on StringView's char const*
constructor overload, which would call __builtin_strlen on the string.
Since we now have operator ""sv, we can replace these with much simpler
versions. This opens the door to being able to remove
StringView(char const*).

No functional changes.
This commit is contained in:
sin-ack 2022-07-11 17:32:29 +00:00 committed by Andreas Kling
parent e5f09ea170
commit 3f3f45580a
762 changed files with 8315 additions and 8316 deletions

View file

@ -74,10 +74,10 @@ CellType const& Cell::type() const
if (m_kind == LiteralString) {
if (m_data.to_int().has_value())
return *CellType::get_by_name("Numeric");
return *CellType::get_by_name("Numeric"sv);
}
return *CellType::get_by_name("Identity");
return *CellType::get_by_name("Identity"sv);
}
JS::ThrowCompletionOr<String> Cell::typed_display() const

View file

@ -13,7 +13,7 @@
namespace Spreadsheet {
DateCell::DateCell()
: CellType("Date")
: CellType("Date"sv)
{
}
@ -21,7 +21,7 @@ JS::ThrowCompletionOr<String> DateCell::display(Cell& cell, CellTypeMetadata con
{
return propagate_failure(cell, [&]() -> JS::ThrowCompletionOr<String> {
auto timestamp = TRY(js_value(cell, metadata));
auto string = Core::DateTime::from_timestamp(TRY(timestamp.to_i32(cell.sheet().global_object()))).to_string(metadata.format.is_empty() ? "%Y-%m-%d %H:%M:%S" : metadata.format.characters());
auto string = Core::DateTime::from_timestamp(TRY(timestamp.to_i32(cell.sheet().global_object()))).to_string(metadata.format.is_empty() ? "%Y-%m-%d %H:%M:%S"sv : metadata.format.view());
if (metadata.length >= 0)
return string.substring(0, metadata.length);

View file

@ -11,7 +11,7 @@
namespace Spreadsheet {
IdentityCell::IdentityCell()
: CellType("Identity")
: CellType("Identity"sv)
{
}

View file

@ -13,7 +13,7 @@
namespace Spreadsheet {
NumericCell::NumericCell()
: CellType("Numeric")
: CellType("Numeric"sv)
{
}

View file

@ -11,7 +11,7 @@
namespace Spreadsheet {
StringCell::StringCell()
: CellType("String")
: CellType("String"sv)
{
}

View file

@ -26,7 +26,7 @@
#include <unistd.h>
// This is defined in ImportDialog.cpp, we can't include it twice, since the generated symbol is exported.
extern char const select_format_page_gml[];
extern StringView select_format_page_gml;
namespace Spreadsheet {
@ -245,7 +245,7 @@ Result<void, String> ExportDialog::make_and_run_for(StringView mime, Core::File&
{
auto wizard = GUI::WizardDialog::construct(GUI::Application::the()->active_window());
wizard->set_title("File Export Wizard");
wizard->set_icon(GUI::Icon::default_icon("app-spreadsheet").bitmap_for_size(16));
wizard->set_icon(GUI::Icon::default_icon("app-spreadsheet"sv).bitmap_for_size(16));
auto export_xsv = [&]() -> Result<void, String> {
// FIXME: Prompt for the user to select a specific sheet to export
@ -283,7 +283,7 @@ Result<void, String> ExportDialog::make_and_run_for(StringView mime, Core::File&
auto const* error = strerror(error_number);
StringBuilder sb;
sb.append("Unable to save file. Error: ");
sb.append("Unable to save file. Error: "sv);
sb.append({ error, strlen(error) });
return sb.to_string();

View file

@ -65,7 +65,7 @@ HelpWindow::HelpWindow(GUI::Window* parent)
{
resize(530, 365);
set_title("Spreadsheet Functions Help");
set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-help.png").release_value_but_fixme_should_propagate_errors());
set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-help.png"sv).release_value_but_fixme_should_propagate_errors());
set_accessory(true);
auto& widget = set_main_widget<GUI::Widget>();
@ -93,7 +93,7 @@ HelpWindow::HelpWindow(GUI::Window* parent)
auto& doc = doc_option.as_object();
const auto& name = url.fragment();
auto* example_data_ptr = doc.get_ptr("example_data");
auto* example_data_ptr = doc.get_ptr("example_data"sv);
if (!example_data_ptr || !example_data_ptr->is_object()) {
GUI::MessageBox::show_error(this, String::formatted("No example data found for '{}'", url.path()));
return;
@ -143,47 +143,47 @@ String HelpWindow::render(StringView key)
VERIFY(m_docs.has_object(key));
auto& doc = m_docs.get(key).as_object();
auto name = doc.get("name").to_string();
auto argc = doc.get("argc").to_u32(0);
VERIFY(doc.has_array("argnames"));
auto& argnames = doc.get("argnames").as_array();
auto name = doc.get("name"sv).to_string();
auto argc = doc.get("argc"sv).to_u32(0);
VERIFY(doc.has_array("argnames"sv));
auto& argnames = doc.get("argnames"sv).as_array();
auto docstring = doc.get("doc").to_string();
auto docstring = doc.get("doc"sv).to_string();
StringBuilder markdown_builder;
markdown_builder.append("# NAME\n`");
markdown_builder.append("# NAME\n`"sv);
markdown_builder.append(name);
markdown_builder.append("`\n\n");
markdown_builder.append("`\n\n"sv);
markdown_builder.append("# ARGUMENTS\n");
markdown_builder.append("# ARGUMENTS\n"sv);
if (argc > 0)
markdown_builder.appendff("{} required argument(s):\n", argc);
else
markdown_builder.append("No required arguments.\n");
markdown_builder.append("No required arguments.\n"sv);
for (size_t i = 0; i < argc; ++i)
markdown_builder.appendff("- `{}`\n", argnames.at(i).to_string());
if (argc > 0)
markdown_builder.append("\n");
markdown_builder.append("\n"sv);
if ((size_t)argnames.size() > argc) {
auto opt_count = argnames.size() - argc;
markdown_builder.appendff("{} optional argument(s):\n", opt_count);
for (size_t i = argc; i < (size_t)argnames.size(); ++i)
markdown_builder.appendff("- `{}`\n", argnames.at(i).to_string());
markdown_builder.append("\n");
markdown_builder.append("\n"sv);
}
markdown_builder.append("# DESCRIPTION\n");
markdown_builder.append("# DESCRIPTION\n"sv);
markdown_builder.append(docstring);
markdown_builder.append("\n\n");
markdown_builder.append("\n\n"sv);
if (doc.has("examples")) {
auto& examples = doc.get("examples");
if (doc.has("examples"sv)) {
auto& examples = doc.get("examples"sv);
VERIFY(examples.is_object());
markdown_builder.append("# EXAMPLES\n");
markdown_builder.append("# EXAMPLES\n"sv);
examples.as_object().for_each_member([&](auto& text, auto& description_value) {
dbgln("```js\n{}\n```\n\n- {}\n", text, description_value.to_string());
markdown_builder.appendff("```js\n{}\n```\n\n- {}\n", text, description_value.to_string());

View file

@ -179,7 +179,7 @@ Result<NonnullRefPtrVector<Sheet>, String> ImportDialog::make_and_run_for(GUI::W
{
auto wizard = GUI::WizardDialog::construct(&parent);
wizard->set_title("File Import Wizard");
wizard->set_icon(GUI::Icon::default_icon("app-spreadsheet").bitmap_for_size(16));
wizard->set_icon(GUI::Icon::default_icon("app-spreadsheet"sv).bitmap_for_size(16));
auto import_xsv = [&]() -> Result<NonnullRefPtrVector<Sheet>, String> {
auto contents = file.read_all();
@ -212,7 +212,7 @@ Result<NonnullRefPtrVector<Sheet>, String> ImportDialog::make_and_run_for(GUI::W
auto json_value_option = JsonParser(file.read_all()).parse();
if (json_value_option.is_error()) {
StringBuilder sb;
sb.append("Failed to parse ");
sb.append("Failed to parse "sv);
sb.append(file.filename());
return sb.to_string();
@ -221,7 +221,7 @@ Result<NonnullRefPtrVector<Sheet>, String> ImportDialog::make_and_run_for(GUI::W
auto& json_value = json_value_option.value();
if (!json_value.is_array()) {
StringBuilder sb;
sb.append("Did not find a spreadsheet in ");
sb.append("Did not find a spreadsheet in "sv);
sb.append(file.filename());
return sb.to_string();

View file

@ -18,29 +18,29 @@ TEST_CASE(should_parse_valid_data)
auto data = R"~~~(Foo, Bar, Baz
1, 2, 3
4, 5, 6
"""x", y"z, 9)~~~";
"""x", y"z, 9)~~~"sv;
auto csv = Reader::CSV { data, Reader::default_behaviors() | Reader::ParserBehavior::ReadHeaders | Reader::ParserBehavior::TrimLeadingFieldSpaces };
csv.parse();
EXPECT(!csv.has_error());
EXPECT_EQ(csv[0]["Foo"], "1");
EXPECT_EQ(csv[2]["Foo"], "\"x");
EXPECT_EQ(csv[2]["Bar"], "y\"z");
EXPECT_EQ(csv[0]["Foo"sv], "1"sv);
EXPECT_EQ(csv[2]["Foo"sv], "\"x"sv);
EXPECT_EQ(csv[2]["Bar"sv], "y\"z"sv);
}
{
auto data = R"~~~(Foo, Bar, Baz
1 , 2, 3
4, "5 " , 6
"""x", y"z, 9 )~~~";
"""x", y"z, 9 )~~~"sv;
auto csv = Reader::CSV { data, Reader::default_behaviors() | Reader::ParserBehavior::ReadHeaders | Reader::ParserBehavior::TrimLeadingFieldSpaces | Reader::ParserBehavior::TrimTrailingFieldSpaces };
csv.parse();
EXPECT(!csv.has_error());
EXPECT_EQ(csv[0]["Foo"], "1");
EXPECT_EQ(csv[1]["Bar"], "5 ");
EXPECT_EQ(csv[2]["Foo"], "\"x");
EXPECT_EQ(csv[2]["Baz"], "9");
EXPECT_EQ(csv[0]["Foo"sv], "1"sv);
EXPECT_EQ(csv[1]["Bar"sv], "5 "sv);
EXPECT_EQ(csv[2]["Foo"sv], "\"x"sv);
EXPECT_EQ(csv[2]["Baz"sv], "9"sv);
}
}
@ -48,7 +48,7 @@ TEST_CASE(should_fail_nicely)
{
{
auto data = R"~~~(Foo, Bar, Baz
x, y)~~~";
x, y)~~~"sv;
auto csv = Reader::CSV { data, Reader::default_behaviors() | Reader::ParserBehavior::ReadHeaders | Reader::ParserBehavior::TrimLeadingFieldSpaces };
csv.parse();
EXPECT(csv.has_error());
@ -57,7 +57,7 @@ TEST_CASE(should_fail_nicely)
{
auto data = R"~~~(Foo, Bar, Baz
x, y, "z)~~~";
x, y, "z)~~~"sv;
auto csv = Reader::CSV { data, Reader::default_behaviors() | Reader::ParserBehavior::ReadHeaders | Reader::ParserBehavior::TrimLeadingFieldSpaces };
csv.parse();
EXPECT(csv.has_error());
@ -70,7 +70,7 @@ TEST_CASE(should_iterate_rows)
auto data = R"~~~(Foo, Bar, Baz
1, 2, 3
4, 5, 6
"""x", y"z, 9)~~~";
"""x", y"z, 9)~~~"sv;
auto csv = Reader::CSV { data, Reader::default_behaviors() | Reader::ParserBehavior::ReadHeaders | Reader::ParserBehavior::TrimLeadingFieldSpaces };
csv.parse();
EXPECT(!csv.has_error());
@ -93,7 +93,7 @@ BENCHMARK_CASE(fairly_big_data)
memcpy(buf.offset_pointer(row * line.length()), line.characters_without_null_termination(), line.length());
}
auto csv = Reader::CSV { (char const*)buf.data(), Reader::default_behaviors() | Reader::ParserBehavior::ReadHeaders };
auto csv = Reader::CSV { StringView { buf.bytes() }, Reader::default_behaviors() | Reader::ParserBehavior::ReadHeaders };
csv.parse();
EXPECT(!csv.has_error());

View file

@ -133,7 +133,7 @@ Vector<XSV::Field> XSV::read_row(bool header_row)
XSV::Field XSV::read_one_field()
{
if ((m_behaviors & ParserBehavior::TrimLeadingFieldSpaces) != ParserBehavior::None)
m_lexer.consume_while(is_any_of(" \t\v"));
m_lexer.consume_while(is_any_of(" \t\v"sv));
bool is_quoted = false;
Field field;
@ -145,7 +145,7 @@ XSV::Field XSV::read_one_field()
}
if ((m_behaviors & ParserBehavior::TrimTrailingFieldSpaces) != ParserBehavior::None) {
m_lexer.consume_while(is_any_of(" \t\v"));
m_lexer.consume_while(is_any_of(" \t\v"sv));
if (!is_quoted) {
// Also have to trim trailing spaces from unquoted fields.

View file

@ -48,7 +48,7 @@ Sheet::Sheet(Workbook& workbook)
global_object().define_direct_property("thisSheet", &global_object(), JS::default_attributes); // Self-reference is unfortunate, but required.
// Sadly, these have to be evaluated once per sheet.
constexpr StringView runtime_file_path = "/res/js/Spreadsheet/runtime.js";
constexpr auto runtime_file_path = "/res/js/Spreadsheet/runtime.js"sv;
auto file_or_error = Core::File::open(runtime_file_path, Core::OpenMode::ReadOnly);
if (!file_or_error.is_error()) {
auto buffer = file_or_error.value()->read_all();
@ -94,7 +94,7 @@ size_t Sheet::add_row()
static Optional<size_t> convert_from_string(StringView str, unsigned base = 26, StringView map = {})
{
if (map.is_null())
map = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
map = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"sv;
VERIFY(base >= 2 && base <= map.length());
@ -375,10 +375,10 @@ Vector<CellChange> Sheet::copy_cells(Vector<Position> from, Vector<Position> to,
RefPtr<Sheet> Sheet::from_json(JsonObject const& object, Workbook& workbook)
{
auto sheet = adopt_ref(*new Sheet(workbook));
auto rows = object.get("rows").to_u32(default_row_count);
auto columns = object.get("columns");
auto name = object.get("name").as_string_or("Sheet");
if (object.has("cells") && !object.has_object("cells"))
auto rows = object.get("rows"sv).to_u32(default_row_count);
auto columns = object.get("columns"sv);
auto name = object.get("name"sv).as_string_or("Sheet");
if (object.has("cells"sv) && !object.has_object("cells"sv))
return {};
sheet->set_name(name);
@ -403,51 +403,51 @@ RefPtr<Sheet> Sheet::from_json(JsonObject const& object, Workbook& workbook)
auto& parse_function = json.as_object().get_without_side_effects("parse").as_function();
auto read_format = [](auto& format, auto const& obj) {
if (auto value = obj.get("foreground_color"); value.is_string())
if (auto value = obj.get("foreground_color"sv); value.is_string())
format.foreground_color = Color::from_string(value.as_string());
if (auto value = obj.get("background_color"); value.is_string())
if (auto value = obj.get("background_color"sv); value.is_string())
format.background_color = Color::from_string(value.as_string());
};
if (object.has_object("cells")) {
object.get("cells").as_object().for_each_member([&](auto& name, JsonValue const& value) {
if (object.has_object("cells"sv)) {
object.get("cells"sv).as_object().for_each_member([&](auto& name, JsonValue const& value) {
auto position_option = sheet->parse_cell_name(name);
if (!position_option.has_value())
return IterationDecision::Continue;
auto position = position_option.value();
auto& obj = value.as_object();
auto kind = obj.get("kind").as_string_or("LiteralString") == "LiteralString" ? Cell::LiteralString : Cell::Formula;
auto kind = obj.get("kind"sv).as_string_or("LiteralString") == "LiteralString" ? Cell::LiteralString : Cell::Formula;
OwnPtr<Cell> cell;
switch (kind) {
case Cell::LiteralString:
cell = make<Cell>(obj.get("value").to_string(), position, *sheet);
cell = make<Cell>(obj.get("value"sv).to_string(), position, *sheet);
break;
case Cell::Formula: {
auto& interpreter = sheet->interpreter();
auto value_or_error = JS::call(interpreter.global_object(), parse_function, json, JS::js_string(interpreter.heap(), obj.get("value").as_string()));
auto value_or_error = JS::call(interpreter.global_object(), parse_function, json, JS::js_string(interpreter.heap(), obj.get("value"sv).as_string()));
if (value_or_error.is_error()) {
warnln("Failed to load previous value for cell {}, leaving as undefined", position.to_cell_identifier(sheet));
value_or_error = JS::js_undefined();
}
cell = make<Cell>(obj.get("source").to_string(), value_or_error.release_value(), position, *sheet);
cell = make<Cell>(obj.get("source"sv).to_string(), value_or_error.release_value(), position, *sheet);
break;
}
}
auto type_name = obj.has("type") ? obj.get("type").to_string() : "Numeric";
auto type_name = obj.has("type"sv) ? obj.get("type"sv).to_string() : "Numeric";
cell->set_type(type_name);
auto type_meta = obj.get("type_metadata");
auto type_meta = obj.get("type_metadata"sv);
if (type_meta.is_object()) {
auto& meta_obj = type_meta.as_object();
auto meta = cell->type_metadata();
if (auto value = meta_obj.get("length"); value.is_number())
if (auto value = meta_obj.get("length"sv); value.is_number())
meta.length = value.to_i32();
if (auto value = meta_obj.get("format"); value.is_string())
if (auto value = meta_obj.get("format"sv); value.is_string())
meta.format = value.as_string();
if (auto value = meta_obj.get("alignment"); value.is_string()) {
if (auto value = meta_obj.get("alignment"sv); value.is_string()) {
auto alignment = Gfx::text_alignment_from_string(value.as_string());
if (alignment.has_value())
meta.alignment = alignment.value();
@ -457,7 +457,7 @@ RefPtr<Sheet> Sheet::from_json(JsonObject const& object, Workbook& workbook)
cell->set_type_metadata(move(meta));
}
auto conditional_formats = obj.get("conditional_formats");
auto conditional_formats = obj.get("conditional_formats"sv);
auto cformats = cell->conditional_formats();
if (conditional_formats.is_array()) {
conditional_formats.as_array().for_each([&](const auto& fmt_val) {
@ -465,7 +465,7 @@ RefPtr<Sheet> Sheet::from_json(JsonObject const& object, Workbook& workbook)
return IterationDecision::Continue;
auto& fmt_obj = fmt_val.as_object();
auto fmt_cond = fmt_obj.get("condition").to_string();
auto fmt_cond = fmt_obj.get("condition"sv).to_string();
if (fmt_cond.is_empty())
return IterationDecision::Continue;
@ -479,7 +479,7 @@ RefPtr<Sheet> Sheet::from_json(JsonObject const& object, Workbook& workbook)
cell->set_conditional_formats(move(cformats));
}
auto evaluated_format = obj.get("evaluated_formats");
auto evaluated_format = obj.get("evaluated_formats"sv);
if (evaluated_format.is_object()) {
auto& evaluated_format_obj = evaluated_format.as_object();
auto& evaluated_fmts = cell->evaluated_formats();
@ -722,8 +722,8 @@ String Sheet::generate_inline_documentation_for(StringView function, size_t argu
return String::formatted("{}(...???{})", function, argument_index);
auto& entry_object = entry.as_object();
size_t argc = entry_object.get("argc").to_int(0);
auto argnames_value = entry_object.get("argnames");
size_t argc = entry_object.get("argc"sv).to_int(0);
auto argnames_value = entry_object.get("argnames"sv);
if (!argnames_value.is_array())
return String::formatted("{}(...{}???{})", function, argc, argument_index);
auto& argnames = argnames_value.as_array();
@ -731,7 +731,7 @@ String Sheet::generate_inline_documentation_for(StringView function, size_t argu
builder.appendff("{}(", function);
for (size_t i = 0; i < (size_t)argnames.size(); ++i) {
if (i != 0 && i < (size_t)argnames.size())
builder.append(", ");
builder.append(", "sv);
if (i == argument_index)
builder.append('<');
else if (i >= argc)

View file

@ -121,12 +121,12 @@ GUI::Variant SheetModel::data(const GUI::ModelIndex& index, GUI::ModelRole role)
StringBuilder builder;
builder.appendff("{}\n", error.get_without_side_effects(object.vm().names.message).to_string_without_side_effects());
for (auto const& frame : trace.in_reverse()) {
if (frame.source_range.filename.contains("runtime.js")) {
if (frame.source_range.filename.contains("runtime.js"sv)) {
if (frame.function_name == "<unknown>")
builder.appendff(" in a builtin function at line {}, column {}\n", frame.source_range.start.line, frame.source_range.start.column);
else
builder.appendff(" while evaluating builtin '{}'\n", frame.function_name);
} else if (frame.source_range.filename.starts_with("cell ")) {
} else if (frame.source_range.filename.starts_with("cell "sv)) {
builder.appendff(" in cell '{}', at line {}, column {}\n", frame.source_range.filename.substring_view(5), frame.source_range.start.line, frame.source_range.start.column);
}
}

View file

@ -29,7 +29,7 @@ public:
virtual bool is_editable(const GUI::ModelIndex&) const override;
virtual void set_data(const GUI::ModelIndex&, const GUI::Variant&) override;
virtual bool is_column_sortable(int) const override { return false; }
virtual StringView drag_data_type() const override { return "text/x-spreadsheet-data"; }
virtual StringView drag_data_type() const override { return "text/x-spreadsheet-data"sv; }
Sheet& sheet() { return *m_sheet; }
void update();

View file

@ -43,12 +43,12 @@ SpreadsheetWidget::SpreadsheetWidget(GUI::Window& parent_window, NonnullRefPtrVe
current_cell_label.set_fixed_width(50);
auto& help_button = top_bar.add<GUI::Button>("");
help_button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-help.png").release_value_but_fixme_should_propagate_errors());
help_button.set_icon(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-help.png"sv).release_value_but_fixme_should_propagate_errors());
help_button.set_tooltip("Functions Help");
help_button.set_fixed_size(20, 20);
help_button.on_click = [&](auto) {
if (!current_view()) {
GUI::MessageBox::show_error(window(), "Can only show function documentation/help when a worksheet exists and is open");
GUI::MessageBox::show_error(window(), "Can only show function documentation/help when a worksheet exists and is open"sv);
} else if (auto* sheet_ptr = current_worksheet_if_available()) {
auto docs = sheet_ptr->gather_documentation();
auto help_window = HelpWindow::the(window());
@ -88,7 +88,7 @@ SpreadsheetWidget::SpreadsheetWidget(GUI::Window& parent_window, NonnullRefPtrVe
m_inline_documentation_label->set_text_alignment(Gfx::TextAlignment::CenterLeft);
if (!m_workbook->has_sheets() && should_add_sheet_if_empty)
m_workbook->add_sheet("Sheet 1");
m_workbook->add_sheet("Sheet 1"sv);
m_tab_context_menu = GUI::Menu::construct();
m_rename_action = GUI::CommonActions::make_rename_action([this](auto&) {
@ -98,16 +98,16 @@ SpreadsheetWidget::SpreadsheetWidget(GUI::Window& parent_window, NonnullRefPtrVe
VERIFY(sheet_ptr); // How did we get here without a sheet?
auto& sheet = *sheet_ptr;
String new_name;
if (GUI::InputBox::show(window(), new_name, String::formatted("New name for '{}'", sheet.name()), "Rename sheet") == GUI::Dialog::ExecResult::OK) {
if (GUI::InputBox::show(window(), new_name, String::formatted("New name for '{}'", sheet.name()), "Rename sheet"sv) == GUI::Dialog::ExecResult::OK) {
sheet.set_name(new_name);
sheet.update();
m_tab_widget->set_tab_title(static_cast<GUI::Widget&>(*m_tab_context_menu_sheet_view), new_name);
}
});
m_tab_context_menu->add_action(*m_rename_action);
m_tab_context_menu->add_action(GUI::Action::create("Add new sheet...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-tab.png").release_value_but_fixme_should_propagate_errors(), [this](auto&) {
m_tab_context_menu->add_action(GUI::Action::create("Add new sheet...", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-tab.png"sv).release_value_but_fixme_should_propagate_errors(), [this](auto&) {
String name;
if (GUI::InputBox::show(window(), name, "Name for new sheet", "Create sheet") == GUI::Dialog::ExecResult::OK) {
if (GUI::InputBox::show(window(), name, "Name for new sheet"sv, "Create sheet"sv) == GUI::Dialog::ExecResult::OK) {
NonnullRefPtrVector<Sheet> new_sheets;
new_sheets.append(m_workbook->add_sheet(name));
setup_tabs(move(new_sheets));
@ -116,7 +116,7 @@ SpreadsheetWidget::SpreadsheetWidget(GUI::Window& parent_window, NonnullRefPtrVe
setup_tabs(m_workbook->sheets());
m_new_action = GUI::Action::create("Add New Sheet", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-tab.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
m_new_action = GUI::Action::create("Add New Sheet", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/new-tab.png"sv).release_value_but_fixme_should_propagate_errors(), [&](auto&) {
add_sheet();
});
@ -172,7 +172,7 @@ SpreadsheetWidget::SpreadsheetWidget(GUI::Window& parent_window, NonnullRefPtrVe
auto* worksheet_ptr = current_worksheet_if_available();
if (!worksheet_ptr) {
GUI::MessageBox::show_error(window(), "There are no active worksheets");
GUI::MessageBox::show_error(window(), "There are no active worksheets"sv);
return;
}
auto& sheet = *worksheet_ptr;
@ -225,19 +225,19 @@ SpreadsheetWidget::SpreadsheetWidget(GUI::Window& parent_window, NonnullRefPtrVe
m_redo_action->set_enabled(false);
m_functions_help_action = GUI::Action::create(
"&Functions Help", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-help.png").release_value_but_fixme_should_propagate_errors(), [&](auto&) {
"&Functions Help", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/app-help.png"sv).release_value_but_fixme_should_propagate_errors(), [&](auto&) {
if (auto* worksheet_ptr = current_worksheet_if_available()) {
auto docs = worksheet_ptr->gather_documentation();
auto help_window = Spreadsheet::HelpWindow::the(window());
help_window->set_docs(move(docs));
help_window->show();
} else {
GUI::MessageBox::show_error(window(), "Cannot prepare documentation/help without an active worksheet");
GUI::MessageBox::show_error(window(), "Cannot prepare documentation/help without an active worksheet"sv);
}
},
window());
m_about_action = GUI::CommonActions::make_about_action("Spreadsheet", GUI::Icon::default_icon("app-spreadsheet"), window());
m_about_action = GUI::CommonActions::make_about_action("Spreadsheet", GUI::Icon::default_icon("app-spreadsheet"sv), window());
toolbar.add_action(*m_new_action);
toolbar.add_action(*m_open_action);
@ -279,7 +279,7 @@ void SpreadsheetWidget::resize_event(GUI::ResizeEvent& event)
void SpreadsheetWidget::clipboard_content_did_change(String const& mime_type)
{
if (auto* sheet = current_worksheet_if_available())
m_paste_action->set_enabled(!sheet->selected_cells().is_empty() && mime_type.starts_with("text/"));
m_paste_action->set_enabled(!sheet->selected_cells().is_empty() && mime_type.starts_with("text/"sv));
}
void SpreadsheetWidget::setup_tabs(NonnullRefPtrVector<Sheet> new_sheets)
@ -303,7 +303,7 @@ void SpreadsheetWidget::setup_tabs(NonnullRefPtrVector<Sheet> new_sheets)
VERIFY(!selection.is_empty());
m_cut_action->set_enabled(true);
m_copy_action->set_enabled(true);
m_paste_action->set_enabled(GUI::Clipboard::the().fetch_mime_type().starts_with("text/"));
m_paste_action->set_enabled(GUI::Clipboard::the().fetch_mime_type().starts_with("text/"sv));
m_current_cell_label->set_enabled(true);
m_cell_value_editor->set_enabled(true);
@ -338,7 +338,7 @@ void SpreadsheetWidget::setup_tabs(NonnullRefPtrVector<Sheet> new_sheets)
auto& first_cell = cells.first();
m_cell_value_editor->on_change = nullptr;
m_cell_value_editor->set_text("");
m_cell_value_editor->set_text(""sv);
m_should_change_selected_cells = false;
m_cell_value_editor->on_focusin = [this] { m_should_change_selected_cells = true; };
m_cell_value_editor->on_focusout = [this] { m_should_change_selected_cells = false; };
@ -500,7 +500,7 @@ bool SpreadsheetWidget::request_close()
void SpreadsheetWidget::add_sheet()
{
StringBuilder name;
name.append("Sheet");
name.append("Sheet"sv);
name.appendff(" {}", m_workbook->sheets().size() + 1);
NonnullRefPtrVector<Sheet> new_sheets;
@ -522,10 +522,10 @@ void SpreadsheetWidget::update_window_title()
{
StringBuilder builder;
if (current_filename().is_empty())
builder.append("Untitled");
builder.append("Untitled"sv);
else
builder.append(current_filename());
builder.append("[*] - Spreadsheet");
builder.append("[*] - Spreadsheet"sv);
window()->set_title(builder.to_string());
}
@ -538,14 +538,14 @@ void SpreadsheetWidget::clipboard_action(bool is_cut)
/// - selected cell+
auto* worksheet_ptr = current_worksheet_if_available();
if (!worksheet_ptr) {
GUI::MessageBox::show_error(window(), "There are no active worksheets");
GUI::MessageBox::show_error(window(), "There are no active worksheets"sv);
return;
}
auto& worksheet = *worksheet_ptr;
auto& cells = worksheet.selected_cells();
VERIFY(!cells.is_empty());
StringBuilder text_builder, url_builder;
url_builder.append(is_cut ? "cut\n" : "copy\n");
url_builder.append(is_cut ? "cut\n"sv : "copy\n"sv);
bool first = true;
auto cursor = current_selection_cursor();
if (cursor) {

View file

@ -42,7 +42,7 @@ TEST_CASE(can_write_with_header)
auto buffer = ByteBuffer::create_uninitialized(1024).release_value();
OutputMemoryStream stream { buffer };
Writer::CSV csv(stream, data, { "A", "B\"", "C" });
Writer::CSV csv(stream, data, { "A"sv, "B\""sv, "C"sv });
auto expected_output = R"~(A,"B""",C
1,2,3
@ -63,7 +63,7 @@ TEST_CASE(can_write_with_different_behaviors)
auto buffer = ByteBuffer::create_uninitialized(1024).release_value();
OutputMemoryStream stream { buffer };
Writer::CSV csv(stream, data, { "A", "B\"", "C" }, Writer::WriterBehavior::QuoteOnlyInFieldStart | Writer::WriterBehavior::WriteHeaders);
Writer::CSV csv(stream, data, { "A"sv, "B\""sv, "C"sv }, Writer::WriterBehavior::QuoteOnlyInFieldStart | Writer::WriterBehavior::WriteHeaders);
auto expected_output = R"~(A,B",C
Well,Hello",Friends

View file

@ -48,11 +48,11 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
// For writing temporary files when exporting.
TRY(Core::System::unveil("/tmp", "crw"));
TRY(Core::System::unveil("/etc", "r"));
TRY(Core::System::unveil(Core::StandardPaths::home_directory().characters(), "rwc"));
TRY(Core::System::unveil(Core::StandardPaths::home_directory(), "rwc"sv));
TRY(Core::System::unveil("/res", "r"));
TRY(Core::System::unveil(nullptr, nullptr));
auto app_icon = GUI::Icon::default_icon("app-spreadsheet");
auto app_icon = GUI::Icon::default_icon("app-spreadsheet"sv);
auto window = GUI::Window::construct();
window->resize(640, 480);
window->set_icon(app_icon.bitmap_for_size(16));