Модуль:Песочница/Seryo93/Карточка государства

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация
require('Module:No globals')
local IBC = {} -- IBC == InfoBox Country
IBC.__index = IBC

local contestedstate = {'непризнанное','частично признанное','виртуальное'}


function table.count(tab)
local Count
Count = 0
for Index, Value in pairs( tab ) do
  Count = Count + 1
end
return Count
end

local function upperfirst(str)
	str=tostring(str)
	if mw.ustring.len(str)<=1 then return mw.ustring.upper(str) else
	return mw.ustring.upper(mw.ustring.sub(str,1,1))..mw.ustring.sub(str,2,-1)
	end
end

local function lowerfirst(str)
	str=tostring(str)
	if mw.ustring.len(str)<=1 then return mw.ustring.lower(str) else
	return mw.ustring.lower(mw.ustring.sub(str,1,1))..mw.ustring.sub(str,2,-1)
	end
end

--function IBC:getUniversalArgNums(prefix)
function IBC:getArgNums(prefix,minarg)
	local nums = {}
	local numsuc = {}
	for k,v in pairs (self.args) do
		local numu = tostring(k):match('^'..upperfirst(prefix)..'([1-9]%d*)$')
		local numl = tostring(k):match('^'..lowerfirst(prefix)..'([1-9]%d*)$')
		if numu then 
			if self.args[upperfirst(prefix)..numu]~=nil then
			table.insert(numsuc, tonumber(numu)) 
			end
		end
		if numl then 
			if self.args[lowerfirst(prefix)..numl]~=nil then
			table.insert(nums, tonumber(numl))
			end
		end
	end
	table.sort(numsuc)
	for k,v in pairs(numsuc) do
		if not table.contains(nums,v) then
			table.insert(nums, tonumber(v))
		end
	end
	if (minarg) and type(minarg)=='number' then
		for k,v in pairs(nums) do
			if v<minarg then
			table.remove(nums,k)
			end
		end
	end
	table.sort(nums, function(a, b) return a < b end)
	numsuc = nil
	return nums
	
end

function IBC:getMultiprefixArgs(prefixes,minarg)
	if type(prefixes)~='table' then return self:getArgNums(prefixes,minarg)
	else
		if table.count(prefixes)==0 then return {} end
		if table.count(prefixes)==1 then return self:getArgNums(prefixes[1],minarg) end
		local prefixesarrays = {}
		local mainarray=self:getArgNums(prefixes[1],minarg) or {}
		for i=2,table.count(prefixes) do
			prefixesarrays['temp'..i]=self:getArgNums(prefixes[i],minarg)
		end
		for k,v in pairs(prefixesarrays) do
			for _,num in pairs(prefixesarrays[k]) do
				if not table.contains(mainarray,num) then
					table.insert(mainarray,num)
				end
			end
		end
		table.sort(mainarray, function(a, b) return a < b end)
		prefixesarrays = nil
		return mainarray
	end
end

function table.contains(table, element)
  for _, value in pairs(table) do
    if value == element then
      return true
    end
  end
  return false
end

function IBC:universalarg(argname)
	return self.args[upperfirst(argname)] or self.args[lowerfirst(argname)]
end

function IBC:universalargs(argsname)
	if type(argsname)~='table' then return self:universalarg(argsname)
	else
		if table.count(argsname)==0 then return nil end
		if table.count(argsname)==1 then return self:universalarg(argsname[1]) end
		for k,v in pairs(argsname) do
		if self:universalarg(v)~=nil then return self:universalarg(v)
		end
		end
	end
	return nil
end

function IBC:statename(builder)
	builder=builder:tag('tr')
	:tag('td')
	:attr('colspan',2)
	:cssText('text-align:center; background:inherit;  font-weight:bold; font-size:larger; width: 300px;')
	:wikitext(self.frame:expandTemplate{title='Карточка/название',args={self:universalargs({'русское название','название'})}})
	if self:universalargs({'оригинальное название','самоназвание'}) then
	builder=builder:tag('tr')
	:tag('td')
	:attr('colspan',2)
	:cssText('text-align:center; background:inherit; font-size:larger')
	:wikitext(self:universalargs({'оригинальное название','самоназвание'}))
	end

end

function IBC:IsContestedOrVirtual()
	if self:universalargs('спорный статус') then
		if self:universalargs('статус') and table.contains(contestedstate,lowerfirst(self:universalargs('статус'))) then
			return true
		end
	end
	return false
end

function IBC:renderMotto(builder)
		local motto=self:universalargs('девиз')
		builder=builder:tag('tr')
		:tag('th')
		:attr('align','center')
		:attr('colspan',2)
		:attr('width','100%')
		:wikitext('[[Девиз]]')
		:done()
		:done()
		:tag('tr')
		:tag('td')
		:attr('align','center')
		:attr('colspan',2)
		:attr('width','100%')
		:wikitext(motto)
end

function IBC:renderstatusrow(builder,former)
	local statustoreturn
	if former==true then
	statustoreturn=self:universalargs('статус')
	else
	if mw.ustring.lower(self:universalargs('статус'))=='виртуальное' then
	statustoreturn=self.frame:preprocess('[[{{ucfirst:'..self:universalargs('статус')..' государство}}]]')
	else
	statustoreturn=self.frame:preprocess('[[Непризнанные и частично признанные государства|{{ucfirst:'..self:universalargs('статус')..' государство}}]]')		
	end
	end
	builder=builder:tag('tr')
	:tag('td')
	:attr('colspan',2)
	:css('width','300px')
	:attr('align','center')
	:css('background','inherit')
	:css('font-size','smaller')
	:wikitext(statustoreturn)
end

function IBC:wikidata(args)
	return self.frame:expandTemplate{title='wikidata',args=args}	
end

function IBC:notnillarg(arg,wd)
	local ret
	if wd then
	ret = self:wikidata({wd, self:universalargs(arg), plain='true'})
	else
	ret= self:universalargs(arg)
	end
	return ret or ''
end

