Module:ApplyPattern

From Holdfast: Nations At War
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Custom module to apply either some wiki markup or a template to each item in a comma delimited list. Look at Template:Class for examples.


local p = {}

function split(instr,sep)
   local sep, fields = sep or ":", {}
   local pattern = string.format("([^%s]+)", sep)
   string.gsub(instr, pattern, function(c) fields[#fields+1] = c end)
   return fields
end

function trim(s)
   return (s:gsub("^%s*(.-)%s*$", "%1"))
end

function p.apply(frame)
	local list = frame.args[1]
	local pattern = frame.args[2]
	local result = {}
	local sep = ','
	
	local newSep = frame.args[3] or ''
	
	for key,entry in pairs(split(list,sep)) do
		result[#result+1] = string.gsub(pattern, '%%pattern%%', trim(entry))
	end
	
    return table.concat(result,newSep) 
end

function p.applyTemplate(frame)
	local list = frame.args[1]
	local template = frame.args[2]
	local substArg = frame.args[3]
	
	
	local newSep = frame.args[4] or ''
	
	local result = {}
	local sep = ','
	
	for key,entry in pairs(split(list,sep)) do
		local argTable = {}
		argTable[substArg] = entry
		result[#result+1] = frame:expandTemplate{title = template, args = argTable}
	end
	
    return table.concat(result,newSep) 
end

return p