Модуль:Импортёр шаблона-карточки
Этот модуль оценён как альфа-версия. Он готов для тестирований и может быть использован на небольшом количестве страниц для обнаружения проблем. Предложения по изменениям и дополнениям приветствуются. |
Данный модуль помогает создавать импортёры шаблонов-карточек.
Заготовка для копированияПравить
<includeonly>{{subst:#invoke:Импортёр шаблона-карточки|main | НАЗВАНИЕ = ''название используемой карточки'' | *имя \ Имя \ name \ Name | ... }}</includeonly><noinclude>{{doc-inline}} {{OnLua|Импортёр шаблона-карточки}} {{Импортёр шаблона-карточки|''название используемой карточки''}} {{doc-end}} [[Категория:Шаблоны-карточки:''категория'']] </noinclude>
ИспользованиеПравить
Перечислите параметры через бэкслэш (\), начиная с того, который необходимо использовать после подстановки. Если параметр нужно оставить, даже если значение пусто, пометьте его звёздочкой (*). Если необходима сложная логика работы параметры, используйте тильду (~) после бэкслэша; например
| олимпиада \ олимпийские игры \~ {{#switch: {{{olimpics}}}| summer = летняя | winter = зимняя}}
Параметры-комментарии, начинающиеся с решётки (#), используются для разделения на группы с разным выравниванием; например,
| # название группы
Пример использования: Шаблон:Футбольный клуб/импортёр.
local p = {} -- p stands for package
-- следующие переменные глобально объявлять неправильно, но при передаче в функцию они не меняются
local res = '' -- вместо потока вывода
local data = {} -- массив вида {название параметра, его значение}
local name_max_len = 0 -- максимальная длина названия параметра в массиве data
-- печатает data в res, оформляя шириной name_max_len
function print_data ( )
for _, v in pairs(data) do
name = v[1]
value = v[2]
res = res .. '| ' .. name .. string.rep(' ', name_max_len-mw.ustring.len(name)) .. ' = ' .. value .. '\n'
end
end
function p.main( frame )
importer_args = frame.args -- параметры импортёра (например, 1="имя \ name \~ {{#switch...}}")
template_args = frame:getParent().args -- параметры конкретного включения (например, "имя=...")
if importer_args['НАЗВАНИЕ'] then
res = '{{' .. importer_args['НАЗВАНИЕ'] .. '\n' -- поле вывода
else
res = '{{УКАЖИТЕ НАЗВАНИЕ КАРТОЧКИ' .. '\n' -- ошибка
end
-- итерация по нумерованным параметрам карточки - вида *имя \ Имя \~ {{#switch...}}, например
for k, str in pairs(importer_args) do
if type(k) == 'number' then
str = mw.text.trim(str)
-- если строка начинается с <, то это комментарий с названием новой группы
if str:sub(1,1) == '#' then
print_data (data, name_max_len)
data = {}
name_max_len = 0
comment = mw.text.trim(mw.ustring.sub(str, 2))
res = res .. '<!-- ' .. comment .. ' -->\n'
else
-- если строка начинается со *, то параметр обязательно присутствует, даже пустым
if str:sub(1,1) == '*' then
is_required = true
str = mw.ustring.sub(str, 2)
else
is_required = false
end
-- итерация по фрагментам строки: например, smth, или ~ {{{smth|}}}
arr = mw.text.split(str, '\\', true)
if mw.text.trim(arr[1]) then -- непустое имя параметра
name = mw.text.trim(arr[1])
value = ''
for _, arr_elem in pairs(arr) do
arr_elem = mw.text.trim(arr_elem)
-- параметры, пачинающиеся с ~, содержат что-то вроде {{{smth|}}}, а не smth
if arr_elem:sub(1,1) == '~' then
value = value .. mw.text.trim(mw.ustring.sub(arr_elem, 2))
else
param = mw.text.trim(arr_elem)
if template_args[param] then
value = value .. mw.text.trim(template_args[param])
end
end
end
-- "| параметр = <пусто>" выводится, только если строка начиналась со *
if mw.ustring.len(value) > 0 or is_required then
table.insert(data, {name, value})
if mw.ustring.len(name) > name_max_len then
name_max_len = mw.ustring.len(name)
end
end
end
end
end
end
print_data (data, name_max_len)
return res .. '}}'
end
return p