function IBC:hassymbols(former)
	if self:notnillarg('без флага и герба')~='' then
		return false
	end
	if (self:notnillarg('флаг','p41')=='novalue') and (self:notnillarg('герб','p41')=='novalue') then
		return false
	end
	if (self:notnillarg('флаг','p41')=='') and (self:notnillarg('герб','p41')=='') then 
		if (former==false) and (self:notnillarg('флаг')~='-') and (self:notnillarg('герб')~='-') then
		return true
		end
		return false
	end
	return true
end

function IBC:getflaglink(former)
	local flaglink
	flaglink = ''
	if former==true then
	flaglink = self:wikidata({'p163', self:universalargs({'описание флага','описание_флага'}), [4]='Флаг', text='Флаг'})
	else
	local leftofpipe = (self:universalarg('ссылка на флаг')) or ('Флаг'..' '..(self:universalarg('родительный падеж') or ''))
	flaglink=self.frame:preprocess('[['..leftofpipe..'|Флаг]]')
	end
	return flaglink
end

function IBC:getarmslink(former)
	local armslink
	armslink = ''
	if former==true then
	armslink = self:wikidata({'p237', self:universalargs({'описание герба','описание_герба'}), [4]='Герб', text='Герб'})
	else
	local leftofpipea = (self:universalarg('вместо герба') or 'Герб')..(self:universalarg('родительный падеж') or '')
	armslink=self:universalarg('отображаемая подпись герба') or self.frame:preprocess('[['..leftofpipea..'|'..(self:universalarg('вместо герба') or 'Герб')..']]')
	end
	return armslink
end

function IBC:rendersimplerow(builder,heading,value,nottop,nottdhead)
	builder=builder:tag('tr')
	:css('border-top', nottop~=true and 'solid 1px #aaa' or nil)
	:tag(nottdhead~=true and 'th' or 'td')
	:attr('width','50%')
	:css('padding-left','.5em')
	:wikitext(heading)
	:done()
	:tag('td')
	:wikitext(value)	
end

function IBC:renderflagandarms(builder,former)
	local colspan = (((self:notnillarg('флаг','p41')~='') and (self:notnillarg('герб','p41')~='')) and ((self:notnillarg('флаг','p41')~='novalue') and (self:notnillarg('герб','p41')~='novalue'))) and nil or 2
	local flaglink = self:getflaglink(former)
	local armslink = self:getarmslink(former)
	local flagimagesuppressor
	local armsimagesuppressor
	flagimagesuppressor = nil
	armsimagesuppressor = nil
	if former==false then
		if ((self:notnillarg('флаг','p41')=='') or (self:notnillarg('флаг','p41')=='novalue')) and (self:universalarg('флаг')~='-') then
			flagimagesuppressor=self.frame:expandTemplate{title='Флаг', args={self.frame:preprocess('{{FULLPAGENAME}}'),['размер']='130px'}}
		end
		if (self:notnillarg('герб','p94')=='') or (self:notnillarg('герб','p94')=='novalue') and (self:universalarg('герб')~='-') then
			armsimagesuppressor=self.frame:preprocess('[[Файл:Sin escudo.svg|'..(self:universalarg('размер герба') or '90px')..'|'..(self:universalarg('вместо герба') or 'Герб')..' '..(self:universalarg('родительный падеж') or '')..']]')
		end
	end
	if (flagimagesuppressor~=nil) and (armsimagesuppressor~=nil) then
		colspan = 2
	end
	local flagwikitext
	if flagimagesuppressor~=nil then
	flagwikitext=flagimagesuppressor
	else
	if (self:notnillarg('флаг','p41')~='') and (self:notnillarg('флаг','p41')~='novalue') then
	flagwikitext=self:wikidata({'p41[1]',self:notnillarg('флаг'),border=(tostring(self:notnillarg('без рамки флага')=='' and true or false)),size=(self:universalarg('размер флага') or '130px')})
	end
	end
	local armswikitext
	if armsimagesuppressor~=nil then
	armswikitext = armsimagesuppressor
	else
		if (self:notnillarg('герб','p94')~='') and (self:notnillarg('герб','p94')~='novalue') then
			armswikitext = self:wikidata({'p94[1]',self:notnillarg('герб'),size=(self:universalarg('размер герба') or '90px')})
		end
	end
	--local colspan=2
	builder=builder:tag('table')
	:tag('tr')
	if flagwikitext~=nil then
	builder=builder:tag('td')
	:attr('colspan', colspan)
	:cssText('text-align:center; vertical-align:middle; width:150px')
	:wikitext(flagwikitext)
	end
	if armswikitext~=nil then
	builder=builder:tag('td')
	:attr('colspan', colspan)
	:cssText('text-align:center; vertical-align:middle; width:150px')
	:wikitext(armswikitext)
	end
	builder=builder:tag('tr')
	if flagwikitext~=nil then
	builder=builder:tag('td')
	:attr('align','center')
	:attr('colspan',colspan)
	:wikitext(flaglink~='' and flaglink or 'Флаг')
	end
	if armswikitext~=nil then
	builder=builder:tag('td')
	:attr('align','center')
	:attr('colspan',colspan)
	:wikitext(armslink~='' and armslink or 'Герб')
	end
	builder=builder:done():done()
end

function IBC:hasanthem(former)
	if former==false then
		if self:universalarg('без гимна') then 
			return false 
		else 
			return true
		end
	else
		if self:notnillarg('гимн','p85')~='' then return true
		else 
			return false
		end
	end
end

