Игла Клеопатры (Лондон)
- 1 year ago
- 0
- 0
Этот модуль оценён как
готовый к использованию
. Предполагается, что все баги устранены и он готов для широкого использования. Его можно указывать на справочных страницах и рекомендовать к использованию новым участникам. Для его изменения и тестирования, пожалуйста,
используйте песочницу
.
|
Этот модуль позволяет в отдельных случаях избавиться от нужды использовать в неименованных параметрах шаблона костыли типа шаблона {{ = }} , HTML-сущности = или ручной нумерации параметров. Он:
параметр=значение
, за исключением тех, имя которых начинается со знака подчёркивания
_
, и перечисленных через
/
в параметре
_exceptions
, в неименованные, соединяя имя параметра и его значение знаком
=
и добавляя получившийся параметр в конец списка;
_pass_to
.
Важно: пока не будет решена в Scribunto, модуль будет стабильно работать только при одном , и не больше, именованном параметре, который надо преобразовать; иначе порядок следования параметров может изменяться безо всякой логики. Причём параметр, в который может затесаться знак «=», должен быть последним в списке, иначе порядок исказится.
В частности, этот модуль используется в шаблоне {{ сделано }} :
{{#invoke:ParamValue2Value|main|_pass_to=Сделано/форматирование}}
В шаблоне Сделано/formatting осуществляется финальное форматирование, и в результате мы можем вызвать {{ сделано }} со ссылкой в первом параметре, не используя для этого костыли в виде шаблона {{ = }} , HTML-сущности = или ручной нумерации параметров:
{{
сделано
|
https
://
ru.wikipedia.org/w/index.php?title=Конгресс_Мексики&diff=47059625&oldid=47059396
}}
→
local p = {}
--[=[
Helper function that escapes all pattern characters so that they will be treated
as plain text. Copied from [[:en:Module:String]].
]=]
local function escapePattern(pattern_str)
return mw.ustring.gsub(pattern_str, '([%(%)%.%%%+%-%*%?%[%^%$%]])', '%%%1')
end
-- вызов шаблона, при ошибке возвращает пустую строку
local function expand(frame, tname, targs)
local success, result = pcall(
frame.expandTemplate,
frame,
{title = tname, args = targs}
)
if success then
return result
else
return ''
end
end
local function is_exception(arg, exceptions)
return mw.ustring.find(exceptions, '/' .. escapePattern(arg) .. '/')
end
function p.main(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
local args = getArgs(frame, {
trim = false,
removeBlanks = false
})
local tname = args._pass_to
local exceptions = args._exceptions and '/' .. args._exceptions .. '/' or ''
local targs, i = {}, 1
for k, v in pairs(args) do
if type(k) == 'number' then --неименованные параметры
targs[i] = v
i = i+1
elseif not k:find('^_') and not is_exception(k, exceptions) then --именованные параметры, исключая настройки вызывающего шаблона
targs[i] = k .. "=" .. v
i = i+1
elseif k ~= '_pass_to' and k ~= '_exceptions' then --настройки вызывающего шаблона
targs[k] = v
end
end
return tostring(expand(frame, tname, targs))
end
return p