Модуль:ГІатІилъиИкълимал/БакІ

Для документации этого модуля может быть создана страница Модуль:ГІатІилъиИкълимал/БакІ/doc

require('Module:No globals')

local ArrayRU = {'Алтай край', 'Амур област', 'Архангелск област', 'Астрахан област', 'Белгород област', 'Брянск област', 'Владимир област', 'Волгоград област', 'Вологодск област', 'Воронеж област', 'Москва', 'Санкт-Петербург', 'ЖугьутІ автономияб област', 'Забайкал край', 'Иваново област', 'Иркутск област', 'Къабарда-Балкъар Республика', 'Калининград област', 'Калуга област', 'Камчатка край', 'Къарачай-Черкес Республика', 'Карелия Республика', 'Кемерово област', 'Киров област', 'Кострома област', 'Краснодар край', 'Красноярск край', 'Курган област', 'Курск област', 'Ленинград област', 'Липецк област', 'Магадан област', 'Москва област', 'Мурманск област', 'Ненец автономияб икълим', 'Нижегород област', 'Новгород област', 'Новосибирск област', 'Омск област', 'Оренбург област', 'Орел област', 'Пенза област', 'Перм край', 'Приморск край', 'Псков област', 'Адигея Республика', 'Алтай Республика', 'Башкортостан Республика', 'Бурятия Республика', 'Дагъистан Республика', 'Гъалгъай Республика', 'Калмикия Республика', 'Коми Республика', 'Крим Республика', 'Марий Эл Республика', 'Мордовия Республика', 'Саха (Якутия) Республика', 'Шималияб Гьиристан – Алания Республика', 'Татарстан Республика', 'Тива Республика', 'Хакасия Республика', 'Ростов област', 'Рязан област', 'Самара област', 'Саратов област', 'Сахалин област', 'Свердловск област', 'Севастопол', 'Смоленск област', 'Ставропол край', 'Тамбов област', 'Твер област', 'Томск област', 'Тула област', 'Тюмен област', 'Удмурт Республика', 'Улянов област', 'Хабаровск край', 'Ханти-Мансийск автономияб икълим - Югра', 'Челябинск област', 'Буртиялъ Республика', 'Чуваш Республика', 'Чукотка автономияб икълим', 'Ямал-Ненец автономияб икълим', 'Ярослав област'}

local NOAOCheck = {'Ненец автономияб икълим гьечІого Архангелск област', 'Автономиял икълимал гьечІого Тюмен област'}

local ForceAOCheck = {'Архангелск област', 'Тюмен област'}

local ArrayFD = {'Централияб федералияб икълим', 'Шималиябгун-БакътІерхьул федералияб икълим', 'Къиблаяб федералияб икълим', 'Шималияб-Кавказалъул федералияб икълим', 'Колгаялъул федералияб икълим', 'Уралалъул федералияб икълим', 'Сибиралъул федералияб икълим', 'РикІкІада-Бакъбаккул федералияб икълим'}

local AliasesForIDXCloning = {
['Москва шагьар']='Москва',
['Карелия']='Карелия Республика',
['Санкт-Петербург шагьар']='Санкт-Петербург',
['Адигея']='Адигея Республика',
['Калмикия']='Калмикия Республика',
['Севастопол шагьар']='Севастопол',
['Дагъистан']='Дагъистан Республика',
['Гъалгъай']= 'Гъалгъай Республика',
['Къабарда-Балкъар']='Къабарда-Балкъар Республика',
['Къарачай-Черкес']='Къарачай-Черкес Республика',
['Шималияб Гьиристан']='Шималияб Гьиристан – Алания Республика',
['Буртиялъ']='Буртиялъ Республика',
['Башкортостан']='Башкортостан Республика',
['Марий Эл']='Марий Эл Республика',
['Мордовия']='Мордовия Республика',
['Татарстан']='Татарстан Республика',
['Удмуртия']='Удмурт Республика',
['Чувашия']='Чуваш Республика',
['Ханти-Мансийск автономияб икълим — Югра']='Ханти-Мансийск автономияб икълим - Югра',
['Бурятия']='Бурятия Республика',
['Тива']='Тива Республика',
['Хакасия']='Хакасия Республика',
['Якутия']='Саха (Якутия) Республика',
}

local ListAliases = {'Москва шагьар', 'Карелия', 'Санкт-Петербург шагьар', 'Адигея', 'Калмикия', 'Севастопол шагьар', 'Дагъистан', 'Гъалгъай', 'Къабарда-Балкъар', 'Къарачай-Черкес', 'Шималияб Гьиристан', 'Буртиялъ', 'Башкортостан', 'Марий Эл', 'Мордовия', 'Татарстан', 'Удмуртия', 'Чувашия', 'Ханти-Мансийск автономияб икълим — Югра', 'Бурятия', 'Тива', 'Хакасия', 'Якутия'}

