MCPcopy Create free account
hub / github.com/esmBot/esmBot / parseArguments

Function parseArguments

natives/cli/cli.cc:38–103  ·  view source on GitHub ↗

basically a port of src/utils/parseCommand.ts

Source from the content-addressed store, hash-verified

36
37// basically a port of src/utils/parseCommand.ts
38Args parseArguments(int argc, char *argv[]) {
39 Args args;
40 std::optional<std::string> curr;
41 std::string concated;
42
43 for (int i = 0; i < argc; i++) {
44 const std::string a = argv[i];
45
46 if (starts_with(a, "--") && !curr.has_value()) {
47 if (a.find("=") != std::string::npos) {
48 std::vector<std::string> separated = split(a.substr(2), '=');
49 std::string arg = separated[0];
50 std::string value = separated[1];
51 bool ended = true;
52 if (arg != "args") {
53 if (starts_with(value, "\"")) {
54 if (ends_with(value, "\"")) {
55 args.flags[arg] = value.substr(1, value.size() - 1);
56 } else {
57 args.flags[arg] = value.substr(1) + " ";
58 ended = false;
59 }
60 } else if (ends_with(value, "\"")) {
61 std::string curVal = GetArgument<std::string>(args.flags, arg);
62 args.flags[arg] = curVal + a.substr(0, a.size() - 1);
63 } else if (value != "") {
64 args.flags[arg] = value;
65 } else {
66 args.flags[arg] = true;
67 }
68
69 std::string curVal = GetArgument<std::string>(args.flags, arg);
70 if (curVal == "true") {
71 args.flags[arg] = true;
72 } else if (curVal == "false") {
73 args.flags[arg] = false;
74 }
75
76 if (!ended) curr = arg;
77 }
78 } else {
79 args.flags[a.substr(2)] = true;
80 }
81 } else if (curr.has_value()) {
82 std::string curVal = GetArgument<std::string>(args.flags, curr.value());
83 if (ends_with(a, "\"")) {
84 args.flags[curr.value()] = curVal + a.substr(0, a.size() - 1);
85 curr = std::nullopt;
86 } else {
87 args.flags[curr.value()] = curVal + a + " ";
88 }
89 } else {
90 if (concated != "") {
91 concated += a + " ";
92 } else {
93 args.args.push_back(a);
94 }
95 }

Callers 1

mainFunction · 0.85

Calls 3

starts_withFunction · 0.85
splitFunction · 0.85
ends_withFunction · 0.85

Tested by

no test coverage detected