پودمان:Check for unknown parameters: تفاوت میان نسخه‌ها

Added entry point for modules per talk page discussion. Report any errors on talk page.
جز (۱ نسخه واردشده)
 
(Added entry point for modules per talk page discussion. Report any errors on talk page.)
خط ۳: خط ۳:
-- not on the list
-- not on the list
local p = {}
local p = {}
local function trim(s)
return s:match('^%s*(.-)%s*$')
end


local function isnotempty(s)
local function isnotempty(s)
return s and s:match( '^%s*(.-)%s*$' ) ~= ''
return s and s:match('%S')
end
end


function p.check (frame)
local function clean(text)
local args = frame.args
-- Return text cleaned for display and truncated if too long.
local pargs = frame:getParent().args
-- Strip markers are replaced with dummy text representing the original wikitext.
local ignoreblank = isnotempty(frame.args['ignoreblank'])
local pos, truncated
local checkpos = isnotempty(frame.args['checkpositional'])
local function truncate(text)
if truncated then
return ''
end
if mw.ustring.len(text) > 25 then
truncated = true
text = mw.ustring.sub(text, 1, 25) .. '...'
end
return mw.text.nowiki(text)
end
local parts = {}
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
pos = remainder
table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')
end
table.insert(parts, truncate(text:sub(pos or 1)))
return table.concat(parts)
end
 
function p._check(args, pargs)
if type(args) ~= "table" or type(pargs) ~= "table" then
-- TODO: error handling
return
end
 
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(args['showblankpositional'])
local knownargs = {}
local knownargs = {}
local unknown = 'Found _VALUE_, '
local unknown = args['unknown'] or 'Found _VALUE_, '
local preview = args['preview']
 
local values = {}
local res = {}
local res = {}
local regexps = {}
-- create the list of known args, and the return string
 
-- create the list of known args, regular expressions, and the return string
for k, v in pairs(args) do
for k, v in pairs(args) do
if type(k) == 'number' then
if type(k) == 'number' then
v = mw.ustring.gsub(v, '^%s*(.-)%s*$', '%1')
v = trim(v)
knownargs[v] = 1
knownargs[v] = 1
else
elseif k:find('^regexp[1-9][0-9]*$') then
if (k == 'unknown' and type(v) == 'string') then
table.insert(regexps, '^' .. v .. '$')
unknown = v
end
end
end
end
if isnotempty(preview) then
preview = '<div class="hatnote" style="color:red"><strong>Warning:</strong> ' .. preview .. ' (this message is shown only in preview).</div>'
elseif preview == nil then
preview = unknown
end
end


-- loop over the parent args, and make sure they are on the list
-- loop over the parent args, and make sure they are on the list
for k,v in pairs(pargs) do
for k, v in pairs(pargs) do
if (type(k) == 'string' and knownargs[k] == nil) then
if type(k) == 'string' and knownargs[k] == nil then
if( (not ignoreblank) or (ignoreblank and isnotempty(v)) ) then
local knownflag = false
k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
for _, regexp in ipairs(regexps) do
local r = mw.ustring.gsub(unknown, '_VALUE_', k)
if mw.ustring.match(k, regexp) then
table.insert(res, r)
knownflag = true
break
end
end
if not knownflag and ( not ignoreblank or isnotempty(v) ) then
table.insert(values, clean(k))
end
end
elseif(checkpos and type(k) == 'number' and knownargs[tostring(k)] == nil) then
elseif type(k) == 'number' and
if( (not ignoreblank) or (ignoreblank and isnotempty(v)) ) then
knownargs[tostring(k)] == nil and
local r = mw.ustring.gsub(unknown, '_VALUE_', k)
( showblankpos or isnotempty(v) )
table.insert(res, r)
then
table.insert(values, k .. ' = ' .. clean(v))
end
end
 
-- add results to the output tables
if #values > 0 then
if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
unknown = preview
end
for _, v in pairs(values) do
if v == '' then
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
v = ' '
end
end
-- avoid error with v = 'example%2' ("invalid capture index")
local r =  unknown:gsub('_VALUE_', {_VALUE_ = v})
table.insert(res, r)
end
end
end
end


return table.concat(res)
return table.concat(res)
end
function p.check(frame)
local args = frame.args
local pargs = frame:getParent().args
return p._check(args, pargs)
end
end


return p
return p
کاربر ناشناس