Mine sisu juurde

Modul':Documentation

Мегавики-späi

local p = {}

local yesno = require('Module:Yesno')

local medal = 'медаль' local order = 'орден' local insignia = 'знак отличия' local badge = 'почётный знак' local badge2 = 'почетный знак' local title = 'звание' --почётное local rank = 'звание' --воинское local prize = 'премия' local commemorative = 'памятный знак' local awardTypes = {medal, order, insignia, badge, badge2, title, prize, commemorative} local exampleTitle = '== Пример использования ==\n' local namePlaceholder = 'Имя и фамилия' local textPrefix = 'Шаблон предназначен для обозначения людей' local orDivisons = ' или подразделений' local typesTitle = '== Таблица вариантов ==\n' local _type = 'тип' local note = 'примечание'

local function expand(frame, tname, targs) return frame:expandTemplate({title = tname, args = targs}) end

local parameters = { ['имя'] = {['ученый'] = 'Имя', ['учёный'] = 'Имя', ['политик'] = 'Имя', ['театральный деятель'] = 'Имя', default = 'имя'}, ['награды'] = {['ученый'] = 'Награды и премии', ['учёный'] = 'Награды и премии', ['персона'] = 'награды и премии', ['спортсмен'] = 'медали', ['политик'] = 'Награды', ['театральный деятель'] = 'Награды', default = 'награды' }, ['звание'] = {default = 'звание'} }

local function get_param_name(tname, pname) if not parameters[pname] then return pname end return parameters[pname][mw.ustring.lower(tname)] or parameters[pname].default or pname end

local function instead_of_link(link) return ' Размещается вместо ссылки ' .. link .. '' end

local function in_param(frame, tname, pname) return ' в частности, в графе ' .. expand(frame, 'para', {[1]=pname}) .. ' шаблона ' .. expand(frame, 'tl', {[1]=tname}) .. '.\n\n' end

function repeat_whitespace(n) local r = for i = 1, n do r = r .. ' ' end return r end

local function render_example(frame, pageName, tname, paramName, paramTarget, example) local templateResult = expand(frame, tname, {[paramTarget] = example, [paramName] = namePlaceholder}) local nameLen = mw.ustring.len(paramName) local targetLen = mw.ustring.len(paramTarget) local maxLen = math.max(nameLen, targetLen)

local pre = '

\n{{' .. tname .. '\n|' .. paramName .. repeat_whitespace(3 + maxLen - nameLen) .. '= ' .. namePlaceholder .. '\n|'  .. paramTarget .. repeat_whitespace(3 + maxLen - targetLen) ..  '= {{' .. pageName .. '}}\n}}

'

return templateResult .. '\n\n' .. pre end

local function template_res_and_pre(frame, pageName, tname, paramName, paramTarget) return render_example(frame, pageName, tname, paramName, paramTarget, expand(frame, pageName)) end

local function cat_link(cat) return '' .. cat .. '' end

local function format_categories(categories) local cats = {} for s in mw.ustring.gmatch(categories, '[^/]+') do table.insert(cats, cat_link(s)) end if #cats == 0 then return end local ret = 'Шаблон автоматически добавляет статью в категори' if #cats > 1 then ret = ret ..'и' else ret = ret .. 'ю' end ret = ret .. ' ' .. mw.text.listToText(cats) .. '.' return ret end

local function starts_with(st, prefix) return mw.ustring.sub(st, 1, mw.ustring.len(prefix)) == prefix end local function quotate_default(st, quotes) if (quotes == nil or yesno(quotes)) and not starts_with(st, '«') then return '«' .. st .. '»' end return st end

local function get_param_num(args, prefix) local num = 0 while args[prefix .. tostring(num+1)] ~= nil do num = num + 1 end return num end

