From 3e86d49a7bb0bb6b882bb85800354c3cdcc88106 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 27 Oct 2024 21:32:30 +0300 Subject: [PATCH] add utf8.upper, utf8.lower --- doc/en/scripting/builtins/libutf8.md | 6 ++++++ doc/ru/scripting/builtins/libutf8.md | 6 ++++++ src/logic/scripting/lua/libs/libutf8.cpp | 18 ++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/doc/en/scripting/builtins/libutf8.md b/doc/en/scripting/builtins/libutf8.md index e7801f97..db8b31c5 100644 --- a/doc/en/scripting/builtins/libutf8.md +++ b/doc/en/scripting/builtins/libutf8.md @@ -18,4 +18,10 @@ utf8.codepoint(chars: str) -> int -- Returns a substring from position startchar to endchar inclusive utf8.sub(text: str, startchar: int, [optional] endchar: int) -> str + +-- Converts a string to uppercase +utf8.upper(text: str) -> str + +-- Converts a string to lowercase +utf8.lower(text: str) -> str ``` diff --git a/doc/ru/scripting/builtins/libutf8.md b/doc/ru/scripting/builtins/libutf8.md index b29bb403..50d64e72 100644 --- a/doc/ru/scripting/builtins/libutf8.md +++ b/doc/ru/scripting/builtins/libutf8.md @@ -18,4 +18,10 @@ utf8.codepoint(chars: str) -> int -- Возвращает подстроку от позиции startchar до endchar включительно utf8.sub(text: str, startchar: int, [опционально] endchar: int) -> str + +-- Переводит строку в вверхний регистр +utf8.upper(text: str) -> str + +-- Переводит строку в нижний регистр +utf8.lower(text: str) -> str ``` diff --git a/src/logic/scripting/lua/libs/libutf8.cpp b/src/logic/scripting/lua/libs/libutf8.cpp index 182f6295..23283ab4 100644 --- a/src/logic/scripting/lua/libs/libutf8.cpp +++ b/src/logic/scripting/lua/libs/libutf8.cpp @@ -63,11 +63,29 @@ static int l_sub(lua::State* L) { return lua::pushstring(L, util::u32str2str_utf8(string.substr(start, end))); } +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)); +} + +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)); +} + const luaL_Reg utf8lib[] = { {"tobytes", lua::wrap}, {"tostring", lua::wrap}, {"length", lua::wrap}, {"codepoint", lua::wrap}, {"sub", lua::wrap}, + {"upper", lua::wrap}, + {"lower", lua::wrap}, {NULL, NULL} };