<?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%3AYearMetaCat2</id>
	<title>Модуль:YearMetaCat2 - История изменений</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%3AYearMetaCat2"/>
	<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:YearMetaCat2&amp;action=history"/>
	<updated>2026-05-06T01:10:52Z</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:YearMetaCat2&amp;diff=13766&amp;oldid=prev</id>
		<title>Dzmuh: Новая страница: «---*- mode: lua; coding: utf-8; -*-  local p = {}  -- переменные local year -- год, положительное число local BC   -- 0 == н.э. 1 == до н.э. local templ -- строка-шаблон вида 'Мир в %s году%s' local title = mw.title.getCurrentTitle().text  -- опции local year_min = -40000 -- 0 == только н.э. local year_max = 2100 -- XXI local range = 5  -- экспортируемые функции lo...»</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:YearMetaCat2&amp;diff=13766&amp;oldid=prev"/>
		<updated>2024-04-17T17:43:50Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «---*- mode: lua; coding: utf-8; -*-  local p = {}  -- переменные local year -- год, положительное число local BC   -- 0 == н.э. 1 == до н.э. local templ -- строка-шаблон вида &amp;#039;Мир в %s году%s&amp;#039; local title = mw.title.getCurrentTitle().text  -- опции local year_min = -40000 -- 0 == только н.э. local year_max = 2100 -- XXI local range = 5  -- экспортируемые функции lo...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;---*- mode: lua; coding: utf-8; -*-&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- переменные&lt;br /&gt;
local year -- год, положительное число&lt;br /&gt;
local BC   -- 0 == н.э. 1 == до н.э.&lt;br /&gt;
local templ -- строка-шаблон вида 'Мир в %s году%s'&lt;br /&gt;
local title = mw.title.getCurrentTitle().text&lt;br /&gt;
&lt;br /&gt;
-- опции&lt;br /&gt;
local year_min = -40000 -- 0 == только н.э.&lt;br /&gt;
local year_max = 2100 -- XXI&lt;br /&gt;
local range = 5&lt;br /&gt;
&lt;br /&gt;
-- экспортируемые функции&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
local sparseIpairs = require('Module:TableTools').sparseIpairs&lt;br /&gt;
--local toroman = require('Module:Math').Roman&lt;br /&gt;
local toroman = require('Module:Roman').convert&lt;br /&gt;
local gsub = mw.ustring.gsub&lt;br /&gt;
&lt;br /&gt;
local function get_templ(s)&lt;br /&gt;
    -- формируем строку-шаблон вида:&lt;br /&gt;
    -- 'Мир в 99 году до н. э.' -&amp;gt; 'Мир в %s году%s'&lt;br /&gt;
    -- определяем BC &lt;br /&gt;
    local t&lt;br /&gt;
    t, BC = gsub(s, '[0-9]+ (год[ау]?) до н%. э%.', '%%s %1%%s')&lt;br /&gt;
    local n = BC&lt;br /&gt;
    if BC ~= 1 then&lt;br /&gt;
        t, n = gsub(s, '[0-9]+ (год[ау]?)', '%%s %1%%s')&lt;br /&gt;
    end&lt;br /&gt;
    if n ~= 1 then&lt;br /&gt;
        -- не найдено или найдено больше одного&lt;br /&gt;
        error('Год не найден')&lt;br /&gt;
    end&lt;br /&gt;
    -- в/во&lt;br /&gt;
    templ = gsub(t, 'во %%s году', 'в %%s году')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_year(t)&lt;br /&gt;
    _, _, year = mw.ustring.find(t, '([0-9]+) год')&lt;br /&gt;
    if not year then error('год не найден') end&lt;br /&gt;
    year = tonumber(year)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function format(y, wiki)&lt;br /&gt;
    local bcs, t&lt;br /&gt;
    if y &amp;lt; 1 then&lt;br /&gt;
        y = 1 - y&lt;br /&gt;
        bcs = ' до н. э.'&lt;br /&gt;
        --t = tostring(c)..' до н. э.'&lt;br /&gt;
        t = '-'..y&lt;br /&gt;
    else&lt;br /&gt;
        bcs = ''&lt;br /&gt;
        t = y&lt;br /&gt;
    end&lt;br /&gt;
    local s&lt;br /&gt;
    if wiki then&lt;br /&gt;
        -- в/во&lt;br /&gt;
        local tt = templ&lt;br /&gt;
        if y == 2 then&lt;br /&gt;
            tt = gsub(templ, 'в %%s году', 'во %%s году')&lt;br /&gt;
        end&lt;br /&gt;
        s = string.format(tt, y, bcs)&lt;br /&gt;
        s = string.format('[[:К:%s|%s]]', s, t)&lt;br /&gt;
    else&lt;br /&gt;
        s = t&lt;br /&gt;
    end&lt;br /&gt;
    return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function navbox()&lt;br /&gt;
    local y&lt;br /&gt;
    y = year&lt;br /&gt;
    if BC == 1 then&lt;br /&gt;
        -- пропускаем 0&lt;br /&gt;
        -- 1 до н.э. y == 0, 2 до н.э. y == -1 и т.д.&lt;br /&gt;
        y = 1 - year&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 ystart&lt;br /&gt;
    if year_min &amp;lt; 1 then&lt;br /&gt;
        ystart = math.max(year_min+1, y - range)&lt;br /&gt;
    else&lt;br /&gt;
        ystart = math.max(year_min, y - range)&lt;br /&gt;
    end&lt;br /&gt;
    local yend = math.min(year_max, y + range) -- FIXME: до н.э.&lt;br /&gt;
    for i = ystart, yend do&lt;br /&gt;
        if i == 1 and i~= ystart then -- разд. до н.э./н.э.&lt;br /&gt;
            row:tag('th'):wikitext('')&lt;br /&gt;
        end&lt;br /&gt;
        if i == y then&lt;br /&gt;
            row:tag('th'):wikitext(format(i, false))&lt;br /&gt;
        else&lt;br /&gt;
            row:tag('td'):wikitext(format(i, true))&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return tostring(wt)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function do_expand(s)&lt;br /&gt;
