Модуль:Импортёр шаблона-карточки (Bk;rl,&Nbhkjm~j ogQlkug-tgjmkctn)
Перейти к навигации
Перейти к поиску
Этот модуль оценён как альфа-версия. Он готов для тестирований и может быть использован на небольшом количестве страниц для обнаружения проблем. Предложения по изменениям и дополнениям приветствуются. |
Данный модуль помогает создавать импортёры шаблонов-карточек.
Заготовка для копирования
[править код]<includeonly>{{subst:#invoke:Импортёр шаблона-карточки|main | НАЗВАНИЕ = ''название используемой карточки'' | *имя \ Имя \ name \ Name | ... }}</includeonly><noinclude>{{doc-inline}} {{OnLua|Импортёр шаблона-карточки}} {{Импортёр шаблона-карточки|''название используемой карточки''}} {{doc-end}} [[Категория:Шаблоны-карточки:''категория'']] </noinclude>
Использование
[править код]Перечислите параметры стандартным образом на каждой строке, начинающейся с прямой черты | name
. Если параметр нужно оставить, даже если значение пусто, пометьте его звёздочкой | *name
.
Дополните через бэкслэш \
, алиасы параметров или другие варианты на замену | *name \ alias1 \ alias2
.
Для подстановки значений указывайте их после \~
в виде | name \ alias \~ Text
, например:
| *оригинал имени \~ {{lang-en|{{{Имя на языке оригинала|{{{имя в оригинале|}}}}}}}}
Если необходима сложная логика работы подстановки значений, то также используйте тильду после бэкслэша, например:
| олимпиада \ олимпийские игры \~ {{{{{|safesubst:}}}#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