<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://ru.ru-skazki.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ACenturyMetaCat</id>
	<title>Модуль:CenturyMetaCat - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://ru.ru-skazki.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3ACenturyMetaCat"/>
	<link rel="alternate" type="text/html" href="http://ru.ru-skazki.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:CenturyMetaCat&amp;action=history"/>
	<updated>2026-04-07T23:58:49Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>http://ru.ru-skazki.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:CenturyMetaCat&amp;diff=4525&amp;oldid=prev</id>
		<title>Импортёр: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="http://ru.ru-skazki.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:CenturyMetaCat&amp;diff=4525&amp;oldid=prev"/>
		<updated>2024-05-01T10:06:32Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 13:06, 1 мая 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Импортёр</name></author>
	</entry>
	<entry>
		<id>http://ru.ru-skazki.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:CenturyMetaCat&amp;diff=4524&amp;oldid=prev</id>
		<title>ru&gt;Andras в 14:20, 24 февраля 2024</title>
		<link rel="alternate" type="text/html" href="http://ru.ru-skazki.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:CenturyMetaCat&amp;diff=4524&amp;oldid=prev"/>
		<updated>2024-02-24T14:20:19Z</updated>

		<summary type="html">&lt;p&gt;&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 ROMAN = {&lt;br /&gt;
    I = 1,&lt;br /&gt;
    IV = 4,&lt;br /&gt;
    V = 5,&lt;br /&gt;
    IX = 9,&lt;br /&gt;
    X = 10,&lt;br /&gt;
    --XL = 40,&lt;br /&gt;
    --L = 50,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- переменные&lt;br /&gt;
local cent -- век, положительное число&lt;br /&gt;
local roman_cent -- век римскими цифрами&lt;br /&gt;
local BC   -- 0 == н.э. 1 == до н.э.&lt;br /&gt;
local templ -- строка-шаблон вида &amp;#039;Мир в %s веке%s&amp;#039;&lt;br /&gt;
local title = mw.title.getCurrentTitle().text&lt;br /&gt;
&lt;br /&gt;
-- опции&lt;br /&gt;
local cent_min -- число, по умолчанию -39, 0 == только н.э.&lt;br /&gt;
local cent_max -- число, по умолчанию 21 (XXI век)&lt;br /&gt;
local range = 5&lt;br /&gt;
&lt;br /&gt;
-- экспортируемые функции&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local sparseIpairs = require(&amp;#039;Module:TableTools&amp;#039;).sparseIpairs&lt;br /&gt;
local toroman = require(&amp;#039;Module:Roman&amp;#039;).convert&lt;br /&gt;
local gsub = mw.ustring.gsub&lt;br /&gt;
&lt;br /&gt;
function roman_to_int(s)&lt;br /&gt;
    local i = 1&lt;br /&gt;
    local num = 0&lt;br /&gt;
    while i &amp;lt;= s:len() do&lt;br /&gt;
        local c&lt;br /&gt;
        if i &amp;lt; s:len() then&lt;br /&gt;
            c = ROMAN[s:sub(i, i+1)]&lt;br /&gt;
        end&lt;br /&gt;
        if c then&lt;br /&gt;
            num = num + c&lt;br /&gt;
            i = i + 2&lt;br /&gt;
        else&lt;br /&gt;
            num = num + ROMAN[s:sub(i, i)]&lt;br /&gt;
            i = i + 1&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return num&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_templ(s)&lt;br /&gt;
    -- формируем строку-шаблон вида:&lt;br /&gt;
    -- &amp;#039;Мир в XI веке до н. э.&amp;#039; -&amp;gt; &amp;#039;Мир в %s веке%s&amp;#039;&lt;br /&gt;
    -- определяем BC &lt;br /&gt;
    local t&lt;br /&gt;
    t, BC = gsub(s, &amp;#039;[IVX]+ (век[еа]?) до н%. э%.&amp;#039;, &amp;#039;%%s %1%%s&amp;#039;)&lt;br /&gt;
    local n = BC&lt;br /&gt;
    if BC ~= 1 then&lt;br /&gt;
        t, n = gsub(s, &amp;#039;[IVX]+ (век[еа]?)&amp;#039;, &amp;#039;%%s %1%%s&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if n ~= 1 then&lt;br /&gt;
        -- не найдено или найдено больше одного&lt;br /&gt;
        error(&amp;#039;Век не найден&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    -- в/во, о/об&lt;br /&gt;
    t = gsub(t, &amp;#039;во %%s веке&amp;#039;, &amp;#039;в %%s веке&amp;#039;)&lt;br /&gt;
    templ = gsub(t, &amp;#039;об %%s веке&amp;#039;, &amp;#039;о %%s веке&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_cent(t)&lt;br /&gt;
    _, _, roman_cent = mw.ustring.find(t, &amp;#039;([IVX]+) век&amp;#039;)&lt;br /&gt;
    if not roman_cent then error(&amp;#039;век не найден&amp;#039;) end&lt;br /&gt;
    cent = roman_to_int(roman_cent)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function format(c, wiki)&lt;br /&gt;
    local bcs, t&lt;br /&gt;
    if c &amp;lt; 1 then&lt;br /&gt;
        c = 1 - c&lt;br /&gt;
        bcs = &amp;#039; до н. э.&amp;#039;&lt;br /&gt;
        --t = toroman(c)..&amp;#039; до н. э.&amp;#039;&lt;br /&gt;
        t = &amp;#039;-&amp;#039;..toroman(c)&lt;br /&gt;
    else&lt;br /&gt;
        bcs = &amp;#039;&amp;#039;&lt;br /&gt;
        t = toroman(c)&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 c == 2 then&lt;br /&gt;
            tt = gsub(tt, &amp;#039;в %%s веке&amp;#039;, &amp;#039;во %%s веке&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
        if c == 11 then&lt;br /&gt;
            tt = gsub(tt, &amp;#039;о %%s веке&amp;#039;, &amp;#039;об %%s веке&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
        s = string.format(tt, toroman(c), bcs)&lt;br /&gt;
        s = string.format(&amp;#039;[[:Категория:%s|%s]]&amp;#039;, 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 c&lt;br /&gt;
    c = cent&lt;br /&gt;
    if BC == 1 then&lt;br /&gt;
        -- пропускаем 0&lt;br /&gt;
        -- I до н.э. c == 0, II до н.э. c == -1 и т.д.&lt;br /&gt;
        c = 1 - cent&lt;br /&gt;
    end&lt;br /&gt;
    local wt = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;standard&amp;#039;):attr(&amp;#039;align&amp;#039;, &amp;#039;center&amp;#039;)&lt;br /&gt;
    local row = wt:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
    local cstart&lt;br /&gt;
    if cent_min &amp;lt; 1 then&lt;br /&gt;
        cstart = math.max(cent_min+1, c - range)&lt;br /&gt;
    else&lt;br /&gt;
        cstart = math.max(cent_min, c - range)&lt;br /&gt;
    end&lt;br /&gt;
    local cend = math.min(cent_max, c + range) -- FIXME: до н.э.&lt;br /&gt;
    for i = cstart, cend do&lt;br /&gt;
        if i == 1 and i ~= cstart then row:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;&amp;#039;) end -- разд. до н.э./н.э.&lt;br /&gt;
        if i == c then&lt;br /&gt;
            row:tag(&amp;#039;th&amp;#039;):wikitext(format(i, false))&lt;br /&gt;
        else&lt;br /&gt;
            row:tag(&amp;#039;td&amp;#039;):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; (XVII)&lt;br /&gt;
-- &amp;lt;тысячелетие&amp;gt; - тысячелетие числом (без добавления -е/-м/-го)&lt;br /&gt;
-- &amp;lt;ключ&amp;gt; - ключ сортировки, н.э. - номер века числом,&lt;br /&gt;
-- до н.э. - отрицательное число начиная с -99 (-99 == I век до н.э. -98 == II век до н.э. и т.д.)&lt;br /&gt;
    local mil = math.floor((cent-1)/10)+1 -- тысячелетие&lt;br /&gt;
    -- в/во, о/об ?&lt;br /&gt;
    if mil == 2 then&lt;br /&gt;
        s = gsub(s, &amp;#039; в &amp;lt;тысячелетие&amp;gt;&amp;#039;, &amp;#039; во &amp;lt;тысячелетие&amp;gt;&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if BC == 1 then&lt;br /&gt;
        s = gsub(s, &amp;#039;&amp;lt;век&amp;gt; (век[еа]?)&amp;#039;, roman_cent .. &amp;#039; %1 до н. э.&amp;#039;)&lt;br /&gt;
        s = gsub(s, &amp;#039;&amp;lt;тысячелетие&amp;gt;(-[емг][о]? тысячелети[еия])&amp;#039;, mil..&amp;#039;%1 до н. э.&amp;#039;) -- 2-е/2-м/2-го&lt;br /&gt;
        s = gsub(s, &amp;#039;&amp;lt;ключ&amp;gt;&amp;#039;, cent-100)&lt;br /&gt;
    else&lt;br /&gt;
        s = gsub(s, &amp;#039;&amp;lt;век&amp;gt;&amp;#039;, roman_cent)&lt;br /&gt;
        s = gsub(s, &amp;#039;&amp;lt;тысячелетие&amp;gt;&amp;#039;, mil)&lt;br /&gt;
        s = gsub(s, &amp;#039;&amp;lt;ключ&amp;gt;&amp;#039;, cent)&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 c, t&lt;br /&gt;
    local ret = &amp;#039;&amp;#039;&lt;br /&gt;
    for _, c in sparseIpairs(args) do&lt;br /&gt;
        t = mw.text.split(c, &amp;#039;!&amp;#039;, true)&lt;br /&gt;
        -- диапазон веков для кат.&lt;br /&gt;
        local cmin = -99&lt;br /&gt;
        if t[3] and t[3] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
            cmin = tonumber(t[3])&lt;br /&gt;
        end&lt;br /&gt;
        local cmax = 99&lt;br /&gt;
        if t[4] and t[4] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
            cmax = tonumber(t[4])&lt;br /&gt;
        end&lt;br /&gt;
        local cc = cent&lt;br /&gt;
        if BC == 1 then cc = -cent end&lt;br /&gt;
        if cc &amp;gt;= cmin and cc &amp;lt;= cmax then&lt;br /&gt;
            -- в/во, о/об&lt;br /&gt;
            local tt = t[1]&lt;br /&gt;
            if cent == 2 then&lt;br /&gt;
                tt = gsub(tt, &amp;#039;в &amp;lt;век&amp;gt; веке&amp;#039;, &amp;#039;во &amp;lt;век&amp;gt; веке&amp;#039;)&lt;br /&gt;
            end&lt;br /&gt;
            if cent == 11 then&lt;br /&gt;
                tt = gsub(tt, &amp;#039;о &amp;lt;век&amp;gt; веке&amp;#039;, &amp;#039;об &amp;lt;век&amp;gt; веке&amp;#039;)&lt;br /&gt;
            end&lt;br /&gt;
            if t[2] and t[2] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
                ret = ret .. string.format(&amp;#039;[[Категория:%s|%s]]&amp;#039;, tt, t[2])&lt;br /&gt;
            else&lt;br /&gt;
                ret = ret .. string.format(&amp;#039;[[Категория:%s]]&amp;#039;, tt)&lt;br /&gt;
            end&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[&amp;#039;title&amp;#039;] or title&lt;br /&gt;
    -- разбор аргументов&lt;br /&gt;
    range = tonumber(args[&amp;#039;range&amp;#039;] or 5)&lt;br /&gt;
    cent_min = tonumber(args[&amp;#039;min&amp;#039;] or -39)&lt;br /&gt;
    cent_max = tonumber(args[&amp;#039;max&amp;#039;] or 21)&lt;br /&gt;
    -- нахождение текушего века&lt;br /&gt;
    get_cent(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[&amp;#039;title&amp;#039;] or title&lt;br /&gt;
    get_cent(title)&lt;br /&gt;
    BC = mw.ustring.find(title, &amp;#039;[IVX]+ век[еа]? до н%. э%.&amp;#039;)&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 cent == 2 then&lt;br /&gt;
        tt = gsub(args[1], &amp;#039;в &amp;lt;век&amp;gt; веке&amp;#039;, &amp;#039;во &amp;lt;век&amp;gt; веке&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    if cent == 11 then&lt;br /&gt;
        tt = gsub(tt, &amp;#039;о &amp;lt;век&amp;gt; веке&amp;#039;, &amp;#039;об &amp;lt;век&amp;gt; веке&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    return do_expand(tt)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.century_from_title(frame)&lt;br /&gt;
    local args = getArgs(frame)&lt;br /&gt;
    title = args[&amp;#039;title&amp;#039;] or title&lt;br /&gt;
    BC = mw.ustring.find(title, &amp;#039;[IVX]+ век[еа]? до н%. э%.&amp;#039;)&lt;br /&gt;
    get_cent(title)&lt;br /&gt;
    if BC then&lt;br /&gt;
        return -cent&lt;br /&gt;
    end&lt;br /&gt;
    return cent&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>ru&gt;Andras</name></author>
	</entry>
</feed>