-- &amp;lt;год&amp;gt; - год без слова &amp;quot;год&amp;quot;&lt;br /&gt;
-- &amp;lt;ключ&amp;gt; - ключ сортировки, н.э. - номер года,&lt;br /&gt;
-- до н.э. - отрицательное число начиная с -99 (-99 == 1 год до н.э. -98 == 2 год до н.э. и т.д.)&lt;br /&gt;
-- &amp;lt;десятилетие&amp;gt; - десятилетие числом (без окончания -е/-х)&lt;br /&gt;
-- &amp;lt;век&amp;gt; - век римскими цифрами&lt;br /&gt;
    local d = math.floor(year/10)*10 -- десятилетие&lt;br /&gt;
    local c = toroman(math.floor((year-1)/100)+1) -- век&lt;br /&gt;
    -- в/во&lt;br /&gt;
    if c == 'II' then&lt;br /&gt;
        s = gsub(s, ' в &amp;lt;век&amp;gt;', ' во &amp;lt;век&amp;gt;')&lt;br /&gt;
    end&lt;br /&gt;
    if BC == 1 then&lt;br /&gt;
        s = gsub(s, '&amp;lt;год&amp;gt; (год[ау]?)', year..' %1 до н. э.')&lt;br /&gt;
        s = gsub(s, '&amp;lt;ключ&amp;gt;', year-10000) -- ?&lt;br /&gt;
        s = gsub(s, '&amp;lt;десятилетие&amp;gt;(-[ех] год[ыоа][вх]?)', d..'%1 до н. э.') -- годы/годов/годах&lt;br /&gt;
        s = gsub(s, '&amp;lt;век&amp;gt; (век[еа]?)', c..' %1 до н. э.')&lt;br /&gt;
    else&lt;br /&gt;
        s = gsub(s, '&amp;lt;год&amp;gt;', year)&lt;br /&gt;
        s = gsub(s, '&amp;lt;ключ&amp;gt;', year)&lt;br /&gt;
        s = gsub(s, '&amp;lt;десятилетие&amp;gt;', d)&lt;br /&gt;
        s = gsub(s, '&amp;lt;век&amp;gt;', c)&lt;br /&gt;
    end&lt;br /&gt;
    return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function cats(args)&lt;br /&gt;
    local y, t&lt;br /&gt;
    local ret = ''&lt;br /&gt;
    for _, y in sparseIpairs(args) do&lt;br /&gt;
        t = mw.text.split(y, '!', true)&lt;br /&gt;
        -- в/во&lt;br /&gt;
        local tt = t[1]&lt;br /&gt;
        if year == 2 then&lt;br /&gt;
            tt = gsub(tt, 'в &amp;lt;год&amp;gt; году', 'во &amp;lt;год&amp;gt; году')&lt;br /&gt;
        end&lt;br /&gt;
        if t[2] and t[2] ~= '' then&lt;br /&gt;
            ret = ret .. string.format('[[К:%s|%s]]', tt, t[2])&lt;br /&gt;
        else&lt;br /&gt;
            ret = ret .. string.format('[[К:%s]]', tt)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return do_expand(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
    local args = getArgs(frame)&lt;br /&gt;
    title = args['title'] or title&lt;br /&gt;
    -- разбор аргументов&lt;br /&gt;
    range = tonumber(args['range'] or 5)&lt;br /&gt;
    year_min = tonumber(args['min'] or -40000)&lt;br /&gt;
    year_max = tonumber(args['max'] or 2100)&lt;br /&gt;
    -- нахождение текушего года&lt;br /&gt;
    get_year(title)&lt;br /&gt;
    -- создание шаблона-строки&lt;br /&gt;
    get_templ(title)&lt;br /&gt;
    -- создание навбокса и категорий&lt;br /&gt;
    return navbox(title) .. cats(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.expand(frame)&lt;br /&gt;
    local args = getArgs(frame)&lt;br /&gt;
    title = args['title'] or title&lt;br /&gt;
    get_year(title)&lt;br /&gt;
    BC = mw.ustring.find(title, '[0-9]+ год[ау]? до н%. э%.')&lt;br /&gt;
    if BC then&lt;br /&gt;
        BC = 1&lt;br /&gt;
    else&lt;br /&gt;
        BC = 0&lt;br /&gt;
    end&lt;br /&gt;
    -- в/во&lt;br /&gt;
    local tt = args[1]&lt;br /&gt;
    if year == 2 then&lt;br /&gt;
        tt = mw.ustring.gsub(args[1], 'в &amp;lt;год&amp;gt; году', 'во &amp;lt;год&amp;gt; году')&lt;br /&gt;
    end&lt;br /&gt;
    return do_expand(tt)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Dzmuh</name></author>
	</entry>
</feed>