ꯋꯤꯀꯤꯄꯦꯗꯤꯌꯥ mniwiki https://mni.wikipedia.org/wiki/%EA%AF%83%EA%AF%94%EA%AF%A8%EA%AF%91%EA%AF%A3%EA%AF%8F%EA%AF%95_%EA%AF%82%EA%AF%83%EA%AF%A5%EA%AF%8F MediaWiki 1.47.0-wmf.1 first-letter ꯃꯦꯗꯤꯌꯥ ꯑꯈꯟꯅꯕ ꯋꯥ ꯍꯥꯏꯐꯝ ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯋꯥ ꯍꯥꯏꯐꯝ ꯋꯤꯀꯤꯄꯦꯗꯤꯌꯥ ꯋꯤꯀꯤꯄꯦꯗꯤꯌꯥ ꯋꯥ ꯍꯥꯏꯐꯝ ꯐꯥꯏꯜ ꯐꯥꯏꯜ ꯋꯥ ꯍꯥꯏꯐꯝ ꯃꯦꯗꯤꯌꯥꯋꯤꯀꯤ ꯃꯦꯗꯤꯌꯥꯋꯤꯀꯤ ꯋꯥ ꯍꯥꯏꯐꯝ ꯇꯦꯝꯄ꯭ꯂꯦꯠ ꯇꯦꯝꯄ꯭ꯂꯦꯠ ꯋꯥ ꯍꯥꯏꯐꯝ ꯃꯇꯦꯡ ꯃꯇꯦꯡ ꯋꯥ ꯍꯥꯏꯐꯝ ꯃꯆꯥꯈꯥꯏꯕ ꯃꯆꯥꯈꯥꯏꯕ ꯋꯥ ꯍꯥꯏꯐꯝ TimedText TimedText talk Module Module talk Event Event talk ꯇꯦꯝꯄ꯭ꯂꯦꯠ:Infobox national football team 10 18409 61708 61701 2026-05-12T21:43:32Z ~2026-28766-52 40662 61708 wikitext text/x-wiki <noinclude>{{main other|{{#if:{{Has short description}} |<!--Do nothing--> |{{short description|none}}}}}}</noinclude> {{infobox | templatestyles = Infobox/mobileviewfix.css | title = {{{Name|<includeonly>{{PAGENAMEBASE}}</includeonly>}}} | above = {{#if:{{{date|}}}|{{{date}}}}} | image = {{#invoke:InfoboxImage|InfoboxImage|image={{{Badge|}}}|size={{{Badge_size|}}}|sizedefault=200x150px|title=Shirt badge/Association crest}} | label1 = [[List of national association football teams by nickname|Nickname{{pluralize from text|{{{Nickname|}}}|likely=(s)|plural=s}}]] | data1 = {{{Nickname|}}} | label2 = Association | data2 = {{{Association|}}} | label3 = Other affiliation | data3 = {{{Other-affiliation|}}} | label4 = Confederation | data4 = {{{Confederation|}}} | label5 = {{nowrap|Sub-confederation}} | data5 = {{{Sub-confederation|}}} | label6 = Head coach | data6 = {{{Coach|}}} | label7 = [[Captain (association football)|Captain]] | data7 = {{{Captain|}}} | label8 = Most [[Cap (sport)#Association football|caps]] | data8 = {{{Most caps|}}} | label9 = Top scorer | data9 = {{{Top scorer|}}} | label10 = Home stadium | data10 = {{{Home Stadium|}}} | label11 = [[List of FIFA country codes|FIFA code]] | data11 = {{{FIFA Trigramme|}}} | label12 = [[BSWW Beach Soccer rankings|BSWW ranking]] | data12 = {{{BSWW Rank|}}} | data13 = {{#if:{{{pattern_la1|}}}{{{pattern_b1|}}}{{{pattern_ra1|}}}{{{pattern_sh1|}}}{{{pattern_so1|}}}{{{leftarm1|}}}{{{body1|}}}{{{rightarm1|}}}{{{shorts1|}}}{{{socks1|}}} {{{pattern_la2|}}}{{{pattern_b2|}}}{{{pattern_ra2|}}}{{{pattern_sh2|}}}{{{pattern_so2|}}}{{{leftarm2|}}}{{{body2|}}}{{{rightarm2|}}}{{{shorts2|}}}{{{socks2|}}}{{{pattern_la3|}}}{{{pattern_b3|}}}{{{pattern_ra3|}}}{{{pattern_sh3|}}}{{{pattern_so3|}}}{{{leftarm3|}}}{{{body3|}}}{{{rightarm3|}}}{{{shorts3|}}}{{{socks3|}}}| <tr><td style="padding: 0; background: #ffffff; color: black; text-align: center; border: 1px solid #D3D3D3;" colspan="2"> <table style="width:100%; text-align:center;"> <tr> {{#if:{{{pattern_la1|}}}{{{pattern_b1|}}}{{{pattern_ra1|}}}{{{pattern_sh1|}}}{{{pattern_so1|}}}{{{leftarm1|}}}{{{body1|}}}{{{rightarm1|}}}{{{shorts1|}}}{{{socks1|}}}| <td style="padding: 0">{{Football kit | filetype = {{{filetype1|{{{filetype|png}}}}}} | pattern_la = {{{pattern_la1|}}} | pattern_b = {{{pattern_b1|_unknown}}} | pattern_ra = {{{pattern_ra1|}}} | pattern_sh = {{{pattern_sh1|}}} | pattern_so = {{{pattern_so1|}}} | leftarm = {{{leftarm1|}}} | body = {{{body1|}}} | rightarm = {{{rightarm1|}}} | shorts = {{{shorts1|}}} | socks = {{{socks1|}}} | title = {{{pattern_name1|First}}} [[Kit (association football)|{{#if:{{{American|}}}|colors|colours}}]] }}</td> }}{{#if:{{{pattern_la2|}}}{{{pattern_b2|}}}{{{pattern_ra2|}}}{{{pattern_sh2|}}}{{{pattern_so2|}}}{{{leftarm2|}}}{{{body2|}}}{{{rightarm2|}}}{{{shorts2|}}}{{{socks2|}}}| <td style="padding: 0">{{Football kit | filetype = {{{filetype2|{{{filetype|png}}}}}} | pattern_la = {{{pattern_la2|}}} | pattern_b = {{{pattern_b2|_unknown}}} | pattern_ra = {{{pattern_ra2|}}} | pattern_sh = {{{pattern_sh2|}}} | pattern_so = {{{pattern_so2|}}} | leftarm = {{{leftarm2|}}} | body = {{{body2|}}} | rightarm = {{{rightarm2|}}} | shorts = {{{shorts2|}}} | socks = {{{socks2|}}} | title = {{{pattern_name2|Second}}} [[Kit (association football)|{{#if:{{{American|}}}|colors|colours}}]] }}</td> }}{{#if:{{{pattern_la3|}}}{{{pattern_b3|}}}{{{pattern_ra3|}}}{{{pattern_sh3|}}}{{{pattern_so3|}}}{{{leftarm3|}}}{{{body3|}}}{{{rightarm3|}}}{{{shorts3|}}}{{{socks3|}}}| <td style="padding: 0">{{Football kit | filetype = {{{filetype3|{{{filetype|png}}}}}} | pattern_la = {{{pattern_la3|}}} | pattern_b = {{{pattern_b3|_unknown}}} | pattern_ra = {{{pattern_ra3|}}} | pattern_sh = {{{pattern_sh3|}}} | pattern_so = {{{pattern_so3|}}} | leftarm = {{{leftarm3|}}} | body = {{{body3|}}} | rightarm = {{{rightarm3|}}} | shorts = {{{shorts3|}}} | socks = {{{socks3|}}} | title = {{{pattern_name3|Third}}} [[Kit (association football)|{{#if:{{{American|}}}|colors|colours}}]] }}</td> }}</tr> </table></td></tr>}} | header14 = {{#if:{{{FIFA Rank|}}}{{{FIFA max|}}}{{{FIFA min|}}}|[[FIFA {{#ifeq:{{lc:{{{type|{{{Type}}}}}}}}|women|Women's World Ranking|Men's World Ranking}}|FIFA ranking]]}} | label15 = Current | data15 = {{{FIFA Rank|}}} | label16 = Highest | data16 = {{#if:{{{FIFA max|}}}|{{{FIFA max}}} {{#if:{{{FIFA max date|}}}|({{{FIFA max date}}})}} {{#if:{{{FIFA max year|}}}|({{{FIFA max year}}})}}}} | label17 = Lowest | data17 = {{#if:{{{FIFA min|}}}|{{{FIFA min}}} {{#if:{{{FIFA min date|}}}|({{{FIFA min date}}})}} {{#if:{{{FIFA min year|}}}|({{{FIFA min year}}})}}}} | header22 = {{#if:{{{First game|}}}|First international}}{{#if:{{{Only game|}}}|Only international}} | data23 = {{{First game|{{{Only game|}}}}}} | header24 = {{#if:{{{Last game|}}}|Last international}} | data25 = {{{Last game|}}} | header26 = {{#if:{{{Largest win|}}}|Biggest win}} | data27 = {{{Largest win|}}} | header28 = {{#if:{{{Largest loss|}}}|Biggest defeat}} | data29 = {{{Largest loss|}}} | header30 = {{#if:{{{World cup apps|}}}|[[FIFA {{#switch:{{lc:{{{type|{{{Type}}}}}}}}|women=Women's|beach=Beach Soccer|#default=}} World Cup|World Cup]]}} | label31 = Appearances | data31 = {{{World cup apps|}}} {{#if:{{{World cup first|}}}|(''first in [[{{{World cup first|}}} FIFA {{#switch:{{lc:{{{type|{{{Type}}}}}}}}|women=Women's|beach=Beach Soccer|#default=}} World Cup|{{{World cup first}}}]]'')}} | label32 = Best result | data32 = {{{World cup best|}}} | header33 = {{#if: {{{Regional cup apps|}}}|{{{Regional name}}}}} | label34 = Appearances | data34 = {{{Regional cup apps|}}} {{#if:{{{Regional cup first|}}}|(''first in {{{Regional cup first}}}'')}} | label35 = Best result | data35 = {{{Regional cup best|}}} | header36 = {{#if: {{{2ndRegional cup apps|}}}|{{{2ndRegional name}}}}} | label37 = Appearances | data37 = {{{2ndRegional cup apps|}}} {{#if:{{{2ndRegional cup first|}}}|(''first in {{{2ndRegional cup first}}}'')}} | label38 = Best result | data38 = {{{2ndRegional cup best|}}} | header39 = {{#if: {{{3rdRegional cup apps|}}}|{{{3rdRegional name}}}}} | label40 = Appearances | data40 = {{{3rdRegional cup apps|}}} {{#if:{{{3rdRegional cup first|}}}|(''first in {{{3rdRegional cup first}}}'')}} | label41 = Best result | data41 = {{{3rdRegional cup best|}}} | header42 = {{#if: {{{4thRegional cup apps|}}}|{{{4thRegional name}}}}} | label43 = Appearances | data43 = {{{4thRegional cup apps|}}} {{#if:{{{4thRegional cup first|}}}|(''first in {{{4thRegional cup first}}}'')}} | label44 = Best result | data44 = {{{4thRegional cup best|}}} | header45 = {{#if: {{{Confederations cup apps|}}}|[[FIFA Confederations Cup|Confederations Cup]]}} | label46 = Appearances | data46 = {{{Confederations cup apps|}}} {{#if:{{{Confederations cup first|}}}|(''first in {{{Confederations cup first}}}'')}} | label47 = Best result | data47 = {{{Confederations cup best|}}} | header48 = {{#if: {{{UEFAu21Champ apps|}}}|[[UEFA European Under-21 Championship|UEFA U-21 Championship]]}} | label49 = Appearances | data49 = {{{UEFAu21Champ apps|}}} {{#if:{{{UEFAu21Champ first|}}}|(''first in {{{UEFAu21Champ first}}}'')}} | label50 = Best result | data50 = {{{UEFAu21Champ best|}}} | header51 = {{#if: {{{U20WC apps|}}}|[[FIFA U-20 {{#ifeq:{{lc:{{{type|{{{Type}}}}}}}}|women|Women's World|World}} Cup]]}} | label52 = Appearances | data52 = {{{U20WC apps|}}} {{#if:{{{U20WC first|}}}|(''first in {{{U20WC first}}}'')}} | label53 = Best result | data53 = {{{U20WC best|}}} | header54 = {{#if: {{{U17WC apps|}}}|[[FIFA U-17 {{#ifeq:{{lc:{{{type|{{{Type}}}}}}}}|women|Women's World|World}} Cup]]}} | label55 = Appearances | data55 = {{{U17WC apps|}}} {{#if:{{{U17WC first|}}}|(''first in {{{U17WC first}}}'')}} | label56 = Best result | data56 = {{{U17WC best|}}} | header57 = {{#if: {{{Arab cup apps|}}}|[[FIFA Arab Cup|Arab Cup]]}} | label58 = Appearances | data58 = {{{Arab cup apps|}}} {{#if:{{{Arab cup first|}}}|(''first in {{{Arab cup first}}}'')}} | label59 = Best result | data59 = {{{Arab cup best|}}} | header60 = {{Infobox medal templates |medals = {{{medaltemplates|}}} |expand = {{{medaltemplates-expand|}}} }} | label61 = ꯋꯦꯕꯁꯥꯏꯠ | data61 = {{{website|}}} | belowclass = noprint | below = {{#if:{{{Current|}}}|[[File:Soccerball current event.svg|33px|link=|alt=]] ''[[{{{Current}}}|Current season]]''}} }}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox national football team with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox national football team]] with unknown parameter "_VALUE_"|ignoreblank=y| 2ndRegional cup apps | 2ndRegional cup best | 2ndRegional cup first | 2ndRegional name | 3rdRegional cup apps | 3rdRegional cup best | 3rdRegional cup first | 3rdRegional name | 4thRegional cup apps | 4thRegional cup best | 4thRegional cup first | 4thRegional name | American | Association | Badge | Badge_size | body1 | body2 | body3 | BSWW Rank | Captain | Coach | Confederation | Confederations cup apps | Confederations cup best | Confederations cup first | Current | date | Elo max | Elo max date | Elo max year | Elo min | Elo min date | Elo min year | Elo Rank | FIFA max | FIFA max date | FIFA max year | FIFA min | FIFA min date | FIFA min year | FIFA Rank | FIFA Trigramme | filetype | filetype1 | filetype2 | filetype3 | First game | Home Stadium | Largest loss | Largest win | Last game | leftarm1 | leftarm2 | leftarm3 | medaltemplates | medaltemplates-expand | Most caps | Name | Nickname | Only game | Other-affiliation | pattern_b1 | pattern_b2 | pattern_b3 | pattern_la1 | pattern_la2 | pattern_la3 | pattern_name1 | pattern_name2 | pattern_name3 | pattern_ra1 | pattern_ra2 | pattern_ra3 | pattern_sh1 | pattern_sh2 | pattern_sh3 | pattern_so1 | pattern_so2 | pattern_so3 | Regional cup apps | Regional cup best | Regional cup first | Regional name | rightarm1 | rightarm2 | rightarm3 | shorts1 | shorts2 | shorts3 | socks1 | socks2 | socks3 | Sub-confederation | Top scorer | Type | type | U17WC apps | U17WC best | U17WC first | U20WC apps | U20WC best | U20WC first | UEFAu21Champ apps | UEFAu21Champ best | UEFAu21Champ first | Upright |website | World cup apps | World cup best | World cup first }}<noinclude>{{documentation}}<!-- please place categories and language links on the documentation page, not here! --></noinclude> 1c2tbf8fbve8sezpxh3czs7tjs6frr6 Module:Person date 828 18411 61709 2026-05-12T21:49:47Z ~2026-28766-52 40662 Created page with "require("strict") local p = {} local TEMPLATES = { birth_date = "Birth date", birth_date_and_age = "Birth date and age", birth_year = "Birth year", birth_year_and_age = "Birth year and age", death_date = "Death date", death_date_text = "Death date text", death_date_and_age = "Death date and age", death_year = "Death year", death_year_and_age = "Death year and age", } local invalid_date_category = '' local tracking_category = '' local Date = require('Module:Dat..." 61709 Scribunto text/plain require("strict") local p = {} local TEMPLATES = { birth_date = "Birth date", birth_date_and_age = "Birth date and age", birth_year = "Birth year", birth_year_and_age = "Birth year and age", death_date = "Death date", death_date_text = "Death date text", death_date_and_age = "Death date and age", death_year = "Death year", death_year_and_age = "Death year and age", } local invalid_date_category = '' local tracking_category = '' local Date = require('Module:Date')._Date local getArgs = require('Module:Arguments').getArgs if mw.title.getCurrentTitle():inNamespaces(0, 828, 829) then -- Category only in namespaces: 0=article, 828=module & 829=module talk (last 2 needed for testcases) tracking_category = '[[Category:Pages where birth or death is being automatically determined]]' invalid_date_category = '[[Category:Pages with invalid birth or death dates]]' end local function check_for_invalid_date(str) return mw.ustring.match(str, '^%?') or mw.ustring.match(str, '^%d%d%?') or mw.ustring.match(str, '^[Uu]nk') end local function expand_template(template, args) return mw.getCurrentFrame():expandTemplate{title = template, args = args} end local function parse_date(str) local date = Date(str) if date then return tostring(date.year), tostring(date.month), tostring(date.day) end -- TODO: Date has not been parsed. Need to work out what to do. For now, throw an error. -- Example where this can occur: "birth_date = 22 December 1946" at [[Maurice Pasternak]]. -- There was a nonbreaking space after "22" whidh Date does not accept. error('Module:Person_date parse_date invalid date: "' .. tostring(str) .. '"') end local function date_format(str) if mw.ustring.match (str, '^%d+%s*%a+[%.]*%s*%d%d%d%d$') then return 'df' elseif mw.ustring.match(str, '^%a+[%.]*%s+%d+,%s*%d%d%d%d$') then return 'mf' else return 'ERROR' end end local function is_valid_month (str) str = string.upper(mw.ustring.sub(str,1,1))..string.lower(mw.ustring.sub(str,2)) local months = {'Jan','Jan.','January','Feb','Feb.','February','Mar','March','Apr','Apr.','April','May','Jun','Jun.','June','Jul','Jul.','July','Aug','Aug.','August','Sep','Sept','Sep.','Sept.','September','Oct','Oct.','October','Nov','Nov','November','Dec','Dec.','December'} for index, value in ipairs(months) do if value == str then return true end end return false end local function is_month_year_only(str) local month = mw.ustring.match(str, '^(%a+)[%.]*%s+%d%d%d%d$') if month == nil then return false else return is_valid_month(month) end end local function is_valid_date(str) local month = mw.ustring.match (str, '^%d+%s*(%a+)[%.]*%s*%d%d%d%d$') or mw.ustring.match(str, '^(%a+)[%.]*%s+%d+,%s*%d%d%d%d$') if month == nil then return false else return is_valid_month(month) end end local function is_year_only(str) return mw.ustring.match(str, '^%d%d%d%d$') end local function already_has_template(str) str = mw.ustring.gsub(str, '&[Nn][Bb][Ss][Pp];', ' ') return mw.ustring.match(str, '<span') or mw.ustring.match(str, '<time') or mw.ustring.match(str,'%(aged%s*%d+') or mw.ustring.match(str,'%(age%s*%d+') end local function sanatize_date(str) -- Sanatize leading & trailing whitespace (this caused an issue before it was implemented) str = mw.ustring.gsub(str,'^%s*','') str = mw.ustring.gsub(str,'%s*$','') -- Sanatize ordinals str = mw.ustring.gsub(str, '(%d+)st([,%s])', '%1%2') str = mw.ustring.gsub(str, '(%d+)rd([,%s])', '%1%2') str = mw.ustring.gsub(str, '(%d+)th([,%s])', '%1%2') str = mw.ustring.gsub(str, '(%d+)nd([,%s])', '%1%2') return str end local function parse_birth(args) local birth_date = args['birth_date'] or '' local death_date = args['death_date'] or '' local disap_date = args['disappeared_date'] or '' local original = birth_date birth_date = sanatize_date(birth_date) death_date = sanatize_date(death_date) disap_date = sanatize_date(disap_date) -- Check for bad inputs. This used to be covered by a switch statement in infoboxes if check_for_invalid_date(birth_date) then return original..invalid_date_category end if already_has_template(birth_date) then return original end if is_valid_date(birth_date) then local location = mw.ustring.find(birth_date, '%d%d%d%d') local extra = mw.ustring.sub(birth_date, location+4) .. tracking_category local date = mw.ustring.sub(birth_date, 1,location+3) local year, month, day = parse_date(date) local format = date_format(date) if death_date == '' and disap_date == '' then return expand_template(TEMPLATES.birth_date_and_age, {year, month, day, [format] = 'yes'}) .. extra elseif is_year_only(death_date) or is_valid_date(death_date) or is_month_year_only(death_date) then return expand_template(TEMPLATES.birth_date, {year, month, day, [format] = 'yes'}) .. extra else -- death_date is not a valid string (example: 'unknown') return original end end if is_month_year_only(birth_date) then local year = Date('1 '..birth_date):text('%Y') local month = Date('1 '..birth_date):text('%-m') local location = mw.ustring.find(birth_date, '%d%d%d%d') local date = mw.ustring.sub(birth_date, 1,location+3) local extra = mw.ustring.sub(birth_date, location+4) .. tracking_category if death_date == '' and disap_date == '' then return expand_template(TEMPLATES.birth_year_and_age, {year, month}) .. extra elseif is_year_only(death_date) or is_valid_date(death_date) or is_month_year_only(death_date) then return expand_template(TEMPLATES.birth_year, {date}) .. extra else -- death_date is not a valid string (example: 'unknown') return original end end if is_year_only(birth_date) then local date = mw.ustring.sub(birth_date, 1, 5) local extra = mw.ustring.sub(birth_date, 5) .. tracking_category if death_date == '' and disap_date == '' then return expand_template(TEMPLATES.birth_year_and_age, {date}) .. extra elseif is_year_only(death_date) or is_valid_date(death_date) then return expand_template(TEMPLATES.birth_year, {date}) .. extra else -- death_date is not a valid string (example: 'unknown') return original end end return original end local function parse_death(args) local birth_date = args['birth_date'] or '' local death_date = args['death_date'] or '' local original = death_date birth_date = sanatize_date(birth_date) death_date = sanatize_date(death_date) -- Check for bad inputs. This used to be covered by a switch statement in infoboxes if check_for_invalid_date(death_date) then return original..invalid_date_category end if already_has_template(death_date) then return original end if is_valid_date(death_date) or is_month_year_only(death_date) then local location = mw.ustring.find(death_date, '%d%d%d%d') local date = mw.ustring.sub(death_date, 1,location+3) local extra = mw.ustring.sub(death_date, location+4) .. tracking_category local format = date_format(date) if birth_date == '' then if is_month_year_only(death_date) then return expand_template(TEMPLATES.death_date_text, {date}) .. extra end local year, month, day = parse_date(date) return expand_template(TEMPLATES.death_date, {year, month, day, [format] = 'yes'}) .. extra else if is_year_only(birth_date) then location = mw.ustring.find(birth_date, '%d%d%d%d') local bd = mw.ustring.sub(birth_date, 1,location+3) if is_month_year_only(death_date) then return expand_template(TEMPLATES.death_date_and_age, {date, bd}) .. extra end return expand_template(TEMPLATES.death_date_and_age, {date, bd, [format] = 'yes'}) .. extra elseif is_valid_date(birth_date) or is_month_year_only(birth_date) then location = mw.ustring.find(birth_date, '%d%d%d%d') local bd = mw.ustring.sub(birth_date, 1,location+3) if (is_month_year_only(death_date)) then return expand_template(TEMPLATES.death_date_and_age, {date, bd}) .. extra end return expand_template(TEMPLATES.death_date_and_age, {date, bd, [format] = 'yes'}) .. extra end end end if is_year_only(death_date) then if birth_date == '' then return expand_template(TEMPLATES.death_year, {mw.ustring.sub(death_date, 1, 5)}) .. mw.ustring.sub(death_date, 5) .. tracking_category else if is_year_only(birth_date) then return expand_template(TEMPLATES.death_year_and_age, {mw.ustring.sub(death_date, 1, 5), mw.ustring.sub(birth_date, 1, 5)}) .. mw.ustring.sub(death_date, 5) .. tracking_category else if is_valid_date(birth_date) then local location = mw.ustring.find(death_date, '%d%d%d%d') local date = mw.ustring.sub(death_date, 1,location+3) local extra = mw.ustring.sub(death_date, location+4) .. tracking_category location = mw.ustring.find(birth_date, '%d%d%d%d') local bd = mw.ustring.sub(birth_date, 1,location+3) return expand_template(TEMPLATES.death_date_and_age, {date, bd}) .. extra end end end end return original end function p.birth(frame) return parse_birth(getArgs(frame, {parentFirst = true})) end function p.death(frame) return parse_death(getArgs(frame, {parentFirst = true})) end return p qm4tcdz8g5vkfc018ay0tu8zlfditks