Модуль:Example
Гьаб модулалъе къимат кьун буго хӀалтӀизабиялъе хӀадураб гӀадин. РикӀкӀун буго киналниги багал лӀугӀизарун ругилан ва гьеб гӀатӀидго хӀалтӀизабизе бегьулилан. Гьеб бихьизабизе бегьула баянгьумеразда ва хӀалтӀизабизе рекомендация кьезе бегьула цӀиял гӀахьалчагӀазе. Гьеб хисизабиялъе ва тестинабиялъе хӀалтӀизабе салулгъамас. |
Реализация шаблона {{пример}}, см. его документацию.
- См. также
local p = {}
-- используется для того, чтобы можно было удалять элементы из таблицы
local function copy(other)
local res = {}
for k,v in pairs(other) do
res[k] = v
end
return res
end
-- вызов шаблона, при ошибке возвращает пустую строку
local function expand(frame, tname, targs)
local success, result = pcall(
frame.expandTemplate,
frame,
{title = tname, args = targs}
)
if success then
return result
else
return ''
end
--return frame:expandTemplate({title = tname, args = args})
end
--предотвращает обработку вики-текста в отображении образца
local function nowiki(str)
local res = str
str = mw.text.unstripNoWiki(str)
str = string.gsub(str, '%[', '[')
str = string.gsub(str, '%]', ']')
str = string.gsub(str, '<', '<')
str = string.gsub(str, '>', '>')
str = string.gsub(str, '{', '{')
str = string.gsub(str, '}', '}')
str = string.gsub(str, '\'', ''')
str = string.gsub(str, '"', '"')
str = string.gsub(str, '(https?://)', '<span>%1</span>')
return str
end
--удаляет из параметров вписанные через HTML-сущности "<nowiki>" и заменяет "{{=}}" на "=" для вызова шаблона
local function process_nowiki_equals(str)
str = str:gsub('<nowiki>', ''):gsub('</nowiki>', '')
:gsub('<nowiki>', ''):gsub('</nowiki>', '')
:gsub('{{=}}', '=')
:gsub('{{=}}', '=')
:gsub('{{=}}', '=')
:gsub('{{=}}', '=')
:gsub('&', '&')
return str
end
function p.main(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
local yesno = require('Module:Yesno')
local args = copy(getArgs(frame, {trim = false, removeBlanks = false})) --copy(frame.args)
local tag = args._tag or 'code'
local container = args._container or nil
local sep = args._sep and args._sep .. ' ' or '→ ' -- по умолчанию "→"
local link = yesno(args._link, false)
local endl = args._endl or ''
local prefix = args._prefix or args['_pre-text'] or ''
local postfix = args._postfix or args['_post-text'] or ''
local nobr = yesno(args._nobr, false)
local spaced = yesno(args._spaced, false)
local nocat = yesno(args._nocat, false)
local style = args._style
if style == '' then
style = nil
end
-- передаётся шаблоном {{стопка примеров}}, один разделитель на все примеры
local comment_sep = args._comment_sep or ' '
-- полезно в шаблоне {{стопка примеров}} (это просто текст в конце)
local after = args._after or args._comment or ''
-- полезно в шаблоне {{стопка примеров}} (это просто текст в начале)
local before = args._before and args._before .. ' ' or ''
if style == 'pre' then
tag = nil
container = 'pre'
sep = '\n'
elseif style == '*pre' then
tag = nil
container = '*pre'
sep = '\n'
elseif style == 'pre↓' then
tag = nil
container = 'pre'
-- содержимое шаблона {{sp↓|50%||-0.5em}}
sep = '<div style="margin:-0.5em 50% 0.7em;"><span style="font-size:150%;">↓</span></div>\n'
elseif style == '*pre↓' then
tag = nil
container = '*pre'
-- содержимое шаблона {{sp↓|50%||-0.5em}}
sep = '<div style="margin:-0.5em 50% 0.7em;"><span style="font-size:150%;">↓</span></div>\n'
elseif style == 'wikitable' then
tag = 'tt'
sep = '\n|'
comment_sep = '\n|'
end
if (after ~= '') then
if not style then
after = '<small>' .. after .. '</small>'
end
after = comment_sep .. after
end
local nwt
if tag then
nwt = mw.html.create(tag):tag(tag) -- "no-wiki tag", внутри него шаблон не вызывается
if nobr then
nwt:css('white-space', 'nowrap')
end
end
local content = nowiki(prefix) .. '{{' -- для накопления содержимого тэга
local tname = args._template or args[1]
if tname == nil then -- если имя шаблона содержит знак "=" (работает, только если нет неименованных параметров)
local nextfunc, static, cur = pairs(args)
local k, v = nextfunc(static, cur)
if k ~= nil and type(k) ~= 'number' and not k:find('^_') then -- именованные параметры, исключая модификаторы внешнего вида
tname = k .. "=" .. v
args[k] = nil --больше этот параметр нам не пригодится
end
end
if tname == '' or tname == nil then --при опущенном первом параметре берём имя шаблона из названия страницы
tname = mw.language.new('ru'):lcfirst(mw.title.getCurrentTitle().rootText)
end
-- Имя вызываемого шаблона в неименованном первом параметре (или же взято из названия страницы или
-- из именованного параметра в отсутствие неименованных — в следующей строчке вреда нет в любом случае),
-- больше его обрабатывать не надо
if args._template == nil then
table.remove(args,1)
end
if link then
content = content .. '[[Халип:' .. tname .. '|' .. tname .. ']]'
else
content = content .. tname
end
content = content .. endl
local targs, equals_pos, param, value, left_shift = {}, 0, '', '', 0
for k, v in pairs(args) do
if type(k) == 'number' then -- неименованные параметры
equals_pos = v:find('=')
if equals_pos and v:find('{{=}}') == equals_pos-2 then
equals_pos = nil
end
if equals_pos then --содержащие "=" преобразуем в именованные
param = v:sub(1, equals_pos-1)
value = v:sub(equals_pos+1)
targs[param] = process_nowiki_equals(value)
content = content .. (spaced and ' ' or '') .. '|' .. nowiki(param) .. '=' .. nowiki(value) .. endl
left_shift = left_shift + 1 -- переменная нужна, чтобы квазинумерованные параметры, переданные через "{{=}}",
-- не сбивали порядок
else --истинно неименованные
targs[k - left_shift] = process_nowiki_equals(v)
content = content .. (spaced and ' ' or '') .. '|' .. nowiki(v) .. endl
end
elseif not k:find('^_') then -- именованные параметры, исключая модификаторы внешнего вида
targs[k] = process_nowiki_equals(v)
content = content .. (spaced and ' ' or '') .. '|' .. nowiki(k) .. '=' .. nowiki(v) .. endl
end
end
content = content .. '}}' .. nowiki(postfix)
if container then
local container_args = {}
container_args[1] = content
nwt = expand(frame, container, container_args)
else
nwt:wikitext(content):done()
end
if nocat then
targs['nocat'] = 1
end
expand_result = tostring(expand(frame, tname, targs))
if expand_result:sub(1, 2) == '{|' then
sep = sep .. '\n'
end
return before .. tostring(nwt) .. ' ' .. sep .. prefix .. expand_result .. postfix .. after
end
return p