| https://akurasu.net/downloads/Mazin_head.png | Come hang out with us in the Discord server.
Account creation is disabled due to spam. If you want to help out on the Wiki, poke us in on our Discord server in #wiki. Please consider supporting the site with the PlayAsia referral links here or via the donate buttons in the sidebar, it really does help. | https://akurasu.net/downloads/Flonne_cheer.png |
Module:StringBuilder
From Akurasu
Documentation for this module may be created at Module:StringBuilder/doc
---
--- StringBuilder v0.2 by yangruihan
--- See https://github.com/RayStudio36/StringBuilder.lua for usage documentation.
--- Licensed under MIT.
--- See https://opensource.org/licenses/MIT for details.
---
---@class StringBuilder
local StringBuilder = {}
StringBuilder.__index = StringBuilder
setmetatable(
StringBuilder,
{
__call = function(class, ...)
local instance = {}
setmetatable(instance, StringBuilder)
instance:new(...)
return instance
end
}
)
function StringBuilder:new()
self._buffer = {}
end
function StringBuilder:append(...)
for i = 1, select("#", ...) do
table.insert(self._buffer, tostring(select(i, ...)))
end
return self
end
---@param format string
function StringBuilder:append_format(format, ...)
table.insert(self._buffer, format:format(...))
end
function StringBuilder:append_line(...)
local len = select("#", ...)
if len > 0 then
for i = 1, len do
table.insert(self._buffer, tostring(select(i, ...)))
table.insert(self._buffer, "\n")
end
else
table.insert(self._buffer, "\n")
end
return self
end
---@param array table
---@param seperator string
function StringBuilder:append_array(array, seperator)
if not array then
return self
end
seperator = seperator or ", "
for i, v in ipairs(array) do
if i == #array then
table.insert(self._buffer, string.format("%d: %s", i, tostring(v)))
else
table.insert(self._buffer, string.format("%d: %s%s", i, tostring(v), seperator))
end
end
return self
end
---@param t table
---@param seperator string
function StringBuilder:append_table(t, seperator)
if not t then
return self
end
local cnt = 0
seperator = seperator or ", "
for k, v in pairs(t) do
cnt = cnt + 1
table.insert(self._buffer, string.format("{%s: %s}%s", tostring(k), tostring(v), seperator))
end
if cnt > 0 then
local last_str = self._buffer[#self._buffer]
self._buffer[#self._buffer] = last_str:sub(1, #last_str - #seperator)
end
return self
end
---@param clear boolean will clear buffer, default false
function StringBuilder:tostring(clear)
clear = clear or false
local ret = table.concat(self._buffer)
if clear then
self:clear()
end
return ret
end
function StringBuilder:clear()
self._buffer = {}
end
return StringBuilder