Mine sisu juurde

Modul':Example

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

local p = {}

-- вызов шаблона, при ошибке возвращает пустую строку 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

--удаляет из параметров вписанные через 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) local getArgs = require('Module:Arguments').getArgs local yesno = require('Module:Yesno') local template_code = require('Module:Template call code')._main local copy = require('Module:TableTools').shallowClone

local args = copy(getArgs(frame, {trim = false, removeBlanks = false})) local tag = args._tag local sep = args._sep and args._sep .. ' ' local prefix = args._prefix or args['_pre-text'] or local postfix = args._postfix or args['_post-text'] or local nocat = yesno(args._nocat, false) local style = args._style if style == then style = nil end -- передаётся шаблоном Skriptitõrge: Moodulit "ExampleList" pole., один разделитель на все примеры local comment_sep = args._comment_sep local comment = args._comment -- полезно в шаблоне Skriptitõrge: Moodulit "ExampleList" pole. (это просто текст в конце) local after = args._after or -- полезно в шаблоне Skriptitõrge: Moodulit "ExampleList" pole. (это просто текст в начале) local before = args._before and args._before .. ' ' or

if style == 'pre' or style == '*pre' or style == 'pre↓' or style == '*pre↓' then tag = tag or 'pre' end

if style == 'pre' or style == '*pre' then sep = sep or '\n' elseif style == 'pre↓' or style == '*pre↓' then sep = sep or expand(frame, 'sp-down', {, '-0.5em'}) end

if style == '*pre' or style == '*pre↓' then

before = '

  • ' .. expand(frame, 'chrome bullet hack', {}) .. before after = after .. '

'

end

if style == 'wikitable' then tag = tag or 'kbd' sep = sep or '\n| ' comment_sep = '\n| ' end

tag = tag or 'code' sep = sep or '→ ' comment_sep = comment_sep or '  '

if comment then if not style then comment = '' .. comment .. '' end after = comment_sep .. comment .. after end

local _args = copy(args) _args._style = args._codestyle _args._comment = args._codecomment _args._tag = tag _args._prefix = prefix _args._postfix = postfix _args._nowiki = true if args._template then table.insert(_args, 1, args._template) end local nwt = template_code(_args, {withoutParams = false})

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 elseif not args._template then -- Имя вызываемого шаблона в неименованном первом параметре (или же взято из названия страницы или -- из именованного параметра в отсутствие неименованных — в следующей строчке вреда нет в любом случае), -- больше его обрабатывать не надо table.remove(args, 1) end if tname == or tname == nil then -- при опущенном первом параметре берём имя шаблона из названия страницы tname = mw.title.getCurrentTitle().rootText end

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) left_shift = left_shift + 1 -- переменная нужна, чтобы квазинумерованные параметры, переданные через "=", -- не сбивали порядок else -- истинно неименованные targs[k - left_shift] = process_nowiki_equals(v) end elseif not k:find('^_') then -- именованные параметры, исключая модификаторы внешнего вида targs[k] = process_nowiki_equals(v) end end

if nocat then targs['nocat'] = 1 end

local 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