Semantic MediaWikiDit bericht verdwijnt nadat alle relevante taken zijn afgerond.

Er is één onvoltooide of openstaande taak, die nodig is om het bijwerken van Semantic MediaWiki te voltooien. Een beheerder of gebruiker met voldoende rechten kan deze uitvoeren. Dit moet worden gedaan voordat nieuwe gegevens worden toegevoegd om tegenstrijdigheden te voorkomen.

Geen bewerkingssamenvatting
Geen bewerkingssamenvatting
Regel 71: Regel 71:
p.smwconvert = function( str )
p.smwconvert = function( str )
-- example <<#ask: ((Has name::...)) %Has name %link=none >>
-- example <<#ask: ((Has name::...)) %Has name %link=none >>
local str = str
local conversionTable = {
local conversionTable = {
["<"] = "{",
["\{\{"] = "{{",
[">"] = "}",
["\}\}"] = "}}",
["(("] = "[[",  
["(("] = "[[",  
["))"] = "]]",
["))"] = "]]",
["%"] = "|",
["%"] = "|",
}
}
--local str = string.gsub( str, '%S+', conversionTable )
local str = string.gsub( str, "\{\{", "{{" )
for i,v in ipairs( conversionTable ) do
local str = string.gsub( str, "\}\}", "}}" )
str = string.gsub( str, i, v )
local str = string.gsub( str, "((", "[[" )
end
local str = string.gsub( str, "))", "]]" )
local str = string.gsub( str, "%", "|" )
return str
return str
end
end


return p
return p

Versie van 6 sep 2023 12:02

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 83: invalid pattern capture

Or, using unnamed, sequential approach:

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

Luafout op regel 83: invalid pattern capture

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 83: invalid pattern capture

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

]]--

local p = {}

p.map = function(frame)
	--mandatory
	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 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 ""
	--optional
	local outputsep = frame.args.outputsep or frame.args[5] or ""
	local outputsep = string.gsub( mw.text.trim(outputsep), [[\s]], " " ) --allow for spaces with \s
	local fuzzy = frame.args.fuzzysep or frame.args[6] or "false"
	local smwescaped = frame.args.smwescaped or frame.args[7] or "false"
	
	-- fuzzysep (need a better name) lets you use a series of single characters (OR not AND)
	--[[
	
	if mw.text.trim(fuzzy) == "true" then
		local sepPattern = '[^' .. sep .. ')+'
		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
	--]]
	
	--Standard approach
	local valTable = {}
	local valTable = mw.text.split( vals, sep )
	local mappedTable = {}
	for k,v in ipairs(valTable) do
		local v = mw.text.trim( v )
		if v == "" or v == nil then
			--nothing
		else
			local newVal = string.gsub( map, varstr, v )
		
				local newVal = p.smwconvert( newVal )
				local newVal = frame:preprocess( newVal )
				local newVal = newVal .. " (smwconverted)"
			
			--local newVal = frame:expandTemplate( newVal ) --no effect
			table.insert( mappedTable, newVal )
		end
	end
	
	local newVals = table.concat( mappedTable, outputsep )
	return newVals
	
end

--[[
Convert escaped syntax for SMW
]]--
p.smwconvert = function( str )
	-- example <<#ask: ((Has name::...)) %Has name %link=none >>
	local conversionTable = {
		["\{\{"] = "{{",
		["\}\}"] = "}}",
		["(("] = "[[", 
		["))"] = "]]",
		["%"] = "|",
	}
	local str = string.gsub( str, "\{\{", "{{" )
	local str = string.gsub( str, "\}\}", "}}" )
	local str = string.gsub( str, "((", "[[" )
	local str = string.gsub( str, "))", "]]" )
	local str = string.gsub( str, "%", "|" )
	return str
end

return p