For faster navigation, this Iframe is preloading the Wikiwand page for Модуль:Example.

Модуль:Example

Материал из Википедии — свободной энциклопедии

Документация

Реализация шаблона ((пример)), см. его документацию.

См. также


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('&lt;nowiki>', ''):gsub('&lt;/nowiki>', '')
			 :gsub('&lt;nowiki&gt;', ''):gsub('&lt;/nowiki&gt;', '')
			 :gsub('&#123;&#123;&#61;&#125;&#125;', '=')
			 :gsub('&#123;{&#61;}&#125;', '=')
			 :gsub('{&#123;&#61;&#125;}', '=')
			 :gsub('((=))', '=')
			 :gsub('&amp;', '&')
	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 alias =  args._alias
	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
	-- передаётся шаблоном ((стопка примеров)), один разделитель на все примеры
	local comment_sep = args._comment_sep
	local comment = args._comment
	-- полезно в шаблоне ((стопка примеров)) (это просто текст в конце)
	local after = args._after or ''
	-- полезно в шаблоне ((стопка примеров)) (это просто текст в начале)
	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 = '<ul><li>' .. expand(frame, 'chrome bullet hack', {}) .. before
		after = after .. '</li></ul>'
	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 ' &nbsp;'
	
	if comment then
		if not style then
			comment = '<small>' .. comment .. '</small>'
		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._alias then
		table.insert(_args, 1, args._alias)
	elseif 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
{{bottomLinkPreText}} {{bottomLinkText}}
Модуль:Example
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?