<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.dzmuh.com/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AYearMetaCat</id>
	<title>Модуль:YearMetaCat - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dzmuh.com/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AYearMetaCat"/>
	<link rel="alternate" type="text/html" href="https://wiki.dzmuh.com/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:YearMetaCat&amp;action=history"/>
	<updated>2026-05-05T13:17:16Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://wiki.dzmuh.com/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:YearMetaCat&amp;diff=5901&amp;oldid=prev</id>
		<title>Dzmuh: Новая страница: «local p = {}  local cc = nil --required when needed local roman = nil --required when needed local yesno = nil --required when needed  local YEAR_PLACEHOLDER = '&lt;...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.dzmuh.com/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:YearMetaCat&amp;diff=5901&amp;oldid=prev"/>
		<updated>2022-01-10T04:27:27Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «local p = {}  local cc = nil --required when needed local roman = nil --required when needed local yesno = nil --required when needed  local YEAR_PLACEHOLDER = &amp;#039;&amp;lt;...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local cc = nil --required when needed&lt;br /&gt;
local roman = nil --required when needed&lt;br /&gt;
local yesno = nil --required when needed&lt;br /&gt;
&lt;br /&gt;
local YEAR_PLACEHOLDER = '&amp;lt;год&amp;gt;'&lt;br /&gt;
local COUNTRY_NOM_PLACEHOLDER = '&amp;lt;страна&amp;gt;'&lt;br /&gt;
local CENTURY_NOM_PLACEHOLDER = '&amp;lt;век&amp;gt;'&lt;br /&gt;
local COUNTRY_GEN_PLACEHOLDER = '&amp;lt;страны&amp;gt;'&lt;br /&gt;
local CENTURY_GEN_PLACEHOLDER = '&amp;lt;века&amp;gt;'&lt;br /&gt;
local COUNTRY_LOC_PLACEHOLDER = '&amp;lt;в стране&amp;gt;'&lt;br /&gt;
local LAST_DIGIT_PLACEHOLDER = '&amp;lt;последняя_цифра&amp;gt;'&lt;br /&gt;
local DECADE_PLACEHOLDER = '&amp;lt;десятилетие&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
-- простой аналог [[Модуль:Math/tonumber#year]] без дат до нашей эры и обработки других чисел&lt;br /&gt;
local function year_from_title()&lt;br /&gt;
	local title = mw.title.getCurrentTitle().text&lt;br /&gt;
	for t in mw.ustring.gmatch(title, '[0-9]+') do&lt;br /&gt;
		return t&lt;br /&gt;
	end&lt;br /&gt;
	return ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function error_string(s)&lt;br /&gt;
	return '&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;' .. s .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_year(args)&lt;br /&gt;
	return tonumber(args['year']) or tonumber(args['год']) or tonumber(year_from_title())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function subst_country(frame, cat_pattern, country)&lt;br /&gt;
	if cat_pattern:find(COUNTRY_NOM_PLACEHOLDER) then&lt;br /&gt;
		cat_pattern = mw.ustring.gsub(cat_pattern, COUNTRY_NOM_PLACEHOLDER, country)&lt;br /&gt;
	end&lt;br /&gt;
	if cat_pattern:find(COUNTRY_GEN_PLACEHOLDER) then&lt;br /&gt;
		if cc == nil then cc = require('Module:CountryCases') end&lt;br /&gt;
		cat_pattern = mw.ustring.gsub(cat_pattern, COUNTRY_GEN_PLACEHOLDER, cc._genitive(frame, country))&lt;br /&gt;
	end&lt;br /&gt;
	if cat_pattern:find(COUNTRY_LOC_PLACEHOLDER) then&lt;br /&gt;
		if cc == nil then cc = require('Module:CountryCases') end&lt;br /&gt;
		cat_pattern = mw.ustring.gsub(cat_pattern, COUNTRY_LOC_PLACEHOLDER, cc._locative(frame, country))&lt;br /&gt;
	end&lt;br /&gt;
	return cat_pattern&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.theme(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	local year = get_year(args)&lt;br /&gt;
	if year == nil then&lt;br /&gt;
		return error_string('Ошибка: не указан год')&lt;br /&gt;
	end&lt;br /&gt;
	local wt = mw.html.create('table'):addClass('standard'):attr('align', 'center')&lt;br /&gt;
	local row = wt:tag('tr')&lt;br /&gt;
	local range = tonumber(args['range']) or tonumber(args['диапазон']) or 5&lt;br /&gt;
	local country = args['страна'] or args['country']&lt;br /&gt;
	local cat_pattern = args[1]&lt;br /&gt;
	cat_pattern = subst_country(frame, cat_pattern, country)&lt;br /&gt;
&lt;br /&gt;
	local year_cat = function(y)&lt;br /&gt;
		return '[[:К:' .. mw.ustring.gsub(cat_pattern, YEAR_PLACEHOLDER, tostring(y)) .. '|' .. tostring(y) .. ']]'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local start_year&lt;br /&gt;
	local min_year = tonumber(args['min']) or tonumber(args['мин'])&lt;br /&gt;
	if min_year then&lt;br /&gt;
		start_year = math.max(min_year, year - range)&lt;br /&gt;
		if year &amp;lt; start_year then&lt;br /&gt;
			return error_string('Год не попадает в диапазон: меньше минимального значения ' .. tostring(min_year))&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		start_year = year - range&lt;br /&gt;
	end&lt;br /&gt;
	for y = start_year, year -1 do&lt;br /&gt;
		row:tag('td'):wikitext(year_cat(y))&lt;br /&gt;
	end&lt;br /&gt;
	row:tag('th'):wikitext(tostring(year))&lt;br /&gt;
	local end_year&lt;br /&gt;
	local max_year = tonumber(args['max']) or tonumber(args['макс'])&lt;br /&gt;
	if max_year then&lt;br /&gt;
		end_year = math.min(max_year, year + range)&lt;br /&gt;
		if year &amp;gt; end_year then&lt;br /&gt;
			return error_string('Год не попадает в диапазон: больше максимального значения ' .. tostring(max_year))&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		end_year = year + range&lt;br /&gt;
	end&lt;br /&gt;
	for y = year +1, end_year do&lt;br /&gt;
		row:tag('td'):wikitext(year_cat(y))&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(wt)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function deexclamatecat(pat)&lt;br /&gt;
	local split = mw.text.split(pat, '!', true)&lt;br /&gt;
	if split == nil or #split == 0 then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	return '[[К:' .. split[1] .. (split[2] and ('|' .. split[2]) or '') .. ']]'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function century_num(year, is_decade)&lt;br /&gt;
	if is_decade and year % 100 == 0 then&lt;br /&gt;
		return math.floor((year) / 100) + 1&lt;br /&gt;
	end&lt;br /&gt;
	return math.floor((year-1) /100 +1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_roman_century(frame, year, is_decade)&lt;br /&gt;
	if roman == nil then&lt;br /&gt;
		roman = require('Module:Roman').convert&lt;br /&gt;
	end&lt;br /&gt;
	return year and roman(century_num(year, is_decade)) or error_string('Укажите год')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.cats(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	local tt = require('Module:TableTools')&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	local year = get_year(args)&lt;br /&gt;
	yesno = yesno or require('Module:Yesno')&lt;br /&gt;
	local is_decade = yesno(args['is_decade']) or yesno(args['десятилетие'])&lt;br /&gt;
	local country = args['страна'] or args['country']&lt;br /&gt;
	local ret = ''&lt;br /&gt;
	for _, pat in tt.sparseIpairs(args) do&lt;br /&gt;
		ret = ret .. deexclamatecat(pat) .. '\n'&lt;br /&gt;
	end&lt;br /&gt;
	ret = subst_country(frame, ret, country)&lt;br /&gt;
	if ret:find(YEAR_PLACEHOLDER) then&lt;br /&gt;
		ret = mw.ustring.gsub(ret, YEAR_PLACEHOLDER, tostring(year))&lt;br /&gt;
	end&lt;br /&gt;
	local roman_century = nil&lt;br /&gt;
	if ret:find(CENTURY_NOM_PLACEHOLDER) then&lt;br /&gt;
		roman_century = roman_century or get_roman_century(frame, year, is_decade)&lt;br /&gt;
		ret = mw.ustring.gsub(ret, CENTURY_NOM_PLACEHOLDER, roman_century .. ' век')&lt;br /&gt;
	end&lt;br /&gt;
	if ret:find(CENTURY_GEN_PLACEHOLDER) then&lt;br /&gt;
		roman_century = roman_century or get_roman_century(frame, year, is_decade)&lt;br /&gt;
		ret = mw.ustring.gsub(ret, CENTURY_GEN_PLACEHOLDER, roman_century .. ' века')&lt;br /&gt;
	end&lt;br /&gt;
	if ret:find(LAST_DIGIT_PLACEHOLDER) then&lt;br /&gt;
		ret = mw.ustring.gsub(ret, LAST_DIGIT_PLACEHOLDER, tostring(year % 10))&lt;br /&gt;
	end&lt;br /&gt;
	if ret:find(DECADE_PLACEHOLDER) then&lt;br /&gt;
		ret = mw.ustring.gsub(ret, DECADE_PLACEHOLDER, tostring(year - (year % 10)) .. '-е')&lt;br /&gt;
	end&lt;br /&gt;
	if args['demo'] then --для документации&lt;br /&gt;
		return frame:extensionTag('pre', ret)&lt;br /&gt;
	else&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.decade_theme(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
	end&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	local year = get_year(args)&lt;br /&gt;
	if year == nil then&lt;br /&gt;
		return error_string('Ошибка: не указан год')&lt;br /&gt;
	end&lt;br /&gt;
	if year % 10 ~= 0 then&lt;br /&gt;
		return error_string('Ошибка: должно использоваться только на страницах десятилетий')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local wt = mw.html.create('table'):addClass('standard'):attr('align', 'center')&lt;br /&gt;
	local row = wt:tag('tr')&lt;br /&gt;
	local range = tonumber(args['range']) or tonumber(args['диапазон']) or 5&lt;br /&gt;
	local country = args['страна'] or args['country']&lt;br /&gt;
	local cat_pattern = args[1]&lt;br /&gt;
	cat_pattern = subst_country(frame, cat_pattern, country)&lt;br /&gt;
	&lt;br /&gt;
	local year_cat = function(y)&lt;br /&gt;
		return '[[:К:' .. mw.ustring.gsub(cat_pattern, DECADE_PLACEHOLDER, tostring(y) .. '-е годы') .. '|' .. tostring(y) .. '-е]]'&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local start_year&lt;br /&gt;
	local min_year = tonumber(args['min']) or tonumber(args['мин'])&lt;br /&gt;
	if min_year then&lt;br /&gt;
		if min_year % 10 ~= 0 then&lt;br /&gt;
			return error_string('Ошибка: заданный минимальный год не является границей десятилетия')&lt;br /&gt;
		end&lt;br /&gt;
		start_year = math.max(min_year, year - range * 10)&lt;br /&gt;
		if year &amp;lt; start_year then&lt;br /&gt;
			return error_string('Год не попадает в диапазон: меньше минимального значения ' .. tostring(min_year))&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		start_year = year - range * 10&lt;br /&gt;
	end&lt;br /&gt;
	for y = start_year, year - 10, 10 do&lt;br /&gt;
		row:tag('td'):wikitext(year_cat(y))&lt;br /&gt;
	end&lt;br /&gt;
	row:tag('th'):wikitext(tostring(year) .. '-е')&lt;br /&gt;
	local end_year&lt;br /&gt;
	local max_year = tonumber(args['max']) or tonumber(args['макс']) or 2020 -- в будущее сильно уходить не надо, на 10 лет хватит&lt;br /&gt;
	if max_year then&lt;br /&gt;
		if max_year % 10 ~= 0 then&lt;br /&gt;
			return error_string('Ошибка: заданный максимальный год не является границей десятилетия')&lt;br /&gt;
		end&lt;br /&gt;
		end_year = math.min(max_year, year + range * 10)&lt;br /&gt;
		if year &amp;gt; end_year then&lt;br /&gt;
			return error_string('Год не попадает в диапазон: больше максимального значения ' .. tostring(max_year))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for y = year + 10, end_year, 10 do&lt;br /&gt;
		row:tag('td'):wikitext(year_cat(y))&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(wt)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Dzmuh</name></author>
	</entry>
</feed>