local p = {}
local function check(args, sources, targets)
local source
for _, param in ipairs(sources) do
if args[param] and args[param] ~= '' then
source = param
break
end
end
if not source then
return false
end
local hasError = false
for link in mw.ustring.gmatch(args[source], '%[%[[^%[%]]+%]%]') do
local name = mw.ustring.match(link, '([^%|]+)%]%]$', 3)
for _, param in ipairs(targets) do
if args[param] and args[param] ~= '' then
local match = mw.ustring.match(args[param], '.?.?%f[%w]' .. name .. '%f[%W]')
-- Eliminate duplicate links
if match and not mw.ustring.find(match, '^%[[%[:]') then
mw.log('The link "' .. link .. '" in |' .. source .. '= should be moved to |' .. param .. '=.')
hasError = true
break
end
end
end
end
return hasError
end
function p.main(frame)
local args = frame:getParent().args
local hasError1 = check(args, {'producer', 'producers'}, {'writer', 'writers', 'screenplay', 'story', 'based_on'})
local hasError2 = check(args, {'music'}, {'cinematography', 'editing'})
if hasError1 or hasError2 then
local namespace = mw.title.getCurrentTitle().namespace
if namespace == 0 or namespace == 118 then
return '[[Category:Pages using infobox film with incorrectly placed links]]'
end
end
end
return p