Module:Zandbak/Msj/StringBuilder
Documentatie voor deze module kan aangemaakt worden op de volgende pagina: Module:Zandbak/Msj/StringBuilder/doc
-- Quick module to help creating a concatenated string.
-- To be used in other modules.
--
-- By User:TiiJ7
------------------------------------------------------------
local StringBuilder = {}
StringBuilder.__index = StringBuilder
local StringBuilderModes = { convert = true, ignore = true, error = true }
-- Creates a new string builder
function StringBuilder.new()
local sb = {}
setmetatable(sb,StringBuilder)
sb._buffer = {}
sb._mode = 'convert'
sb._separator = ''
return sb
end
-- Sets the mode of the string builder, see doc
function StringBuilder:setMode(mode)
if not mode then return self end
if StringBuilderModes[mode] then
self._mode = mode
end
return self -- Method chaining
end
-- Sets the separator with which the strings are concatted
function StringBuilder:setSeparator(separator)
if not separator then return self end
separator = tostring(separator)
if separator ~= nil then self._separator = separator end
return self -- Method chaining
end
-- Appends a string
function StringBuilder:append(str)
if str then
self:_addString(str,self._buffer)
end
return self -- Method chaining
end
-- Appends multiple strings
function StringBuilder:appendAll(...)
local argcount = select('#',...)
if argcount then
local b = self._buffer
local f = self._addString
for i=1,argcount do
f(self,select(i,...),b)
end
end
return self -- Method chaining
end
-- Clears the internal buffer
function StringBuilder:clear()
local b = self._buffer
for i=1,#b do
b[i] = nil
end
return self -- Method chaining
end
-- Returns the result as a string
function StringBuilder:toString()
local b = self._buffer
if #b == 0 then return '' end
return table.concat(b,self._separator)
end
-- Adds a single string
function StringBuilder:_addString(str,t)
if type(str) ~= 'string' and type(str) ~= 'number' then
local m = self._mode
if m == 'convert' then
str = tostring(str)
if not str then return end
elseif m == 'error' then
error( 'ERROR: Trying to append object of type "' .. type(str) .. '"' )
else
return
end
end
t[#t+1] = str
end
-- Meta tostring function
function StringBuilder:__tostring()
return self:toString()
end
-- Some function aliases...
StringBuilder.a = StringBuilder.append
StringBuilder.aa = StringBuilder.appendAll
StringBuilder.c = StringBuilder.clear
StringBuilder.m = StringBuilder.setMode
StringBuilder.s = StringBuilder.setSeparator
return StringBuilder