Модуль:Infocards
Внешний вид
Халып:Docpage Халып:СИШ Халып:Используйте песочницу
Примеры вызова функции dateOfBirth
- {{#invoke:Infocards|dateOfBirth|-382|−336}} → п. э. а. 382
- {{#invoke:Infocards|dateOfBirth|11.1|}} → 11 кӱрген айы
- {{#invoke:Infocards|dateOfBirth|24.12.3|15.01.69}} → 24 улуғ хырлас айы 3
- {{#invoke:Infocards|dateOfBirth|23.09.-63|19.08.14}} → 23 ӱртӱн айы п. э. а. 63
- {{#invoke:Infocards|dateOfBirth|42|9.6.42}} → 42
- {{#invoke:Infocards|dateOfBirth|870|13.8.900}} → 870
- {{#invoke:Infocards|dateOfBirth||22.01.984}} →
- {{#invoke:Infocards|dateOfBirth|16.06.1066|дата смерти неизвестна}} → 16 хандых айы 1066
- {{#invoke:Infocards|dateOfBirth|8.2.1834 (27.1)|2.2.1907 (20.1)}} → 27 кӱрген айы (8 азығ айы ) 1834
- {{#invoke:Infocards|dateOfBirth|29.06.1844 (17)|28.10.1883 (16)}} → 17 (29) хандых айы 1844
- {{#invoke:Infocards|dateOfBirth|19.7.1893 (7)|}} → 7 (19) от айы 1893
- {{#invoke:Infocards|dateOfBirth|3.10.1895 (21.9)|28.12.1925}} → 21 ӱртӱн айы (3 чарыс айы) 1895
- {{#invoke:Infocards|dateOfBirth|4.10.1916|8.11.2009}} → 4 чарыс айы 1916
- {{#invoke:Infocards|dateOfBirth|09.06.1942|}} → 9 хандых айы 1942 (84 час)
- {{#invoke:Infocards|dateOfBirth|1955|}} → 1955
- {{#invoke:Infocards|dateOfBirth|29.02.1984|}} → 29 азығ айы 1984 (42 час)
- {{#invoke:Infocards|dateOfBirth||}} →
- {{#invoke:Infocards|dateOfBirth|4.1.1885 (23.12.1884)|17.5.1951}} → 23 улуғ хырлас айы 1884 (4 кӱрген айы 1885)
- {{#invoke:Infocards|dateOfBirth|{{ДатаРождения|24|12|3}}|{{ДатаСмерти|15|01|69}}}} → Халып:ДатаРождения
- {{#invoke:Infocards|dateOfBirth|ок. [[5]] года|24.01.41}} → ок. 5 года
- {{#invoke:Infocards|dateOfBirth|ок. [[5]] года|{{ДатаСмерти|24|01|41}}}} → ок. 5 года
- {{#invoke:Infocards|dateOfBirth|[[868]]/[[872]]|[[15 сентября]]/[[15 ноября]] [[890]]}} → 868/872
- {{#invoke:Infocards|dateOfBirth|{{ДатаРождения|8|2|1834|27|1}}|{{ДатаСмерти|2|2|1907|20|1}} (72 года)}} → Халып:ДатаРождения
Примеры вызова функции dateOfDeath
- {{#invoke:Infocards|dateOfDeath|-382|−336}} → п. э. а. 336
- {{#invoke:Infocards|dateOfDeath|24.12.3|15.01.69}} → 15 кӱрген айы 69 (65 час)
- {{#invoke:Infocards|dateOfDeath|23.09.-63|19.08.14}} → 19 орғах айы 14 (76 час)
- {{#invoke:Infocards|dateOfDeath|42|9.6.42}} → 9 хандых айы 42
- {{#invoke:Infocards|dateOfDeath|870|13.8.900}} → 13 орғах айы 900
- {{#invoke:Infocards|dateOfDeath||22.01.984}} → 22 кӱрген айы 984
- {{#invoke:Infocards|dateOfDeath|16.06.1066|дата смерти неизвестна}} → дата смерти неизвестна
- {{#invoke:Infocards|dateOfDeath|8.2.1834 (27.1)|2.2.1907 (20.1)}} → 20 кӱрген айы (2 азығ айы ) 1907 (72 час)
- {{#invoke:Infocards|dateOfDeath|29.06.1844 (17)|28.10.1883 (16)}} → 16 (28) чарыс айы 1883 (39 час)
- {{#invoke:Infocards|dateOfDeath|19.7.1893 (7)|}} → 14 хосхар айы 1930 (36 час)
- {{#invoke:Infocards|dateOfDeath|3.10.1895 (21.9)|28.12.1925}} → 28 улуғ хырлас айы 1925 (30 час)
- {{#invoke:Infocards|dateOfDeath|4.10.1916|8.11.2009}} → 8 кічіг хырлас айы 2009 (93 час)
- {{#invoke:Infocards|dateOfDeath|09.06.1942|}} →
- {{#invoke:Infocards|dateOfDeath|1955|}} →
- {{#invoke:Infocards|dateOfDeath|29.02.1984|}} →
- {{#invoke:Infocards|dateOfDeath||}} →
- {{#invoke:Infocards|dateOfDeath|{{ДатаРождения|24|12|3}}|{{ДатаСмерти|15|01|69}}}} → Халып:ДатаСмерти
- {{#invoke:Infocards|dateOfDeath|ок. [[5]] года|24.01.41}} → 24 кӱрген айы 41
- {{#invoke:Infocards|dateOfDeath|ок. [[5]] года|{{ДатаСмерти|24|01|41}}}} → Халып:ДатаСмерти
- {{#invoke:Infocards|dateOfDeath|[[868]]/[[872]]|[[15 сентября]]/[[15 ноября]] [[890]]}} → 15 сентября/15 ноября 890
- {{#invoke:Infocards|dateOfDeath|{{ДатаРождения|8|2|1834|27|1}}|{{ДатаСмерти|2|2|1907|20|1}} (72 года)}} → Халып:ДатаСмерти (72 года)
Примеры вызова функции isDate
- {{#invoke:Infocards|isDate||TRUE|FALSE}} → FALSE
- {{#invoke:Infocards|isDate|-382|TRUE|FALSE}} → TRUE
- {{#invoke:Infocards|isDate|−336|TRUE|FALSE}} → TRUE
- {{#invoke:Infocards|isDate|24.12.3|TRUE|FALSE}} → TRUE
- {{#invoke:Infocards|isDate|19.7.1893 (7)|TRUE|FALSE}} → TRUE
- {{#invoke:Infocards|isDate|19.7.67.18/93 (7)|TRUE|FALSE}} → FALSE
- {{#invoke:Infocards|isDate|13 декабря 2005|TRUE|FALSE}} → FALSE
- {{#invoke:Infocards|isDate|дата смерти неизвестна|TRUE|FALSE}} → FALSE
- {{#invoke:Infocards|isDate|{{ДатаРождения|24|12|3}}|TRUE|FALSE}} → FALSE
local infocards = {};
local calculateAge = true;
--[[
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.
]]
function infocards._getParameters( frame_args, arg_list )
local new_args = {};
local index = 1;
local value;
for i,arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index];
index = index + 1;
end
new_args[arg] = value;
end
return new_args;
end
function infocards.isBlank( someString )
return someString == nil or mw.ustring.match(someString, '^%s*$') ~= nil;
end
function infocards.isDate ( frame )
local new_args = infocards._getParameters( frame.args, {'s', 't', 'f'} );
local s = new_args['s'] or '';
local t = new_args['t'] or '';
local f = new_args['f'] or '';
local result = infocards.isDateImpl ( s )
if (result) then
return t
else
return f
end
end
function infocards.isDateImpl ( s )
local converted = infocards.convertToDate ( s );
return converted ~= nil
end
function infocards.dateOfBirth( frame )
local new_args = infocards._getParameters( frame.args, {'dateOfBirth', 'dateOfDeath', 'nocat'} );
local dateOfBirth = new_args['dateOfBirth'] or '';
local dateOfDeath = new_args['dateOfDeath'] or '';
local nocat = new_args['nocat'] or mw.title.getCurrentTitle().nsText;
return infocards.dateOfBirthImpl( dateOfBirth, dateOfDeath, nocat );
end
function infocards.dateOfBirthImpl( dateOfBirth, dateOfDeath, nocat )
local appendToCategory = infocards.isBlank( nocat );
if ( infocards.isBlank( dateOfBirth ) ) then
if ( appendToCategory ) then
return '[[Категория:РУВИКИ:Тӧреен кӱннері кӧзіділбеен кізілер]]'
else
return ''
end
end
if ( mw.ustring.match( dateOfBirth, '^%s*пілдізі чох%s*$' ) ~= nil
or mw.ustring.match( dateOfBirth, '^%s*%?%s*$' ) ~= nil ) then
if ( appendToCategory ) then
return "''пілдізі чох''[[Категория:Тӧреен кӱннері табылбаан кізілер]]"
else
return "''пілдізі чох''"
end
end
local appendAge = calculateAge and infocards.isBlank( dateOfDeath );
local parsedDate = infocards.convertToDate ( dateOfBirth )
if ( parsedDate == nil ) then
if ( appendToCategory ) then
return dateOfBirth .. '[[Категория:РУВИКИ:Карточка кӱннері холнаң иділген статьялар]]'
else
return dateOfBirth
end
end
local result = infocards.formatDateImpl ( parsedDate, 'bday', appendToCategory and 'тӧрееннері' or nil )
if ( appendAge ) then
local age = infocards.age ( parsedDate, os.date("*t") )
if ( age > 0 ) then
result = result .. ' <span style="white-space:nowrap;">(' .. age .. ' ' .. mw.language.new( 'ba' ):plural( age, 'час', 'час', 'час') .. ')</span>'
end
if ( age > 150 and appendToCategory ) then
result = result .. '[[Категория:РУВИКИ:Амғы улуғ частығ кізілердеңер статьялар]]'
end
end
return result
end
function infocards.dateOfDeath( frame )
local new_args = infocards._getParameters( frame.args, {'dateOfBirth', 'dateOfDeath', 'nocat'} );
local dateOfBirth = new_args['dateOfBirth'] or '';
local dateOfDeath = new_args['dateOfDeath'] or '';
local nocat = new_args['nocat'] or mw.title.getCurrentTitle().nsText;
return infocards.dateOfDeathImpl( dateOfBirth, dateOfDeath, nocat );
end
function infocards.dateOfDeathImpl( dateOfBirth, dateOfDeath, nocat )
if ( infocards.isBlank( dateOfDeath ) ) then
return ''
end
local appendToCategory = infocards.isBlank( nocat );
if ( mw.ustring.match( dateOfDeath, '^%s*пілдізі чох%s*$' ) ~= nil
or mw.ustring.match( dateOfDeath, '^%s*%?%s*$' ) ~= nil ) then
if ( appendToCategory ) then
return "''пілдізі чох''[[Категория:Ӱреен кӱннері табылбаан кізілер ]]"
else
return "''пілдізі чох''"
end
end
local parsedDateOfBirth = infocards.convertToDate ( dateOfBirth )
local parsedDateOfDeath = infocards.convertToDate ( dateOfDeath )
if ( parsedDateOfDeath == nil ) then
if ( appendToCategory ) then
return dateOfDeath .. '[[Категория:РУВИКИ:Карточка кӱннері холнаң иділген статьялар]]'
else
return dateOfDeath
end
end
local result = infocards.formatDateImpl ( parsedDateOfDeath, 'dday', appendToCategory and 'ӱрееннері' or nil )
if ( calculateAge ) then
local age = infocards.age ( parsedDateOfBirth, parsedDateOfDeath )
if ( age > 0 ) then
result = result .. ' <span style="white-space:nowrap;">(' .. age .. ' ' .. mw.language.new( 'ba' ):plural( age, 'час', 'час', 'час') .. ')</span>'
end
if ( age > 150 and appendToCategory ) then
result = result .. '[[Категория:РУВИКИ:Улуғ частығда ӱреен кізілердеңер статьялар]]'
end
end
return result
end
function infocards.age( parsedBirthDate, parsedFinishDate )
if ( parsedBirthDate == nil or parsedFinishDate == nil ) then
return 0
end
local bd = parsedBirthDate["day"]
local bm = parsedBirthDate["month"]
local by = parsedBirthDate["year"]
local dd = parsedFinishDate["day"];
local dm = parsedFinishDate["month"];
local dy = parsedFinishDate["year"];
if ( bd and bm and by and dd and dm and dy ) then
if ( dm > bm or ( dm == bm and dd >= bd ) ) then
return dy - by
else
return dy - by - 1
end
else
return 0
end
end
local genitivusMonthes = {'кӱрген айы', 'азығ айы ', 'кӧрік айы', 'хосхар айы', 'сілкер айы', 'хандых айы', 'от айы', 'орғах айы', 'ӱртӱн айы', 'чарыс айы', 'кічіг хырлас айы', 'улуғ хырлас айы'}
local genitivusMonthes2 = {'кӱрген айында', 'азығ айында', 'кӧрік айында', 'хосхар айында', 'сілкер айында', 'хандых айында',
'от айында', 'орғах айында', 'ӱртӱн айында', 'чарыс айында', 'кічіг хырлас айында', 'улуғ хырлас айында'}
function infocards.formatDateImpl( parsedDate, infocardClass, categoryNamePrefix )
local nd = parsedDate["day"];
local nm = parsedDate["month"];
local ny = parsedDate["year"];
local od = parsedDate["osday"];
local om = parsedDate["osmonth"];
local oy = parsedDate["osyear"];
local template =
(nd ~= nil and "1" or "") .. (nm ~= nil and "2" or "") .. (ny ~= nil and "3" or "") ..
(od ~= nil and "4" or "") .. (om ~= nil and "5" or "") .. (oy ~= nil and "6" or "")
local datePart = '<span style="white-space:nowrap;">'
if (template == "12") then
datePart = datePart .. string.format( "[[%d %s]]", nd, genitivusMonthes[nm] )
elseif (template == "3") then
datePart = datePart .. infocards.nominativeYear( ny )
elseif (template == "123") then
datePart = datePart .. string.format( "[[%d %s]] %s",
nd, genitivusMonthes[nm], infocards.nominativeYear( ny ) )
elseif (template == "124") then
datePart = datePart .. string.format( "[[%d %s|%d (%d) %s]]",
nd, genitivusMonthes[nm], od, nd, genitivusMonthes[nm] )
elseif (template == "1234") then
datePart = datePart .. string.format( "[[%d %s|%d (%d) %s]] %s",
nd, genitivusMonthes[nm], od, nd, genitivusMonthes[nm], infocards.nominativeYear( ny ) )
elseif (template == "1245") then
datePart = datePart .. string.format( "%d %s ([[%d %s]])",
od, genitivusMonthes[om], nd, genitivusMonthes[nm] )
elseif (template == "12345") then
datePart = datePart .. string.format( "%d %s ([[%d %s]]) %s",
od, genitivusMonthes[om], nd, genitivusMonthes[nm], infocards.nominativeYear( ny ) )
elseif (template == "123456") then
datePart = datePart .. string.format( '%d %s %d</span> <span style="white-space:nowrap;">([[%d %s]] %s)',
od, genitivusMonthes[om], oy, nd, genitivusMonthes[nm], infocards.nominativeYear( ny ) )
else
datePart = datePart .. 'формат неверен'
end
datePart = datePart .. '</span>'
local infocardTemplate =
(nd ~= nil and "1" or "") .. (nm ~= nil and "2" or "") .. (ny ~= nil and "3" or "")
if (infocardTemplate == "123") then
datePart = datePart .. '<span style="display:none">(<span class="' .. infocardClass .. '">{{padleft:' .. ny .. '|4|0}}-{{padleft:' .. nm .. '|2|0}}-{{padleft:' .. nd .. '|2|0}}</span>)</span>'
elseif (infocardTemplate == "23") then
datePart = datePart .. '<span style="display:none">(<span class="' .. infocardClass .. '">{{padleft:' .. ny .. '|4|0}}-{{padleft:' .. nm .. '|2|0}}</span>)</span>'
elseif (infocardTemplate == "3") then
datePart = datePart .. '<span style="display:none;">(<span class="' .. infocardClass .. '">{{padleft:' .. ny .. '|4|0}}</span>)</span>'
end
if ( categoryNamePrefix ~= nil ) then
if ( nd ~= nil and nm ~= nil) then
datePart = datePart .. '[[Категория:' .. nd .. ' ' .. genitivusMonthes2[nm] .. ' ' .. categoryNamePrefix .. ']]'
end
if ( ny ~= nil) then
datePart = datePart .. '[[Категория:' .. infocards.inYear( ny ) .. ' ' .. categoryNamePrefix .. ']]'
end
end
return datePart
end
function infocards.nominativeYear( year )
if ( year >= 0 ) then
return '[[' .. year .. ' чыл|' .. year .. ']]'
else
return '[[П. э. а. ' .. ( 0 - year ) .. ' чыл|п. э. а. ' .. ( 0 - year ) .. ']]'
end
end
function infocards.inYear( year )
if ( year >= 0 ) then
return '' .. year .. ' чылда'
else
return 'П. э. а. ' .. ( 0 - year) .. ' чылда'
end
end
function infocards.convertToDate( possibleDateString )
possibleDateString = mw.ustring.gsub( possibleDateString, '−', '-')
local simpleDate = mw.ustring.match(possibleDateString, '^%s*([%-%d%.]+)%s*$', 0)
if ( simpleDate ) then
return infocards.convertToDateNewStylePart( simpleDate );
end
local complexDate1, complexDate2 = mw.ustring.match(possibleDateString, '^%s*([%-%d%.]+)%s*%(([%-%d%.]+)%)%s*$', 0)
if ( complexDate1 and complexDate2) then
local table1 = infocards.convertToDateNewStylePart( complexDate1 );
local table2 = infocards.convertToDateOldStylePart( complexDate2 );
if ( table1 and table2 ) then
return {
year = table1["year"], month = table1["month"], day = table1["day"],
osyear = table2["year"], osmonth = table2["month"], osday = table2["day"]
}
else
return nil
end
end
return nil
end
function infocards.convertToDateNewStylePart( possibleDateString )
local ny = mw.ustring.match(possibleDateString, '^(%-?%d+)$', 0)
if (ny ~= nil) then
return {year = tonumber(ny)}
end
return infocards.convertToDateCommonPart( possibleDateString )
end
function infocards.convertToDateOldStylePart( possibleDateString )
local nd = mw.ustring.match(possibleDateString, '^(%-?%d+)$', 0)
if (nd ~= nil) then
return {day = tonumber(nd)}
end
return infocards.convertToDateCommonPart( possibleDateString )
end
function infocards.convertToDateCommonPart( possibleDateString )
local nd, nm
= mw.ustring.match(possibleDateString, '^(%d?%d)%.(%d?%d)$', 0)
if (nd ~= nil and nm ~= nil) then
return {day = tonumber(nd), month = tonumber(nm)}
end
local nd, nm, ny
= mw.ustring.match(possibleDateString, '^(%d?%d)%.(%d?%d)%.(%-?%d+)$', 0)
if (nd ~= nil and nm ~= nil and ny ~= nil) then
local ndn = tonumber(nd)
local nmn = tonumber(nm)
local nyn = tonumber(ny)
if (ndn > 0 and ndn < 33 and nmn > 0 and nmn < 13) then
return {day = ndn, month = nmn, year = nyn}
end
end
return nil
end
return infocards