Модуль:Команда

Версия от 08:14, 8 января 2018; Tentacle (обсуждение | вклад) (Новая страница: «local p = {} function p.cmd( f ) local args = f if f == mw.getCurrentFrame() then args = f:getParent().args end local syntax = mw.loadData( 'Модуль:К…»)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Версия от 08:14, 8 января 2018; Tentacle (обсуждение | вклад) (Новая страница: «local p = {} function p.cmd( f ) local args = f if f == mw.getCurrentFrame() then args = f:getParent().args end local syntax = mw.loadData( 'Модуль:К…»)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Документация
Lua logo.svg
Этот шаблон использует Модуль:Команда, написанный на языке программирования Lua.
Пожалуйста, просмотрите wikipedia:Wikipedia:Lua и mw:Extension:Scribunto (обе англ.) для понимания работы модуля.
↱{{cmd}}

Этот шаблон используется для автоматического форматирования команд. Можно копировать команды непосредственно в шаблон (с косой чертой или без неё) или указывать каждый параметр команды как отдельный параметр шаблона.

Любой неуказанный или пустой параметр команды будет заменён соответствующим значением по умолчанию, если эта команда известна, а указанный параметр является допустимым для этой команды. Указанные необязательные параметры будут выведены подобно обязательным вместе с любыми другими параметрами в дополнительной группе. Неуказанные необязательные параметры выведены не будут.

Параметры форматируются следующим образом:

  • Параметры, которые для использования команды вводить необязательно, указаны в круглых скобках.
  • Если параметр может принять одно из нескольких различающихся значений, то эти значения будут перечислены в квадратных скобках ([]) и разделены символами вертикальной черты, например, [значение1|значение2].
  • Названия параметров даны курсивом в угловых скобках, например, <игрок>.
  • Значения параметров даны обычным шрифтом и в квадратных скобках, например, [true].
  • Возможны различные комбинации вышеуказанных способов форматирования по мере необходимости, например, <действие:[start|stop]> или <действие:[add <игрок>|remove <игрок>|list|on|off|reload]>

Параметры шаблона

  • Чтобы шаблон вывел оставшуюся часть команды, включая необязательные параметры, добавьте к шаблону параметр |....
  • Чтобы удалить предшествующую команде косую черту, добавьте к шаблону параметр |/=0 или |черта=0.
  • Чтобы изменить страницу, на которую ссылается название команды, добавьте к шаблону параметр |ссылка=<ссылка>.
  • Чтобы название команды не было ссылкой, добавьте к шаблону параметр |ссылка=нет.
  • Чтобы вставить код HTML в команду, добавьте к шаблону параметр |escape=0, затем выделите тегами <nowiki> всё, что похоже на теги HTML, но не является ими.
  • Если команда длинная и может выйти за пределы экрана, добавьте к шаблону параметр |длин=1. Это отобразит команду на новой строке и разрешит переносы строк.

Примеры

{{Команда|kill}}
/kill
{{Команда|clear|?|diamond}}
/clear <игрок> diamond
{{Команда|give ? diamond 64}}
/give <игрок> diamond 64
{{Команда|give ? diamond 64|...}}
/give <игрок> diamond 64 <данные> <NBT теги>
{{Команда|say I'm saying stuff!}}
/say I'm saying stuff!
{{Команда|op|...}}
/op <игрок>
{{Команда|give|...}}
/give <игрок> <предмет> (<количество> <данные> <NBT теги>)
{{Команда|time|...}}
/time <действие:[set|add]> <значение>
{{Команда|whitelist|...}}
/whitelist <действие:[add <игрок>|remove <игрок>|list|on|off|reload]>
{{Команда|tp|...}}
/tp <игрок> [<игрок-цель>|<x> <y> <z>] (<y-поворот> <x-поворот>)
{{Команда|?|...}}
/? ([<страница>|<команда>])
{{Команда|give ? command_block 1 0 {BlockEntityTag:{Command:"{{Команда|setblock ~ ~ ~ diamond_block}}"<nowiki>}}</nowiki>}}
/give <игрок> command_block 1 0 {BlockEntityTag:{Command:"<code class="nowrap">/setblock ~ ~ ~ diamond_block"}}</code>
{{Команда|длин=1|setblock ~1 ~-1 ~0 mob_spawner 0 replace {EntityId:Chicken, MaxNearbyEntities:10, SpawnCount:6, SpawnRange:2, RequiredPlayerRange:16, MinSpawnDelay:50, MaxSpawnDelay:200, SpawnData:{Riding:{id:"Pig"<nowiki>}}}</nowiki>}}
/setblock ~1 ~-1 ~0 mob_spawner 0 replace {EntityId:Chicken, MaxNearbyEntities:10, SpawnCount:6, SpawnRange:2, RequiredPlayerRange:16, MinSpawnDelay:50, MaxSpawnDelay:200, SpawnData:{Riding:{id:"Pig"}}}

Проблемы

  • Команды, содержащие знаки равенства и символы вертикальной черты, без обхода этих символов отображаются некорректно. Если команда содержит символы вертикальной черты, замените каждый из них на {{!}}. Если команда содержит знаки равенства, при использовании одного параметра шаблона добавьте в начало команды 1=, а при использовании нескольких параметров замените каждый знак равенства на {{=}}.
  • При использовании команд, содержащих фигурные скобки, необходимо, чтобы параметр-команда не оканчивался на фигурную скобку и чтобы две фигурных скобки подряд нигде не стояли. В таком случае, как {{Команда|data {some:"data"}}}, в конец команды следует поставить пробел: {{Команда|data {some:"data"} }}. В таком случае, как {{Команда|data {some:{more:"data"}}}}, проблемный участок следует заключить в теги <nowiki>: {{Команда|data {some:{more:"data"<nowiki>}}</nowiki>}} или {{Команда|data <nowiki>{some:{more:"data"}}</nowiki>}}.
  • Пробелы внутри тегов данных и подкоманд игнорируются, чтобы они считались одним параметром. Это не сработает, если команда содержит несколько отдельных тегов данных или несколько отдельных подкоманд. В таком случае каждому параметру команды должен соответствовать отдельный параметр шаблона.

Расположенная выше документация включена из Модуль:Команда/док.

local p = {}
function p.cmd( f )
	local args = f
	if f == mw.getCurrentFrame() then
		args = f:getParent().args
	end
	local syntax = mw.loadData( 'Модуль:Команда/Синтаксис' )
	local fullCommand
	local commandName = args[1]:match( '^%s*/?([^%s]+)' ):lower()
	local params = {}
	local command = {}
	
	for i, v in ipairs( args ) do
		if not fullCommand and v == '...' then
			fullCommand = true
		elseif i > 1 or v:match( '^%s*/?(.+)' ):lower() ~= commandName then
			-- Don't encode if told not to or if there is a sub-command
			if args.encode ~= '0' and not v:find( '<!%-%- Команда %-%->' ) then
				v = v:gsub( '<', '&lt;' )
			end
			
			table.insert( params, mw.text.trim( v ) )
		end
	end
	if #params == 1 and ( not args[2] or args[2] == '...' ) and params[1]:find( '%s' ) then
		local startPos, endPos = params[1]:find( '{.+}' )
		if not startPos then
			startPos, endPos = params[1]:find( '<!%-%- Команда %-%->.+<!%-%- /Команда %-%->' )
		end
		
		if startPos then
			params[1] = params[1]:sub( 1, startPos ) ..
				params[1]:sub( startPos + 1, endPos - 1 ):gsub( '%s', '&#32;' ) ..
				params[1]:sub( endPos )
		end
		
		params = mw.text.split( params[1]:match( '^[^%s]+%s(.+)' ), '%s+' )
	end
	
	if ( fullCommand or params[1] ) and syntax[commandName] then
		local param = 0
		function parseParams( defaultParams, sub )
			local section = {}
			local hasValue
			for i, v in ipairs( defaultParams ) do
				if type( v ) == 'table' then
					local subSection, subHasValue = parseParams( v, true )
					if subHasValue then
						hasValue = true
					end
					table.insert( section, subSection )
				else
					param = param + 1
					if params[param] then
						hasValue = true
						if params[param] ~= '' and params[param] ~= '?' then
							table.insert( section, params[param] )
						end
					end
					if not section[i] and ( fullCommand or params[param] == '?' ) then
						table.insert( section, v )
					end
				end
			end
			section = table.concat( section, ' ' )
			
			if sub then
				if not hasValue then
					if fullCommand then
						section = '(' .. section .. ')'
					else
						section = nil
					end
				end
				
				return section, hasValue
			else
				return section
			end
		end
		
		command = { parseParams( syntax[syntax[commandName]] or syntax[commandName] ) }
		
		-- Add any extra parameters not defined in the syntax
		if #params > param then
			for i, v in ipairs( params ) do
				if i > param then
					table.insert( command, v )
				end
			end
		end
	else
		command = params
	end
	
	if args['ссылка'] then
		if args['ссылка']:lower() ~= 'нет' then
			commandName = '[[' .. args['ссылка'] .. '|' .. commandName .. ']]'
		end
	else
		commandName = '[[Команды консоли#' .. commandName .. '|' .. commandName .. ']]'
	end
	table.insert( command, 1, commandName )
	
	local slash = '/'
	if args['/'] == '0' or args['черта'] == '0' then
		slash = ''
	end
	
	local attr
	if args['длин'] == '1' then
		attr = 'style="display: block; padding: 0.8em 1em; margin-bottom: 0.4em; word-wrap: break-word"'
	else
		attr = 'class="nowrap"'
	end
	
	return '<!-- Команда --><code ' .. attr .. '>' .. slash .. table.concat( command, ' ' ):gsub( '&#32;', ' ' ) .. '</code><!-- /Команда -->'
end
return p