<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://belgen.info/wiki/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="https://belgen.info/wiki/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="https://belgen.info/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Infocards&amp;action=history"/>
	<updated>2026-04-25T19:24:58Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://belgen.info/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Infocards&amp;diff=174&amp;oldid=prev</id>
		<title>Admin: Новая страница: «local infocards = {} local calculateAge = true local dateCat = require(&quot;Module:Infocards/dateCat&quot;)  -- Helper function that populates the argument list given that user may need to use a mix of named and unnamed parameters.  This is relevant because named parameters are not identical to unnamed parameters due to string trimming, and when dealing with strings we sometimes want to either preserve or remove that whitespace depending on the application.  func...»</title>
		<link rel="alternate" type="text/html" href="https://belgen.info/wiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Infocards&amp;diff=174&amp;oldid=prev"/>
		<updated>2022-12-19T22:31:11Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «local infocards = {} local calculateAge = true local dateCat = require(&amp;quot;Module:Infocards/dateCat&amp;quot;)  --[[ Helper function that populates the argument list given that user may need to use a mix of named and unnamed parameters.  This is relevant because named parameters are not identical to unnamed parameters due to string trimming, and when dealing with strings we sometimes want to either preserve or remove that whitespace depending on the application. ]] func...»&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;
local dateCat = require(&amp;quot;Module:Infocards/dateCat&amp;quot;)&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', 'suppressAge', 'nocat'} )&lt;br /&gt;
	local dateOfBirth = new_args['dateOfBirth'] or ''&lt;br /&gt;
	local dateOfDeath = new_args['dateOfDeath'] or ''&lt;br /&gt;
	local suppressAge = new_args['suppressAge'] 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, suppressAge, nocat )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function infocards.dateOfBirthImpl( dateOfBirth, dateOfDeath, suppressAge, 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 dateCat.categoryNoBirthDate&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; .. dateCat.categoryUnknownBirthDate&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 = not (suppressAge ~= '' or not 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 .. dateCat.categoryManualWikification&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;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 (not age and parsedDate and parsedDate.year ) then&lt;br /&gt;
				age = os.date('*t').year - parsedDate.year -- при неточной дате&lt;br /&gt;
 			end&lt;br /&gt;
			if ( age ) then &lt;br /&gt;
				if ( age &amp;gt; 115 ) then&lt;br /&gt;
					result = result .. dateCat.categoryBigCurrentAge&lt;br /&gt;
				elseif ( age &amp;gt;= 0 ) then&lt;br /&gt;
 					result = result .. dateCat.categoryBiographiesOfLivingPersons&lt;br /&gt;
				else&lt;br /&gt;
					result = result .. dateCat.categoryNegativeAge&lt;br /&gt;
				end&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; .. dateCat.categoryUnknownDeathDate&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 .. dateCat.categoryManualWikification&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 (appendToCategory) then&lt;br /&gt;
			if ( unixAvailable and os.time() - unixDateOfDeath &amp;lt; 31536000 ) then&lt;br /&gt;
				result = result .. dateCat.categoryRecentlyDeceased&lt;br /&gt;
			elseif (age and age &amp;lt; 0) then&lt;br /&gt;
				result = result .. dateCat.categoryNegativeAge&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.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>Admin</name></author>
	</entry>
</feed>