Geen bewerkingssamenvatting
Geen bewerkingssamenvatting
Regel 16: Regel 16:
local sep = frame.args.sep or mw.text.trim(frame.args[2]) or ","
local sep = frame.args.sep or mw.text.trim(frame.args[2]) or ","
--local sepPattern = '[^' .. sep .. ')+'
--local sepPattern = '[^' .. sep .. ')+'
local sepPattern = sep
--local sepPattern = sep
--local valTable = {}
--local valTable = {}
-- for val in string.gmatch( vals, sep ) do
-- for val in string.gmatch( vals, sep ) do
Regel 26: Regel 26:
--allow for spaces with \s
--allow for spaces with \s
local outputsep = string.gsub( outputsep, [[\s]], " " )
local outputsep = string.gsub( outputsep, [[\s]], " " )
 
local valTable = {}
local valTable = {}
local valTable = mw.text.split( vals, sep )
local mappedTable = {}
for k,val in valTable do
local val = mw.text.trim( val )
local newVal = string.gsub( map, varstr, val )
table.insert( mappedTable, newVal )
end
local newVals = table.concat( mappedTable, outputsep )
return newVals
--[[
local valTable = {)
for val in string.gmatch( vals, sepPattern ) do
for val in string.gmatch( vals, sepPattern ) do
-- replace varstr in map with val
-- replace varstr in map with val
Regel 36: Regel 49:
local newVals = table.concat( valTable, outputsep )
local newVals = table.concat( valTable, outputsep )
return newVals
return newVals
]]--
end
end


return p
return p

Versie van 5 sep 2023 19:31

Module:Arraymap

Summary
Module similar in functionality to PageForms's arraymap.


==Simple==
{{#invoke:Arraymap |map 
|vals=Álvar,Núñez ,, Cabeza,de Vaca,,|sep=,,
|varstr=xxx |map=(xxx) |outputsep=;\s
}}

Luafout op regel 32: attempt to call a table value

Or, using unnamed, sequential approach:

{{#invoke:Arraymap |map |Álvar,Núñez ,, Cabeza, de Vaca,, |, |xxx |[xxx] |;\s}}

Luafout op regel 32: attempt to call a table value

Special use cases

If sep needs to be a space, use %s?

Escaped syntax for curly braces and pipes

Escape {{... }} as %{%{ ...  %}%}
Escape | as %

{{#invoke:Arraymap |map
|vals=Persoon/-1002367743,Persoon/400
|sep=,
|varstr=xxx
|map=%{%{#ask: [[xxx]] %mainlabel=- %?Has name= %}%} 
|outputsep=;\s
|escaped=true
|fuzzy=false
}}
Luafout op regel 32: attempt to call a table value

--[[
{{#invoke:Arraymap
|vals=
|sep=
|varstr=
|map=
|outputsep=
}}

]]--

local p = {}

p.map = function(frame)
	local vals = frame.args.vals or mw.text.trim(frame.args[1]) or ""
	local sep = frame.args.sep or mw.text.trim(frame.args[2]) or ","
	--local sepPattern = '[^' .. sep .. ')+'
	--local sepPattern = sep
	--local valTable = {}
	-- for val in string.gmatch( vals, sep ) do
	--	table.insert( valTable, val)
	-- end
	local varstr = frame.args.varstr or mw.text.trim(frame.args[3]) or "@@@"
	local map = frame.args.map or mw.text.trim(frame.args[4]) or ""
	local outputsep = frame.args.outputsep or mw.text.trim(frame.args[5]) or ""
	--allow for spaces with \s
	local outputsep = string.gsub( outputsep, [[\s]], " " )
	
	local valTable = {}
	local valTable = mw.text.split( vals, sep )
	local mappedTable = {}
	for k,val in valTable do
		local val = mw.text.trim( val )
		local newVal = string.gsub( map, varstr, val )
		table.insert( mappedTable, newVal )
	end
	
	local newVals = table.concat( mappedTable, outputsep )
	return newVals
	
	--[[
	local valTable = {)
	for val in string.gmatch( vals, sepPattern ) do
		-- replace varstr in map with val
		local val = mw.text.trim( val )
		local newVal = string.gsub( map, varstr, val )
		table.insert( valTable, newVal )
	end
	local newVals = table.concat( valTable, outputsep )
	return newVals
	]]--
	
end

return p