الفرق بين المراجعتين لصفحة: «وحدة:Check for unknown parameters»
طلا ملخص تعديل |
(update to allow check for unnamed parameters, code by User:Frietjes) |
||
سطر ٣: | سطر ٣: | ||
-- not on the list | -- not on the list | ||
local p = {} | local p = {} | ||
local function trim(s) | local function trim(s) | ||
سطر ٤٠: | سطر ٩: | ||
local function isnotempty(s) | local function isnotempty(s) | ||
return s and | return s and s:match('%S') | ||
end | end | ||
function | local function clean(text) | ||
-- Return text cleaned for display and truncated if too long. | |||
local | -- Strip markers are replaced with dummy text representing the original wikitext. | ||
local | local pos, truncated | ||
local function truncate(text) | |||
local | 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 | 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 | |||
-- create the list of known args, regular expressions, and the return string | -- create the list of known args, regular expressions, and the return string | ||
local knownargs = {} | |||
local regexps = {} | |||
for k, v in pairs(args) do | for k, v in pairs(args) do | ||
if type(k) == 'number' then | if type(k) == 'number' then | ||
سطر ٧٦: | سطر ٥٢: | ||
end | end | ||
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 | ||
local ignoreblank = isnotempty(args['ignoreblank']) | |||
local showblankpos = isnotempty(args['showblankpositional']) | |||
local values = {} | |||
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 | ||
local knownflag = false | local knownflag = false | ||
for | for _, regexp in ipairs(regexps) do | ||
if mw.ustring.match(k, regexp) then | if mw.ustring.match(k, regexp) then | ||
knownflag = true | knownflag = true | ||
سطر ٨٧: | سطر ٦٧: | ||
end | end | ||
if not knownflag and ( not ignoreblank or isnotempty(v) ) then | if not knownflag and ( not ignoreblank or isnotempty(v) ) then | ||
k = mw.ustring. | table.insert(values, clean(k)) | ||
table.insert(values, k) | end | ||
elseif type(k) == 'number' and knownargs[tostring(k)] == nil then | |||
local knownflag = false | |||
for _, regexp in ipairs(regexps) do | |||
if mw.ustring.match(tostring(k), regexp) then | |||
knownflag = true | |||
break | |||
end | |||
end | |||
if not knownflag and ( showblankpos or isnotempty(v) ) then | |||
table.insert(values, k .. ' = ' .. clean(v)) | |||
end | end | ||
end | end | ||
end | end | ||
-- add results to the output tables | |||
local res = {} | |||
if #values > 0 then | |||
local unknown_text = args['unknown'] or 'Found _VALUE_, ' | |||
if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then | |||
local preview_text = args['preview'] | |||
if isnotempty(preview_text) then | |||
-- add | preview_text = require('Module:If preview')._warning({preview_text}) | ||
if #values | elseif preview == nil then | ||
preview_text = unknown_text | |||
end | |||
unknown_text = preview_text | |||
end | end | ||
for | for _, v in pairs(values) do | ||
-- Fix odd bug for | = which gets stripped to the empty string and | -- Fix odd bug for | = which gets stripped to the empty string and | ||
-- breaks category links | -- breaks category links | ||
if v == '' then v = ' ' end | if v == '' then v = ' ' end | ||
local | -- avoid error with v = 'example%2' ("invalid capture index") | ||
local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v}) | |||
table.insert(res, r) | |||
end | end | ||
end | end | ||
return table.concat(res) | |||
end | end | ||
function p.check(frame) | |||
local args = frame.args | |||
local pargs = frame:getParent().args | |||
return p._check(args, pargs) | |||
end | |||
return p | return p |
مراجعة ٢٠:٢٧، ١٨ نوفمبر ٢٠٢١
وحدة:التحقق من المعلمات غير المدعومة يمكن إلحاق هذه الوحدة إلى قالب ما للتحقق من المعلمات المجهولة المستخدمة في المقالات المتصلة به.
تأخذ هذه الوحدة الوسائط البديلة من بيانات القالب صفحة توثيق القالب، وذلك في حالة وجود الوسيط غير المدعوم في خانة aliases لوسيط ما.
الاستخدام
اساسي
<syntaxhighlight lang="wikitext">
</syntaxhighlight>
أو لفرز المقالات في التصنيف حسب القيم المجهولة :
<syntaxhighlight lang="text">
</syntaxhighlight>
أو لعرض رسالة خطأ حمراء واضحة:
<syntaxhighlight lang="lua">
</syntaxhighlight>
هنا، arg1
، arg2
، ...، argN
، هي الوسائط المعروفة. أي وسائط أخرى تستخدم، وليست في هذه القائمة
ستسبب بأن تنتج الوحدة كل ما يتم تمريره مع
الوسيط unknown
.
كلمة _VALUE_
سيتم تغييرها بإسم الوسيط، ويفيد ذلك لفرز الإدخالات في تصنيف التتبع، وأيضا عند المعاينة.
افتراضيا لا تميز الوحدة بين الوسائط الفارغة وغير الفارغة ، لتتبع الوسائط غير الفارغة فقط استخدم |ignoreblank=1
.
By default, the module ignores blank positional parameters. To include blank positional parameters in the tracking use |showblankpositional=1
.
التعابير النمطية
هذه الوحدة تدعم التعابير النمطية، وهي مفيدة عندما تكون هناك الكثير من المعلمات المعروفة التي تستخدم نمط منتظم. على سبيل المثال من قالب: Infobox3cols:
<syntaxhighlight lang="lua">
| regexp1 = header[%d][%d]*
| regexp2 = label[%d][%d]*
| regexp3 = data[%d][%d]*[abc]?
| regexp4 = class[%d][%d]*[abc]?
| regexp5 = rowclass[%d][%d]*
| regexp6 = rowstyle[%d][%d]*
| regexp7 = rowcellstyle[%d][%d]*
</syntaxhighlight>
لتتناسب مع جميع المعلمات من النموذج headerNUM
، labelNUM
، dataNUM
، dataNUMa
، dataNUMb
، dataNUMc
، rowcellstyleNUM
، حيث NUM عبارة عن سلسلة من الأرقام.
مثال آخر: <syntaxhighlight lang="lua"> | regexp1 = المنصب[%d][%d]* | regexp2 = سبقه[%d][%d]* | regexp3 = تبعه[%d][%d]* </syntaxhighlight> يتيح تحديد المنصب1، المنصب2، المنصب3 ... إلخ.
أمثلة
<syntaxhighlight lang="lua">
</syntaxhighlight>
قوالب تستخدم هذه الوحدة
طالع أيضاً
- قالب:Parameters ووحدة:Parameters – يولد قائمة أسماء معلمات لقالب معين.
-- This module may be used to compare the arguments passed to the parent -- with a list of arguments, returning a specified result if an argument is -- not on the list local p = {} local function trim(s) return s:match('^%s*(.-)%s*$') end local function isnotempty(s) return s and s:match('%S') end local function clean(text) -- Return text cleaned for display and truncated if too long. -- Strip markers are replaced with dummy text representing the original wikitext. local pos, truncated 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 -- create the list of known args, regular expressions, and the return string local knownargs = {} local regexps = {} for k, v in pairs(args) do if type(k) == 'number' then v = trim(v) knownargs[v] = 1 elseif k:find('^regexp[1-9][0-9]*$') then table.insert(regexps, '^' .. v .. '$') end end -- loop over the parent args, and make sure they are on the list local ignoreblank = isnotempty(args['ignoreblank']) local showblankpos = isnotempty(args['showblankpositional']) local values = {} for k, v in pairs(pargs) do if type(k) == 'string' and knownargs[k] == nil then local knownflag = false for _, regexp in ipairs(regexps) do if mw.ustring.match(k, regexp) then knownflag = true break end end if not knownflag and ( not ignoreblank or isnotempty(v) ) then table.insert(values, clean(k)) end elseif type(k) == 'number' and knownargs[tostring(k)] == nil then local knownflag = false for _, regexp in ipairs(regexps) do if mw.ustring.match(tostring(k), regexp) then knownflag = true break end end if not knownflag and ( showblankpos or isnotempty(v) ) then table.insert(values, k .. ' = ' .. clean(v)) end end end -- add results to the output tables local res = {} if #values > 0 then local unknown_text = args['unknown'] or 'Found _VALUE_, ' if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then local preview_text = args['preview'] if isnotempty(preview_text) then preview_text = require('Module:If preview')._warning({preview_text}) elseif preview == nil then preview_text = unknown_text end unknown_text = preview_text end for _, v in pairs(values) do -- Fix odd bug for | = which gets stripped to the empty string and -- breaks category links if v == '' then v = ' ' end -- avoid error with v = 'example%2' ("invalid capture index") local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v}) table.insert(res, r) end end return table.concat(res) end function p.check(frame) local args = frame.args local pargs = frame:getParent().args return p._check(args, pargs) end return p