Module:Template parameter value: Difference between revisions
Jump to navigation
Jump to search
en>Pppery (Undid revision 890688034 by Oshwah (talk) Protection is handled by Template:Documentation) |
en>Plastikspork (Fix for simple piped links) |
||
Line 1: | Line 1: | ||
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 pipemarker = '~_~TPVPIPEMARKER~_~' | |||
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]", "") | |||
-- Escape some pipes | |||
content = string.gsub(content, '(%[%[[^%[{}]*)|([^%[%]{}]*%]%])', '%1' .. pipemarker ..'%2') | |||
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 = string.gsub(content, pipemarker, '|') | |||
content = frame:preprocess{text = content} | |||
content = trimspaces(content) | |||
return content | |||
end | |||
return p |
Revision as of 13:57, 25 May 2021
Documentation for this module may be created at Module:Template parameter value/doc
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 pipemarker = '~_~TPVPIPEMARKER~_~' 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]", "") -- Escape some pipes content = string.gsub(content, '(%[%[[^%[{}]*)|([^%[%]{}]*%]%])', '%1' .. pipemarker ..'%2') 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 = string.gsub(content, pipemarker, '|') content = frame:preprocess{text = content} content = trimspaces(content) return content end return p