Module:Command

local p = {} function p.cmd( f ) local args = f:getParent.args local syntax = mw.loadData( 'Module:Command/Syntax' ) local fullCommand local commandName = args[1]:match( '^%s*/?([^%s]+)' ):lower local command = {} for i, v in ipairs( args ) do		if not fullCommand and v == '...' then fullCommand = true elseif i > 1 or v ~= commandName then -- Don't encode sub-commands if not v:find( '&#32;' ) then v = mw.text.encode( v ) end table.insert( command, mw.text.trim( v ) ) end end if #command == 1 and ( not args[2] or args[2] == '...' ) and command[1]:find( '%s' ) then local startBrace, endBrace = command[1]:find( '{.+}' ) if startBrace then command[1] = command[1]:sub( 1, startBrace ) .. command[1]:sub( startBrace + 1, endBrace - 1 ):gsub( '%s', '&#32;' ) .. command[1]:sub( endBrace ) end command = mw.text.split( command[1]:match( '^[^%s]+%s(.+)' ), '%s+' ) end if ( fullCommand or command[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 command[param] then hasValue = true if command[param] ~= '' and command[param] ~= '?' then table.insert( section, command[param] ) end end if not section[i] 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] ) } end if args.link then if args.link:lower ~= 'none' then commandName =  .. commandName ..  end else commandName =  .. commandName ..  end table.insert( command, 1, commandName ) local slash = '/' if args['/'] == '0' or args.slash == '0' then slash = '' end if args.sub then return slash .. table.concat( command, ' ' ):gsub( '%s', '&#32;' ) else local attr if args.long == '1' then attr = 'style="display:block;padding:0.8em 1em;margin-bottom:0.4em;word-wrap:break-word"' else attr = 'class="nowrap"' end return ' ' end end return p