local function types_table(frame, pageName, args) local t = mw.html.create('table'):addClass('wide center') local headers = t:tag('tr') headers:tag('th'):wikitext('Код шаблона
(для копирования)') headers:tag('th'):wikitext('Шаблоном отображается') headers:tag('th'):wikitext('Примечание к отображаемому шаблоном') local varCount = get_param_num(args, _type) local defaultStr = t:tag('tr') defaultStr:tag('td'):addClass('nowrap'):wikitext('Šablon:' .. pageName .. '') defaultStr:tag('td'):wikitext(expand(frame, pageName, {})) defaultStr:tag('td'):wikitext(args[note .. '0']) for i = 1, varCount do local varStr = t:tag('tr') local istr = tostring(i) local var = args[_type .. istr] varStr:tag('td'):addClass('nowrap'):wikitext('Šablon:' .. pageName .. '') varStr:tag('td'):wikitext(expand(frame, pageName, {[_type]=var})) varStr:tag('td'):wikitext(args[note .. istr]) end return typesTitle .. tostring(t) .. '\n' end

local function guess_type(pageName) for _, awardType in ipairs(awardTypes) do if starts_with(mw.ustring.lower(pageName), awardType) then return awardType end end return nil end

local function trim_parentheses(str) for s in mw.ustring.gmatch(str, '[^%(]+') do return s:match('^%s*(.-)%s*$') end return str end

local function trim_type_and_parentheses(pageName) local autoType = guess_type(pageName) if autoType ~= nil then local typeLen = mw.ustring.len(autoType) pageName = mw.ustring.sub(pageName, typeLen + 2, mw.ustring.len(pageName)) end return trim_parentheses(pageName) end

local function get_award_type_text(awardType) if awardType == order then return ', награждённых орденом' elseif awardType == medal then return ', награждённых медалью' elseif awardType == insignia then return ', награждённых знаком отличия' elseif awardType == badge or awardType == badge2 then return ', награждённых почётным знаком' elseif awardType == title then return ', удостоенных звания' elseif awardType == prize then return ' — лауреатов премии' elseif awardType == commemorative then return ', награждённых памятным знаком' end return end

function p.print_types_table(frame) local mt = mw.html.create('table'):addClass('wikitable') local headers = mt:tag('tr'):css('text-align', 'center') headers:tag('th'):wikitext('Значение параметра') headers:tag('th'):wikitext('Отображаемый текст') for _, awardType in ipairs(awardTypes) do local row = mt:tag('tr') row:tag('td'):wikitext(expand(frame, 'para', {'тип', awardType})) row:tag('td'):wikitext('…' .. get_award_type_text(awardType)) end return tostring(mt) end

local function _award_base(frame, args, pageName, tname, paramAward) local res = textPrefix if yesno(args['подразделения']) then res = res .. orDivisons end local awardType = args['тип'] or guess_type(pageName) or medal res = res .. get_award_type_text(awardType) if not yesno(args['без названия']) then local quotes = args['кавычки'] local titleString = args[1] or args['название'] or trim_type_and_parentheses(pageName) res = res .. ' ' .. quotate_default(titleString, quotes) end res = res .. '.' local link = args[2] or args['ссылка'] or pageName res = res .. instead_of_link(link) .. ';' local paramAward = get_param_name(tname, 'награды') res = res .. in_param(frame, tname, paramAward)

local categories = args['kategorii'] or args['kategorijad'] if categories then res = res .. format_categories(categories) .. '\n' end

local filename = args['файл'] if filename then res = res .. '\nВ качестве изображения используется файл ' .. filename .. ' Fail:' .. filename .. '\n' end

if get_param_num(args, _type) > 0 then res = res .. types_table(frame, pageName, args) end

res = res .. exampleTitle return res end

function p.award(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end local args = getArgs(frame) local pageName = mw.title.getCurrentTitle().text local tname = args['шаблон'] or 'Военный деятель' local paramAward = get_param_name(tname, 'награды') local res = _award_base(frame, args, pageName, tname, paramAward) local paramName = get_param_name(tname, 'имя') res = res .. template_res_and_pre(frame, pageName, tname, paramName, paramAward) res = res .. '
' return res end

function p.award_demo(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end local args = getArgs(frame) local pageName = mw.title.getCurrentTitle().text local tname = args['шаблон'] or 'Военный деятель' local paramAward = get_param_name(tname, 'награды') local res = _award_base(frame, args, pageName, tname, paramAward) local paramName = get_param_name(tname, 'имя') local demo = args['демо'] or args['demo'] res = res .. render_example(frame, pageName, tname, paramName, paramAward, demo) res = res .. '
' return res end function p.rank(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end local args = getArgs(frame) local pageName = mw.title.getCurrentTitle().text local rankNameDefault = mw.text.trim(mw.ustring.sub(pageName, (mw.ustring.find(pageName, ',', 1, true) or 0) +1)) local tname = args['шаблон'] or 'Военный деятель' local res = textPrefix local special = yesno(args['специальное']) res = res .. ', носящих ' if special then res = 'специальное ' end local rankType = args['тип'] or 'звание' res = res .. rankType .. ' ' local rankName = args[1] or args['звание'] or rankNameDefault local quotes = args['кавычки'] res = res .. quotate_default(rankName, quotes) .. '.' local link = args[2] or args['ссылка'] or mw.ustring.lower(rankNameDefault) res = res .. instead_of_link(link) .. ';' local paramRank = get_param_name(tname, 'звание') res = res .. in_param(frame, tname, paramRank)

local categories = args['категория'] or args['категории'] if categories then res = res .. format_categories(categories) .. '\n' end

if get_param_num(args, _type) > 0 then res = res .. types_table(frame, pageName, args) end

res = res .. exampleTitle local paramName = get_param_name(tname, 'имя') res = res .. template_res_and_pre(frame, pageName, tname, paramName, paramRank) res = res .. '
' return res end

local function templates_set() local set = {['военный деятель'] = true} for p, tl in pairs(parameters) do for t, _ in pairs(tl) do if t ~= 'default' then set[t] = true end end end return set end

function p.supported_templates(frame) local res = local set = templates_set() for tl, _ in pairs(set) do res = res .. '* ' .. expand(frame, 'tl', {tl}) .. '\n' end return res end

return p