From 35004c2075f0df39431c45b5fc87d5b79e3330c7 Mon Sep 17 00:00:00 2001 From: Xertis <118364459+Xertis@users.noreply.github.com> Date: Sun, 26 Jan 2025 14:02:38 +0300 Subject: [PATCH 01/12] Added new extensions for tables and math --- res/scripts/stdmin.lua | 76 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index 5da1b347..abdfb905 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -64,6 +64,16 @@ function math.round(num, places) return math.floor(num * mult + 0.5) / mult end +function math.sum(...) + local sum = 0 + + for _, v in ipairs({...}) do + sum = sum + v + end + + return sum +end + ---------------------------------------------- function table.copy(t) @@ -113,6 +123,72 @@ function table.shuffle(t) return t end +function table.merge(t1, t2) + for i, v in pairs(t2) do + if type(i) == "number" then + t1[#t1 + 1] = v + elseif t1[i] == nil then + t1[i] = v + end + end + + return t1 +end + +function table.map(t, func) + for i, v in pairs(t) do + t[i] = func(i, v) + end + + return t +end + +function table.filter(t, func) + for i, v in pairs(t) do + if not func(i, v) then + t[i] = nil + end + end + + return t +end + +function table.set_default(t, indx, default) + if t[indx] == nil then + t[indx] = default + return + end + + return t[indx] +end + +function table.flat(t) + local flat = {} + + for _, v in pairs(t) do + if type(v) == "table" then + table.merge(flat, v) + else + table.insert(flat, v) + end + end + + return flat +end + +function table.deep_flat(t) + local flat = {} + + for _, v in pairs(t) do + if type(v) == "table" then + table.merge(flat, table.deep_flat(v)) + else + table.insert(flat, v) + end + end + + return flat +end ---------------------------------------------- local pattern_escape_replacements = { From 266ddd400ffea9990520880e30efc04876a130f4 Mon Sep 17 00:00:00 2001 From: Xertis <118364459+Xertis@users.noreply.github.com> Date: Sun, 26 Jan 2025 14:20:20 +0300 Subject: [PATCH 02/12] Update extensions.md --- doc/ru/scripting/extensions.md | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index ca165b0c..be697463 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -52,6 +52,41 @@ table.shuffle(t: table) -> table Перемешивает значения в таблице. +```lua +table.merge(t1: table, t2: table) -> table +``` + +Объединяет таблицу t1 с t2. + +```lua +table.map(t: table, func: function(indx, value) ) -> table +``` + +Проходится по таблице и применяет ко всем её элементам **func**, которая возвращает новое значение элемента. + +```lua +table.filter(t: table, func: function(indx, value) ) -> table +``` + +Проходится по таблице с помощью **func**, которая возвращает **true** если элемент надо сохранить и **false**, если его надо удалить. + +```lua +table.set_default(t: table, key: number | string, default: any) -> any | nil +``` + +Позволяет получить значение по ключу, если он существует, или установить и вернуть **nil**, если ключ отсутствует. + +```lua +table.flat(t: table) -> table +``` + +Возвращает "плоскую" версию исходной таблицы. + +```lua +table.deep_flat(t: table) -> table +``` + +Возвращает глубокую "плоскую" версию исходной таблицы. ```lua table.tostring(t: table) -> string @@ -165,6 +200,12 @@ math.round(num: number, [опционально] places: num) -> number Возвращает округлённое значение num до указанного количества знаков после запятой places. +```lua +math.sum(x: number, ...) -> number +``` + +Возвращает сумму всех принимаемых аргументов. + ## Дополнительные глобальные функции В этом же скрипте также определены и другие глобальные функции которые доступны для использования. Ниже их список From 5187ee76e913fc35d8eef6705cbe99122667cf2b Mon Sep 17 00:00:00 2001 From: Xertis <118364459+Xertis@users.noreply.github.com> Date: Sun, 26 Jan 2025 14:21:44 +0300 Subject: [PATCH 03/12] Changes to comply with the documentation --- res/scripts/stdmin.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index abdfb905..cd57df8e 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -153,13 +153,13 @@ function table.filter(t, func) return t end -function table.set_default(t, indx, default) - if t[indx] == nil then - t[indx] = default +function table.set_default(t, key, default) + if t[key] == nil then + t[key] = default return end - return t[indx] + return t[key] end function table.flat(t) From 089d86d0a1029c33cd5c7a31a084d1a6eb45bfd7 Mon Sep 17 00:00:00 2001 From: Xertis Date: Sun, 26 Jan 2025 20:28:58 +0300 Subject: [PATCH 04/12] documentation and stdmin corrections --- doc/ru/scripting/extensions.md | 18 +++++++++--------- res/scripts/stdmin.lua | 23 ++++++++++++----------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index be697463..32afc52d 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -56,7 +56,7 @@ table.shuffle(t: table) -> table table.merge(t1: table, t2: table) -> table ``` -Объединяет таблицу t1 с t2. +Добавляет в таблицу **t1** значения из таблицы **t2**. Если в таблице **t2** присутствует ключ из **t1**, то значение ключа не будет изменено. ```lua table.map(t: table, func: function(indx, value) ) -> table @@ -71,10 +71,10 @@ table.filter(t: table, func: function(indx, value) ) -> table Проходится по таблице с помощью **func**, которая возвращает **true** если элемент надо сохранить и **false**, если его надо удалить. ```lua -table.set_default(t: table, key: number | string, default: any) -> any | nil +table.set_default(t: table, key: number | string, default: any) -> any | default ``` -Позволяет получить значение по ключу, если он существует, или установить и вернуть **nil**, если ключ отсутствует. +Позволяет безопасно получать значение по указанному ключу. Если ключ существует в таблице, метод вернет его значение. Если ключ отсутствует, метод установит его со значением **default** и вернет его. ```lua table.flat(t: table) -> table @@ -88,6 +88,12 @@ table.deep_flat(t: table) -> table Возвращает глубокую "плоскую" версию исходной таблицы. +```lua +table.sum(t) -> number +``` + +Возвращает сумму всех элементов, игнорируя пары ключ-значение. + ```lua table.tostring(t: table) -> string ``` @@ -200,12 +206,6 @@ math.round(num: number, [опционально] places: num) -> number Возвращает округлённое значение num до указанного количества знаков после запятой places. -```lua -math.sum(x: number, ...) -> number -``` - -Возвращает сумму всех принимаемых аргументов. - ## Дополнительные глобальные функции В этом же скрипте также определены и другие глобальные функции которые доступны для использования. Ниже их список diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index cd57df8e..7a264540 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -64,16 +64,6 @@ function math.round(num, places) return math.floor(num * mult + 0.5) / mult end -function math.sum(...) - local sum = 0 - - for _, v in ipairs({...}) do - sum = sum + v - end - - return sum -end - ---------------------------------------------- function table.copy(t) @@ -156,7 +146,7 @@ end function table.set_default(t, key, default) if t[key] == nil then t[key] = default - return + return default end return t[key] @@ -189,6 +179,17 @@ function table.deep_flat(t) return flat end + +function table.sum(t) + local sum = 0 + + for _, v in ipairs(t) do + sum = sum + v + end + + return sum +end + ---------------------------------------------- local pattern_escape_replacements = { From 6592684db100f9539e859ed971ee3c85c8526649 Mon Sep 17 00:00:00 2001 From: Xertis Date: Sun, 26 Jan 2025 20:47:45 +0300 Subject: [PATCH 05/12] math.sum return --- doc/ru/scripting/extensions.md | 12 ++++++------ res/scripts/stdmin.lua | 28 +++++++++++++++++----------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index 32afc52d..82235b96 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -88,12 +88,6 @@ table.deep_flat(t: table) -> table Возвращает глубокую "плоскую" версию исходной таблицы. -```lua -table.sum(t) -> number -``` - -Возвращает сумму всех элементов, игнорируя пары ключ-значение. - ```lua table.tostring(t: table) -> string ``` @@ -206,6 +200,12 @@ math.round(num: number, [опционально] places: num) -> number Возвращает округлённое значение num до указанного количества знаков после запятой places. +```lua +math.sum(x: number, ... | t: table) -> number +``` + +Возвращает сумму всех принимаемых аргументов. Если в качестве аргумента была передана таблица, метод вернёт сумму всех её элементов. + ## Дополнительные глобальные функции В этом же скрипте также определены и другие глобальные функции которые доступны для использования. Ниже их список diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index 7a264540..07c42e35 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -64,6 +64,23 @@ function math.round(num, places) return math.floor(num * mult + 0.5) / mult end +function math.sum(...) + local numbers = nil + local sum = 0 + + if type(...) == "table" then + numbers = ... + else + numbers = {...} + end + + for _, v in ipairs(numbers) do + sum = sum + v + end + + return sum +end + ---------------------------------------------- function table.copy(t) @@ -179,17 +196,6 @@ function table.deep_flat(t) return flat end - -function table.sum(t) - local sum = 0 - - for _, v in ipairs(t) do - sum = sum + v - end - - return sum -end - ---------------------------------------------- local pattern_escape_replacements = { From 17ce49bdf1b9334d34744ef054d59c36e7ad6773 Mon Sep 17 00:00:00 2001 From: Xertis Date: Sat, 1 Feb 2025 01:34:11 +0300 Subject: [PATCH 06/12] add table.slice --- doc/ru/scripting/extensions.md | 6 ++++++ res/scripts/stdmin.lua | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index 82235b96..cce639ec 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -88,6 +88,12 @@ table.deep_flat(t: table) -> table Возвращает глубокую "плоскую" версию исходной таблицы. +```lua +table.slice(arr: table, start: number | nil, stop: number | nil) -> table +``` + +Возвращает обрезанную версию таблицы с индекса **start** до индекса **stop** включительно, при этом пары ключ-значение не сохраняются в новой таблице. При значениях **nil** начинает с **1** и заканчивает **#arr** соответственно. + ```lua table.tostring(t: table) -> string ``` diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index 07c42e35..fba17a53 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -196,6 +196,18 @@ function table.deep_flat(t) return flat end + +function table.slice(arr, start, stop) + local sliced = {} + start = start or 1 + stop = stop or #arr + + for i = start, stop do + table.insert(sliced, arr[i]) + end + + return sliced +end ---------------------------------------------- local pattern_escape_replacements = { From e106a31d82d31f20323c2661191b2601f08bd917 Mon Sep 17 00:00:00 2001 From: Xertis Date: Tue, 4 Feb 2025 19:54:01 +0300 Subject: [PATCH 07/12] correction table.slice & adding get_default --- doc/ru/scripting/extensions.md | 8 +++++++- res/scripts/stdmin.lua | 17 +++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index cce639ec..c81510a2 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -76,6 +76,12 @@ table.set_default(t: table, key: number | string, default: any) -> any | default Позволяет безопасно получать значение по указанному ключу. Если ключ существует в таблице, метод вернет его значение. Если ключ отсутствует, метод установит его со значением **default** и вернет его. +```lua +table.get_default(t: table, key: number | string, default: any) -> any | default +``` + +Как и set аналог, позволяет безопасно получать значение по указанному ключу. Если ключ существует в таблице, метод вернет его значение. Если ключ отсутствует, метод вернёт значение **default** **без** установки нового значения в таблицу. + ```lua table.flat(t: table) -> table ``` @@ -89,7 +95,7 @@ table.deep_flat(t: table) -> table Возвращает глубокую "плоскую" версию исходной таблицы. ```lua -table.slice(arr: table, start: number | nil, stop: number | nil) -> table +table.sub(arr: table, start: number | nil, stop: number | nil) -> table ``` Возвращает обрезанную версию таблицы с индекса **start** до индекса **stop** включительно, при этом пары ключ-значение не сохраняются в новой таблице. При значениях **nil** начинает с **1** и заканчивает **#arr** соответственно. diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index fba17a53..107518ec 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -169,6 +169,14 @@ function table.set_default(t, key, default) return t[key] end +function table.get_default(t, key, default) + if t[key] == nil then + return default + end + + return t[key] +end + function table.flat(t) local flat = {} @@ -197,17 +205,18 @@ function table.deep_flat(t) return flat end -function table.slice(arr, start, stop) - local sliced = {} +function table.sub(arr, start, stop) + local res = {} start = start or 1 stop = stop or #arr for i = start, stop do - table.insert(sliced, arr[i]) + table.insert(res, arr[i]) end - return sliced + return res end + ---------------------------------------------- local pattern_escape_replacements = { From 0d32b1987cfb5b4b420bccbb9f1ef1fa010180c1 Mon Sep 17 00:00:00 2001 From: Xertis Date: Tue, 4 Feb 2025 20:09:36 +0300 Subject: [PATCH 08/12] I forgot about "t[x] or default" --- doc/ru/scripting/extensions.md | 6 ------ res/scripts/stdmin.lua | 8 -------- 2 files changed, 14 deletions(-) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index c81510a2..c8b029ee 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -76,12 +76,6 @@ table.set_default(t: table, key: number | string, default: any) -> any | default Позволяет безопасно получать значение по указанному ключу. Если ключ существует в таблице, метод вернет его значение. Если ключ отсутствует, метод установит его со значением **default** и вернет его. -```lua -table.get_default(t: table, key: number | string, default: any) -> any | default -``` - -Как и set аналог, позволяет безопасно получать значение по указанному ключу. Если ключ существует в таблице, метод вернет его значение. Если ключ отсутствует, метод вернёт значение **default** **без** установки нового значения в таблицу. - ```lua table.flat(t: table) -> table ``` diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index 107518ec..b92708e5 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -169,14 +169,6 @@ function table.set_default(t, key, default) return t[key] end -function table.get_default(t, key, default) - if t[key] == nil then - return default - end - - return t[key] -end - function table.flat(t) local flat = {} From c22f7e0eb5a8b39289518c63f63a85ab00e4ca7f Mon Sep 17 00:00:00 2001 From: Xertis Date: Sun, 9 Feb 2025 14:06:23 +0300 Subject: [PATCH 09/12] add string.padding --- doc/ru/scripting/extensions.md | 18 ++++++++++++++++++ res/scripts/stdmin.lua | 21 +++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index c8b029ee..8c22c3c9 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -180,6 +180,24 @@ string.escape(str: string) -> string Экранирует строку. Является псевдонимом `utf8.escape`. +```lua +string.padding(str: string, size: number, [опционально] char: string) -> string +``` + +Добавляет **char** слева и справа от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела + +```lua +string.left_padding(str: string, size: number, [опционально] char: string) -> string +``` + +Добавляет **char** слева от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела + +```lua +string.right_padding(str: string, size: number, [опционально] char: string) -> string +``` + +Добавляет **char** справа от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела + ## Расширения для math ```lua diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index b92708e5..d8ee2bb3 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -292,6 +292,27 @@ function string.trim_left(s, char) return string.match(s, "^" .. char .. "*(.+)$") or s end +function string.padding(str, size, char) + char = char == nil and " " or char + + local padding = math.floor((size - #str) / 2) + return string.rep(char, padding) .. str .. string.rep(char, padding) +end + +function string.left_padding(str, size, char) + char = char == nil and " " or char + + local left_padding = size - #str + return string.rep(char, left_padding) .. str +end + +function string.right_padding(str, size, char) + char = char == nil and " " or char + + local right_padding = size - #str + return str .. string.rep(char, right_padding) +end + string.lower = utf8.lower string.upper = utf8.upper string.escape = utf8.escape From 185b0e5cbd3265b5aaee49864f1fd480310c1f92 Mon Sep 17 00:00:00 2001 From: Xertis Date: Mon, 10 Feb 2025 16:24:28 +0300 Subject: [PATCH 10/12] upd string.left/right _padding --- doc/ru/scripting/extensions.md | 4 ++-- res/scripts/stdmin.lua | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index 8c22c3c9..3c7ced51 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -187,13 +187,13 @@ string.padding(str: string, size: number, [опционально] char: string) Добавляет **char** слева и справа от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела ```lua -string.left_padding(str: string, size: number, [опционально] char: string) -> string +string.left_pad(str: string, size: number, [опционально] char: string) -> string ``` Добавляет **char** слева от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела ```lua -string.right_padding(str: string, size: number, [опционально] char: string) -> string +string.right_pad(str: string, size: number, [опционально] char: string) -> string ``` Добавляет **char** справа от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index d8ee2bb3..bbc1e08d 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -299,14 +299,14 @@ function string.padding(str, size, char) return string.rep(char, padding) .. str .. string.rep(char, padding) end -function string.left_padding(str, size, char) +function string.left_pad(str, size, char) char = char == nil and " " or char local left_padding = size - #str return string.rep(char, left_padding) .. str end -function string.right_padding(str, size, char) +function string.right_pad(str, size, char) char = char == nil and " " or char local right_padding = size - #str From 78ceff54e7807920066435a91ca066c12750e8cc Mon Sep 17 00:00:00 2001 From: Xertis Date: Mon, 10 Feb 2025 16:39:05 +0300 Subject: [PATCH 11/12] upd --- doc/ru/scripting/extensions.md | 2 +- res/scripts/stdmin.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index 3c7ced51..32798e43 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -181,7 +181,7 @@ string.escape(str: string) -> string Экранирует строку. Является псевдонимом `utf8.escape`. ```lua -string.padding(str: string, size: number, [опционально] char: string) -> string +string.pad(str: string, size: number, [опционально] char: string) -> string ``` Добавляет **char** слева и справа от строки, пока её размер не будет равен **size**. По стандарту **char** равен символу пробела diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index bbc1e08d..9a438ba2 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -292,7 +292,7 @@ function string.trim_left(s, char) return string.match(s, "^" .. char .. "*(.+)$") or s end -function string.padding(str, size, char) +function string.pad(str, size, char) char = char == nil and " " or char local padding = math.floor((size - #str) / 2) From 39f3f123826893866d33822fd4d5e830c44796f4 Mon Sep 17 00:00:00 2001 From: Xertis <118364459+Xertis@users.noreply.github.com> Date: Mon, 10 Feb 2025 17:39:20 +0300 Subject: [PATCH 12/12] fix pad --- res/scripts/stdmin.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/res/scripts/stdmin.lua b/res/scripts/stdmin.lua index 9a438ba2..5ebf0176 100644 --- a/res/scripts/stdmin.lua +++ b/res/scripts/stdmin.lua @@ -296,7 +296,9 @@ function string.pad(str, size, char) char = char == nil and " " or char local padding = math.floor((size - #str) / 2) - return string.rep(char, padding) .. str .. string.rep(char, padding) + local extra_padding = (size - #str) % 2 + + return string.rep(char, padding) .. str .. string.rep(char, padding + extra_padding) end function string.left_pad(str, size, char)