Difference between revisions of "Module:ApplyPattern"

From Holdfast: Nations At War
Jump to navigation Jump to search
m (Takes a comma delimited list, splits and trims the entries, and passes it into the pattern input, replacing all instances of %%pattern%%)
Line 6: Line 6:
 
   string.gsub(instr, pattern, function(c) fields[#fields+1] = c end)
 
   string.gsub(instr, pattern, function(c) fields[#fields+1] = c end)
 
   return fields
 
   return fields
 +
end
 +
 +
function trim(s)
 +
  return (s:gsub("^%s*(.-)%s*$", "%1"))
 
end
 
end
  
Line 15: Line 19:
 
 
 
for key,entry in pairs(split(list,sep)) do
 
for key,entry in pairs(split(list,sep)) do
result = result .. string.gsub(pattern, '%%pattern%%',entry)
+
result = result .. string.gsub(pattern, '%%pattern%%', trim(entry))
 
end
 
end
 
 

Revision as of 15:01, 17 August 2019

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 = ','
	
	for key,entry in pairs(split(list,sep)) do
		result = result .. string.gsub(pattern, '%%pattern%%', trim(entry))
	end
	
    return result
end
return p