Warning.png

Поддержка Wiki прекращена, она доступна в режиме архива. Информация в ней устарела и может быть неактуальной.

Изменения

Перейти к: навигация, поиск

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

3315 байтов добавлено, 08:14, 8 января 2018
Новая страница: «local p = {} function p.cmd( f ) local args = f if f == mw.getCurrentFrame() then args = f:getParent().args end local syntax = mw.loadData( 'Модуль:К…»
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

Навигация