<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://wiki.maoism.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AInfocards</id>
	<title>Модуль:Infocards - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.maoism.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AInfocards"/>
	<link rel="alternate" type="text/html" href="http://wiki.maoism.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Infocards&amp;action=history"/>
	<updated>2026-04-10T13:01:30Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.maoism.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Infocards&amp;diff=1253&amp;oldid=prev</id>
		<title>Maoism archivist: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="http://wiki.maoism.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Infocards&amp;diff=1253&amp;oldid=prev"/>
		<updated>2020-10-15T08:07:11Z</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;Версия 11:07, 15 октября 2020&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>Maoism archivist</name></author>
	</entry>
	<entry>
		<id>http://wiki.maoism.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Infocards&amp;diff=1252&amp;oldid=prev</id>
		<title>wiki&gt;Putnik: временные хаки для экспорта данных в Викиданные</title>
		<link rel="alternate" type="text/html" href="http://wiki.maoism.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Infocards&amp;diff=1252&amp;oldid=prev"/>
		<updated>2017-03-13T21:01:28Z</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;local infocards = {};&lt;br /&gt;
local calculateAge = true;&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Helper function that populates the argument list given that user may need to use a mix of&lt;br /&gt;
named and unnamed parameters.  This is relevant because named parameters are not&lt;br /&gt;
identical to unnamed parameters due to string trimming, and when dealing with strings&lt;br /&gt;
we sometimes want to either preserve or remove that whitespace depending on the application.&lt;br /&gt;
]]&lt;br /&gt;
function infocards._getParameters( frame_args, arg_list )&lt;br /&gt;
    local new_args = {};&lt;br /&gt;
    local index = 1;&lt;br /&gt;
    local value;&lt;br /&gt;
 &lt;br /&gt;
    for i,arg in ipairs( arg_list ) do&lt;br /&gt;
        value = frame_args[arg]&lt;br /&gt;
        if value == nil then&lt;br /&gt;
            value = frame_args[index];&lt;br /&gt;
            index = index + 1;&lt;br /&gt;
        end&lt;br /&gt;
        new_args[arg] = value;&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    return new_args;&lt;br /&gt;
end        &lt;br /&gt;
&lt;br /&gt;
function infocards.isBlank( someString )&lt;br /&gt;
    return someString == nil or mw.ustring.match(someString, '^%s*$') ~= nil;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function infocards.isDate ( frame )&lt;br /&gt;
    local new_args = infocards._getParameters( frame.args, {'s', 't', 'f'} );&lt;br /&gt;
    local s = new_args['s'] or '';&lt;br /&gt;
    local t = new_args['t'] or '';&lt;br /&gt;
    local f = new_args['f'] or '';&lt;br /&gt;
&lt;br /&gt;
    local result = infocards.isDateImpl ( s )&lt;br /&gt;
    if (result) then&lt;br /&gt;
        return t&lt;br /&gt;
    else&lt;br /&gt;
        return f&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function infocards.isDateImpl ( s )&lt;br /&gt;
    local converted = infocards.convertToDate ( s );&lt;br /&gt;
    return converted ~= nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function infocards.dateOfBirth( frame )&lt;br /&gt;
    local new_args = infocards._getParameters( frame.args, {'dateOfBirth', 'dateOfDeath', 'nocat'} );&lt;br /&gt;
    local dateOfBirth = new_args['dateOfBirth'] or '';&lt;br /&gt;
    local dateOfDeath = new_args['dateOfDeath'] or '';&lt;br /&gt;
    local nocat = new_args['nocat'] or mw.title.getCurrentTitle().nsText;&lt;br /&gt;
&lt;br /&gt;
    return infocards.dateOfBirthImpl( dateOfBirth, dateOfDeath, nocat );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function infocards.dateOfBirthImpl( dateOfBirth, dateOfDeath, nocat )&lt;br /&gt;
&lt;br /&gt;
    local appendToCategory = infocards.isBlank( nocat );&lt;br /&gt;
&lt;br /&gt;
    if ( infocards.isBlank( dateOfBirth ) ) then&lt;br /&gt;
        if ( appendToCategory ) then&lt;br /&gt;
            return '[[Категория:Википедия:Персоны без указанной даты рождения]]'&lt;br /&gt;
        else&lt;br /&gt;
            return ''&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if ( mw.ustring.match( dateOfBirth, '^%s*неизвестн.%s*$' ) ~= nil&lt;br /&gt;
            or mw.ustring.match( dateOfBirth, '^%s*%?%s*$' ) ~= nil ) then&lt;br /&gt;
        if ( appendToCategory ) then&lt;br /&gt;
            return &amp;quot;''неизвестно''[[Категория:Персоналии, чья дата рождения не установлена]]&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            return &amp;quot;''неизвестно''&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local appendAge = calculateAge and infocards.isBlank( dateOfDeath );&lt;br /&gt;