function IBC:lifespan(builder)
	self.predecessornums = self:getArgNums('p')
	self.successornums = self:getArgNums('s')
	local foundednums = self:getArgNums('образовано')
	local eliminatednums = self:getArgNums('ликвидировано')
	local predecessorstext, successorstext, lifespantext
	predecessorstext, successorstext, lifespantext = '', '', ''
	if self:universalarg('период существования') then
	lifespantext=self:universalarg('период существования')
	else
	if self:notnillarg('образовано','p571')~='' then
	lifespantext = lifespantext..self:wikidata({'p571',self:universalarg('образовано')})
	end
	if self:notnillarg('ликвидировано','p576')~='' then
	lifespantext = lifespantext..'&nbsp;— '..self:wikidata({'p576',self:universalarg('ликвидировано')})
	end
	if math.max(table.count(foundednums),table.count(eliminatednums))~=0 then
	if lifespantext~='' then lifespantext = lifespantext..'<br>'
	for i=1,math.max(table.count(foundednums),table.count(eliminatednums)) do
		if i~=1 then lifespantext = lifespantext..'<br>' end
		if self:universalarg('образовано'..foundednums[i]) then
		lifespantext = lifespantext..self:universalarg('образовано'..foundednums[i])
		--if self:universalarg('ликвидировано'..foundednums[i]) then
		--lifespantext = lifespantext..'&nbsp;— '..self:universalarg('ликвидировано'..foundednums[i])
		--end
		end
		if self:universalarg('ликвидировано'..eliminatednums[i]) then
		lifespantext = lifespantext..'&nbsp;— '..self:universalarg('ликвидировано'..eliminatednums[i])
		end
		
	end
	end
	end
	end
	if (table.count(self.predecessornums)>0) and (table.count(self.predecessornums)<8) then
	for i=1,math.min(table.count(self.predecessornums),8) do
	if self:universalarg('p'..self.predecessornums[i]) then
	local predecessorflag
	if self:universalarg('flag_p'..self.predecessornums[i]) then
	predecessorflag = self.frame:preprocess('[[Файл:'..self:universalarg('flag_p'..self.predecessornums[i])..'|border|30px|link='..self:universalarg('p'..self.predecessornums[i])..']]')
	elseif self:universalarg('image_p'..self.predecessornums[i]) then
	predecessorflag = self:universalarg('image_p'..self.predecessornums[i]) else
	predecessorflag = '[[Файл:Flag of None.svg|30px|border]]'
	end
	predecessorstext = predecessorstext..self.frame:preprocess('[['..self:universalarg('p'..self.predecessornums[i])..'|<span style="font-size:400%">←</span>]]')..predecessorflag..'<br>'
	end
	end
	end
	if (table.count(self.successornums)>0) and (table.count(self.successornums)<8) then
	for i=1,math.min(table.count(self.successornums),8) do
	if self:universalarg('s'..self.successornums[i]) then
	local successorflag
	if self:universalarg('flag_s'..self.successornums[i]) then
	successorflag = self.frame:preprocess('[[Файл:'..self:universalarg('flag_s'..self.successornums[i])..'|border|30px|link='..self:universalarg('p'..self.successornums[i])..']]')
	elseif self:universalarg('image_s'..self.successornums[i]) then
	successorflag = self:universalarg('image_s'..self.successornums[i]) else
	successorflag = '[[Файл:Flag of None.svg|30px|border]]'
	end
	successorstext = successorstext..successorflag..self.frame:preprocess('[['..self:universalarg('s'..self.successornums[i])..'|<span style="font-size:400%">→</span>]]')..'<br>'
	end
	end
	end
	builder = builder:tag('table')
	:attr('width','100%')
	:css('text-align','center')
	:css('margin','0 auto')
	:css('background','none')
	:tag('tr')
	:tag('td')
	:attr('width','50px')
	:cssText('border:0; vertical-align:middle; font-size:30%; line-height:105%')
	:wikitext(predecessorstext)
	:done()
	:tag('td')
	:cssText('vertical-align:middle; text-align:center; font-size:115%; border:0')
	:wikitext(lifespantext)
	:done()
	:tag('td')
	:attr('width','50px')
	:cssText('border:0; vertical-align:middle; font-size:30%; line-height:105%')
	:wikitext(successorstext)
end

function IBC:renderanthem(builder,former)
	local anthemtext
	if former==true then
		anthemtext = (self:universalarg('подавить название графы гимна')==nil and 'Гимн<br>' or '')..self:wikidata({'p85',self:universalarg('гимн'),text='Гимн'})
	else
		anthemtext = self:universalarg('название гимна')~=nil and self.frame:preprocess("[[Государственный гимн|Гимн]]: ".."''[[Гимн "..(self:universalarg("родительный падеж") or "").."|"..self:universalarg("название гимна").."]]''") or self.frame:preprocess('[[Гимн '..(self:universalarg("родительный падеж") or '')..'|Государственный гимн '..(self:universalarg("родительный падеж") or '')..']]')
		if self:universalarg('аудио') then
		anthemtext = anthemtext..'<br>[[Файл:'..self:universalarg('аудио')..'|100px|center|noicon]]'
		end
	end
	builder = builder:tag('tr')
	:tag('td')
	:attr('align','center')
	:attr('colspan',2)
	:cssText('line-height:1.2em; padding:.4em .6em; border-top:0; vertical-align:middle; text-align:center; font-size:95%; background-color:#f9f9f9')
	:wikitext(anthemtext)
end

function IBC:renderfoundations(builder)
	local foundingdate = self:universalargs({'основано','основана','дата образования','образовано'})
	if foundingdate~=nil then
	builder=builder:tag('tr')
	:css('border-top','solid 1px #aaa')
	:tag('th')
	:css('padding-left','.5em;')
	:attr('width','50%')
	:wikitext('[[Основание государства|Дата образования]]')
	:done()
	:tag('td')
	:wikitext(foundingdate)
	end
	local independencedate = self:universalargs({'даты независимости','провозглашение независимости','дата независимости'}) 
	local independencefrom = self:universalarg('независимость от')
	if independencedate~=nil then
	builder=builder:tag('tr')
	:css('border-top',foundingdate==nil and 'solid 1px #aaa' or nil)
	:tag('th')
	:css('padding-left','.5em;')
	:attr('width','50%')
	:wikitext(self:universalarg('спорный статус')==nil and (self:universalarg('отображаемый тип независимости') or '[[Суверенитет|'..(self:universalarg('даты независимости') and 'Дата' or 'Даты')..' независимости]]') or 'Провозглашение независимости')
	:done()
	:tag('td')
	:wikitext(independencedate..(independencefrom~=nil and ('<br> (от&nbsp;'..self:universalarg('независимость от')..')') or ''))
	end
	if (self:universalarg('спорный статус')~=nil) and self:universalarg('дипломатическое признание') then
	builder=builder:tag('tr')
	:css('border-top',((foundingdate==nil) and (independencedate==nil)) and 'solid 1px #aaa' or nil)
	:tag('th')
	:attr('width','50%')
	:css('padding-left','.5em;')
	:wikitext('[[Международно-правовое признание|Дипломатическое признание]]')
	:done()
	:tag('td')
	:wikitext(self:universalarg('дипломатическое признание'))
	end
