diff --git a/doc/ru/scripting/ui.md b/doc/ru/scripting/ui.md index a242ce12e..6cff70e2e 100644 --- a/doc/ru/scripting/ui.md +++ b/doc/ru/scripting/ui.md @@ -202,7 +202,7 @@ document["worlds-panel"]:clear() | data:get_data() | создаёт объект Bytearray с пиксельными данными изображения | | data:create_texture(name: str) | создаёт и делится текстурой с рендерером | | data:unbind_texture() | отвязывает текстуру от холста | -| data:mul(*цвет* или Canvas) | умножает увет на указанный цвет или холст | +| data:mul(*цвет* или Canvas) | умножает цвет на указанный цвет или холст | | data:add(*цвет* или Canvas) | прибавляет цвет или другой холст к цвету | | data:sub(*цвет* или Canvas) | вычитает цвет или другой холст к цвету | | data:encode(format: str) | кодирует изображение в указанный формат и возращает массив байт | diff --git a/res/scripts/components/player.lua b/res/scripts/components/player.lua index 49a03377f..e829f4b5a 100644 --- a/res/scripts/components/player.lua +++ b/res/scripts/components/player.lua @@ -60,7 +60,7 @@ end local prepared = false body:set_enabled(false) -mob:set_flight(true) +mob.set_flight(true) function on_physics_update(delta) if not prepared then diff --git a/src/logic/scripting/lua/libs/libutf8.cpp b/src/logic/scripting/lua/libs/libutf8.cpp index 15fc54e92..918bda095 100644 --- a/src/logic/scripting/lua/libs/libutf8.cpp +++ b/src/logic/scripting/lua/libs/libutf8.cpp @@ -57,23 +57,22 @@ static int l_sub(lua::State* L) { if (lua::gettop(L) >= 3) { end = std::max(0, static_cast(lua::tointeger(L, 3) - 1)); } - return lua::pushstring(L, util::u32str2str_utf8(string.substr(start, end))); + return lua::pushstring( + L, + util::u32str2str_utf8( + string.substr(start, (end >= start ? end - start + 1 : 0)) + ) + ); } static int l_upper(lua::State* L) { - auto string = util::str2u32str_utf8(lua::require_string(L, 1)); - for (auto& c : string) { - c = std::towupper(c); - } - return lua::pushstring(L, util::u32str2str_utf8(string)); + auto string = util::str2wstr_utf8(lua::require_string(L, 1)); + return lua::pushwstring(L, util::upper_case(string)); } static int l_lower(lua::State* L) { - auto string = util::str2u32str_utf8(lua::require_string(L, 1)); - for (auto& c : string) { - c = std::towlower(c); - } - return lua::pushstring(L, util::u32str2str_utf8(string)); + auto string = util::str2wstr_utf8(lua::require_string(L, 1)); + return lua::pushwstring(L, util::lower_case(string)); } static int l_encode(lua::State* L) { diff --git a/src/util/stringutil.cpp b/src/util/stringutil.cpp index 0329305c3..f97eed83e 100644 --- a/src/util/stringutil.cpp +++ b/src/util/stringutil.cpp @@ -507,22 +507,32 @@ double util::parse_double(const std::string& str, size_t offset, size_t len) { return parse_double(str.substr(offset, len)); } -std::wstring util::lower_case(const std::wstring& str) { - std::wstring result = str; +template +static std::basic_string lower_case(const std::basic_string& str) { + std::basic_string result = str; for (uint i = 0; i < result.length(); i++) { - result[i] = static_cast(std::tolower(str[i], locale)); + result[i] = std::tolower(str[i], locale); } return result; } -std::wstring util::upper_case(const std::wstring& str) { - std::wstring result = str; +template +static std::basic_string upper_case(const std::basic_string& str) { + std::basic_string result = str; for (uint i = 0; i < result.length(); i++) { - result[i] = static_cast(std::toupper(str[i], locale)); + result[i] = std::toupper(str[i], locale); } return result; } +std::wstring util::lower_case(const std::wstring& str) { + return ::lower_case(str); +} + +std::wstring util::upper_case(const std::wstring& str) { + return ::upper_case(str); +} + std::wstring util::capitalized(const std::wstring& str) { if (str.empty()) return str; return std::wstring({static_cast(std::toupper(str[0], locale))}) +