Модуль: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 .. "&nbsp;&nbsp;{ 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;