end

function IBC:renderstages(builder,former)
	local stagesnum=self:getArgNums('этап') or {}
	local stagescount=table.count(stagesnum)
	local histrow = (self:universalargs({'sovereignty_type','тип истории'}) or (former==true)) and true or false
	if stagescount>0 then
	if histrow==true then
	builder=builder:tag('tr')
	:addClass('mergedtoprow')
	:css('border-top', 'solid 1px #aaa')
	:tag('th')
	:attr('colspan',2)
	:css('padding-left','.5em')
	:wikitext(self:universalargs({'sovereignty_type','тип истории'}) or 'История')
	end
	for i=1,stagescount do
	local stageevent
	local stagedate
	if self:universalarg('этап'..stagesnum[i]) then
	stageevent=(former~=false and '' or '&nbsp;•&nbsp;')..self:universalarg('этап'..stagesnum[i])
	stagedate=(former~=false and '&nbsp;-&nbsp;' or '')..(self:universalarg('дата'..stagesnum[i]) or '')..(self:universalarg('год'..stagesnum[i]) or '')
	builder=builder:tag('tr')
	:addClass('merged'..(i==1 and (histrow~=true and 'top' or '') or (i==stagescount and 'bottom' or ''))..'row')
	:css('border-top', histrow==false and (i==1 and 'solid 1px #aaa' or nil) or nil)
	:tag('td')
	:wikitext(former~=true and stageevent or stagedate)
	:done()
	:tag('td')
	:wikitext(former~=true and stagedate or stageevent)
	end
	end
	end
end

function IBC:rendermaps(builder,maps)
	local maptext
	local firstmap
	maptext, firstmap = '',''
	if tostring(self:wikidata({'p242',(self:universalargs({'на карте','карта'})),plain='true'}))~='' then
		firstmap=self:wikidata({'p242[1]',(self:universalargs({'на карте','карта'})),size=(self:universalarg('размер карты') or '300x300px')})
		if self:universalargs({'описание карты','подпись к карте'}) then
			firstmap=firstmap..self.frame:preprocess('<div style="top:0.3em;"><small>'..(self:universalargs({'описание карты','подпись к карте'}))..'</small></div>')
		end
	end
	if firstmap~='' then
	maptext = firstmap
	if table.count(maps)>0 then
	maptext=maptext..'<br>'
	end
	end
	if table.count(maps)>0 then
	for i=1,table.count(maps) do
	local temparg
	temparg = i>1 and '<br>' or ''
	if self:universalargs({'на карте'..maps[i],'карта'..maps[i]}) then
	maptext=maptext..temparg..'[[Файл:'..(self:universalargs({'на карте'..maps[i],'карта'..maps[i]}))..'|'..(self:universalargs('размер карты'..maps[i]) or '300x300px')..']]'
	if self:universalargs('описание карты'..maps[i]) or self:universalargs('подпись к карте'..maps[i]) then
	maptext=maptext..self.frame:preprocess('<div style="top:0.3em;"><small>'..(self:universalargs('описание карты'..maps[i]) or self:universalargs('подпись к карте')..maps[i])..'</small></div>')
	end
	end
	end
	end
	builder=builder:tag('tr')
	:tag('td')
	:attr('align','center')
	:attr('colspan',2)
	:cssText('border: solid darkgray; border-width:1px 0')
	:wikitext(maptext)
end

function IBC:renderleaderarray(builder,former)
	local leadleaderarray = former~=true and (self:universalargs({'руководители','правители'})) or nil
	if leadleaderarray~=nil then
		self:rendersimplerow(builder,(self:universalargs({'должности руководителей','титулы правителей','титулы_правителей','титул_правителей','титул правителей'})),(self:universalargs({'руководители','правители'})))
	end
	local addleadercount
	addleadercount=table.count(self.leadernums) or 0
	if addleadercount>0 then
	if former==false then
	for i=1,addleadercount do
		self:rendersimplerow(builder,(self:universalargs('должность руководителя'..self.leadernums[i]) or self:universalargs('титул правителя'..self.leadernums[i]) or self:universalargs('титул_правителя'..self.leadernums[i])),(self:universalargs('руководитель'..self.leadernums[i]) or self:universalargs('правитель'..self.leadernums[i])))
	end
	else
	for i=1,addleadercount do
		if (self:universalargs({'титул_правителя'..self.leadernums[i],'титул правителя'..self.leadernums[i],'должность руководителя'..self.leadernums[i],'титул_правителей'..self.leadernums[i],'титул правителей'..self.leadernums[i]}) or (i==1 and (self:universalargs('должность руководителей') or self:universalargs('титул правителей') or self:universalargs('титул_правителей')) or nil))~=nil then
			builder=builder:tag('tr')
			:tag('th')
			:attr('colspan',2)
			:css('padding-left','.5em')
			:css('border-top', i==1 and 'solid 1px #aaa' or nil)
			:wikitext(self:universalargs({'титул_правителя'..self.leadernums[i],'титул правителя'..self.leadernums[i],'должность руководителя'..self.leadernums[i],'титул_правителей'..self.leadernums[i],'титул правителей'..self.leadernums[i]}) or (i==1 and (self:universalargs('должность руководителей') or self:universalargs('титул правителей') or self:universalargs('титул_правителей')) or nil))
		end
		self:rendersimplerow(builder,(self:universalargs('год руководителя'..self.leadernums[i]) or self:universalargs('год правителя'..self.leadernums[i]) or self:universalargs('год_правителя'..self.leadernums[i])),(self:universalargs('руководитель'..self.leadernums[i]) or self:universalargs('правитель'..self.leadernums[i])),true,true)
	end
	end
	end
