Изменения

Перейти к навигации Перейти к поиску
название шаблона тоже может содержать знак "="; возможность указывать _именованные_ параметры с {{=}}, чтобы сохранить их порядок
Строка 53: Строка 53:  
local content = nowiki(prefix) .. '{{' --для накопления содержимого тэга
 
local content = nowiki(prefix) .. '{{' --для накопления содержимого тэга
 
local tname = args._template or args[1]
 
local tname = args._template or args[1]
if tname == '' or tname == nil then
+
if tname == nil then --если имя шаблона содержит знак "=" (работает, только если нет неименованных параметров)
 +
local nextfunc, static, cur = pairs(args)
 +
local k, v = nextfunc(static, cur)
 +
if k ~= nil then
 +
if not k:find('^_') then --именованные параметры, исключая модификаторы внешнего вида
 +
tname = k .. "=" .. v
 +
args[k] = nil --больше этот параметр нам не пригодится
 +
end
 +
end
 +
end
 +
if tname == '' or tname == nil then --при опущенном первом параметре берём имя шаблона из названия страницы
 
tname = mw.language.new('ru'):lcfirst(mw.title.getCurrentTitle().rootText)
 
tname = mw.language.new('ru'):lcfirst(mw.title.getCurrentTitle().rootText)
 
end
 
end
   −
if args._template == nil then --имя вызываемого шаблона в неименованном первом параметре, больше его обрабатывать не надо
+
if args._template == nil then --имя вызываемого шаблона в неименованном первом параметре (или же взято из названия страницы или
table.remove(args,1)
+
table.remove(args,1)     --из именованного параметра в отсутствие неименованных - в этой строчке вреда нет в любом случае),
end
+
end                           --больше его обрабатывать не надо
 
if link then
 
if link then
 
content = content .. '[[Шаблон:' .. tname .. '|' .. tname .. ']]'
 
content = content .. '[[Шаблон:' .. tname .. '|' .. tname .. ']]'
Строка 66: Строка 76:  
end
 
end
 
content = content .. endl
 
content = content .. endl
local targs = {}
+
local targs, param, value, left_shift = {}, '', '', 0
 
for k, v in pairs(args) do
 
for k, v in pairs(args) do
 
if type(k) == 'number' then --неименованные параметры
 
if type(k) == 'number' then --неименованные параметры
targs[k] = v
+
equals_pos = v:find('=')
content = content .. '|' .. nowiki(v) .. endl
+
if equals_pos then
 +
param = v:sub(1, equals_pos-1)
 +
value = v:sub(equals_pos+1)
 +
targs[param] = value
 +
content = content .. '|' .. nowiki(param) .. '=' .. nowiki(value) .. endl
 +
left_shift = left_shift+1 --переменная нужна,  чтобы квазинумерованные параметры, переданные
 +
else                          --через "{{=}}", не сбивали порядок
 +
targs[k - left_shift] = v
 +
content = content .. '|' .. nowiki(v) .. endl
 +
end
 
elseif not k:find('^_') then --именованные параметры, исключая модификаторы внешнего вида
 
elseif not k:find('^_') then --именованные параметры, исключая модификаторы внешнего вида
 
targs[k] = v
 
targs[k] = v
Анонимный участник

Реклама:

Навигация