Combined tolower/toupper in previous commit to "string_to_case"

This commit is contained in:
NovaRain
2020-01-16 20:33:36 +08:00
parent dd7613c910
commit d1868d2eaf
5 changed files with 15 additions and 35 deletions
+2 -2
View File
@@ -323,10 +323,10 @@
#define string_compare(str1, str2) sfall_func2("string_compare", str1, str2)
#define string_compare_locale(str1, str2, codePage) sfall_func3("string_compare", str1, str2, codePage)
#define string_format(format, a1, a2) sfall_func3("string_format", format, a1, a2)
#define string_tolower(text) sfall_func2("string_to_case", text, 0)
#define string_toupper(text) sfall_func2("string_to_case", text, 1)
#define tile_by_position(x, y) sfall_func2("tile_by_position", x, y)
#define tile_refresh_display sfall_func0("tile_refresh_display")
#define tolower(text) sfall_func1("tolower", text)
#define toupper(text) sfall_func1("toupper", text)
#define unjam_lock(obj) sfall_func1("unjam_lock", obj)
#define unset_unique_id(obj) sfall_func2("set_unique_id", obj, -1)
#define unwield_slot(critter, slot) sfall_func2("unwield_slot", critter, slot)
+3 -7
View File
@@ -697,13 +697,9 @@ optional argument:
- returns the tile number at the x, y position relative to the top-left corner of the screen
- if the position is outside of the range of tiles, it will return -1
> string sfall_func1("tolower", string text)
- converts all uppercase letters in the given string to lowercase
- returns -1 on argument error
> string sfall_func1("toupper", string text)
- converts all lowercase letters in the given string to uppercase
- returns -1 on argument error
> string sfall_func2("string_to_case", string text, int toCase)
- converts all letters in the given string to the specified case
- toCase: 0 - lowercase, 1 - uppercase
------------------------
------ MORE INFO -------
@@ -134,10 +134,9 @@ static const SfallMetarule metarules[] = {
{"spatial_radius", sf_spatial_radius, 1, 1, 0, {ARG_OBJECT}},
{"string_compare", sf_string_compare, 2, 3, 0, {ARG_STRING, ARG_STRING, ARG_INT}},
{"string_format", sf_string_format, 2, 5, 0, {ARG_STRING, ARG_ANY, ARG_ANY, ARG_ANY, ARG_ANY}},
{"string_to_case", sf_string_to_case, 2, 2, -1, {ARG_STRING, ARG_INT}},
{"tile_by_position", sf_tile_by_position, 2, 2, -1, {ARG_INT, ARG_INT}},
{"tile_refresh_display", sf_tile_refresh_display, 0, 0},
{"tolower", sf_tolower, 1, 1, -1, {ARG_STRING}},
{"toupper", sf_toupper, 1, 1, -1, {ARG_STRING}},
{"unjam_lock", sf_unjam_lock, 1, 1, -1, {ARG_OBJECT}},
{"unwield_slot", sf_unwield_slot, 2, 2, -1, {ARG_OBJECT, ARG_INT}},
#ifndef NDEBUG
+8 -21
View File
@@ -466,29 +466,16 @@ void sf_get_text_width(OpcodeContext& ctx) {
ctx.setReturn(fo::GetTextWidth(ctx.arg(0).strValue()));
}
static char* cstrdup(const char* str) {
size_t len = strlen(str);
const size_t bufMaxLen = ScriptExtender::TextBufferSize() - 1;
if (len > bufMaxLen) len = bufMaxLen;
static std::string strToCase;
if (len) memcpy(ScriptExtender::gTextBuffer, str, len);
ScriptExtender::gTextBuffer[len] = '\0';
void sf_string_to_case(OpcodeContext& ctx) {
strToCase = ctx.arg(0).strValue();
if (ctx.arg(1).rawValue())
std::transform(strToCase.begin(), strToCase.end(), strToCase.begin(), ::toupper);
else
std::transform(strToCase.begin(), strToCase.end(), strToCase.begin(), ::tolower);
return ScriptExtender::gTextBuffer;
}
void sf_tolower(OpcodeContext& ctx) {
auto str = std::string(ctx.arg(0).strValue());
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
ctx.setReturn(cstrdup(str.c_str()));
}
void sf_toupper(OpcodeContext& ctx) {
auto str = std::string(ctx.arg(0).strValue());
std::transform(str.begin(), str.end(), str.begin(), ::toupper);
ctx.setReturn(cstrdup(str.c_str()));
ctx.setReturn(strToCase.c_str());
}
}
+1 -3
View File
@@ -77,9 +77,7 @@ void sf_get_string_pointer(OpcodeContext&);
void sf_get_text_width(OpcodeContext&);
void sf_tolower(OpcodeContext&);
void sf_toupper(OpcodeContext&);
void sf_string_to_case(OpcodeContext&);
}
}