end

function IBC:renderterritory(builder,former)
	local firstterritoryarg= tostring(self:wikidata({'p2046',self:universalargs({'территория','площадь'}),plain=true}))~='' and self:wikidata({'p2046',(self:universalargs({'территория','площадь'}))}) or nil
	if firstterritoryarg==nil and (table.count(self.territoryargs)>0) then
	firstterritoryarg = self:universalargs({'территория'..self.territoryargs[1],'площадь'..self.territoryargs[1]}) or nil
	table.remove(self.territoryargs,1)
	end
	local terrcount
	if self.territoryargs[1] and (self:universalargs({'территория'..self.territoryargs[1],'площадь'..self.territoryargs[1]})~=nil) and (self.territoryargs[1]~=nil) then
	terrcount=table.count(self.territoryargs)+1
	else
	terrcount=table.count(self.territoryargs)
	end
	builder=builder:tag('tr')
	:css('border-top','solid 1px #aaa')
	:tag('th')
	:css('padding-left','.5em')
	:wikitext(former~=true and '[[Территория государства|Территория]]' or 'Площадь')
	:done()
	:tag('td')
	:wikitext(former~=true and (self:universalarg('место по площади')~=nil and ('[[Список государств и зависимых территорий по площади|'..self:universalarg('место по площади')..'-я в мире]]') or '') or firstterritoryarg)
	:done()
	:done()
	if former~=true then
	builder=builder:tag('tr')
	:tag('td')
	:css('padding-left','.6em')
	:attr('rowspan',terrcount>1 and terrcount or nil)
	:wikitext('  • Всего')
	:done()
	:tag('td')
	:wikitext(firstterritoryarg..' км²')
	:done()
	:done()
	for k,v in pairs(self.territoryargs) do
		if self:universalargs({'территория'..v,'площадь'..v}) then
			builder=builder:tag('tr')
			:tag('td')
			:wikitext(self:universalargs({'территория'..v,'площадь'..v})..' км²')
		end
	end
	end
	if self:universalarg('процент воды') then
	self:rendersimplerow(builder,'• % водной поверхн.',self:universalarg('процент воды'),true,true)
	end
end

--function IBC:renderpopulation(builder,former)
--	local popfirst = self:wikidata({'p1082',self:universalargs({'население',''})})
--end

function IBC:renderpopulation(builder,former)
	local firstpoparg= tostring(self:wikidata({'p1082',self:universalarg('население'),plain=true}))~='' and self:wikidata({'p1082',(self:universalarg('население'))}) or nil
	if firstpoparg==nil and (table.count(self.territoryargs)>0) then
	firstpoparg = self:universalarg('население'..self.popnums[1]) or nil
	table.remove(self.popnums,1)
	end
	local popcount
	if self.popnums[1] and (self:universalarg('население'..self.popnums[1])~=nil) and (self.popnums[1]~=nil) then
	popcount=table.count(self.popnums)+1
	else
	popcount=table.count(self.popnums)
	end
	builder=builder:tag('tr')
	:css('border-top','solid 1px #aaa')
	:tag('th')
	:css('padding-left','.5em')
	:wikitext(former~=true and ('[['..self.frame:expandTemplate{title='Население государства',args={self.frame:preprocess('{{PAGENAME}}')}}..']]') or 'Население')
	:done()
	:tag('td')
	:wikitext(former~=true and (self:universalarg('место по населению')~=nil and ('[[Список стран по населению|('..self:universalarg('место по населению')..'-е)]]') or '') or firstpoparg)
	:done()
	:done()
	if former~=true then
	builder=builder:tag('tr')
	:tag('td')
	:css('padding-left','.6em')
	:attr('rowspan',popcount>1 and popcount or nil)
	:wikitext('  • Оценка'..(self:universalargs({'год оценки','год переписи'})~=nil and (' '..self:universalargs({'год оценки','год переписи'})) or ''))
	:done()
	:tag('td')
	:wikitext(firstpoparg..' чел.')
	:done()
	:done()
	for k,v in pairs(self.popnums) do
		if self:universalarg('население'..v) then
			builder=builder:tag('tr')
			:tag('td')
			:wikitext(self:universalarg('население'..v)..' чел.')
		end
	end
	if self:universalarg('население по переписи') then
	self:rendersimplerow(builder,'• Перепись',self:universalarg('население по переписи'),true,true)
	end
	end
	if self:universalarg('плотность населения') then
	builder:tag('tr')
	:tag('td')
	:css('padding-left','.6em')
	:wikitext(' • [[Плотность населения|Плотность]]')
	:done()
	:tag('td')
	:wikitext(self:universalarg('плотность населения')..' чел./км²'..(self:universalarg('место по плотности')~=nil and ('&nbsp;([[Список стран по плотности населения|'..self:universalarg('место по плотности')..'-я]])') or ''))
	end
end

