Модуль:Sandbox
Документация
Этот модуль предназначен для отладки скриптов и не должен использоваться для других целей.
local s = {}
local r = {t = {}}
function r:add(s) table.insert(self.t, s) end
function r:add_category(s) table.insert(self.t, '[[Категория:'..s..']]') end
function r:result() return table.concat(self.t) end
function year70pma(year_death, year_reability, war_status)
local year_from = tonumber(year_reability) or tonumber(year_death); if not year_from then return end
local years_war = 0; if war_status then war_status = mw.ustring.lower( war_status ); if war_status=='участник' or war_status=='работник' then years_war = 4 end end
local year_free70 = year_from + years_war + 70 + 1 -- +1 год, от 1 января следующего года
-- mw.logObject(year_from, "yf")
return year_free70
end
-- Для добавления после названия произведения значка-предупреждения об АП с годом его перехода в ОД. Для списков произведений авторов, у которых некоторые из произведений ещё охраняются АП.
function s.PDinline(frame)
local pargs = frame:getParent().args
local year_death = tonumber(pargs['ГОД'])
local year_reability = tonumber(pargs['ГОДРЕАБИЛИТАЦИИ'])
local year_published = tonumber(pargs['ГОДПУБЛИКАЦИИ'])
if not year_published and not year_death then return end
local year_free70pma = year70pma(pargs['ГОД'], pargs['ГОДРЕАБИЛИТАЦИИ'], pargs['ВОВ'])
if year_published > year_death then
year_free70 = year70pma(pargs['ГОД'], year_published, nil)
r:add('[[File:Red copyright.svg]] до '..year_published..' года') end
return r:result()
end
----------------------------------------------------------------------------------------------------------
function s.list (frame)
local day, year, n1, n2 = is(frame.args['day']), tonumber(is(frame.args['year'])), tonumber(is(frame.args[1])), tonumber(is(frame.args[2]))
local result = ''
local dpl, i
for i = 1, 1000 do
if (i % n1 == 0) or (n2 and (i % n2 == 0)) then
dpl = frame:extensionTag{ name = 'dynamicpagelist',
content =
'category = Умершие ' .. day .. '\n' ..
'category = Умершие в ' .. year - i .. ' году\n' ..
'mode = inline\n' ..
'suppresserrors = true\n'
}
if (dpl) then
result = result .. ': ' .. i .. ' лет со дня смерти: ' .. dpl .. '.' .. type(dpl) .. ', ' .. #dpl .. '.\n\n'
end
dpl = frame:extensionTag{ name = 'dynamicpagelist',
content =
'category = Родившиеся ' .. day .. '\n' ..
'category = Родившиеся в ' .. year - i .. ' году\n' ..
'mode = inline\n' ..
'suppresserrors = true\n'
}
if (dpl) then
result = result .. ': ' .. i .. ' лет со дня рождения: ' .. dpl .. '.' .. type(dpl) .. ', ' .. #dpl .. '.\n\n'
end
end
end
return result
end
-------------------------------------------
function data(project, var, volume)
local d = mw.loadData('Модуль:Sandbox/Data')
-- local d = mw.loadData('Модуль:ТСД/Данные по странице')
if volume then
return d[project][var][tonumber(volume)]
else
return d[project][var]
end
end
function s.data(frame) return data(frame.args[1], frame.args[2], frame.args[3]) end
-- проверка переменной, возврат её или nil если пустая
function is(var)
if (var == '' or var == nil) then return nil else return var end
end
-- тест-функция, возвращает результат парсинга функции makelist
function s.makelist (frame)
local moduleHeader = require('Module:Header')
y = ''
t = makelist (frame[1], frame[2], frame[3], frame[4]) -- , 'ТСД-словник/А/3-е изд.', true, true, 'Алык')
for k, v in pairs( t ) do
y = y .. '<br>' .. table.concat(v, ', ')
end
return y
end
-------------------------------------------
-- {{#invoke:Sandbox|test_parseIndex|наименование индекса (без указания пространства имен "Индекс")}}
function s.test_parseIndex (frame)
local s_title = tostring(frame.args[1])
local article = mw.title.new(s_title, 'Индекс')
local s_content = article:getContent()
if (s_content == nil) then return '! Внимание ! Где-то ошибка !'
else
local s_result = mw.ustring.match(s_content, "{{:MediaWiki:Proofreadpage_index_template.-|%s-Издатель%s-=(.-)|")
return s_result
end
end
----------------------------------------------------------------------------------------------------------
-- {{#invoke:Sandbox|test_next_key}}
--[[
The length is 0
Тома ЭЛ (next):
Тома ЭЛ (pairs):1, 2, 4, 8, 16, 17, 9, 5, 10, 11, 3, 6, 12, first, 13, 7, 14, last, wd, 15,
Тома ЭЛ (ipairs):1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
Тома ЭЛ (first & next):1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Тома ЭЛ (last & prev):17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
]]
function s.test_next_key (frame)
-- return mw.dumpObject(mw.hash.listAlgorithms());
local t = mw.loadData("Module:ЭЛ/volumes");
-- local t = require("Module:ЭЛ/volumes");
if t == nil then
return "t is nil";
end;
--
local n_count = #t;
local s_result = "The length is " .. tostring(n_count);
--
s_result = s_result .. "<br/>Тома ЭЛ (next):";
local key = next(t);
while key ~= nil do
s_result = s_result .. tostring(key);
key = next(t, key);
if key ~= nil then
s_result = s_result .. ", ";
end;
end;
--
s_result = s_result .. "<br/>Тома ЭЛ (pairs):";
for key, vol in pairs(t) do
s_result = s_result .. tostring(key) .. ", ";
end;
--
s_result = s_result .. "<br/>Тома ЭЛ (ipairs):";
for key, vol in ipairs(t) do
s_result = s_result .. tostring(key) .. ", ";
end;
--
s_result = s_result .. "<br/>Тома ЭЛ (first & next):";
local vol = t.first;
while true do
s_result = s_result .. tostring(vol.num);
vol = vol.next;
if vol == nil then
break;
end;
s_result = s_result .. ", ";
end;
--
s_result = s_result .. "<br/>Тома ЭЛ (last & prev):";
vol = t.last;
while true do
s_result = s_result .. tostring(vol.num);
vol = vol.prev;
if vol == nil then
break;
end;
s_result = s_result .. ", ";
end;
--
return s_result;
end;
--
-- {{#invoke:Sandbox|convert_word_list}}
--[[
* {{Статья в словнике|А, буква|А, буква|1|17}}
]]
function s.convert_word_list()
local title = mw.title.new("Энциклопедический лексикон/ДО/Словник/01", 0);
local s_content = title:getContent();
local s_result = "return require(\"Модуль:ЭЛ\").index_article_list({";
local b_first = true;
for s_title, s_title_old, s_pages, s_pages_2 in mw.ustring.gmatch(s_content, "{{Статья в словнике|([^|]+)|([^|]+)|([^|]+)|([^|]+)}}") do
if b_first then
s_result = s_result .. "<br/>";
b_first = false;
else
s_result = s_result .. ",<br/>";
end;
local s_page_from = s_pages;
local s_page_to = s_pages;
for s_from, s_to in mw.ustring.gmatch(s_pages, "(%d+)—(%d+)") do
s_page_from = s_from;
s_page_to = s_to;
break;
end;
s_result = s_result .. " { title = \"" .. s_title .. "\", title_old = \"".. s_title_old .. "\", page_from = \"" .. s_page_from .. "\", page_to = \"" .. s_page_to .. "\" }";
end;
return s_result .. "<br/>});";
end;
----------------------------------------------------------------------------------------------------------
-- пример работы функции внутри модуля
function s.functiontest()
local moduleTableWordlist = mw.loadData('Модуль:Header/termindata')
return moduleTableWordlist['pagename']
end
----------------------------------------------------------------------------------------------------------
--
function s.splittest(frame)
local test, delimiter, part = frame.args[1], frame.args[2] or "", tonumber(frame.args[3]) or 1
if test then
test = mw.text.split (test, delimiter, true)
end
return test[part]
end
function escapePattern( pattern_str )
return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" );
end
function is(var)
if (var == '' or var == nil) then return nil else return var end
end
----------------------------------------------------------------------------------------------------------
return s;