mirror of
https://github.com/RGBCube/serenity
synced 2025-07-28 04:37:44 +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:
parent
e5f09ea170
commit
3f3f45580a
762 changed files with 8315 additions and 8316 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
namespace Spreadsheet {
|
||||
|
||||
IdentityCell::IdentityCell()
|
||||
: CellType("Identity")
|
||||
: CellType("Identity"sv)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
namespace Spreadsheet {
|
||||
|
||||
NumericCell::NumericCell()
|
||||
: CellType("Numeric")
|
||||
: CellType("Numeric"sv)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
namespace Spreadsheet {
|
||||
|
||||
StringCell::StringCell()
|
||||
: CellType("String")
|
||||
: CellType("String"sv)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue