Module:Text Utility: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
(Created page with "function p.gsplit( text, pattern, plain ) if not pattern then pattern = '%s*,%s*' end local s, l = 1, text:len() return function () if s then local e, n = text:find( p...")
 
mNo edit summary
Line 1: Line 1:
local p = {}
function p.gsplit( text, pattern, plain )
function p.gsplit( text, pattern, plain )
if not pattern then pattern = '%s*,%s*' end
if not pattern then pattern = '%s*,%s*' end
Line 52: Line 53:
     return result
     return result
end
end
return p

Revision as of 22:10, 15 November 2019

Taken from LoL's own TextUtil module.


local p = {}
function p.gsplit( text, pattern, plain )
	if not pattern then pattern = '%s*,%s*' end
	local s, l = 1, text:len()
	return function ()
		if s then
			local e, n = text:find( pattern, s, plain )
			local ret
			if not e then
				ret = text:sub( s )
				s = nil
			elseif n < e then
				-- Empty separator!
				ret = text:sub( s, e )
				if e < l then
					s = e + 1
				else
					s = nil
				end
			else
				ret = e > s and text:sub( s, e - 1 ) or ''
				s = n + 1
			end
			return ret
		end
	end, nil, nil
end

function p.split(text, pattern, plain)
	if not text then
		return {}
	end
	local ret = {}
	for m in p.gsplit(text, pattern, plain) do
		ret[#ret+1] = m
	end
	return ret
end

function p.splitArgs(input, fieldlist, sep)
    if not input or input == '' then return end
    sep = sep or '%s*;;;%s*'
    local result = {}
    local inputTbl = p.split(input,sep)
    for i, v in ipairs(fieldlist) do
        if not inputTbl[i] then
            error(('Missing parameter %s - maybe wrong child template?'):format(v))
        end
        if inputTbl[i] ~= '' then 
            result[v] = inputTbl[i]
        end
    end
    return result
end

return p