From be55ef8d8518d789eeef65dd8c0cd6dc7af1f9b4 Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Wed, 20 Dec 2023 08:26:33 +1100 Subject: [PATCH] feat(string): string module See ignored review from PR #469. --- imports/string/shared.lua | 58 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 imports/string/shared.lua diff --git a/imports/string/shared.lua b/imports/string/shared.lua new file mode 100644 index 0000000..a6579b3 --- /dev/null +++ b/imports/string/shared.lua @@ -0,0 +1,58 @@ +---@class oxstring : stringlib +lib.string = string + +local string_char = string.char +local math_random = math.random + +local function getLetter() return string_char(math_random(65, 90)) end +local function getLowerLetter() return string_char(math_random(97, 122)) end +local function getInt() return math_random(0, 9) end +local function getAlphanumeric() return math_random(0, 1) == 1 and getLetter() or getInt() end + +local formatChar = { + ['1'] = getInt, + ['A'] = getLetter, + ['a'] = getLowerLetter, + ['.'] = getAlphanumeric, +} + +---Creates a random string based on a given pattern. +---`1` will output a random number from 0-9. +---`A` will output a random letter from A-Z. +---`a` will output a random letter from a-z. +---`.` will output a random letter or number. +---`^` will output the following character literally. +---Any other character will output said character. +---@param pattern string +---@param length? integer Sets the length of the returned string, either padding it or omitting characters. +---@return string +function string.random(pattern, length) + local len = length or #pattern:gsub('%^', '') + local arr = table.create(len, 0) + local size = 0 + local i = 0 + + while size < len do + i += 1 + ---@type string | integer + local char = pattern:sub(i, i) + + if char == '' then + arr[size + 1] = string.rep(' ', len - size) + break + elseif char == '^' then + i += 1 + char = pattern:sub(i, i) + else + local fn = formatChar[char] + char = fn and fn() or char + end + + size += 1 + arr[size] = char + end + + return table.concat(arr) +end + +return lib.string