31 void StringMethods::registerConstants(
MinitScript* minitScript) {
34 void StringMethods::registerMethods(
MinitScript* minitScript) {
45 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false }
47 MinitScript::TYPE_STRING
49 minitScript(minitScript) {}
50 const string getMethodName()
override {
55 if (arguments.size() == 1 &&
56 MinitScript::getStringValue(arguments, 0, stringValue) ==
true) {
74 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false }
76 MinitScript::TYPE_INTEGER
78 minitScript(minitScript) {}
79 const string getMethodName()
override {
80 return "String::getSize";
84 if (arguments.size() == 1 &&
85 MinitScript::getStringValue(arguments, 0, stringValue) ==
true) {
103 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
104 { .type = MinitScript::TYPE_INTEGER, .name =
"index", .optional =
false, .reference =
false, .nullable =
false }
106 MinitScript::TYPE_STRING
108 minitScript(minitScript) {}
109 const string getMethodName()
override {
110 return "String::charAt";
115 if (arguments.size() == 2 &&
116 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
117 MinitScript::getIntegerValue(arguments, 1, index) ==
true) {
135 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
136 { .type = MinitScript::TYPE_INTEGER, .name =
"index", .optional =
false, .reference =
false, .nullable =
false }
138 MinitScript::TYPE_INTEGER
140 minitScript(minitScript) {}
141 const string getMethodName()
override {
142 return "String::codePointAt";
147 if (arguments.size() == 2 &&
148 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
149 MinitScript::getIntegerValue(arguments, 1, index) ==
true) {
156 minitScript->
registerMethod(
new MethodStringCodePointAt(minitScript));
167 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
168 { .type = MinitScript::TYPE_STRING, .name =
"prefix", .optional =
false, .reference =
false, .nullable =
false }
170 MinitScript::TYPE_BOOLEAN
172 minitScript(minitScript) {}
173 const string getMethodName()
override {
174 return "String::startsWith";
179 if (arguments.size() == 2 &&
180 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
181 MinitScript::getStringValue(arguments, 1, prefix) ==
true) {
188 minitScript->
registerMethod(
new MethodStringStartsWith(minitScript));
199 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
200 { .type = MinitScript::TYPE_STRING, .name =
"suffix", .optional =
false, .reference =
false, .nullable =
false }
202 MinitScript::TYPE_BOOLEAN
204 minitScript(minitScript) {}
205 const string getMethodName()
override {
206 return "String::endsWith";
211 if (arguments.size() == 2 &&
212 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
213 MinitScript::getStringValue(arguments, 1, suffix) ==
true) {
220 minitScript->
registerMethod(
new MethodStringEndsWith(minitScript));
231 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
232 { .type = MinitScript::TYPE_STRING, .name =
"what", .optional =
false, .reference =
false, .nullable =
false },
233 { .type = MinitScript::TYPE_STRING, .name =
"by", .optional =
false, .reference =
false, .nullable =
false },
234 { .type = MinitScript::TYPE_INTEGER, .name =
"beginIndex", .optional =
true, .reference =
false, .nullable =
false }
236 MinitScript::TYPE_STRING
238 minitScript(minitScript) {}
239 const string getMethodName()
override {
240 return "String::replace";
246 int64_t beginIndex = 0;
247 if ((arguments.size() == 3 || arguments.size() == 4) &&
248 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
249 MinitScript::getStringValue(arguments, 1, what) ==
true &&
250 MinitScript::getStringValue(arguments, 2, by) ==
true &&
251 MinitScript::getIntegerValue(arguments, 3, beginIndex,
true) ==
true) {
258 minitScript->
registerMethod(
new MethodStringReplace(minitScript));
269 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
270 { .type = MinitScript::TYPE_STRING, .name =
"what", .optional =
false, .reference =
false, .nullable =
false },
271 { .type = MinitScript::TYPE_INTEGER, .name =
"beginIndex", .optional =
true, .reference =
false, .nullable =
false }
273 MinitScript::TYPE_INTEGER
275 minitScript(minitScript) {}
276 const string getMethodName()
override {
277 return "String::indexOf";
282 int64_t beginIndex = 0;
283 if ((arguments.size() == 2 || arguments.size() == 3) &&
284 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
285 MinitScript::getStringValue(arguments, 1, what) ==
true &&
286 MinitScript::getIntegerValue(arguments, 2, beginIndex,
true) ==
true) {
293 minitScript->
registerMethod(
new MethodStringIndexOf(minitScript));
301 MethodStringFirstIndexOf(
MinitScript* minitScript):
304 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
305 { .type = MinitScript::TYPE_STRING, .name =
"what", .optional =
false, .reference =
false, .nullable =
false },
306 { .type = MinitScript::TYPE_INTEGER, .name =
"beginIndex", .optional =
true, .reference =
false, .nullable =
false }
308 MinitScript::TYPE_INTEGER
310 minitScript(minitScript) {}
311 const string getMethodName()
override {
312 return "String::firstIndexOf";
317 int64_t beginIndex = 0;
318 if ((arguments.size() == 2 || arguments.size() == 3) &&
319 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
320 MinitScript::getStringValue(arguments, 1, what) ==
true &&
321 MinitScript::getIntegerValue(arguments, 2, beginIndex,
true) ==
true) {
328 minitScript->
registerMethod(
new MethodStringFirstIndexOf(minitScript));
339 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
340 { .type = MinitScript::TYPE_STRING, .name =
"what", .optional =
false, .reference =
false, .nullable =
false },
341 { .type = MinitScript::TYPE_INTEGER, .name =
"beginIndex", .optional =
true, .reference =
false, .nullable =
false }
343 MinitScript::TYPE_INTEGER
345 minitScript(minitScript) {}
346 const string getMethodName()
override {
347 return "String::lastIndexOf";
352 int64_t beginIndex = 0;
353 if ((arguments.size() == 2 || arguments.size() == 3) &&
354 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
355 MinitScript::getStringValue(arguments, 1, what) ==
true &&
356 MinitScript::getIntegerValue(arguments, 2, beginIndex,
true) ==
true) {
363 minitScript->
registerMethod(
new MethodStringLastIndexOf(minitScript));
371 MethodStringFirstIndexOfChars(
MinitScript* minitScript):
374 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
375 { .type = MinitScript::TYPE_STRING, .name =
"what", .optional =
false, .reference =
false, .nullable =
false },
376 { .type = MinitScript::TYPE_INTEGER, .name =
"beginIndex", .optional =
true, .reference =
false, .nullable =
false }
378 MinitScript::TYPE_INTEGER
380 minitScript(minitScript) {}
381 const string getMethodName()
override {
382 return "String::firstIndexOfChars";
387 int64_t beginIndex = 0;
388 if ((arguments.size() == 2 || arguments.size() == 3) &&
389 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
390 MinitScript::getStringValue(arguments, 1, what) ==
true &&
391 MinitScript::getIntegerValue(arguments, 2, beginIndex,
true) ==
true) {
393 static_cast<int64_t
>(
398 arguments[0].getStringValueCache(),
399 arguments[1].getStringValueCache()
408 minitScript->
registerMethod(
new MethodStringFirstIndexOfChars(minitScript));
416 MethodStringLastIndexOfChars(
MinitScript* minitScript):
419 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
420 { .type = MinitScript::TYPE_STRING, .name =
"what", .optional =
false, .reference =
false, .nullable =
false },
421 { .type = MinitScript::TYPE_INTEGER, .name =
"endIndex", .optional =
true, .reference =
false, .nullable =
false }
423 MinitScript::TYPE_INTEGER
425 minitScript(minitScript) {}
426 const string getMethodName()
override {
427 return "String::lastIndexOfChars";
432 int64_t endIndex = string::npos;
433 if ((arguments.size() == 2 || arguments.size() == 3) &&
434 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
435 MinitScript::getStringValue(arguments, 1, what) ==
true &&
436 MinitScript::getIntegerValue(arguments, 2, endIndex,
true) ==
true) {
438 static_cast<int64_t
>(
443 arguments[0].getStringValueCache(),
444 arguments[1].getStringValueCache()
453 minitScript->
registerMethod(
new MethodStringLastIndexOfChars(minitScript));
464 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
465 { .type = MinitScript::TYPE_INTEGER, .name =
"beginIndex", .optional =
false, .reference =
false, .nullable =
false },
466 { .type = MinitScript::TYPE_INTEGER, .name =
"endIndex", .optional =
true, .reference =
false, .nullable =
false },
468 MinitScript::TYPE_STRING
470 minitScript(minitScript) {}
471 const string getMethodName()
override {
472 return "String::substring";
477 int64_t endIndex = string::npos;
478 if ((arguments.size() == 2 || arguments.size() == 3) &&
479 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
480 MinitScript::getIntegerValue(arguments, 1, beginIndex) ==
true &&
481 MinitScript::getIntegerValue(arguments, 2, endIndex,
true) ==
true) {
489 minitScript->
registerMethod(
new MethodStringSubString(minitScript));
497 MethodStringEqualsIgnoreCase(
MinitScript* minitScript):
500 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
501 { .type = MinitScript::TYPE_STRING, .name =
"other", .optional =
false, .reference =
false, .nullable =
false },
503 MinitScript::TYPE_BOOLEAN
505 minitScript(minitScript) {}
506 const string getMethodName()
override {
507 return "String::equalsIgnoreCase";
512 if (arguments.size() == 2 &&
513 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
514 MinitScript::getStringValue(arguments, 1, other) ==
true) {
521 minitScript->
registerMethod(
new MethodStringEqualsIgnoreCase(minitScript));
532 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
534 MinitScript::TYPE_STRING
536 minitScript(minitScript) {}
537 const string getMethodName()
override {
538 return "String::trim";
542 if (arguments.size() == 1 &&
543 MinitScript::getStringValue(arguments, 0, stringValue) ==
true) {
561 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
562 { .type = MinitScript::TYPE_STRING, .name =
"pattern", .optional =
false, .reference =
false, .nullable =
false },
563 { .type = MinitScript::TYPE_ARRAY, .name =
"matches", .optional =
true, .reference =
true, .nullable =
true },
565 MinitScript::TYPE_BOOLEAN
567 minitScript(minitScript) {}
568 const string getMethodName()
override {
569 return "String::regexMatch";
574 if ((arguments.size() == 2 || arguments.size() == 3) &&
575 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
576 MinitScript::getStringValue(arguments, 1, pattern) ==
true) {
577 if (arguments.size() == 3) {
580 arguments[2].setType(MinitScript::TYPE_ARRAY);
581 arguments[2].clearArray();
582 for (
const auto& match: matches) {
593 minitScript->
registerMethod(
new MethodStringRegexMatch(minitScript));
604 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
605 { .type = MinitScript::TYPE_STRING, .name =
"pattern", .optional =
false, .reference =
false, .nullable =
false },
606 { .type = MinitScript::TYPE_ARRAY, .name =
"matches", .optional =
true, .reference =
true, .nullable =
true },
608 MinitScript::TYPE_BOOLEAN
610 minitScript(minitScript) {}
611 const string getMethodName()
override {
612 return "String::regexSearch";
617 if ((arguments.size() == 2 || arguments.size() == 3) &&
618 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
619 MinitScript::getStringValue(arguments, 1, pattern) ==
true) {
620 if (arguments.size() == 3) {
623 arguments[2].setType(MinitScript::TYPE_ARRAY);
624 arguments[2].clearArray();
625 for (
const auto& match: matches) {
636 minitScript->
registerMethod(
new MethodStringRegexSearch(minitScript));
644 MethodStringRegexReplace(
MinitScript* minitScript):
647 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
648 { .type = MinitScript::TYPE_STRING, .name =
"pattern", .optional =
false, .reference =
false, .nullable =
false },
649 { .type = MinitScript::TYPE_STRING, .name =
"by", .optional =
false, .reference =
false, .nullable =
false },
651 MinitScript::TYPE_STRING
653 minitScript(minitScript) {}
654 const string getMethodName()
override {
655 return "String::regexReplace";
661 if (arguments.size() == 3 &&
662 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
663 MinitScript::getStringValue(arguments, 1, pattern) ==
true &&
664 MinitScript::getStringValue(arguments, 2, by) ==
true) {
671 minitScript->
registerMethod(
new MethodStringRegexReplace(minitScript));
682 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
683 { .type = MinitScript::TYPE_STRING, .name =
"delimiters", .optional =
false, .reference =
false, .nullable =
false },
685 MinitScript::TYPE_ARRAY
687 minitScript(minitScript) {}
688 const string getMethodName()
override {
689 return "String::tokenize";
694 if (arguments.size() == 2 &&
695 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
696 MinitScript::getStringValue(arguments, 1, delimiters) ==
true) {
698 returnValue.
setType(MinitScript::TYPE_ARRAY);
699 for (
const auto& tokenizedString: tokenizedStringVector) {
707 minitScript->
registerMethod(
new MethodStringTokenize(minitScript));
718 { .type = MinitScript::TYPE_STRING, .name =
"what", .optional =
false, .reference =
false, .nullable =
false },
719 { .type = MinitScript::TYPE_INTEGER, .name =
"count", .optional =
true, .reference =
false, .nullable =
false }
721 MinitScript::TYPE_STRING
723 minitScript(minitScript) {
726 const string getMethodName()
override {
727 return "String::generate";
732 if ((arguments.size() == 1 || arguments.size() == 2) &&
733 MinitScript::getStringValue(arguments, 0, what) ==
true &&
734 MinitScript::getIntegerValue(arguments, 1, count,
true) ==
true) {
741 minitScript->
registerMethod(
new MethodStringGenerate(minitScript));
752 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
753 { .type = MinitScript::TYPE_STRING, .name =
"with", .optional =
false, .reference =
false, .nullable =
false },
754 { .type = MinitScript::TYPE_INTEGER, .name =
"count", .optional =
false, .reference =
false, .nullable =
false }
756 MinitScript::TYPE_STRING
758 minitScript(minitScript) {
761 const string getMethodName()
override {
762 return "String::indent";
768 if ((arguments.size() == 2 || arguments.size() == 3) &&
769 MinitScript::getStringValue(arguments, 0, src) ==
true &&
770 MinitScript::getStringValue(arguments, 1, with) ==
true &&
771 MinitScript::getIntegerValue(arguments, 2, count,
true) ==
true) {
787 const string getMethodName()
override {
788 return "String::concatenate";
792 for (
const auto& argument: arguments) {
793 result+= argument.getValueAsString();
797 bool isVariadic()
const override {
801 minitScript->
registerMethod(
new MethodStringConcatenate(minitScript));
812 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false }
814 MinitScript::TYPE_STRING
816 minitScript(minitScript) {}
817 const string getMethodName()
override {
818 return "String::toUpperCase";
822 if (arguments.size() == 1 &&
823 MinitScript::getStringValue(arguments, 0, stringValue) ==
true) {
830 minitScript->
registerMethod(
new MethodToStringUpperCase(minitScript));
841 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false }
843 MinitScript::TYPE_STRING
845 minitScript(minitScript) {}
846 const string getMethodName()
override {
847 return "String::toLowerCase";
851 if (arguments.size() == 1 &&
852 MinitScript::getStringValue(arguments, 0, stringValue) ==
true) {
859 minitScript->
registerMethod(
new MethodToStringLowerCase(minitScript));
870 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false }
872 MinitScript::TYPE_BOOLEAN
874 minitScript(minitScript) {}
875 const string getMethodName()
override {
876 return "String::isEmpty";
880 if (arguments.size() == 1 &&
881 MinitScript::getStringValue(arguments, 0, stringValue) ==
true) {
882 returnValue.
setValue(stringValue.empty());
888 minitScript->
registerMethod(
new MethodStringIsEmpty(minitScript));
899 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false }
901 MinitScript::TYPE_BOOLEAN
903 minitScript(minitScript) {}
904 const string getMethodName()
override {
905 return "String::isFloat";
909 if (arguments.size() == 1 &&
910 MinitScript::getStringValue(arguments, 0, stringValue) ==
true) {
917 minitScript->
registerMethod(
new MethodStringIsFloat(minitScript));
928 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false }
930 MinitScript::TYPE_BOOLEAN
932 minitScript(minitScript) {}
933 const string getMethodName()
override {
934 return "String::isInteger";
938 if (arguments.size() == 1 &&
939 MinitScript::getStringValue(arguments, 0, stringValue) ==
true) {
946 minitScript->
registerMethod(
new MethodStringIsInteger(minitScript));
957 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
958 { .type = MinitScript::TYPE_STRING, .name =
"by", .optional =
false, .reference =
false, .nullable =
false },
959 { .type = MinitScript::TYPE_INTEGER, .name =
"toLength", .optional =
false, .reference =
false, .nullable =
false }
961 MinitScript::TYPE_STRING
963 minitScript(minitScript) {}
964 const string getMethodName()
override {
965 return "String::padLeft";
971 if (arguments.size() == 3 &&
972 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
973 MinitScript::getStringValue(arguments, 1, by) ==
true &&
974 MinitScript::getIntegerValue(arguments, 2, toLength) ==
true) {
981 minitScript->
registerMethod(
new MethodStringPadLeft(minitScript));
992 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
993 { .type = MinitScript::TYPE_STRING, .name =
"by", .optional =
false, .reference =
false, .nullable =
false },
994 { .type = MinitScript::TYPE_INTEGER, .name =
"toLength", .optional =
false, .reference =
false, .nullable =
false }
996 MinitScript::TYPE_STRING
998 minitScript(minitScript) {}
999 const string getMethodName()
override {
1000 return "String::padRight";
1006 if (arguments.size() == 3 &&
1007 MinitScript::getStringValue(arguments, 0, stringValue) ==
true &&
1008 MinitScript::getStringValue(arguments, 1, by) ==
true &&
1009 MinitScript::getIntegerValue(arguments, 2, toLength) ==
true) {
1016 minitScript->
registerMethod(
new MethodStringPadRight(minitScript));
1024 MethodStringToByteArray(
MinitScript* minitScript):
1027 { .type = MinitScript::TYPE_STRING, .name =
"string", .optional =
false, .reference =
false, .nullable =
false },
1029 MinitScript::TYPE_BYTEARRAY
1031 minitScript(minitScript) {}
1032 const string getMethodName()
override {
1033 return "String::toByteArray";
1037 if (arguments.size() == 1 &&
1038 MinitScript::getStringValue(arguments, 0, stringValue) ==
true) {
1039 returnValue.
setType(MinitScript::TYPE_BYTEARRAY);
1040 for (
auto i = 0; i < stringValue.size(); i++) returnValue.
pushByteArrayEntry(stringValue[i]);
1046 minitScript->
registerMethod(
new MethodStringToByteArray(minitScript));
1054 MethodStringFromByteArray(
MinitScript* minitScript):
1057 { .type = MinitScript::TYPE_BYTEARRAY, .name =
"byteArray", .optional =
false, .reference =
false, .nullable =
false },
1059 MinitScript::TYPE_STRING
1061 minitScript(minitScript) {}
1062 const string getMethodName()
override {
1063 return "String::fromByteArray";
1067 if (arguments.size() == 1 &&
1068 arguments[0].getType() == MinitScript::TYPE_BYTEARRAY) {
1069 auto byteArrayPointer = arguments[0].getByteArrayPointer();
1070 if (byteArrayPointer !=
nullptr) {
1071 returnValue.
setValue(
string((
const char*)(byteArrayPointer->data()), byteArrayPointer->size()));
1078 minitScript->
registerMethod(
new MethodStringFromByteArray(minitScript));
1086 MethodStringFromCodePoint(
MinitScript* minitScript):
1089 { .type = MinitScript::TYPE_INTEGER, .name =
"codePoint", .optional =
false, .reference =
false, .nullable =
false },
1091 MinitScript::TYPE_STRING
1093 minitScript(minitScript) {}
1094 const string getMethodName()
override {
1095 return "String::fromCodePoint";
1099 if (arguments.size() == 1 &&
1100 MinitScript::getIntegerValue(arguments, 0, codePoint) ==
true) {
1107 minitScript->
registerMethod(
new MethodStringFromCodePoint(minitScript));
#define MINITSCRIPT_METHODUSAGE_COMPLAIN(methodName)
void pushByteArrayEntry(uint8_t value)
Push entry to byte array.
void pushArrayEntry(const Variable &value)
Push entry to array.
void setType(VariableType newType)
Set type.
void setValue(const Variable &variable)
Set value from given variable into variable.
void registerMethod(Method *method)
Register method.
MinitScript script string methods.
static const string toString(uint32_t character)
Generates a string from given character / code point.
static bool is(const string &str)
Check if given string is a float string.
static bool is(const string &str)
Check if given string is a integer string.
UTF8 string character iterator.