Модуль:МестоПоНаселениюРегионы
Внешний вид
Для документации этого модуля может быть создана страница Модуль:МестоПоНаселениюРегионы/doc
require('Module:No globals')
local bit32 = require( 'bit32' )
local ArrayPopSRC= mw.loadData('Module:Statistical/RUS-AAA')
local ArrayPopCur = {}
local function LimitDouble(Val)
local MaxNumber = 2147483648
return Val - (math.floor(Val / MaxNumber) * MaxNumber)
end
local function shl(Val, Shift)
if Shift > 0 then
return LimitDouble(Val * (2 ^ Shift))
else
return Value
end
end
local function shr(Val, Shift)
if Shift > 0 then
return math.floor(Val / (2 ^ Shift))
else
return Val
end
end
local function MakeHash(PlaceName)
local dataLength = mw.ustring.len(PlaceName)
if dataLength == 0 then return 0 end
local hash = dataLength
local remainingBytes = math.fmod(dataLength, 2)
local numberOfLoops = math.floor(dataLength / 2)
local currentIndex = 0
local tmp = 0
while (numberOfLoops > 0) do
hash = LimitDouble(hash + mw.ustring.codepoint(PlaceName, currentIndex + 1))
tmp = bit32.bxor(shl(mw.ustring.codepoint(PlaceName, currentIndex + 2), 11), hash)
hash = bit32.bxor(shl(hash, 16), tmp)
hash = LimitDouble(hash + shr(hash, 11))
currentIndex = currentIndex + 2
numberOfLoops = numberOfLoops - 1
end
if remainingBytes == 1 then
hash = LimitDouble(hash + mw.ustring.codepoint(PlaceName, currentIndex + 1))
hash = bit32.bxor(hash, shl(hash, 10))
hash = LimitDouble(hash + shr(hash, 1))
end
hash = bit32.bxor(hash, shl(hash, 3))
hash = LimitDouble(hash + shr(hash, 5))
hash = bit32.bxor(hash, shl(hash, 4))
hash = LimitDouble(hash + shr(hash, 17))
hash = bit32.bxor(hash, shl(hash, 25))
hash = LimitDouble(hash + shr(hash, 6))
return hash
end
local function Getreg(regname)
local PlaceName = regname
if PlaceName == nil then return "Введите название объекта АТД" end
PlaceName = mw.text.trim(PlaceName)
local PlaceHash = MakeHash(PlaceName)
local function FormatH()
return PlaceHash
end
local PlaceData = nil
PlaceData = ArrayPopSRC[PlaceHash]
local LastRecord = 0
for k in pairs(PlaceData) do LastRecord = LastRecord + 1 end
local NumRecord = LastRecord
local function FormatN()
return PlaceData[NumRecord][2]
end
return FormatN()
end
local ArrayReg = {
'Алтай кырай',
'Амур область',
'Архангельск область',
'Астрахань область',
'Белгород область',
'Брянск область',
'Владимир область',
'Волгоград область',
'Вологда область',
'Воронеж область',
'Москва',
'Санкт-Петербург',
'Еврей автоном область',
'Забайкальский кырай',
'Иваново область',
'Иркутск область',
'Кабардин-Балкария',
'Калининград область',
'Калуга область',
'Камчатка край',
'Карачай-Черкесия',
'Карелия Республика',
'Кемерово область',
'Киров область',
'Кострома область',
'Краснодар край',
'Красноярск край',
'Курган область',
'Курск область',
'Ленинград область',
'Липецк область',
'Магадан область',
'Москва область',
'Мурманск область',
'Ненец автоном округ',
'Нижний Новгород область',
'Новгород область',
'Новосибирск область',
'Омск область',
'Оренбург область',
'Орёл область',
'Пенза область',
'Пермь кырай',
'Приморский кырай',
'Псков область',
'Адыгея',
'Алтай Республика',
'Башкортостан',
'Бурятия',
'Дагестан',
'Ингушетия',
'Калмыкия',
'Коми Республика',
'Крым Республика',
'Марий Эл',
'Мордовия',
'Якутия',
'Тӱндӱк Осетия',
'Татарстан',
'Тыва',
'Хакасия',
'Ростов область',
'Рязань область',
'Самара область',
'Саратов область',
'Сахалин область',
'Свердловск область',
'Севастополь',
'Смоленск область',
'Ставрополь край',
'Тамбов область',
'Тверь область',
'Томск область',
'Тула область',
'Тюмень область',
'Удмуртия',
'Ульяновск область',
'Хабаровск край',
'Ханты-Манси автоном округ — Югра',
'Челябинск область',
'Чечня',
'Чувашия',
'Чукотка автономный округ',
'Ямало-Ненец автоном округ',
'Ярославль область'}
local NOAOCheck = {'Архангельск область јок Ненец автоном округ', 'Тюмень область јок автоном округлер'}
local ForceAOCheck = {'Архангельск область', 'Тюмень область'}
local ArrayDatas = {}
local ArrayIndexes = {}
local ArrayTemps = {}
local PopPlace = {}
PopPlace.__index = PopPlace
function PopPlace: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 PopPlace:NAOCheck(Regarg, NAOARG)
if table.contains(NOAOCheck, Regarg) then
return true
end
if NAOARG=='NOAO' then
if table.contains(ForceAOCheck, Regarg) then
return false
else
return true
end
end
return false
end
function PopPlace:render()
if self.args['ФО'] then
ArrayReg = require('Module:МестоПоНаселениюРегионы/'..self.args['ФО'])
end
for p,v in ipairs(ArrayReg) do
ArrayPopCur[v..""]=Getreg(v)
end
local AOBase, NAOPop, TOBase, KHMAOPop, YNAOPop
AOBase = ArrayPopCur['Архангельск область']
NAOPop = ArrayPopCur['Ненец автоном округ']
TOBase = ArrayPopCur['Тюмень область']
KHMAOPop = ArrayPopCur['Ханты-Манси автоном округ — Югра']
YNAOPop = ArrayPopCur['Ямало-Ненец автоном округ']
if self:NAOCheck(self.args['1'], self.args['2']) then
local GETArOblForReplace = self:gkeyfromVal(ArrayReg, 'Архангельск область')
local GETTOblForReplace = self:gkeyfromVal(ArrayReg, 'Тюмень область')
ArrayReg[GETArOblForReplace] = tostring(ArrayReg[GETArOblForReplace]..' јок Ненец автоном округ')
ArrayReg[GETTOblForReplace] = tostring(ArrayReg[GETTOblForReplace]..' јок автоном округлер')
end
for p,v in ipairs(ArrayReg) do
if v=='Архангельск область јок Ненец автоном округ' then
ArrayDatas[#ArrayDatas+1] = AOBase-NAOPop
ArrayTemps[v..""]=AOBase-NAOPop
elseif v=='Тюмень область јок автоном округлер' then
ArrayDatas[#ArrayDatas+1]=TOBase-KHMAOPop-YNAOPop
ArrayTemps[v..""]=TOBase-KHMAOPop-YNAOPop
else
ArrayDatas[#ArrayDatas+1] = ArrayPopCur[v]
ArrayTemps[v..""]=ArrayPopCur[v]
end
end
table.sort(ArrayDatas, function(a,b) return a>b end)
for _,o in ipairs(ArrayReg) do
ArrayIndexes[o..""] = self:gkeyfromVal(ArrayDatas, ArrayTemps[o..""])
end
--end
ArrayPopSRC, ArrayDatas, ArrayTemps, NOAOCheck, ForceAOCheck, AOBase, NAOPop, TOBase, KHMAOPop, YNAOPop = nil
if table.contains(ArrayReg, self.args['1']) then
ArrayReg = nil
return ArrayIndexes[self.args['1']] or ''
end
end
function PopPlace.new(frame, args)
if not args then
args = require('Module:Arguments').getArgs(frame, {wrappers = {'Template:МестоПоНаселениюРегионы'}})
--return
end
local obj = {
frame = frame,
args = args
}
return setmetatable(obj, PopPlace)
end
local p = {}
function p.main(frame)
return PopPlace.new(frame):render()
end
return p