Difference between revisions of "Module:Template parameter value"

From blackwiki
Jump to navigation Jump to search
blackwiki>Alex 21
(Apply update that allows extended support of pulling parameters that are templates or include pipes.)
blackwiki>Alex 21
(Undid revision 979851790 by Alex 21 (talk))
Line 36: Line 36:
 
while parameterCount ~= parameterMatch do
 
while parameterCount ~= parameterMatch do
 
if content == nil then return "" end
 
if content == nil then return "" end
−
content, content_rest = string.match(content, '|%s*' .. (numberedParameter and "" or (parameter .. '%s*=%s*')) .. '([^|]*)(.*)')
+
content = string.match(content, '|%s*' .. (numberedParameter and "" or parameter .. '%s*=%s*') .. '([^|].*)')
−
while string.match(content, '^[^%]]*%[%[[^%]]+$') or string.match(content, '^[^%}]*%{%{[^%}]+$') do
 
−
content_match, content_rest = string.match(content_rest, '(.[^|]*)(.*)')
 
−
content = content .. content_match
 
−
end
 
 
parameterCount = parameterCount + 1
 
parameterCount = parameterCount + 1
−
end
 
−
content = string.match(content, '^([^%{]*)%}%}') or content
 
−
content = string.match(content, '^(.+)%{%{[^%}]*$') or content
 
−
 
−
local _, countL = string.gsub(content, "%{%{", "")
 
−
local _, countR = string.gsub(content, "%}%}", "")
 
−
local countDiff = math.abs(countL-countR)
 
−
while countDiff > 0 do
 
−
content = string.match(content, '^(.*)%}%}$') or content
 
−
countDiff = countDiff - 1
 
 
end
 
end
 
 
Line 57: Line 43:
 
 
 
content = string.gsub(content, "</?%a*include%a*>", "")
 
content = string.gsub(content, "</?%a*include%a*>", "")
−
content = string.gsub(content, "^%d+=", "")
+
content = string.match(content, '^([^|}]*{{[^}]+}}[^|}]*)|') or string.match(content, '([^|}]+)')
 
content = frame:preprocess{text = content}
 
content = frame:preprocess{text = content}
 
content = trimspaces(content)
 
content = trimspaces(content)

Revision as of 04:28, 23 September 2020

Usage

Creates a usage of {{Template parameter value}} with the parameters defined in the documentation of the template.



local p = {}
local escape = require("Module:String")._escapePattern
function trimspaces(s)
	return string.gsub(s, "^%s*(.-)%s*$", "%1")
end

local function getTitle(title)
	local success, titleObj = pcall(mw.title.new, title)
	if success then return titleObj
	else return nil end
end

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {
		wrappers = 'Template:Template parameter value'
	})
	local template = escape(args[2])
	local parameter = escape(args[4])
	local numberedParameter = (tonumber(parameter) ~= nil)
	
	local templateCount = 0
	local parameterCount = 0
	local templateMatch = tonumber(args[3] or 1)
	local parameterMatch = tonumber(args[5] or 1)*(numberedParameter and parameter or 1)
	
	local targettitle = getTitle(args[1])
	if targettitle == nil then return "" end
    local content = string.gsub(targettitle:getContent() or "", "[\r\n]", "")
	
	while templateCount ~= templateMatch do
		if content == nil then return "" end
		content = string.match(content, '{{' .. template .. "(.+)")
		templateCount = templateCount + 1
	end
	
	while parameterCount ~= parameterMatch do
		if content == nil then return "" end
		content = string.match(content, '|%s*' .. (numberedParameter and "" or parameter .. '%s*=%s*') .. '([^|].*)')
		parameterCount = parameterCount + 1
	end
	
	if content == nil then return "" end
	
	content = string.gsub(content, "</?%a*include%a*>", "")
	content = string.match(content, '^([^|}]*{{[^}]+}}[^|}]*)|') or string.match(content, '([^|}]+)')
	content = frame:preprocess{text = content}
	content = trimspaces(content)
	
	return content
end

return p