وحدة:Parameters
المظهر
صنفت هذه الوحدة على أنها في مرحلة ألفا. تكون الوحدة في هذه المرحلة جاهزة نوعا ما لأن تستخدم من طرف ثالث، أي بمعنى أخر على النطاقات غي صفحات التجارب. لكن يجب أن تستخدم في صفحات محددة للغاية وأن لا يوسع إستخدامها ابدا، إلا في حين أن تنتقل للمرحلة التي بعدها. يجب لهذه الوحدة أن يضاف لها صفحة توثيق تشرح مدخلاتها وطريقة إستخدامها. يجب أن تراقب هذه الوحدة جيدا وملاحظة أي أخطاء تلوح في الأفق والعمل على عزلها وإصلاحها. --> |
الاستخدام
[تعديل]{{Parameters}}
-- This module implements [[قالب:Parameters]].
-- [SublimeLinter luacheck-globals:mw]
local DEFINITIONS =
{
["image"] = {
["code"] = '<!-- زى example.jpg -->',
["dlist"] = 'زى example.jpg',
},
["صورة"] = {
["code"] = '<!-- زى example.jpg -->',
["dlist"] = 'زى example.jpg',
},
["alt"] = {
["code"] = '<!-- text alternative for image; see WP:ALT -->',
["dlist"] = 'text alternative for image; see [[WP:ALT]]'},
["coordinates"] = {
["code"] = '<!-- استخدم {{Coord}} -->',
["dlist"] = 'استخدم {{قا|Coord}}'},
["coords"] = {
["code"] = '<!-- استخدم {{Coord}} -->',
["dlist"] = 'استخدم {{قا|Coord}}'},
["native_name"] = {
["code"] = '<!-- name in local language; if more than one, separate ' ..
'using {{قائمة بسيطة}} use {{رمز لغة}}, and omit native_name_lang -->',
["dlist"] = 'name in local language; if more than one, separate ' ..
'using {{قا|قائمة بسيطة}}, use {{قا|رمز لغة}}, and omit {{Para|native_name_lang}}'},
["native_name_lang"] = {
["code"] = '<!-- language two- or three-letter ISO code -->',
["dlist"] = 'language two- or three-letter ISO code'},
["start_date"] = {
["code"] = '<!-- {{تاريخ بداية|YYYY|MM|DD|df=y}} -->',
["dlist"] = 'استخدم {{Tlx|Start date|YYYY|MM|DD|df=y}}'},
["end_date"] = {
["code"] = '<!-- {{تاريخ نهاية|YYYY|MM|DD|df=y}} -->',
["dlist"] = 'استخدم {{Tlx|Start date|YYYY|MM|DD|df=y}}'},
["url"] = {
["code"] = '<!-- استخدم {{مسار|example.com}} -->',
["dlist"] = 'استخدم {{قا|URL}}'},
["website"] = {
["code"] = '<!-- استخدم {{مسار|example.com}} -->',
["dlist"] = 'استخدم {{Tls|URL|example.com}}'},}
local p = {}
local removeDuplicates = require('Module:TableTools').removeDuplicates
local yesno = require('Module:Yesno')
local function makeInvokeFunction(funcName)
return function(frame)
local getArgs = require('Module:Arguments').getArgs
return p[funcName](getArgs(frame, {removeBlanks = false}))
end
end
local function extractParams(page)
local source = mw.title.new(page, 'Template'):getContent()
local parameters = {}
for parameter in string.gmatch(source, '{{{(.-)%f[}|<>]') do
table.insert(parameters, parameter)
end
return removeDuplicates(parameters)
end
local function map(tbl, transform)
local returnTable = {}
for k, v in pairs(tbl) do
returnTable[k] = transform(v)
end
return returnTable
end
local function strMap(tbl, transform)
local returnTable = map(tbl, transform)
return table.concat(returnTable)
end
function p._check(args)
local title = args._base or mw.title.getCurrentTitle().fullText
local unknown = args.unknown or '[[تصنيف:صفحات تستخدم '..title ..' مع وسائط مش معروفة|_VALUE_]]' --' '--
--local preview = args.preview or "الوسيط '''_VALUE_''' مش مدعوم فى [[".. title .."]]"
local template = string.gsub(title, 'قالب:', '')
return string.format(
'<!-- النص ده كتبه اوتوماتيكى [[قالب:Parameters]] \n' ..
' -->' ..
'{{#استدعاء:Check for unknown parameters|check\n' ..
'|unknown=%s\n' ..
--'|preview =%s\n' ..
'|template =%s\n' ..
'|%s}}<!-- '..
'\n -->', unknown
-- , preview,
,template,
table.concat(extractParams(args.base), '|'))
end
function p._code(args)
local definitions = yesno(args.definitions, true)
local pad = yesno(args.pad)
local parameters = extractParams(args.base)
-- Space-pad the parameters to align the equal signs vertically
if pad then
local lengthPerPara = map(parameters, function (parameter)
return string.len(parameter) end)
-- Lua doesn't support printf's <*> to specify the width, apparently
local fs = string.format('%%-%ss', math.max(unpack(lengthPerPara)))
for i, parameter in pairs(parameters) do
parameters[i] = string.format(fs, parameter)
end
end
local title = args._base or mw.title.getCurrentTitle().baseText
return string.format([[{{%s
%s}}]], title, strMap(parameters,
function(s)
if definitions then
return string.format('| %s = %s\n', s,
DEFINITIONS[s] and DEFINITIONS[s].code or '')
else
return string.format('| %s = \n', s)
end
end))
end
function p._codeauto(args)
local definitions = yesno(args.definitions, true)
--local definitions = getpramvalue(args.definitions)
local pad = yesno(args.pad)
local parameters = extractParams(args.base)
-- Space-pad the parameters to align the equal signs vertically
if pad then
local lengthPerPara = map(parameters, function (parameter)
return string.len(parameter) end)
-- Lua doesn't support printf's <*> to specify the width, apparently
local fs = string.format('%%-%ss', math.max(unpack(lengthPerPara)))
for i, parameter in pairs(parameters) do
parameters[i] = string.format(fs, parameter)
end
end
local title = args._base or mw.title.getCurrentTitle().baseText
local dert = string.format([[{{%s
%s}}]], title, strMap(parameters,
function(s)
if definitions then
dee = string.format('| %s = %s\n', s,
DEFINITIONS[s] and DEFINITIONS[s].code or '')
else
dee = string.format('| %s = \n', s)
end
return dee
end))
if not dee or dee == '' then
return nil
else return dert end
end
function p._compare(args)
local Set = require('Module:Set')
local function normaliseParams(parameters)
local paramsNorm = {}
-- Prepare a key lookup metatable, which will hold the original
-- parameter names for each normalised parameter, e.g.
-- [test] = {TEST, Test}. paramIndex functions like a Python
-- defaultdict, where the default is a table.
local paramIndex = setmetatable({}, {__index = function(t, k)
if not rawget(t, k) then
rawset(t, k, {})
end
return rawget(t, k)
end})
for _, parameter in pairs(parameters) do
table.insert(paramsNorm,
string.lower(string.gsub(parameter, '%A', '')))
table.insert(paramIndex[
string.lower(string.gsub(parameter, '%A', ''))], parameter)
end
paramsNorm = removeDuplicates(paramsNorm)
-- Overload key lookup in paramsNorm. While [[Module:Set]] will
-- operate on the table (which is to say, the normalised parameters
-- array), key access will be by way of the paramIndex metatable.
setmetatable(paramsNorm, {__index = paramIndex})
return paramsNorm
end
local baseParams = extractParams(args.base)
local otherParams = extractParams(args.other)
local baseNormParams = normaliseParams(Set.valueComplement(
otherParams, baseParams))
local otherNormParams = normaliseParams(otherParams)
return string.format([[وسائط مطابقة:
%s
وسائط مشتركة:
%s
متفرقة بين القالبين:
%s]],
strMap(Set.valueIntersection(baseParams, otherParams),
function(v) return string.format('%s؛ ', v) end),
strMap(Set.valueIntersection(baseNormParams, otherNormParams),
function(v) return string.format('* %s < %s [%s]\n',
table.concat(baseNormParams[v], '؛ '),
table.concat(otherNormParams[v], '؛ '),
v)
end),
strMap(Set.valueComplement(otherNormParams, baseNormParams),
function(v) return strMap(baseNormParams[v],
function(s) return string.format('%s؛ ', s) end)
end))
end
function p._demo(args)
local title = args._base and ('|_template=' .. args._base) or ''
local display = args._display and ('|_display=' .. args._display) or ''
return string.format(
'<!-- النص ده كتبه اوتوماتيكى [[قالب:Parameters]] \n' ..
' -->' ..
'{{مثال وسائط قالب \n' ..
'%s\n'..
'%s\n'..
'|%s}}<!-- '..
'\n -->', title, display,
table.concat(extractParams(args.base), '|'))
end
function p._vlist(args)
return string.format(
'\n{{رأس بيانات القالب}}\n' ..
'{{div|700|70}}' ..
'\n<templatedata>\n' ..
'{\n' ..
' "params": {\n' ..
' "%s'..
'": {}\n'..
'},\n"format": "block"\n'..
'}'..
'</templatedata>\n{{div2}}',
table.concat(extractParams(args.base), '": {},\n "'))
end
function p._dlist(args)
local definitions = yesno(args.definitions, true)
return strMap(extractParams(args.base),
function(s)
if definitions then
return string.format('; %s: %s\n', s,
DEFINITIONS[s] and DEFINITIONS[s].dlist or '')
else
return string.format('; %s: \n', s)
end
end)
end
function p._list(args)
return strMap(extractParams(args.base),
function(s) return string.format('* %s\n', s) end)
end
p.check = makeInvokeFunction('_check')
p.code = makeInvokeFunction('_code')
p.codeauto = makeInvokeFunction('_codeauto')
p.compare = makeInvokeFunction('_compare')
p.demo = makeInvokeFunction('_demo')
p.dlist = makeInvokeFunction('_dlist')
p.list = makeInvokeFunction('_list')
p.vlist = makeInvokeFunction('_vlist')
return p