|
| 1 | +#include <string> |
| 2 | +#include <vector> |
| 3 | + |
| 4 | +#include <chaiscript/chaiscript.hpp> |
| 5 | + |
| 6 | +namespace chaiscript { |
| 7 | + namespace extras { |
| 8 | + namespace string_methods { |
| 9 | + ModulePtr bootstrap(ModulePtr m = std::make_shared<Module>()) |
| 10 | + { |
| 11 | + // string::replace(std::string search, std::string replace) |
| 12 | + chai.add(fun([](const std::string& subject, const std::string& search, const std::string& replace) { |
| 13 | + std::string result(subject); |
| 14 | + size_t pos = 0; |
| 15 | + while ((pos = result.find(search, pos)) != std::string::npos) { |
| 16 | + result.replace(pos, search.length(), replace); |
| 17 | + pos += replace.length(); |
| 18 | + } |
| 19 | + return result; |
| 20 | + }), "replace"); |
| 21 | + |
| 22 | + // string::replace(char, char) |
| 23 | + m->add(fun([](const std::string& subject, char search, char replace) { |
| 24 | + std::string result(subject); |
| 25 | + std::replace(result.begin(), result.end(), search, replace); |
| 26 | + return result; |
| 27 | + }), "replace"); |
| 28 | + |
| 29 | + |
| 30 | + // string::trim() |
| 31 | + m->add(fun([](const std::string& subject) { |
| 32 | + std::string result(subject); |
| 33 | + std::string chars = "\t\n\v\f\r "; |
| 34 | + result.erase(0, result.find_first_not_of(chars)); |
| 35 | + result.erase(0, result.find_last_not_of(chars)); |
| 36 | + return result; |
| 37 | + }), "trim"); |
| 38 | + |
| 39 | + // string::split() |
| 40 | + m->add(fun([](const std::string& subject, const std::string& token) { |
| 41 | + std::string str(subject); |
| 42 | + std::vector<std::string> result; |
| 43 | + while (str.size()) { |
| 44 | + int index = str.find(token); |
| 45 | + if (index != std::string::npos) { |
| 46 | + result.push_back(str.substr(0, index)); |
| 47 | + str = str.substr(index + token.size()); |
| 48 | + if (str.size() == 0) { |
| 49 | + result.push_back(str); |
| 50 | + } |
| 51 | + } else { |
| 52 | + result.push_back(str); |
| 53 | + str = ""; |
| 54 | + } |
| 55 | + } |
| 56 | + return result; |
| 57 | + }), "split"); |
| 58 | + |
| 59 | + return m; |
| 60 | + } |
| 61 | + } |
| 62 | + } |
| 63 | +} |
0 commit comments