function IBC:renderGDP(builder,former)
	if self.gdp and self.gdp~=nil then
	builder=builder:tag('tr')
	:css('border-top','solid 1px #aaa')
	:tag('th')
	:css('padding-left','.5em')
	:attr('colspan',2)
	:wikitext('[[Валовой внутренний продукт]]')
	:done()
	:done()
	:tag('tr')
	:tag('td')
	:css('padding-left','.5em')
	:wikitext('&nbsp;&nbsp;• Итого'..(self:universalarg('год расчёта ВВП')~=nil and (' ('..self:universalarg('год расчёта ВВП')..')') or ''))
	:done()
	:tag('td')
	:wikitext(self.gdp..'&nbsp;[[Доллар США|долл.]]'..(self:universalarg('место по ВВП')~=nil and ('&nbsp;([[Список стран по ВВП (ППС)|'..self:universalarg('место по ВВП')..'-й]])') or ''))
	:done()
	:done()
	if self.percapita and self.percapita~=nil then
	builder=builder:tag('tr')
	:tag('td')
	:css('padding-left','.5em')
	:wikitext('&nbsp;&nbsp;• На душу населения')
	:done()
	:tag('td')
	:wikitext(self.percapita..'&nbsp;[[Доллар США|долл.]]'..(self:universalarg('место по ВВП на душу населения')~=nil and ('&nbsp;([[Список стран по ВВП (ППС) на душу населения|'..self:universalarg('место по ВВП на душу населения')..'-й]])') or ''))
	:done()
	:done()
	end
	if self.gdpppp and self.gdpppp~=nil then
	builder=builder:tag('tr')
	:css('border-top',self.gdp==nil and 'solid 1px #aaa' or nil)
	:tag('th')
	:css('padding-left','.5em')
	:attr('colspan',2)
	:wikitext('[[Валовой внутренний продукт|ВВП]] <span style="font-weight:normal">([[Паритет покупательной способности|ППС]])</nobold')
	:done()
	:done()
	:tag('tr')
	:tag('td')
	:css('padding-left','.5em')
	:wikitext('&nbsp;&nbsp;• Итого'..(self:universalarg('год расчёта ВВП (ППС)')~=nil and (' ('..self:universalarg('год расчёта ВВП (ППС)')..')') or ''))
	:done()
	:tag('td')
	:wikitext(self.gdpppp..'&nbsp;[[Доллар США|долл.]]'..(self:universalarg('место по ВВП (ППС)')~=nil and ('&nbsp;([[Список стран по ВВП (ППС)|'..self:universalarg('место по ВВП (ППС)')..'-й]])') or ''))
	:done()
	:done()
	if self.ppppc and self.ppppc~=nil then
	builder=builder:tag('tr')
	:tag('td')
	:css('padding-left','.5em')
	:wikitext('&nbsp;&nbsp;• На душу населения')
	:done()
	:tag('td')
	:wikitext(self.ppppc..'&nbsp;[[Доллар США|долл.]]'..(self:universalarg('место по ВВП (ППС) на душу населения')~=nil and ('&nbsp;([[Список стран по ВВП (ППС) на душу населения|'..self:universalarg('место по ВВП (ППС) на душу населения')..'-й]])') or ''))
	:done()
	:done()
	end
	end
	if self.gdppnominal and self.gdppnominal~=nil then
	builder=builder:tag('tr')
	:css('border-top',(self.gdp==nil) and (self.gdpppp==nil) and 'solid 1px #aaa' or nil)
	:tag('th')
	:css('padding-left','.5em')
	:attr('colspan',2)
	:wikitext('[[Валовой внутренний продукт|ВВП]] <span style="font-weight:normal">(номинал)</span>')
	:done()
	:done()
	:tag('tr')
	:tag('td')
	:css('padding-left','.5em')
	:wikitext('&nbsp;&nbsp;• Итого'..(self:universalarg('год расчёта ВВП (номинал)')~=nil and (' ('..self:universalarg('год расчёта ВВП (номинал)')..')') or ''))
	:done()
	:tag('td')
	:wikitext(self.gdppnominal..'&nbsp;[[Доллар США|долл.]]'..(self:universalarg('место по ВВП (номинал)')~=nil and ('&nbsp;([[Список стран по ВВП (номинал)|'..self:universalarg('место по ВВП (номинал)')..'-й]])') or ''))
	:done()
	:done()
	if self.nominalpc and self.nominalpc~=nil then
	builder=builder:tag('tr')
	:tag('td')
	:css('padding-left','.5em')
	:wikitext('&nbsp;&nbsp;• На душу населения')
	:done()
	:tag('td')
	:wikitext(self.nominalpc..'&nbsp;[[Доллар США|долл.]]'..(self:universalarg('место по ВВП (номинал) на душу населения')~=nil and ('&nbsp;([[Список стран по ВВП (номинал) на душу населения|'..self:universalarg('место по ВВП (номинал) на душу населения')..'-й]])') or ''))
	:done()
	:done()
	end
	end
	--:wikitext()
	end
end

