Module:Sandbox/Alex 21: Difference between revisions
Appearance
Content deleted Content added
No edit summary |
No edit summary |
||
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 = string.match(content, '|%s*' .. (numberedParameter and "" or parameter .. '%s*=%s*') .. '([^|].*)') |
content, content_rest = 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 |
end |
||
content = string.match(content, '^([^%{]*)%}%}') or content |
|||
if content == nil then return "" end |
if content == nil then return "" end |
||
content = string.gsub(content, "</?%a*include%a*>", "") |
content = string.gsub(content, "</?%a*include%a*>", "") |
||
content = string. |
content = string.gsub(content, "^%d+=", "") |
||
content = frame:preprocess{text = content} |
content = frame:preprocess{text = content} |
||
content = trimspaces(content) |
content = trimspaces(content) |
Revision as of 11:36, 23 January 2020
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, content_rest = 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
end
content = string.match(content, '^([^%{]*)%}%}') or content
if content == nil then return "" end
content = string.gsub(content, "</?%a*include%a*>", "")
content = string.gsub(content, "^%d+=", "")
content = frame:preprocess{text = content}
content = trimspaces(content)
return content
end
return p