Module:ApplyPattern
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