<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://neo-akurasu.duckdns.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AStringBuilder</id>
	<title>Module:StringBuilder - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://neo-akurasu.duckdns.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AStringBuilder"/>
	<link rel="alternate" type="text/html" href="http://neo-akurasu.duckdns.org/index.php?title=Module:StringBuilder&amp;action=history"/>
	<updated>2026-04-24T17:37:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>http://neo-akurasu.duckdns.org/index.php?title=Module:StringBuilder&amp;diff=55353&amp;oldid=prev</id>
		<title>Daichi: StringBuilder module.</title>
		<link rel="alternate" type="text/html" href="http://neo-akurasu.duckdns.org/index.php?title=Module:StringBuilder&amp;diff=55353&amp;oldid=prev"/>
		<updated>2022-05-10T02:12:58Z</updated>

		<summary type="html">&lt;p&gt;StringBuilder module.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;---&lt;br /&gt;
--- StringBuilder v0.2 by yangruihan&lt;br /&gt;
--- See https://github.com/RayStudio36/StringBuilder.lua for usage documentation.&lt;br /&gt;
--- Licensed under MIT.&lt;br /&gt;
--- See https://opensource.org/licenses/MIT for details.&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
---@class StringBuilder&lt;br /&gt;
local StringBuilder = {}&lt;br /&gt;
&lt;br /&gt;
StringBuilder.__index = StringBuilder&lt;br /&gt;
&lt;br /&gt;
setmetatable(&lt;br /&gt;
    StringBuilder,&lt;br /&gt;
    {&lt;br /&gt;
        __call = function(class, ...)&lt;br /&gt;
            local instance = {}&lt;br /&gt;
            setmetatable(instance, StringBuilder)&lt;br /&gt;
            instance:new(...)&lt;br /&gt;
            return instance&lt;br /&gt;
        end&lt;br /&gt;
    }&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
function StringBuilder:new()&lt;br /&gt;
    self._buffer = {}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function StringBuilder:append(...)&lt;br /&gt;
    for i = 1, select(&amp;quot;#&amp;quot;, ...) do&lt;br /&gt;
        table.insert(self._buffer, tostring(select(i, ...)))&lt;br /&gt;
    end&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---@param format string&lt;br /&gt;
function StringBuilder:append_format(format, ...)&lt;br /&gt;
    table.insert(self._buffer, format:format(...))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function StringBuilder:append_line(...)&lt;br /&gt;
    local len = select(&amp;quot;#&amp;quot;, ...)&lt;br /&gt;
    if len &amp;gt; 0 then&lt;br /&gt;
        for i = 1, len do&lt;br /&gt;
            table.insert(self._buffer, tostring(select(i, ...)))&lt;br /&gt;
            table.insert(self._buffer, &amp;quot;\n&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        table.insert(self._buffer, &amp;quot;\n&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---@param array table&lt;br /&gt;
---@param seperator string&lt;br /&gt;
function StringBuilder:append_array(array, seperator)&lt;br /&gt;
    if not array then&lt;br /&gt;
        return self&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    seperator = seperator or &amp;quot;, &amp;quot;&lt;br /&gt;
    for i, v in ipairs(array) do&lt;br /&gt;
        if i == #array then&lt;br /&gt;
            table.insert(self._buffer, string.format(&amp;quot;%d: %s&amp;quot;, i, tostring(v)))&lt;br /&gt;
        else&lt;br /&gt;
            table.insert(self._buffer, string.format(&amp;quot;%d: %s%s&amp;quot;, i, tostring(v), seperator))&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---@param t table&lt;br /&gt;
---@param seperator string&lt;br /&gt;
function StringBuilder:append_table(t, seperator)&lt;br /&gt;
    if not t then&lt;br /&gt;
        return self&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local cnt = 0&lt;br /&gt;
    seperator = seperator or &amp;quot;, &amp;quot;&lt;br /&gt;
    for k, v in pairs(t) do&lt;br /&gt;
        cnt = cnt + 1&lt;br /&gt;
        table.insert(self._buffer, string.format(&amp;quot;{%s: %s}%s&amp;quot;, tostring(k), tostring(v), seperator))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if cnt &amp;gt; 0 then&lt;br /&gt;
        local last_str = self._buffer[#self._buffer]&lt;br /&gt;
        self._buffer[#self._buffer] = last_str:sub(1, #last_str - #seperator)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---@param clear boolean will clear buffer, default false&lt;br /&gt;
function StringBuilder:tostring(clear)&lt;br /&gt;
    clear = clear or false&lt;br /&gt;
    local ret = table.concat(self._buffer)&lt;br /&gt;
    if clear then&lt;br /&gt;
        self:clear()&lt;br /&gt;
    end&lt;br /&gt;
    return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function StringBuilder:clear()&lt;br /&gt;
    self._buffer = {}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return StringBuilder&lt;/div&gt;</summary>
		<author><name>Daichi</name></author>
	</entry>
</feed>