Модуль:ПлощадьРегионы/Место

Документация
require('strict')

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
		ArrayDatas[#ArrayDatas+1] = tonumber(tostring(self.frame:expandTemplate{ title = 'ПлощадьРегионы', args = {v} }))
		ArrayTemps[v..""]=tonumber(tostring(self.frame:expandTemplate{ title = 'ПлощадьРегионы', args = {v} }))
	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