diff --git a/src/modules/split/split.cpp b/src/modules/split/split.cpp index 1edac91..d84ef48 100644 --- a/src/modules/split/split.cpp +++ b/src/modules/split/split.cpp @@ -1,8 +1,45 @@ #include "split.h" #include "../../defs/defs.h" +#include "../../error/error.h" #include #include Value modules::split(std::vector args) { - return Value("Work in progress!"); + if (args.size() < 1) { + error("Not enough args for split module"); + } + if (args[0].valtype != ValueType::String) { + error("First argument of split must be a string"); + } + std::string delimiter = " "; + if (args.size() > 1) { + if (args[1].valtype == ValueType::String) { + delimiter = args[1].string_val; + } else { + error("Expected a string delimiter as second argument of split"); + } + } + + std::string buf; + std::vector list; + + for (const char& chr : args[0].string_val) { + buf += chr; + + if (buf.size() >= delimiter.size()) { + std::string checker = buf.substr(buf.size() - delimiter.size()); + + if (checker == delimiter) { + list.push_back(Value("\"" + buf.substr(0, buf.size() - delimiter.size()) + "\"")); + buf.clear(); + } + } + } + + if (!buf.empty()) { + list.push_back(Value("\"" + buf + "\"")); + } + + + return Value(list); }