split by regexp and [rl]tring added
This commit is contained in:
30
ml.cpp
30
ml.cpp
@@ -1526,6 +1526,34 @@ namespace builtin {
|
||||
return MlValue((long)regexp_search(args[0].as_string(), args[1].as_string()));
|
||||
}
|
||||
|
||||
// Splits string by regexp and returns list containing splited parts
|
||||
MlValue string_split(std::vector<MlValue> args, MlEnvironment &env) {
|
||||
eval_args(args, env);
|
||||
|
||||
if (args.size() != 2)
|
||||
throw MlError(MlValue("string-split", string_split), env, args.size() > 2 ? TOO_MANY_ARGS : TOO_FEW_ARGS);
|
||||
|
||||
// TODO more efficient
|
||||
std::vector<std::string> elements = regexp_strsplit(args[0].as_string(), args[1].as_string());
|
||||
std::vector<MlValue> result{};
|
||||
|
||||
for (size_t i = 0; i < elements.size(); i++)
|
||||
result.push_back(MlValue::string(elements[i]));
|
||||
|
||||
return MlValue(result);
|
||||
}
|
||||
|
||||
// trims characters " \n\r\t" from left or right or both ends of a string
|
||||
MlValue string_rltrim(std::vector<MlValue> args, MlEnvironment &env) {
|
||||
eval_args(args, env);
|
||||
|
||||
if (args.size() != 3)
|
||||
throw MlError(MlValue("string_rltrim", string_rltrim), env, args.size() > 3 ? TOO_MANY_ARGS : TOO_FEW_ARGS);
|
||||
|
||||
// TODO validate
|
||||
return MlValue::string(trim(args[0].as_string(), args[1].as_string(), args[2].as_string()));
|
||||
}
|
||||
|
||||
MlValue string_pad(std::vector<MlValue> args, MlEnvironment &env) {
|
||||
eval_args(args, env);
|
||||
|
||||
@@ -1803,7 +1831,9 @@ MlValue MlEnvironment::get(const std::string &name) const {
|
||||
if (name == "display") return MlValue("display", builtin::display);
|
||||
if (name == "string-replace") return MlValue("string-replace", builtin::string_replace);
|
||||
if (name == "string-regex?") return MlValue("string-regex?", builtin::string_regex);
|
||||
if (name == "string-split") return MlValue("string-split", builtin::string_split);
|
||||
if (name == "string-pad") return MlValue("string-pad", builtin::string_pad);
|
||||
if (name == "string-rltrim") return MlValue("string-rltrim", builtin::string_rltrim);
|
||||
|
||||
// Casting operations
|
||||
if (name == "int") return MlValue("int", builtin::cast_to_int);
|
||||
|
||||
Reference in New Issue
Block a user