&lt;br /&gt;
    local parsedDate = infocards.convertToDate ( dateOfBirth )&lt;br /&gt;
    if ( parsedDate == nil ) then&lt;br /&gt;
		--[[ Temporary hack in order to enable export dates to wikidata ]]&lt;br /&gt;
		local bDateStart = '&amp;lt;span class=&amp;quot;no-wikidata&amp;quot; data-wikidata-property-id=&amp;quot;P569&amp;quot;&amp;gt;'&lt;br /&gt;
		local bDateEnd = '&amp;lt;/span&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
        if ( appendToCategory ) then&lt;br /&gt;
            return bDateStart .. dateOfBirth .. bDateEnd .. '[[Категория:Википедия:Статьи с ручной викификацией дат в карточке]]'&lt;br /&gt;
        else&lt;br /&gt;
            return bDateStart .. dateOfBirth .. bDateEnd&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local result = infocards.formatDateImpl ( parsedDate, 'bday', appendToCategory and 'Родившиеся' or nil )&lt;br /&gt;
&lt;br /&gt;
    if ( appendAge ) then&lt;br /&gt;
        -- TODO: месяцы и дни для (нескольких) новорождённых (см. новейшие [[Категория:Родившиеся в ГГГГ году]])&lt;br /&gt;
        local age = infocards.age ( parsedDate,  os.date(&amp;quot;*t&amp;quot;) )&lt;br /&gt;
        if ( age and age &amp;gt; 0 and age &amp;lt; 125) then&lt;br /&gt;
            result = result .. ' &amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;(' .. age .. ' ' .. mw.language.new( 'ru' ):plural( age, 'год', 'года', 'лет') .. ')&amp;lt;/span&amp;gt;'&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
		if ( appendToCategory ) then&lt;br /&gt;
			if ( age and age &amp;gt; 115 ) then&lt;br /&gt;
				result = result .. '[[Категория:Википедия:Статьи о персоналиях с большим текущим возрастом]]'&lt;br /&gt;
			elseif ( age or ( parsedDate and parsedDate.year and os.date('*t').year - parsedDate.year &amp;lt;= 115 ) ) then  -- утверждение во вложенных скобках вступает при неточной дате&lt;br /&gt;
				result = result .. '[[Категория:Википедия:Биографии современников]]'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function infocards.dateOfDeath( frame )&lt;br /&gt;
    local new_args = infocards._getParameters( frame.args, {'dateOfBirth', 'dateOfDeath', 'nocat'} );&lt;br /&gt;
    local dateOfBirth = new_args['dateOfBirth'] or '';&lt;br /&gt;
    local dateOfDeath = new_args['dateOfDeath'] or '';&lt;br /&gt;
    local nocat = new_args['nocat'] or mw.title.getCurrentTitle().nsText;&lt;br /&gt;
&lt;br /&gt;
    return infocards.dateOfDeathImpl( dateOfBirth, dateOfDeath, nocat );&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function infocards.dateOfDeathImpl( dateOfBirth, dateOfDeath, nocat )&lt;br /&gt;
    if ( infocards.isBlank( dateOfDeath ) ) then&lt;br /&gt;
        return ''&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local appendToCategory = infocards.isBlank( nocat );&lt;br /&gt;
&lt;br /&gt;
    if ( mw.ustring.match( dateOfDeath, '^%s*неизвестн.%s*$' ) ~= nil&lt;br /&gt;
            or mw.ustring.match( dateOfDeath, '^%s*%?%s*$' ) ~= nil ) then&lt;br /&gt;
        if ( appendToCategory ) then&lt;br /&gt;
            return &amp;quot;''неизвестно''[[Категория:Персоналии, чья дата смерти не установлена]]&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            return &amp;quot;''неизвестно''&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local parsedDateOfBirth = infocards.convertToDate ( dateOfBirth )&lt;br /&gt;
    local parsedDateOfDeath = infocards.convertToDate ( dateOfDeath )&lt;br /&gt;
