Skip to content

Commit

Permalink
ext/MinitScript: updated MinitScript
Browse files Browse the repository at this point in the history
  • Loading branch information
andreasdr committed Jan 23, 2025
1 parent 761894c commit 336c479
Show file tree
Hide file tree
Showing 5 changed files with 169 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ void ApplicationMethods::registerConstants(MinitScript* minitScript) {
const string ApplicationMethods::execute(const string& command, int* exitCode, string* error) {
string result;
auto _command = command;
#if defined(_MSC_VER)
_command = "chcp 65001 > nul && " + _command
#endif
auto _exitCode = EXIT_FAILURE;
// error stream
string errorFile;
Expand Down
39 changes: 39 additions & 0 deletions ext/minitscript/src/minitscript/minitscript/ArrayMethods.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -742,4 +742,43 @@ void ArrayMethods::registerMethods(MinitScript* minitScript) {
};
minitScript->registerMethod(new MethodArrayContains(minitScript));
}
{
//
class MethodArrayConcatenate: public MinitScript::Method {
private:
MinitScript* minitScript { nullptr };
public:
MethodArrayConcatenate(MinitScript* minitScript):
MinitScript::Method(
{
{ .type = MinitScript::TYPE_ARRAY, .name = "array", .optional = false, .reference = false, .nullable = false },
{ .type = MinitScript::TYPE_STRING, .name = "separator", .optional = false, .reference = false, .nullable = false },
},
MinitScript::TYPE_STRING
),
minitScript(minitScript) {}
const string getMethodName() override {
return "Array::concatenate";
}
void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
string separator;
if ((arguments.size() == 2) &&
arguments[0].getType() == MinitScript::TYPE_ARRAY &&
MinitScript::getStringValue(arguments, 1, separator) == true) {
//
string result;
const auto& array = arguments[0];
for (auto i = 0; i < array.getArraySize(); i++) {
auto arrayValue = array.getArrayEntry(i);
if (result.empty() == false) result+= separator;
result+= arrayValue.getValueAsString();
}
returnValue.setValue(result);
} else {
MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
}
}
};
minitScript->registerMethod(new MethodArrayConcatenate(minitScript));
}
}
43 changes: 43 additions & 0 deletions ext/minitscript/src/minitscript/minitscript/MapMethods.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -407,4 +407,47 @@ void MapMethods::registerMethods(MinitScript* minitScript) {
};
minitScript->registerMethod(new MethodMapForEach(minitScript));
}
{
//
class MethodMapConcatenate: public MinitScript::Method {
private:
MinitScript* minitScript { nullptr };
public:
MethodMapConcatenate(MinitScript* minitScript):
MinitScript::Method(
{
{ .type = MinitScript::TYPE_MAP, .name = "map", .optional = false, .reference = false, .nullable = false },
{ .type = MinitScript::TYPE_STRING, .name = "assignmentSeparator", .optional = false, .reference = false, .nullable = false },
{ .type = MinitScript::TYPE_STRING, .name = "separator", .optional = false, .reference = false, .nullable = false },
},
MinitScript::TYPE_STRING
),
minitScript(minitScript) {}
const string getMethodName() override {
return "Map::concatenate";
}
void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
string assignmentSeparator;
string separator;
if ((arguments.size() == 3) &&
arguments[0].getType() == MinitScript::TYPE_MAP &&
MinitScript::getStringValue(arguments, 1, assignmentSeparator) == true &&
MinitScript::getStringValue(arguments, 2, separator) == true) {
//
string result;
auto mapPtr = arguments[0].getMapPointer();
if (mapPtr != nullptr) {
for (const auto& [mapKey, mapValue]: *mapPtr) {
if (result.empty() == false) result+= separator;
result+= mapKey + assignmentSeparator + mapValue->getValueAsString();
}
}
returnValue.setValue(result);
} else {
MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
}
}
};
minitScript->registerMethod(new MethodMapConcatenate(minitScript));
}
}
50 changes: 44 additions & 6 deletions ext/minitscript/src/minitscript/minitscript/MathMethods.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1034,13 +1034,51 @@ void MathMethods::add(const span<MinitScript::Variable>& arguments, MinitScript:
if (arguments[0].getType() == MinitScript::TYPE_ARRAY &&
arguments[1].getType() == MinitScript::TYPE_ARRAY) {
returnValue.setType(MinitScript::TYPE_ARRAY);
auto arrayPtr0 = arguments[0].getArrayPointer();
if (arrayPtr0 != nullptr) {
for (auto arrayEntry: *arrayPtr0) returnValue.pushArrayEntry(MinitScript::Variable::createNonReferenceVariable(arrayEntry));
{
auto arrayPtr = arguments[0].getArrayPointer();
if (arrayPtr != nullptr) {
for (auto arrayEntry: *arrayPtr) returnValue.pushArrayEntry(MinitScript::Variable::createNonReferenceVariable(arrayEntry));
}
}
{
auto arrayPtr = arguments[1].getArrayPointer();
if (arrayPtr != nullptr) {
for (auto arrayEntry: *arrayPtr) returnValue.pushArrayEntry(MinitScript::Variable::createNonReferenceVariable(arrayEntry));
}
}
} else
// map
if (arguments[0].getType() == MinitScript::TYPE_MAP &&
arguments[1].getType() == MinitScript::TYPE_MAP) {
returnValue.setType(MinitScript::TYPE_MAP);
{
auto mapPtr = arguments[0].getMapPointer();
if (mapPtr != nullptr) {
for (const auto& [mapKey, mapValue]: *mapPtr) returnValue.setMapEntry(mapKey, MinitScript::Variable::createNonReferenceVariable(mapValue));
}
}
auto arrayPtr1 = arguments[1].getArrayPointer();
if (arrayPtr1 != nullptr) {
for (auto arrayEntry: *arrayPtr1) returnValue.pushArrayEntry(MinitScript::Variable::createNonReferenceVariable(arrayEntry));
{
auto mapPtr = arguments[1].getMapPointer();
if (mapPtr != nullptr) {
for (const auto& [mapKey, mapValue]: *mapPtr) returnValue.setMapEntry(mapKey, MinitScript::Variable::createNonReferenceVariable(mapValue));
}
}
} else
// set
if (arguments[0].getType() == MinitScript::TYPE_SET &&
arguments[1].getType() == MinitScript::TYPE_SET) {
returnValue.setType(MinitScript::TYPE_SET);
{
auto setPtr = arguments[0].getSetPointer();
if (setPtr != nullptr) {
for (auto setKey: *setPtr) returnValue.insertSetKey(setKey);
}
}
{
auto setPtr = arguments[1].getSetPointer();
if (setPtr != nullptr) {
for (auto setKey: *setPtr) returnValue.insertSetKey(setKey);
}
}
} else
// float
Expand Down
40 changes: 40 additions & 0 deletions ext/minitscript/src/minitscript/minitscript/SetMethods.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -307,4 +307,44 @@ void SetMethods::registerMethods(MinitScript* minitScript) {
};
minitScript->registerMethod(new MethodSetForEach(minitScript));
}
{
//
class MethodSetConcatenate: public MinitScript::Method {
private:
MinitScript* minitScript { nullptr };
public:
MethodSetConcatenate(MinitScript* minitScript):
MinitScript::Method(
{
{ .type = MinitScript::TYPE_SET, .name = "set", .optional = false, .reference = false, .nullable = false },
{ .type = MinitScript::TYPE_STRING, .name = "separator", .optional = false, .reference = false, .nullable = false },
},
MinitScript::TYPE_STRING
),
minitScript(minitScript) {}
const string getMethodName() override {
return "Set::concatenate";
}
void executeMethod(span<MinitScript::Variable>& arguments, MinitScript::Variable& returnValue, const MinitScript::SubStatement& subStatement) override {
string separator;
if ((arguments.size() == 2) &&
arguments[0].getType() == MinitScript::TYPE_SET &&
MinitScript::getStringValue(arguments, 1, separator) == true) {
//
string result;
auto setPtr = arguments[0].getSetPointer();
if (setPtr != nullptr) {
for (auto setKey: *setPtr) {
if (result.empty() == false) result+= separator;
result+= setKey;
}
}
returnValue.setValue(result);
} else {
MINITSCRIPT_METHODUSAGE_COMPLAIN(getMethodName());
}
}
};
minitScript->registerMethod(new MethodSetConcatenate(minitScript));
}
}

0 comments on commit 336c479

Please sign in to comment.