Модуль: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