local ArrayDatas = {}

local ArrayIndexes = {}

local ArrayTemps = {}

local AreaPlace = {}
AreaPlace.__index = AreaPlace

function AreaPlace:gkeyfromVal( t, value )
  for k,v in pairs(t) do
    if v==value then return k end
  end
  return ''
end

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

function AreaPlace:NAOCheck(arg, NAOARG)
	if table.contains(NOAOCheck, arg) then
		return true
	end
	if NAOARG=='NOAO' then
		if table.contains(ForceAOCheck, arg) then
			return false
		else
			return true
		end
	end
	return false
end

function AreaPlace:render()
	local ArrayToCheck
	if self.args['ФО'] then 
		ArrayRU = require('Module:ГІатІилъиИкълимал/БакІ/'..self.args['ФО'])
	end
	if table.contains(ArrayFD, self.args['1']) then
		ArrayToCheck = ArrayFD
	else
		ArrayToCheck = ArrayRU
	end
	ArrayFD, ArrayRU = nil
	if self:NAOCheck(self.args['1'], self.args['2']) then
		local GETArOblForReplace = self:gkeyfromVal(ArrayToCheck, 'Архангелск област')
		local GETTOblForReplace = self:gkeyfromVal(ArrayToCheck, 'Тюмен област')
		ArrayToCheck[GETArOblForReplace] = tostring(ArrayToCheck[GETArOblForReplace]..' Ненец автономияб икълим гьечІого')
		ArrayToCheck[GETTOblForReplace] = tostring(ArrayToCheck[GETTOblForReplace]..' автономиял икълимал гьечІого')
	end	
	for p,v in ipairs(ArrayToCheck) do
		-- временное решение для ДВФО и СФО образца ноября 2018 года, пока не будут опубликованы данные о площади на январь 2019 года
		if ((v=='РикІкІаада-Бакъбаккул федералияб икълим') or (v=='Сибиралъул федералияб икълим')) and (tonumber(tostring(self.frame:expandTemplate{ title = 'ГІатІилъиИкълимал', args = {v, ['Формат']='Сон'} }))<2019) then
		local ZabKrai = tonumber(tostring(self.frame:expandTemplate{ title = 'ГІатІилъиИкълимал', args = {'Забайкал край'} }))
		local BuryatR = tonumber(tostring(self.frame:expandTemplate{ title = 'ГІатІилъиИкълимал', args = {'Бурятия Республика'} }))
		local TempFDArea = tonumber(tostring(self.frame:expandTemplate{ title = 'ГІатІилъиИкълимал', args = {v} }))
		if v=='РикІкІада-Бакъбаккул федералияб икълим' then
		ArrayDatas[#ArrayDatas+1] = TempFDArea+ZabKrai+BuryatR
		ArrayTemps[v..""]=TempFDArea+ZabKrai+BuryatR
		else
		ArrayDatas[#ArrayDatas+1] = TempFDArea+ZabKrai+BuryatR
		ArrayTemps[v..""]=TempFDArea+ZabKrai+BuryatR			
		end
		else
		ArrayDatas[#ArrayDatas+1] = tonumber(tostring(self.frame:expandTemplate{ title = 'ГІатІилъиИкълимал', args = {v} }))
		ArrayTemps[v..""]=tonumber(tostring(self.frame:expandTemplate{ title = 'ГІатІилъиИкълимал', args = {v} }))
		end
	end		
	table.sort(ArrayDatas, function(a,b) return a>b end)
	for _,o in ipairs(ArrayToCheck) do 
		ArrayIndexes[o..""] = self:gkeyfromVal(ArrayDatas, ArrayTemps[o..""])
	end
	for _,a in ipairs(ListAliases) do
		if ArrayIndexes[tostring(AliasesForIDXCloning[a..""])] ~= ('' or nil) then
		ArrayIndexes[a..""] = ArrayIndexes[tostring(AliasesForIDXCloning[a..""])]
		end
	end
	--end
	ArrayDatas, ArrayTemps, ArrayToCheck, AliasesForIDXCloning, ListAliases, NOAOCheck = nil
	return ArrayIndexes[self.args['1']] or ''
end

function AreaPlace.new(frame, args)
	if not args then
		args = require('Module:Arguments').getArgs(frame, {wrappers = {'Template:ГІатІилъиИкълимал/БакІ', 'Template:ГІатІилъиИкълимал', 'Template:ГІатІилъиИкълимал/Украина'}})
		--return
	end
	local obj = {
		frame = frame,
		args = args
	}
    
	return setmetatable(obj, AreaPlace)
end

local p = {}

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

return p