&lt;br /&gt;
    if ( parsedDateOfDeath == nil ) then&lt;br /&gt;
		--[[ Temporary hack in order to enable export dates to wikidata ]]&lt;br /&gt;
		local dDateStart = '&amp;lt;span class=&amp;quot;no-wikidata&amp;quot; data-wikidata-property-id=&amp;quot;P570&amp;quot;&amp;gt;'&lt;br /&gt;
		local dDateEnd = '&amp;lt;/span&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
        if ( appendToCategory ) then&lt;br /&gt;
            return dDateStart .. dateOfDeath .. dDateEnd .. '[[Категория:Википедия:Статьи с ручной викификацией дат в карточке]]'&lt;br /&gt;
        else&lt;br /&gt;
            return dDateStart .. dateOfDeath .. dDateEnd&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local result = infocards.formatDateImpl ( parsedDateOfDeath, 'dday', appendToCategory and 'Умершие' or nil )&lt;br /&gt;
&lt;br /&gt;
	if ( calculateAge ) then&lt;br /&gt;
		local age = infocards.age ( parsedDateOfBirth, parsedDateOfDeath )&lt;br /&gt;
		if ( age and age &amp;gt; 0 ) then&lt;br /&gt;
			result = result .. ' &amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;(' .. age .. ' ' .. mw.language.new( 'ru' ):plural( age, 'год', 'года', 'лет') .. ')&amp;lt;/span&amp;gt;'&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- returns category to recently deceased persons&lt;br /&gt;
		local unixAvailable, unixDateOfDeath = pcall(function()&lt;br /&gt;
			local r = os.time(parsedDateOfDeath)&lt;br /&gt;
			if ( r ~= os.time() ) then&lt;br /&gt;
				return r&lt;br /&gt;
			end&lt;br /&gt;
			error()&lt;br /&gt;
		end)&lt;br /&gt;
		if ( unixAvailable and os.time() - unixDateOfDeath &amp;lt; 31536000 and appendToCategory ) then&lt;br /&gt;
			result = result .. '[[Категория:Википедия:Персоналии, умершие менее года назад]]'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function infocards.age( parsedBirthDate, parsedFinishDate ) &lt;br /&gt;
    if ( parsedBirthDate == nil or parsedFinishDate == nil ) then&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local bd = parsedBirthDate[&amp;quot;day&amp;quot;]&lt;br /&gt;
    local bm = parsedBirthDate[&amp;quot;month&amp;quot;]&lt;br /&gt;
    local by = parsedBirthDate[&amp;quot;year&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    local dd = parsedFinishDate[&amp;quot;day&amp;quot;];&lt;br /&gt;
    local dm = parsedFinishDate[&amp;quot;month&amp;quot;];&lt;br /&gt;
    local dy = parsedFinishDate[&amp;quot;year&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
    if ( bd and bm and by and dd and dm and dy ) then&lt;br /&gt;
        if ( dm &amp;gt; bm or ( dm == bm and dd &amp;gt;= bd ) ) then&lt;br /&gt;
            return dy - by&lt;br /&gt;
        else&lt;br /&gt;
            return dy - by - 1&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local genitivusMonthes = {'января', 'февраля', 'марта', 'апреля', 'мая', 'июня',&lt;br /&gt;
    'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'}&lt;br /&gt;
&lt;br /&gt;
function infocards.formatDateImpl( parsedDate, infocardClass, categoryNamePrefix )&lt;br /&gt;
    local nd = parsedDate[&amp;quot;day&amp;quot;];&lt;br /&gt;
    local nm = parsedDate[&amp;quot;month&amp;quot;];&lt;br /&gt;
    local ny = parsedDate[&amp;quot;year&amp;quot;];&lt;br /&gt;
    local od = parsedDate[&amp;quot;osday&amp;quot;];&lt;br /&gt;
    local om = parsedDate[&amp;quot;osmonth&amp;quot;];&lt;br /&gt;
    local oy = parsedDate[&amp;quot;osyear&amp;quot;];&lt;br /&gt;
    &lt;br /&gt;
    local template =&lt;br /&gt;
        (nd ~= nil and &amp;quot;1&amp;quot; or &amp;quot;&amp;quot;) .. (nm ~= nil and &amp;quot;2&amp;quot; or &amp;quot;&amp;quot;) .. (ny ~= nil and &amp;quot;3&amp;quot; or &amp;quot;&amp;quot;) ..&lt;br /&gt;
        (od ~= nil and &amp;quot;4&amp;quot; or &amp;quot;&amp;quot;) .. (om ~= nil and &amp;quot;5&amp;quot; or &amp;quot;&amp;quot;) .. (oy ~= nil and &amp;quot;6&amp;quot; or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    local datePart = '&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;'&lt;br /&gt;
    if (infocardClass == &amp;quot;bday&amp;quot;) then --[[ Temporary hack in order to enable export dates to wikidata ]]&lt;br /&gt;
    	datePart = '&amp;lt;span class=&amp;quot;no-wikidata&amp;quot; data-wikidata-property-id=&amp;quot;P569&amp;quot;&amp;gt;'&lt;br /&gt;
    elseif (infocardClass == &amp;quot;dday&amp;quot;) then&lt;br /&gt;
    	datePart = '&amp;lt;span class=&amp;quot;no-wikidata&amp;quot; data-wikidata-property-id=&amp;quot;P570&amp;quot;&amp;gt;'&lt;br /&gt;
    end	&lt;br /&gt;
    if (template == &amp;quot;12&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. string.format( &amp;quot;[[%d %s]]&amp;quot;, nd, genitivusMonthes[nm] )&lt;br /&gt;
    elseif (template == &amp;quot;3&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. infocards.nominativeYear( ny )&lt;br /&gt;
    elseif (template == &amp;quot;123&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. string.format( &amp;quot;[[%d %s]] %s&amp;quot;,&lt;br /&gt;
                                        nd, genitivusMonthes[nm], infocards.nominativeYear( ny ) )&lt;br /&gt;
    elseif (template == &amp;quot;124&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. string.format( &amp;quot;[[%d %s|%d (%d) %s]]&amp;quot;,&lt;br /&gt;
                                        nd, genitivusMonthes[nm], od, nd, genitivusMonthes[nm] )&lt;br /&gt;
    elseif (template == &amp;quot;1234&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. string.format( &amp;quot;[[%d %s|%d (%d) %s]] %s&amp;quot;,&lt;br /&gt;
                                        nd, genitivusMonthes[nm], od, nd, genitivusMonthes[nm], infocards.nominativeYear( ny ) )&lt;br /&gt;
    elseif (template == &amp;quot;1245&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. string.format( &amp;quot;%d %s ([[%d %s]])&amp;quot;,&lt;br /&gt;
                                        od, genitivusMonthes[om], nd, genitivusMonthes[nm] )&lt;br /&gt;
    elseif (template == &amp;quot;12345&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. string.format( &amp;quot;%d %s ([[%d %s]]) %s&amp;quot;,&lt;br /&gt;
                                        od, genitivusMonthes[om], nd, genitivusMonthes[nm], infocards.nominativeYear( ny ) )&lt;br /&gt;
    elseif (template == &amp;quot;123456&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. string.format( '%d %s %d&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;([[%d %s]] %s)',&lt;br /&gt;
                                        od, genitivusMonthes[om], oy, nd, genitivusMonthes[nm], infocards.nominativeYear( ny ) )&lt;br /&gt;
    else&lt;br /&gt;
        datePart = datePart .. 'формат неверен'&lt;br /&gt;
    end&lt;br /&gt;
    datePart = datePart .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
&lt;br /&gt;
    local infocardTemplate =&lt;br /&gt;
        (nd ~= nil and &amp;quot;1&amp;quot; or &amp;quot;&amp;quot;) .. (nm ~= nil and &amp;quot;2&amp;quot; or &amp;quot;&amp;quot;) .. (ny ~= nil and &amp;quot;3&amp;quot; or &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	if (infocardTemplate == &amp;quot;123&amp;quot;) then&lt;br /&gt;
		datePart = datePart .. string.format('&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;(&amp;lt;span class=&amp;quot;%s&amp;quot;&amp;gt;%04d-%02d-%02d&amp;lt;/span&amp;gt;)&amp;lt;/span&amp;gt;', infocardClass , ny , nm , nd )&lt;br /&gt;
	elseif (infocardTemplate == &amp;quot;23&amp;quot;) then&lt;br /&gt;
		datePart = datePart .. string.format('&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;(&amp;lt;span class=&amp;quot;%s&amp;quot;&amp;gt;%04d-%02d&amp;lt;/span&amp;gt;)&amp;lt;/span&amp;gt;', infocardClass , ny , nm )&lt;br /&gt;
	elseif (infocardTemplate == &amp;quot;3&amp;quot;) then&lt;br /&gt;
		datePart = datePart .. string.format('&amp;lt;span style=&amp;quot;display:none;&amp;quot;&amp;gt;(&amp;lt;span class=&amp;quot;%s&amp;quot;&amp;gt;%04d&amp;lt;/span&amp;gt;)&amp;lt;/span&amp;gt;', infocardClass , ny )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    if ( categoryNamePrefix ~= nil ) then&lt;br /&gt;
        if ( nd ~= nil and nm ~= nil) then&lt;br /&gt;
            datePart = datePart .. '[[Категория:' .. categoryNamePrefix .. ' ' .. nd .. ' ' .. genitivusMonthes[nm] .. ']]'&lt;br /&gt;
        end&lt;br /&gt;
        if ( ny ~= nil) then&lt;br /&gt;
            datePart = datePart .. '[[Категория:' .. categoryNamePrefix .. ' в ' .. infocards.inYear( ny ) .. ']]'&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return datePart&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function infocards.nominativeYear( year )&lt;br /&gt;
    if ( year &amp;gt;= 0 ) then&lt;br /&gt;
        return '[[' .. year .. ' год|' .. year .. ']]'&lt;br /&gt;
    else&lt;br /&gt;
        return '[[' .. ( 0 - year ) .. ' год до н. э.|' .. ( 0 - year ) .. ' до н. э.]]'&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function infocards.inYear( year )&lt;br /&gt;
    if ( year &amp;gt;= 0 ) then&lt;br /&gt;
        return '' .. year .. ' году'&lt;br /&gt;
    else&lt;br /&gt;
        return '' .. ( 0 - year) .. ' году до н. э.'&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function infocards.convertToDate( possibleDateString )&lt;br /&gt;
&lt;br /&gt;
    possibleDateString = mw.ustring.gsub( possibleDateString, '−', '-')&lt;br /&gt;
&lt;br /&gt;
    local simpleDate = mw.ustring.match(possibleDateString, '^%s*([%-%d%.]+)%s*$', 0)&lt;br /&gt;
    if ( simpleDate ) then&lt;br /&gt;
        return infocards.convertToDateNewStylePart( simpleDate );&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local complexDate1, complexDate2 = mw.ustring.match(possibleDateString, '^%s*([%-%d%.]+)%s*%(([%-%d%.]+)%)%s*$', 0)&lt;br /&gt;
    if ( complexDate1 and complexDate2) then&lt;br /&gt;
        local table1 = infocards.convertToDateNewStylePart( complexDate1 );&lt;br /&gt;
        local table2 = infocards.convertToDateOldStylePart( complexDate2 );&lt;br /&gt;
        if ( table1 and table2 ) then&lt;br /&gt;
            return {&lt;br /&gt;
                    year = table1[&amp;quot;year&amp;quot;], month = table1[&amp;quot;month&amp;quot;], day = table1[&amp;quot;day&amp;quot;], &lt;br /&gt;
                    osyear = table2[&amp;quot;year&amp;quot;], osmonth = table2[&amp;quot;month&amp;quot;], osday = table2[&amp;quot;day&amp;quot;]&lt;br /&gt;
                }&lt;br /&gt;
        else&lt;br /&gt;
            return nil&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function infocards.convertToDateNewStylePart( possibleDateString )&lt;br /&gt;
&lt;br /&gt;
    local ny = mw.ustring.match(possibleDateString, '^(%-?%d+)$', 0)&lt;br /&gt;
    if (ny ~= nil) then&lt;br /&gt;
        return {year = tonumber(ny)}&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return infocards.convertToDateCommonPart( possibleDateString )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function infocards.convertToDateOldStylePart( possibleDateString )&lt;br /&gt;
&lt;br /&gt;
    local nd = mw.ustring.match(possibleDateString, '^(%-?%d+)$', 0)&lt;br /&gt;
    if (nd ~= nil) then&lt;br /&gt;
        return {day = tonumber(nd)}&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return infocards.convertToDateCommonPart( possibleDateString )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function infocards.convertToDateCommonPart( possibleDateString )&lt;br /&gt;
&lt;br /&gt;
    local nd, nm&lt;br /&gt;
        = mw.ustring.match(possibleDateString, '^(%d?%d)%.(%d?%d)$', 0)&lt;br /&gt;
    if (nd ~= nil and nm ~= nil) then&lt;br /&gt;
        return {day = tonumber(nd), month = tonumber(nm)}&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local nd, nm, ny&lt;br /&gt;
        = mw.ustring.match(possibleDateString, '^(%d?%d)%.(%d?%d)%.(%-?%d+)$', 0)&lt;br /&gt;
    if (nd ~= nil and nm ~= nil and ny ~= nil) then&lt;br /&gt;
    	local ndn = tonumber(nd)&lt;br /&gt;
    	local nmn = tonumber(nm)&lt;br /&gt;
    	local nyn = tonumber(ny)&lt;br /&gt;
    	if (ndn &amp;gt; 0 and ndn &amp;lt; 33 and nmn &amp;gt; 0 and nmn &amp;lt; 13) then&lt;br /&gt;
        	return {day = ndn, month = nmn, year = nyn}&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return infocards&lt;/div&gt;</summary>
		<author><name>wiki&gt;Putnik</name></author>
	</entry>
</feed>