Модуль:Tools

Материал из Указатель частей и соединений РККА 1941-1945
Перейти к:навигация, поиск

Для документации этого модуля может быть создана страница Модуль:Tools/doc

local tools = {}
local global = mw.ext.luaglobal

---------------------------------------------------------------------- |checkargs|
function tools.checkargs( args, names, numbers )
    local res = {}
    local hasArg
    for k, v in pairs( args ) do
        hasArg = true
        v = mw.text.trim(v)
		local dsc
		if numbers and type( k ) == 'number' then
			dsc = numbers
		else
			dsc = names[k]
		end
        if dsc == nil then
--            return nil, k
			error( 'Недопустимый аргумент «' .. k .. '»' )
        elseif v == '' then
            if dsc ~= true then
                res[k] = dsc
            end
        else
            res[k] = v
        end
    end
    for k, v in pairs( names ) do
        if not res[k] then
            if v ~= true then
                res[k] = v
            end
        end
    end
    return res, hasArg
end

function tools.hide( str, hidden, pattern )
	pattern = pattern or '%b{}'
	return string.gsub( str, pattern, function( a )
			table.insert( hidden, a )
			return '¤' .. string.char( #hidden + 32 )
		end )
end

function tools.unhide( str, hidden )
	return string.gsub( str, '¤(.)', function ( a )
			return hidden[string.byte( a ) - 32]
		end )
end

function tools.unhideWhole( str, hidden )
	local p = string.match( str, '^¤(.)$' )
	if p then
		return mw.text.trim( string.sub( hidden[string.byte( p ) - 32], 2, -2 ) )
	else
		return str
	end
end

function tools.split( str, brackets, sep )
	sep = sep or '%s*,%s*'
	local patterns
	if not brackets then
		patterns = { '%b{}' }
	elseif type( brackets ) ~= 'table' then
		patterns = { brackets }
	else
		patterns = brackets
	end
	local hidden = {}
	for _, pattern in ipairs( patterns ) do
		str = tools.hide( str, hidden, pattern )
	end
	local res = mw.text.split( str, sep )
	for i, el in ipairs( res ) do
		res[i] = tools.unhide( el, hidden )
	end
	return res
end



function tools.Log( frame )
	local args = tools.checkargs( frame:getParent().args, {}, true )
	return tools.log( args )
end

function tools.dmy( str )
	if #str == 10 then
		return string.sub( str, 9, 10 ) .. '.' .. string.sub( str, 6, 7 ) .. '.' .. string.sub( str, 1, 4 )
	elseif #str == 7 then
		return string.sub( str, 6, 7 ) .. '.' .. string.sub( str, 1, 4 )
	else
		return str
	end
end

function tools.ymd( str )
	return string.sub( str, 7, 10 ) .. '-' .. string.sub( str, 4, 5 ) .. '-' .. string.sub( str, 1, 2 )
end

function tools.log( args )
	for _, v in ipairs( args ) do
		global.add( 'szrLog', v )
	end
end

function tools.PrintLog( frame )
	local log = global.get( 'szrLog' )
	global.set( 'szrLog', nil )
	return '<br>LOG (((((( <br>' .. table.concat( log, '<br>' ) .. '<br>LOG )))))) <br>'
end

return tools