mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-11-03 09:22:01 +00:00 
			
		
		
		
	@@ -1378,13 +1378,27 @@ struct ArgumentsExpression {
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static std::string strip(const std::string & s) {
 | 
			
		||||
  auto start = s.find_first_not_of(" \t\n\r");
 | 
			
		||||
static std::string strip(const std::string & s, const std::string & chars = "", bool left = true, bool right = true) {
 | 
			
		||||
  auto charset = chars.empty() ? " \t\n\r" : chars;
 | 
			
		||||
  auto start = left ? s.find_first_not_of(charset) : 0;
 | 
			
		||||
  if (start == std::string::npos) return "";
 | 
			
		||||
  auto end = s.find_last_not_of(" \t\n\r");
 | 
			
		||||
  auto end = right ? s.find_last_not_of(charset) : s.size() - 1;
 | 
			
		||||
  return s.substr(start, end - start + 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static std::vector<std::string> split(const std::string & s, const std::string & sep) {
 | 
			
		||||
  std::vector<std::string> result;
 | 
			
		||||
  size_t start = 0;
 | 
			
		||||
  size_t end = s.find(sep);
 | 
			
		||||
  while (end != std::string::npos) {
 | 
			
		||||
    result.push_back(s.substr(start, end - start));
 | 
			
		||||
    start = end + sep.length();
 | 
			
		||||
    end = s.find(sep, start);
 | 
			
		||||
  }
 | 
			
		||||
  result.push_back(s.substr(start));
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static std::string capitalize(const std::string & s) {
 | 
			
		||||
  if (s.empty()) return s;
 | 
			
		||||
  auto result = s;
 | 
			
		||||
@@ -1467,8 +1481,26 @@ public:
 | 
			
		||||
        } else if (obj.is_string()) {
 | 
			
		||||
          auto str = obj.get<std::string>();
 | 
			
		||||
          if (method->get_name() == "strip") {
 | 
			
		||||
            vargs.expectArgs("strip method", {0, 0}, {0, 0});
 | 
			
		||||
            return Value(strip(str));
 | 
			
		||||
            vargs.expectArgs("strip method", {0, 1}, {0, 0});
 | 
			
		||||
            auto chars = vargs.args.empty() ? "" : vargs.args[0].get<std::string>();
 | 
			
		||||
            return Value(strip(str, chars));
 | 
			
		||||
          } else if (method->get_name() == "lstrip") {
 | 
			
		||||
            vargs.expectArgs("lstrip method", {0, 1}, {0, 0});
 | 
			
		||||
            auto chars = vargs.args.empty() ? "" : vargs.args[0].get<std::string>();
 | 
			
		||||
            return Value(strip(str, chars, /* left= */ true, /* right= */ false));
 | 
			
		||||
          } else if (method->get_name() == "rstrip") {
 | 
			
		||||
            vargs.expectArgs("rstrip method", {0, 1}, {0, 0});
 | 
			
		||||
            auto chars = vargs.args.empty() ? "" : vargs.args[0].get<std::string>();
 | 
			
		||||
            return Value(strip(str, chars, /* left= */ false, /* right= */ true));
 | 
			
		||||
          } else if (method->get_name() == "split") {
 | 
			
		||||
            vargs.expectArgs("split method", {1, 1}, {0, 0});
 | 
			
		||||
            auto sep = vargs.args[0].get<std::string>();
 | 
			
		||||
            auto parts = split(str, sep);
 | 
			
		||||
            Value result = Value::array();
 | 
			
		||||
            for (const auto& part : parts) {
 | 
			
		||||
              result.push_back(Value(part));
 | 
			
		||||
            }
 | 
			
		||||
            return result;
 | 
			
		||||
          } else if (method->get_name() == "capitalize") {
 | 
			
		||||
            vargs.expectArgs("capitalize method", {0, 0}, {0, 0});
 | 
			
		||||
            return Value(capitalize(str));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user