Модуль:Импортёр шаблона-карточки
Данный модуль помогает создавать импортёры шаблонов-карточек. Заготовка для копирования<includeonly>{{subst:#invoke:Импортёр шаблона-карточки|main | НАЗВАНИЕ = ''название используемой карточки'' | *имя \ Имя \ name \ Name | ... }}</includeonly><noinclude>{{doc-inline}} {{OnLua|Импортёр шаблона-карточки}} {{Импортёр шаблона-карточки|''название используемой карточки''}} {{doc-end}} [[Категория:Шаблоны-карточки:''категория'']] </noinclude> ИспользованиеПеречислите параметры стандартным образом на каждой строке, начинающейся с прямой черты Дополните через бэкслэш Для подстановки значений указывайте их после | *оригинал имени \~ {{lang-en|{{{Имя на языке оригинала|{{{имя в оригинале|}}}}}}}} Если необходима сложная логика работы подстановки значений, то также используйте тильду после бэкслэша, например: | олимпиада \ олимпийские игры \~ {{{{{|safesubst:}}}#switch: {{{olimpics}}}| summer = летняя | winter = зимняя}} Параметры-комментарии, начинающиеся с решётки (#), используются для разделения на группы с разным выравниванием, например: | # название группы Пример использования: Шаблон:Футбольный клуб/импортёр. local p = {} -- p stands for package
-- следующие переменные глобально объявлять неправильно, но при передаче в функцию они не меняются
local res = '' -- вместо потока вывода
local data = {} -- массив вида {название параметра, его значение}
local name_max_len = 0 -- максимальная длина названия параметра в массиве data
local processed_params = {} -- для отслеживания уже обработанных параметров
-- печатает 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 add_auto_param(name, template_args)
if not processed_params[name] and template_args[name] then
if mw.ustring.len(name) > name_max_len then
name_max_len = mw.ustring.len(name)
end
table.insert(data, {name, template_args[name]})
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 = 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 = ''
has_replacement = false
for _, arr_elem in pairs(arr) do
arr_elem = mw.text.trim(arr_elem)
-- параметры, пачинающиеся с ~, содержат что-то вроде {{{smth|}}}, а не smth
if arr_elem:sub(1,1) == '~' then
has_replacement = true
value = mw.text.trim(mw.ustring.sub(arr_elem, 2))
else
param = mw.text.trim(arr_elem)
if template_args[param] and not has_replacement then
value = value .. mw.text.trim(template_args[param])
processed_params[param] = true -- Отмечаем параметр как обработанный
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
-- Добавляем автоматические параметры в конец, если они не были обработаны
add_auto_param('from', template_args)
add_auto_param('nocat', template_args)
print_data()
return res .. '}}'
end
return p
|
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve
Portal di Ensiklopedia Dunia