function IBC:rendersuccessionbottom(builder)
	local do_args = self:getArgNums('д') or {}
	local posle_args = self:getArgNums('п') or {}
	local hassuccessionargs = (table.count(self.predecessornums)+table.count(self.successornums)+table.count(do_args)+table.count(posle_args))>0 and true or false
	if (table.count(do_args)+table.count(posle_args)==0) and (math.max(table.count(self.predecessornums),table.count(self.successornums))<8) then
		hassuccessionargs=false
	end
	if hassuccessionargs then
		builder=builder:tag('tr')
		--:css('border-top','solid 1px #aaa')
		:tag('td')
		:attr('colspan',2)
		:tag('table')
		:attr('width','100%')
		:cssText('text-align:center; margin:0 auto;background-color:#F5F5F5;border-top:1px')
		:tag('tr')
		--:css('border-top','solid 1px #aaa')
		:tag('th')
		:css('text-align','center')
		:attr('colspan',2)
		:wikitext('Преемственность')
		:done()
		:done()
		:tag('tr')
		:tag('th')
		:attr('align','center')
		:wikitext(self:universalargs({'type_before','type_before','тип предшественников','тип_предшественников'}) or 'Предшественники')
		:done()
		:tag('th')
		:attr('align','center')
		:wikitext(self:universalargs({'type_after','type_after','тип преемников','тип_преемников'}) or 'Преемники')
		:done()
		:done()
		if math.max(table.count(self.predecessornums),table.count(self.successornums))>8 then
		for i=1,math.max(table.count(self.predecessornums),table.count(self.successornums)) do
			local successor
			local predecessor
			local pflagbottom
			local sflagbottom
			if self.predecessornums[i] then
			if self:universalarg('flag_p'..self.predecessornums[i]) and (self:universalarg('flag_p'..self.predecessornums[i])~=nil) then
			pflagbottom = self.frame:preprocess('[[Файл:'..self:universalarg('flag_p'..self.predecessornums[i])..'|border|20px|link='..self:universalarg('p'..self.predecessornums[i])..']]')
			elseif self:universalarg('image_p'..self.predecessornums[i]) and (self:universalarg('image_p'..self.predecessornums[i])~=nil) then
			pflagbottom = self:universalarg('image_p'..self.predecessornums[i]) else
			pflagbottom = '[[Файл:Blank.png|20px|border]]'
			end
			predecessor = self:universalarg('p'..self.predecessornums[i])~=nil and (pflagbottom..' '..self.frame:preprocess('[['..self:universalarg('p'..self.predecessornums[i])..']]')) or ''
			else
			predecessor = ''
			end
			if self.successornums[i] then
			if self:universalarg('flag_s'..self.successornums[i]) and (self:universalarg('flag_s'..self.successornums[i])~=nil) then
			sflagbottom = self.frame:preprocess('[[Файл:'..self:universalarg('flag_s'..self.successornums[i])..'|border|20px|link='..self:universalarg('s'..self.successornums[i])..']]')
			elseif self:universalarg('image_s'..self.successornums[i]) and (self:universalarg('image_s'..self.successornums[i])~=nil) then
			sflagbottom = self:universalarg('image_s'..self.successornums[i]) else
			sflagbottom = '[[Файл:Blank.png|20px|border]]'
			end
			successor = self:universalarg('s'..self.successornums[i])~=nil and (sflagbottom..' '..self.frame:preprocess('[['..self:universalarg('s'..self.successornums[i])..']]')) or ''
			else
			successor = ''
			end
			builder:tag('tr')
			:tag('td')
			:cssText('border:0; padding:0; vertical-align:middle; text-align:left')
			:css('padding-left','.5em')
			:attr('width','50%')
			:wikitext(predecessor)
			:done()
			:tag('td')
			:cssText('border:0; padding:0; vertical-align:middle; text-align:left')
			:attr('width','50%')
			:wikitext(successor)
		end
	end
	if math.max(table.count(do_args),table.count(posle_args))>0 then
		for i=1,math.max(table.count(do_args),table.count(posle_args)) do
			builder=builder:tag('tr')
			:tag('td')
			:cssText('border:0; padding:0; vertical-align:middle')
			:attr('width','50%')
			:wikitext(do_args[i]~=nil and (self:universalargs('д'..do_args[i]) or '') or '')
			:done()
			:tag('td')
			:cssText('border:0; padding:0; vertical-align:middle')
			:attr('width','50%')
			:wikitext(posle_args[i]~=nil and (self:universalargs('п'..posle_args[i]) or '') or '')
		end
	end
	end
end

function IBC:render(former)
	local builder = mw.html.create('')
