ФЭНДОМ


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
 
function p.main(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	yesno = require('Module:Yesno')
	local trim = not (yesno(frame:getParent().args.trim or frame:getParent().args._trim, false) == false) -- по умолчанию true
	local args = copy(getArgs(frame, {trim = trim, removeBlanks = false})) --copy(frame.args)
	local tname = args.t or args._t or args.template or args._template
	local opener = args.opener or args._opener
	local sep = args.sep or args._sep
	local style = args.style or args._style
	local nobr = args.nobr or args._nobr
	local nocat = args.nocat or args._nocat
	local spaced = args.spaced or args._spaced
	local comment_sep = args.comment_sep or args._comment_sep
	local between = args.between or args._between
	local inthemiddle = yesno(args.inthemiddle or args._inthemiddle, false)
	local wide = yesno(args.wide or args._wide, false)
	if not opener then
		if style == 'wikitable' then
			opener = '|-\n| '
		elseif style == 'pre' or style == '*pre' or style == 'pre↓' or style == '*pre↓' then
			opener = ''
			if between == nil and (style == '*pre' or style == '*pre↓') then
				between = '<div style="margin-top:3em"></div>' -- содержимое шаблона {{^|3em}}
			end
		else
			opener = '* '
		end
	end
	if between == nil and (style == 'pre' or style == '*pre' or style == 'pre↓' or style == '*pre↓') then
		between = '<div style="margin-top:2em"></div>' -- содержимое шаблона {{^|2em}}
	end
 
	if tname == '' or tname == nil then -- при отсутствующем имени шаблона берём его из названия страницы
		tname = mw.language.new('ru'):lcfirst(mw.title.getCurrentTitle().rootText)
	end
 
	local content, are_comments, i = '', false, 0
	for k, v in pairs(args) do
		local pre_targs, targs = {}, {}
		if type(k) == 'number' then
			i = i + 1
 
			if v ~= '' then
				pre_targs = mw.text.split(v, '\\')
				for k2, v2 in pairs(pre_targs) do
					equals_pos = nil
					if v2:sub(1, 1) == '_' and v2:find('=') then -- параметры настроек шаблона "пример"
						equals_pos = v2:find('=')
					end
					if equals_pos then
						param = v2:sub(1, equals_pos-1)
						value = v2:sub(equals_pos+1)
						targs[param] = value
						if param == '_comment' then are_comments = true end
					else
						if v2:sub(1, 5) == '&#95;' then
							targs[k2] = v2:gsub('&#95;', '_')
						else
							targs[k2] = v2
						end
					end
				end
			end
 
			table.insert(targs, 1, tname)
			targs._sep, targs._style, targs._nobr, targs._nocat, targs._spaced, targs._comment_sep
				= sep, style, nobr, nocat, spaced, comment_sep
			local adjusted_opener
			if style == 'pre' and opener == '*' and targs._before == nil then
				adjusted_opener = ''
				targs._style = '*pre'
			else
				adjusted_opener = opener
			end
			--[[if not targs._style then
				targs._style = style
			end]]
 
			content = content .. (i ~= 1 and (between and between .. '\n' or '\n') or '') .. adjusted_opener .. tostring(expand(frame, 'пример', targs))
		end
	end
	if style == 'wikitable' then
		local table_content = ''
		if not inthemiddle then
			table_content = '{| class="wikitable '
			if wide then table_content = table_content .. 'wide' end
			table_content = table_content .. '"\n! Код !! Результат'
			if are_comments then table_content = table_content .. ' !! Комментарий' end
		end
		content = table_content .. '\n' .. content
		if not inthemiddle then
			content = content .. '\n|}'
		end
	end
 
	return content
end
 
return p

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на ФЭНДОМЕ

Случайная вики