--[[	:tag('table')
	:addClass('infobox')
	:css('width','300px')
	:css('border-collapse','collapse')
	:attr('data-name', former~=true and 'Государство' or 'Историческое государство')
	]]--
	self:statename(builder)
	local hasstatusfield, extrastatus
	hasstatusfield, extrastatus = false, false
	if not former then
	extrastatus=self:IsContestedOrVirtual()
	end
	if (former==true) or (extrastatus==true) then
	hasstatusfield = true
	end
	if hasstatusfield == true then
	self:renderstatusrow(builder,former)
	end
	if former==true then
	self:lifespan(builder:tag('tr'):tag('th'):attr('colspan',2):cssText('vertical-align:middle; text-align:center; border:solid #aaa; border-width:1px 0; padding:.2em 0; background:#EFEFEF'))
	end
	local hasflagandarms = self:hassymbols(former)
	if hasflagandarms==true then
	self:renderflagandarms(builder:tag('tr'):tag('td'):attr('align','center'):attr('colspan',2):attr('width','100%'),former)
	end
	if self:universalargs('девиз') then
	self:renderMotto(builder)
	end
	local hasanthem = self:hasanthem(former)
	if hasanthem==true then
	self:renderanthem(builder,former)
	end
	local maps = self:getMultiprefixArgs({'карта','на карте'},2) or {}
	if (tostring(self:wikidata({'p242',(self:universalargs('карта') or self:universalargs('на карте') or ''),plain='true'}))~='') or table.count(maps)~=0 then
	self:rendermaps(builder,maps)
	end
	if former==false then
	self:renderfoundations(builder)
	self:renderstages(builder,former)
	end
	if tostring(self:wikidata({'p37',(self:universalargs('язык') or self:universalargs('языки')),plain='true'}))~='' then
	self:rendersimplerow(builder,(former~=true and ('[[Официальный язык|'..(self:universalargs('языки')~=nil and 'Официальные языки' or 'Официальный язык')..']]') or 'Язык(и)'),self:wikidata({'p37',(self:universalargs('языки') or self:universalargs('язык'))}))
	end
	if tostring(self:wikidata({'p36',self:universalargs('столица')}))~='' then
	self:rendersimplerow(builder,'[[Столица]]',(self:wikidata({'p36',self:universalargs('столица')})))
	end
	if self:universalargs('города') or self:universalargs('крупнейший город') or self:universalargs('крупнейшие города') then
	self:rendersimplerow(builder,(self:universalargs('крупнейший город')~=nil and 'Крупнейший город' or 'Крупнейшие города'),(self:universalargs('крупнейший город') or self:universalargs('города') or self:universalargs('крупнейшие города')))
	end
	if tostring(self:wikidata({'p122',(self:universalargs('форма_правления') or self:universalargs('форма правления')),plain=true}))~='' then
	self:rendersimplerow(builder,'[[Форма государственного правления|Форма правления]]',self:wikidata({'p122',(self:universalargs('форма_правления') or self:universalargs('форма правления'))}))
	end
	if self:universalargs('династия') then
	self:rendersimplerow(builder,'Династия',self:universalargs('династия'))
	end
	self.leadernums=self:getMultiprefixArgs({'руководитель','правитель'})
	if self:universalargs('руководители') or self:universalargs('правители') or (table.count(self.leadernums)>0) then
	self:renderleaderarray(builder,former)
	end
	if former==true then
	if self:universalargs('религия') then
	self:rendersimplerow(builder,'Религия',self:universalargs('религия'))
	end
	else
	if self:universalargs('государственная религия') then
	self:rendersimplerow(builder,'[[Государственная религия|Госрелигия]]',self:universalargs('государственная религия'))
	end
	end
	self.territoryargs = self:getMultiprefixArgs({'территория','площадь'},2) or {}
	if tostring(self:wikidata({'p2046',self:universalargs({'территория','площадь'}),plain=true}))~='' or (table.count(self.territoryargs)>0) then
	self:renderterritory(builder,former)
	end
	if tostring(self:wikidata({'p2046',self:universalargs('население','население по переписи')}))~='' then
	self:renderpopulation(builder,former)
	end
	self.gdpppp=tostring(self:wikidata({'p4010',self.args['ВВП (ППС)'], plain='true'}))~='' and self:wikidata({'p4010',self.args['ВВП (ППС)']}) or nil
	self.gdppnominal=tostring(self:wikidata({'p2131',self.args['ВВП (номинал)'], plain='true'}))~='' and self:wikidata({'p2131',self.args['ВВП (номинал)']}) or nil
	self.ppppc=tostring(self:wikidata({'p2299',self.args['ВВП (ППС) на душу населения'],plain='true'}))~='' and self:wikidata({'p2299',self.args['ВВП (ППС) на душу населения']}) or nil
	self.nominalpc=tostring(self:wikidata({'p2132',self.args['ВВП (номинал) на душу населения'],plain='true'}))~='' and self:wikidata({'p2132',self.args['ВВП (номинал) на душу населения']}) or nil
	self.popnums=self:getArgNums('население',2) or ''
	if (self.gdp and (self.gdp~=nil)) or (self.gdpppp and (self.gdpppp~=nil)) or (self.gdppnominal and (self.gdppnominal~=nil)) then
	self:renderGDP(builder,former)
	end
	if self.args['ИРЧП'] then
	self:rendersimplerow(builder,'[[Индекс человеческого развития|ИЧР]]'..(self:universalarg('год расчёта ИРЧП')~=nil and ('&nbsp;('..self:universalarg('год расчёта ИРЧП')..')') or ''),self.args['ИРЧП']..(self:universalarg('уровень ИРЧП')~=nil and ('&nbsp;('..self:universalarg('уровень ИРЧП')) or '')..(self:universalarg('место по ИРЧП')~=nil and ('&#059;&nbsp;[[Список стран по индексу человеческого развития|'..self:universalarg('место по ИРЧП')..'-е место]]')..(self:universalarg('уровень ИРЧП')~=nil and ')' or '')))
	end
	if self:universalargs('этнохороним') then
	self:rendersimplerow(builder,'[[Названия жителей]]',self:universalargs('этнохороним'))
	end
	if tostring(self:wikidata({'p38',self:universalarg('валюта'),plain='true'}))~='' then
	self:rendersimplerow(builder,'[[Валюта]]',self:wikidata({'p38',self:universalarg('валюта')}))
	end
	if tostring(self:wikidata({'p78',self:universalargs({'домены','домен'}),plain='true'}))~='' then
	self:rendersimplerow(builder,'[[Домен верхнего уровня|Интернет-домен'..(self:universalarg('домены')~=nil and 'ы' or '')..']]',self:wikidata({'p78',self:universalargs({'домены','домен'})}))
	end
	if tostring(self.frame:preprocess('{{#property:p297}}'))~='' then
	self:rendersimplerow(builder,'[[ISO 3166-1|Код ISO]]',self.frame:preprocess('{{#property:p297}}'))		
	end
	if tostring(self.frame:preprocess('{{#property:p984}}'))~='' then
	self:rendersimplerow(builder,'[[Список кодов МОК|Код МОК]]',self.frame:preprocess('{{#property:p984}}'))		
	end
	if tostring(self:wikidata({'p474',self:universalarg('телефонный код'),plain='true'}))~='' then
	self:rendersimplerow(builder,'[[Список телефонных кодов стран|Телефонный код]]',self:universalarg('телефонный код')~=nil and ('+'..self:universalarg('телефонный код')) or self:wikidata({'p474'}))
	end
	if tostring(self:wikidata({'p421',self:universalargs({'часовые пояса','часовой пояс'}),plain='true'}))~='' then
	self:rendersimplerow(builder,'[[Часовой пояс'..(tostring(self:wikidata({'p421','часовые пояса'}))~='' and '|Часовые пояса' or '')..']]',self:wikidata({'p421',self:universalargs({'часовые пояса','часовой пояс'})}))
	end
	local addparam = {}
	addparam = self:getMultiprefixArgs({'содержимое_параметра','содержимое параметра'})
	if table.count(addparam)>0 then
		for k,v in pairs(addparam) do
			self:rendersimplerow(builder,(self:universalargs({'дополнительный параметр'..v,'дополнительный_параметр'..v}) or ''),(self:universalargs({'содержимое_параметра'..v,'содержимое параметра'..v}) or ''))
		end
	end
	if former==true then
	self:renderstages(builder,former)
	self:rendersuccessionbottom(builder)
	end
	return builder
	
end

function IBC.new(frame, args)
	if not args then
		args = require('Module:Arguments').getArgs(frame, {wrappers = {'Template:Государство', 'Template:Историческое государство','Участник:Seryo93/Историческое государство'}})
		--return
	end
	local obj = {
		frame = frame,
		args = args,
		predecessornums = {},
		successornums = {},
		leadernums = {},
		territoryargs = {},
		popnums = {},
		gdp=args['ВВП'] or nil,
		percapita=args['ВВП на душу населения'],
		gdpppp = nil,
		gdppnominal = nil,
		ppppc = nil,
		nominalpc= nil,
	}
	return setmetatable(obj, IBC)
end

local p = {}

function p.main(frame)
	return IBC.new(frame):render(false)
	
end


function p.mainFormer(frame)
	return IBC.new(frame):render(true)
	
end

return p