Модуль:TerritorialDivision: различия между версиями
Перейти к навигации
Перейти к поиску
[отпатрулированная версия] | [отпатрулированная версия] |
Содержимое удалено Содержимое добавлено
Нет описания правки |
Нет описания правки |
||
(не показано 14 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
local p = {} |
local p = {} |
||
local mRedirect = require('Module:Redirect') |
|||
local function Declension(collocation, case) |
local function Declension(collocation, case) |
||
local str = string.match(collocation, "([^\(]+)") |
|||
local str = string.match(collocation, "([^(]+)") |
|||
if case == Genitive then |
if case == Genitive then |
||
if string.match(str, "ий район") then |
if string.match(str, "ий район") then |
||
Строка 12: | Строка 15: | ||
elseif string.match(str, "ское сельское поселение") then |
elseif string.match(str, "ское сельское поселение") then |
||
return string.gsub( str, "ское сельское поселение", "ского сельского поселения" ) |
return string.gsub( str, "ское сельское поселение", "ского сельского поселения" ) |
||
elseif string.match(str, "Сельское поселение") then |
|||
return string.gsub( str, "Сельское поселение", "сельского поселения" ) |
|||
elseif string.match(str, "сельское поселение") then |
|||
return string.gsub( str, "сельское поселение", "сельского поселения" ) |
|||
elseif string.match(str, "Городское поселение") then |
|||
return string.gsub( str, "Городское поселение", "городского поселения" ) |
|||
elseif string.match(str, "городское поселение") then |
|||
return string.gsub( str, "городское поселение", "городского поселения" ) |
|||
elseif string.match(str, "ий городской округ") then |
elseif string.match(str, "ий городской округ") then |
||
return string.gsub( str, "ий |
return string.gsub( str, "ий городской округ", "ого городского округа" ) |
||
elseif string.match(str, "ый городской округ") then |
elseif string.match(str, "ый городской округ") then |
||
return string.gsub( str, "ый |
return string.gsub( str, "ый городской округ", "ого городского округа" ) |
||
elseif string.match(str, "Городской округ") then |
elseif string.match(str, "Городской округ") then |
||
return string.gsub( str, "Городской округ", "городского округа" ) |
return string.gsub( str, "Городской округ", "городского округа" ) |
||
elseif string.match(str, "городской округ") then |
elseif string.match(str, "городской округ") then |
||
return string.gsub( str, "городской округ", "городского округа" ) |
return string.gsub( str, "городской округ", "городского округа" ) |
||
elseif string.match(str, "ий муниципальный округ") then |
|||
return string.gsub( str, "ий муниципальный округ", "ого муниципального округа" ) |
|||
elseif string.match(str, "ый муниципальный округ") then |
|||
return string.gsub( str, "ый муниципальный округ", "ого муниципального округа" ) |
|||
elseif string.match(str, "Муниципальный округ") then |
|||
return string.gsub( str, "Муниципальный округ", "муниципального округа" ) |
|||
elseif string.match(str, "муниципальный округ") then |
|||
return string.gsub( str, "муниципальный округ", "муниципального округа" ) |
|||
end |
end |
||
end |
end |
||
Строка 27: | Строка 46: | ||
local args = frame:getParent().args |
local args = frame:getParent().args |
||
if args[1]==nil then |
if args[1]==nil then |
||
CallSite = mw.wikibase. |
CallSite = mw.wikibase.getEntity() |
||
else |
else |
||
CallSite = mw.wikibase. |
CallSite = mw.wikibase.getEntity(string.match( args[1], "Q%d+")) |
||
end |
end |
||
if CallSite==nil then do return "Не удалось получить свойства района из викидаты" end end |
if CallSite==nil then do return "Не удалось получить свойства района из викидаты" end end |
||
Строка 38: | Строка 57: | ||
elseif (CallSite.claims.P31 and CallSite.claims.P31[1].mainsnak.datavalue.value['id'] == "Q634099") or |
elseif (CallSite.claims.P31 and CallSite.claims.P31[1].mainsnak.datavalue.value['id'] == "Q634099") or |
||
(CallSite.claims.P31 and CallSite.claims.P31[1].mainsnak.datavalue.value['id'] == "Q2661988") then |
(CallSite.claims.P31 and CallSite.claims.P31[1].mainsnak.datavalue.value['id'] == "Q2661988") then |
||
District = mw.wikibase. |
District = mw.wikibase.getEntity( CallSite.claims.P131 and CallSite.claims.P131[1].mainsnak.datavalue.value['id'] ) |
||
else |
else |
||
do return "Неизвестный тип поселения. Сообщите, пожалуйста, на страницу обсуждения шаблона" end |
do return "Неизвестный тип поселения. Сообщите, пожалуйста, на страницу обсуждения шаблона" end |
||
Строка 66: | Строка 85: | ||
if ( claim['rank'] ~= "deprecated" and claim.mainsnak.datavalue.value['id'] ) then |
if ( claim['rank'] ~= "deprecated" and claim.mainsnak.datavalue.value['id'] ) then |
||
local childQ = claim.mainsnak.datavalue.value['id'] |
local childQ = claim.mainsnak.datavalue.value['id'] |
||
local Child = mw.wikibase. |
local Child = mw.wikibase.getEntity( childQ ) |
||
if Child.claims.P31 and Child.claims.P31[1].mainsnak.datavalue.value['id'] == "Q634099" then |
if Child.claims.P31 and Child.claims.P31[1].mainsnak.datavalue.value['id'] == "Q634099" then |
||
table.insert (SeloMO, Child:getSitelink() or Child:getLabel()) |
table.insert (SeloMO, Child:getSitelink() or Child:getLabel()) |
||
Строка 79: | Строка 98: | ||
table.sort(GorodMO) |
table.sort(GorodMO) |
||
for key, val in pairs(GorodMO) do |
for key, val in pairs(GorodMO) do |
||
table.insert( frameTable, "{{s|[[" .. val .. "|" .. string.match(val, "([^ |
table.insert( frameTable, "{{s|[[" .. val .. "|" .. string.match(val, "([^(]+)") .. "]]}}{{•}}" ) |
||
end |
end |
||
frameTable[#frameTable] = string.gsub( frameTable[#frameTable], "}}{{•}}$", "}}<br>") |
frameTable[#frameTable] = string.gsub( frameTable[#frameTable], "}}{{•}}$", "}}<br>") |
||
Строка 87: | Строка 106: | ||
for key, val in pairs(SeloMO) do |
for key, val in pairs(SeloMO) do |
||
table.insert( frameTable, "{{s|[[" .. val) |
table.insert( frameTable, "{{s|[[" .. val) |
||
if string.match(val, "%(") then table.insert( frameTable, "|" .. string.match(val, "([^ |
if string.match(val, "%(") then table.insert( frameTable, "|" .. string.match(val, "([^(]+) %(")) end |
||
table.insert( frameTable, "]]}}{{•}}") |
table.insert( frameTable, "]]}}{{•}}") |
||
end |
end |
||
Строка 101: | Строка 120: | ||
local args = frame:getParent().args |
local args = frame:getParent().args |
||
if args[1]==nil then |
if args[1]==nil then |
||
CallSite = mw.wikibase. |
CallSite = mw.wikibase.getEntity() |
||
else |
else |
||
CallSite = mw.wikibase. |
CallSite = mw.wikibase.getEntity(string.match( args[1], "Q%d+")) |
||
end |
end |
||
if CallSite==nil then do return "Не удалось получить свойства района из викидаты" end end |
if CallSite==nil then do return "Не удалось получить свойства района из викидаты" end end |
||
Строка 111: | Строка 130: | ||
District = CallSite |
District = CallSite |
||
else |
else |
||
Parent = mw.wikibase. |
Parent = mw.wikibase.getEntity( CallSite.claims.P131 and CallSite.claims.P131[1].mainsnak.datavalue.value['id'] ) |
||
District = mw.wikibase. |
District = mw.wikibase.getEntity( Parent.claims.P131 and Parent.claims.P131[1].mainsnak.datavalue.value['id'] ) |
||
if District.claims.P31 and District.claims.P31[1].mainsnak.datavalue.value['id'] ~= "Q2198484" then District = nil end |
if District.claims.P31 and District.claims.P31[1].mainsnak.datavalue.value['id'] ~= "Q2198484" then District = nil end |
||
end |
end |
||
Строка 119: | Строка 138: | ||
DistrictName = District:getSitelink() or District:getLabel() |
DistrictName = District:getSitelink() or District:getLabel() |
||
AdmCenterQ = District.claims.P36 and District.claims.P36[1].mainsnak.datavalue.value['id'] |
AdmCenterQ = District.claims.P36 and District.claims.P36[1].mainsnak.datavalue.value['id'] |
||
AdmCenter = mw.wikibase. |
AdmCenter = mw.wikibase.getEntity( AdmCenterQ ) |
||
AdmCenterName = AdmCenter:getSitelink() or AdmCenter:getLabel() |
AdmCenterName = AdmCenter:getSitelink() or AdmCenter:getLabel() |
||
Строка 143: | Строка 162: | ||
if ( DistrictClaim['rank'] ~= "deprecated" and DistrictClaim.mainsnak.datavalue.value['id'] ) then |
if ( DistrictClaim['rank'] ~= "deprecated" and DistrictClaim.mainsnak.datavalue.value['id'] ) then |
||
local MunicipalityQ = DistrictClaim.mainsnak.datavalue.value['id'] |
local MunicipalityQ = DistrictClaim.mainsnak.datavalue.value['id'] |
||
local Municipality = mw.wikibase. |
local Municipality = mw.wikibase.getEntity( MunicipalityQ ) |
||
for m, MunicipalityClaim in pairs( Municipality.claims.P150 ) do |
for m, MunicipalityClaim in pairs( Municipality.claims.P150 ) do |
||
if ( MunicipalityClaim['rank'] ~= "deprecated" and MunicipalityClaim.mainsnak.datavalue.value['id'] ) then |
if ( MunicipalityClaim['rank'] ~= "deprecated" and MunicipalityClaim.mainsnak.datavalue.value['id'] ) then |
||
local SettlementQ = MunicipalityClaim.mainsnak.datavalue.value['id'] |
local SettlementQ = MunicipalityClaim.mainsnak.datavalue.value['id'] |
||
local Settlement = mw.wikibase. |
local Settlement = mw.wikibase.getEntity( SettlementQ ) |
||
table.insert (Settlements, Settlement:getSitelink() or Settlement:getLabel()) |
table.insert (Settlements, Settlement:getSitelink() or Settlement:getLabel()) |
||
AdmCenterExist = AdmCenterExist or (AdmCenterQ == SettlementQ) |
AdmCenterExist = AdmCenterExist or (AdmCenterQ == SettlementQ) |
||
Строка 155: | Строка 174: | ||
end |
end |
||
table.insert( frameTable, "'''Районный центр:''' [[" .. AdmCenterName) |
table.insert( frameTable, "'''Районный центр:''' [[" .. AdmCenterName) |
||
if string.match(AdmCenterName, "%(") then table.insert( frameTable, "|" .. string.match(AdmCenterName, "([^ |
if string.match(AdmCenterName, "%(") then table.insert( frameTable, "|" .. string.match(AdmCenterName, "([^(]+) %(")) end |
||
table.insert( frameTable, "]]") |
table.insert( frameTable, "]]") |
||
if not AdmCenterExist then table.insert( frameTable, " (в состав района не входит)") end |
if not AdmCenterExist then table.insert( frameTable, " (в состав района не входит)") end |
||
Строка 164: | Строка 183: | ||
if val ~= AdmCenterName then |
if val ~= AdmCenterName then |
||
table.insert( frameTable, "{{s|[[" .. val) |
table.insert( frameTable, "{{s|[[" .. val) |
||
if string.match(val, "%(") then table.insert( frameTable, "|" .. string.match(val, "([^ |
if string.match(val, "%(") then table.insert( frameTable, "|" .. string.match(val, "([^(]+) %(")) end |
||
table.insert( frameTable, "]]}}{{•}}") |
table.insert( frameTable, "]]}}{{•}}") |
||
end |
end |
||
Строка 190: | Строка 209: | ||
local RayonSet = RegionSet[string.sub(CodePage, 1, 5)..'000'] |
local RayonSet = RegionSet[string.sub(CodePage, 1, 5)..'000'] |
||
DistrictName = RayonSet[0][1] |
DistrictName = RayonSet[0][1] |
||
-- На случай, если переадресация |
|||
local DistrictQ = mw.wikibase.getEntityIdForTitle(DistrictName) |
|||
local DistrictQ = mw.wikibase.getEntityIdForTitle(mRedirect.luaMain(DistrictName, bracket)) |
|||
local District = mw.wikibase.getEntity(DistrictQ) |
local District = mw.wikibase.getEntity(DistrictQ) |
||
local GorodMO={} |
local GorodMO={} |
||
Строка 205: | Строка 225: | ||
end |
end |
||
end |
end |
||
local Titul = args['заглавие'] or "Муниципальные образования [[" .. DistrictName .. "|" .. Declension(DistrictName, Genitive) .. "]]" |
local Titul = args['заглавие'] or "Муниципальные образования [[" .. DistrictName .. "|" .. Declension(string.gsub(DistrictName, " *%(.+", ""), Genitive) .. "]]" |
||
local State = args['state'] or (#GorodMO + #SeloMO > 20 and "<includeonly>collapsed</includeonly>") |
local State = args['state'] or (#GorodMO + #SeloMO > 20 and "<includeonly>collapsed</includeonly>") |
||
local Picture = args['изображение'] or (District.claims.P94 and "[[Файл:" .. District.claims.P94[1].mainsnak.datavalue['value'] .. "|x80px]]") |
local Picture = args['изображение'] or (District.claims.P94 and "[[Файл:" .. District.claims.P94[1].mainsnak.datavalue['value'] .. "|x80px]]") |
||
Строка 222: | Строка 242: | ||
table.sort(GorodMO) |
table.sort(GorodMO) |
||
for key, val in pairs(GorodMO) do |
for key, val in pairs(GorodMO) do |
||
table.insert( frameTable, "{{s|[[" .. val |
table.insert( frameTable, "{{s|[[" .. val) |
||
if string.match(val, "%(") then table.insert( frameTable, "|" .. string.gsub(val, " *%(.+", "")) end |
|||
table.insert( frameTable, "]]}}{{•}}") |
|||
end |
end |
||
frameTable[#frameTable] = string.gsub( frameTable[#frameTable], "}}{{•}}$", "}}<br>") |
frameTable[#frameTable] = string.gsub( frameTable[#frameTable], "}}{{•}}$", "}}<br>") |
||
Строка 230: | Строка 252: | ||
for key, val in pairs(SeloMO) do |
for key, val in pairs(SeloMO) do |
||
table.insert( frameTable, "{{s|[[" .. val) |
table.insert( frameTable, "{{s|[[" .. val) |
||
if string.match(val, "%(") then table.insert( frameTable, "|" .. string. |
if string.match(val, "%(") then table.insert( frameTable, "|" .. string.gsub(val, " *%(.+", "")) end |
||
table.insert( frameTable, "]]}}{{•}}") |
table.insert( frameTable, "]]}}{{•}}") |
||
end |
end |
||
Строка 251: | Строка 273: | ||
if args==nil then do return "Не удалось получить код ОКТМО для данной страницы из викидаты" end end |
if args==nil then do return "Не удалось получить код ОКТМО для данной страницы из викидаты" end end |
||
local CodePage = mw.text.trim(args[1]) |
local CodePage = mw.text.trim(args[1]) |
||
local RegionSet = mw.loadData("Модуль:TerritorialDivision/" |
local RegionSet = mw.loadData("Модуль:TerritorialDivision/"..string.sub(CodePage, 1, 2)) |
||
-- local RegionSet = mw.loadData("Модуль:TerritorialDivision/79") |
|||
-- do return #RegionSet end |
|||
local Poselenie = false |
local Poselenie = false |
||
if string.len(CodePage) == 8 and string.find(CodePage, "^( |
if string.len(CodePage) == 8 and string.find(CodePage, "^(%d%d%d%d%d000)") == nil then Poselenie = true end |
||
local MOSet |
local MOSet |
||
if Poselenie then |
if Poselenie then |
||
Строка 264: | Строка 284: | ||
local DistrictName = MOSet[0][1] |
local DistrictName = MOSet[0][1] |
||
local AdmCenterName = MOSet[0][3] |
local AdmCenterName = MOSet[0][3] |
||
-- На случай, если переадресация |
|||
local DistrictQ = mw.wikibase.getEntityIdForTitle(DistrictName) |
|||
local DistrictQ = mw.wikibase.getEntityIdForTitle(mRedirect.luaMain(DistrictName, bracket)) |
|||
local District = mw.wikibase.getEntity(DistrictQ) |
local District = mw.wikibase.getEntity(DistrictQ) |
||
if District == nill then do return "Не удалось получить свойства района из викидаты" end end |
if District == nill then do return "Не удалось получить свойства района из викидаты" end end |
||
Строка 293: | Строка 314: | ||
--local Colour = args['цвет'] or "{{Цвет|Россия}}" |
--local Colour = args['цвет'] or "{{Цвет|Россия}}" |
||
local Titul = args['заглавие'] or "Населённые пункты [[" .. DistrictName .. "|" .. Declension(string.gsub(DistrictName, " *%(.+", ""), Genitive) .. "]]" |
|||
--do return DistrictName end |
|||
local Titul = args['заглавие'] or "Населённые пункты [[" .. DistrictName .. "|" .. Declension(DistrictName, Genitive) .. "]]" |
|||
local State = args['state'] or (#Settlements > 30 and "<includeonly>collapsed</includeonly>") |
local State = args['state'] or (#Settlements > 30 and "<includeonly>collapsed</includeonly>") |
||
local Picture = args['изображение'] or (District.claims.P94 and "[[Файл:" .. District.claims.P94[1].mainsnak.datavalue['value'] .. "|x80px]]") |
local Picture = args['изображение'] or (District.claims.P94 and "[[Файл:" .. District.claims.P94[1].mainsnak.datavalue['value'] .. "|x80px]]") |
||
Строка 310: | Строка 330: | ||
table.insert( frameTable, "'''Административный центр:''' [[" .. AdmCenterName) |
table.insert( frameTable, "'''Административный центр:''' [[" .. AdmCenterName) |
||
if string.match(AdmCenterName, "%(") then table.insert( frameTable, "|" .. string. |
if string.match(AdmCenterName, "%(") then table.insert( frameTable, "|" .. string.gsub(AdmCenterName, " *%(.+", "")) end |
||
table.insert( frameTable, "]]") |
table.insert( frameTable, "]]") |
||
if not AdmCenterExist then table.insert( frameTable, " (в состав муниципального образования не входит)") end |
if not AdmCenterExist then table.insert( frameTable, " (в состав муниципального образования не входит)") end |
||
Строка 319: | Строка 339: | ||
if val ~= AdmCenterName then |
if val ~= AdmCenterName then |
||
table.insert( frameTable, "{{s|[[" .. val) |
table.insert( frameTable, "{{s|[[" .. val) |
||
if string.match(val, "%(") then table.insert( frameTable, "|" .. string. |
if string.match(val, "%(") then table.insert( frameTable, "|" .. string.gsub(val, " *%(.+", "")) end |
||
table.insert( frameTable, "]]}}{{•}}") |
table.insert( frameTable, "]]}}{{•}}") |
||
end |
end |
||
Строка 325: | Строка 345: | ||
frameTable[#frameTable] = string.gsub( frameTable[#frameTable], "}}{{•}}$", "}}") |
frameTable[#frameTable] = string.gsub( frameTable[#frameTable], "}}{{•}}$", "}}") |
||
table.insert( frameTable, "}}") |
|||
frameStr=table.concat(frameTable) |
|||
return frame:preprocess( frameStr ) |
|||
end |
|||
-- ================================================================================================================================ |
|||
function p.MakeSettlementsTable(frame) |
|||
local args = {} |
|||
if #frame:getParent().args > 0 then |
|||
args = frame:getParent().args |
|||
else |
|||
args = frame.args |
|||
end |
|||
if args==nil then do return "Не удалось получить код ОКТМО для данной страницы из викидаты" end end |
|||
local CodePage = mw.text.trim(args[1]) |
|||
local RegionSet = mw.loadData("Модуль:TerritorialDivision/"..string.sub(CodePage, 1, 2)) |
|||
local RegionName = RegionSet[string.sub(CodePage, 1, 2)..'000000'][1] |
|||
local Poselenie = false |
|||
if string.len(CodePage) == 8 and string.find(CodePage, "^(%d%d%d%d%d000)") == nil then Poselenie = true end |
|||
local MOSet |
|||
if Poselenie then |
|||
MOSet = RegionSet[string.sub(CodePage, 1, 5)..'000'][CodePage] |
|||
else |
|||
MOSet = RegionSet[string.sub(CodePage, 1, 5)..'000'] |
|||
end |
|||
local DistrictName = MOSet[0][1] |
|||
local DistrictType = MOSet[0][2] |
|||
local AdmCenterName = MOSet[0][3] |
|||
local Settlements={} |
|||
local Settlement = '' |
|||
for k, var in pairs(MOSet) do |
|||
if k ~= 0 then |
|||
--do return var[0][1] end |
|||
if var[0] == nil then |
|||
Settlement = '| [[' .. var[1] |
|||
if string.match(var[1], "%(") then Settlement = Settlement .. "|" .. string.gsub(var[1], " *%(.+", "") end |
|||
Settlement = Settlement .. "]] | " .. var[2] |
|||
if var[1] == AdmCenterName then |
|||
Settlement = '|%' .. Settlement .. ", {{s|административный центр}}" |
|||
else |
|||
Settlement = '|' .. Settlement |
|||
end |
|||
if var[3] == nil then |
|||
Settlement = Settlement .. " | {{ Население | " .. var[1] .. " | Регион = " .. RegionName .. " | тс }}" |
|||
else |
|||
Settlement = Settlement .. " | {{ Население | " .. var[3] .. " | Регион = " .. RegionName .. " | тс }}" |
|||
end |
|||
table.insert (Settlements, Settlement) |
|||
else |
|||
MOName = var[0][1] |
|||
for s, mo in pairs(var) do |
|||
if s ~= 0 then |
|||
Settlement = '| [[' .. mo[1] |
|||
if string.match(mo[1], "%(") then Settlement = Settlement .. "|" .. string.gsub(mo[1], " *%(.+", "") end |
|||
Settlement = Settlement .. "]] | " .. mo[2] |
|||
if mo[1] == AdmCenterName then |
|||
Settlement = '|%' .. Settlement .. ", {{s|административный центр}}" |
|||
else |
|||
Settlement = '|' .. Settlement |
|||
end |
|||
if mo[3] == nil then |
|||
Settlement = Settlement .. " | {{ Население | " .. mo[1] .. " | Регион = " .. RegionName .. " | тс }} | [[" .. MOName |
|||
else |
|||
Settlement = Settlement .. " | {{ Население | " .. mo[3] .. " | Регион = " .. RegionName .. " | тс }} | [[" .. MOName |
|||
end |
|||
if string.match(MOName, "%(") then Settlement = Settlement .. "|" .. string.gsub(MOName, " *%(.+", "") end |
|||
Settlement = Settlement .. "]]" |
|||
table.insert (Settlements, Settlement) |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end |
|||
local MOName = '' |
|||
local frameTable={} |
|||
table.insert( frameTable, "{{Автонумерация") |
|||
if DistrictType == "муниципальный район" then |
|||
table.insert( frameTable, " | Столбцов = 5") |
|||
else |
|||
table.insert( frameTable, " | Столбцов = 4") |
|||
end |
|||
table.insert( frameTable, " | Оформление = standard sortable") |
|||
if #Settlements > 29 then |
|||
table.insert( frameTable, " collapsible collapsed") |
|||
if DistrictType == "муниципальный округ" then |
|||
table.insert( frameTable, " | Название = В округ ") |
|||
elseif DistrictType == "муниципальный район" then |
|||
table.insert( frameTable, " | Название = В район ") |
|||
else |
|||
table.insert( frameTable, " | Название = " .. "В состав " .. Declension(DistrictType, Genitive) .. "") |
|||
end |
|||
table.insert( frameTable, "\n") |
|||
if (math.fmod(#Settlements, 10) == 1) and not (math.fmod(#Settlements, 100) == 11) then |
|||
table.insert( frameTable, " входит " .. #Settlements .. " населённый пункт") |
|||
elseif (math.fmod(#Settlements, 10) == 2) and not (math.fmod(#Settlements, 100) == 12) then |
|||
table.insert( frameTable, " входят " .. #Settlements .. " населённых пункта") |
|||
elseif (math.fmod(#Settlements, 10) == 3) and not (math.fmod(#Settlements, 100) == 13) then |
|||
table.insert( frameTable, " входят " .. #Settlements .. " населённых пункта") |
|||
elseif (math.fmod(#Settlements, 10) == 4) and not (math.fmod(#Settlements, 100) == 14) then |
|||
table.insert( frameTable, " входят " .. #Settlements .. " населённых пункта") |
|||
else |
|||
table.insert( frameTable, " входят " .. #Settlements .. " населённых пунктов") |
|||
end |
|||
end |
|||
table.insert( frameTable, " | Заголовок2 = Населённый пункт") |
|||
table.insert( frameTable, " | Заголовок3 = Тип населённого пункта") |
|||
table.insert( frameTable, " | Заголовок4 = Население") |
|||
if DistrictType == "муниципальный район" then table.insert( frameTable, " | Заголовок5 = Муниципальное образование") end |
|||
table.insert( frameTable, " | Сортировка = 2") |
|||
table.insert( frameTable, " | Сортировка4 = число") |
|||
table.insert( frameTable, " | Выравнивание4 = right") |
|||
-- table.sort(Settlements) |
|||
for key, val in pairs(Settlements) do |
|||
table.insert( frameTable, val) |
|||
end |
|||
table.insert( frameTable, "}}") |
table.insert( frameTable, "}}") |
||
frameStr=table.concat(frameTable) |
frameStr=table.concat(frameTable) |
Текущая версия от 09:48, 12 июня 2023
Документация
Этому модулю не хватает документации. |
local p = {}
local mRedirect = require('Module:Redirect')
local function Declension(collocation, case)
local str = string.match(collocation, "([^(]+)")
if case == Genitive then
if string.match(str, "ий район") then
return string.gsub( str, "ий район", "ого района" )
elseif string.match(str, "ый район") then
return string.gsub( str, "ый район", "ого района" )
elseif string.match(str, "ая автономная область") then
return string.gsub( str, "ая автономная область", "ой автономной области" )
elseif string.match(str, "ское сельское поселение") then
return string.gsub( str, "ское сельское поселение", "ского сельского поселения" )
elseif string.match(str, "Сельское поселение") then
return string.gsub( str, "Сельское поселение", "сельского поселения" )
elseif string.match(str, "сельское поселение") then
return string.gsub( str, "сельское поселение", "сельского поселения" )
elseif string.match(str, "Городское поселение") then
return string.gsub( str, "Городское поселение", "городского поселения" )
elseif string.match(str, "городское поселение") then
return string.gsub( str, "городское поселение", "городского поселения" )
elseif string.match(str, "ий городской округ") then
return string.gsub( str, "ий городской округ", "ого городского округа" )
elseif string.match(str, "ый городской округ") then
return string.gsub( str, "ый городской округ", "ого городского округа" )
elseif string.match(str, "Городской округ") then
return string.gsub( str, "Городской округ", "городского округа" )
elseif string.match(str, "городской округ") then
return string.gsub( str, "городской округ", "городского округа" )
elseif string.match(str, "ий муниципальный округ") then
return string.gsub( str, "ий муниципальный округ", "ого муниципального округа" )
elseif string.match(str, "ый муниципальный округ") then
return string.gsub( str, "ый муниципальный округ", "ого муниципального округа" )
elseif string.match(str, "Муниципальный округ") then
return string.gsub( str, "Муниципальный округ", "муниципального округа" )
elseif string.match(str, "муниципальный округ") then
return string.gsub( str, "муниципальный округ", "муниципального округа" )
end
end
end
function p.MakeMunicipality(frame)
local args = frame:getParent().args
if args[1]==nil then
CallSite = mw.wikibase.getEntity()
else
CallSite = mw.wikibase.getEntity(string.match( args[1], "Q%d+"))
end
if CallSite==nil then do return "Не удалось получить свойства района из викидаты" end end
local District
if CallSite.claims.P31 and CallSite.claims.P31[1].mainsnak.datavalue.value['id'] == "Q2198484" then
District = CallSite
elseif (CallSite.claims.P31 and CallSite.claims.P31[1].mainsnak.datavalue.value['id'] == "Q634099") or
(CallSite.claims.P31 and CallSite.claims.P31[1].mainsnak.datavalue.value['id'] == "Q2661988") then
District = mw.wikibase.getEntity( CallSite.claims.P131 and CallSite.claims.P131[1].mainsnak.datavalue.value['id'] )
else
do return "Неизвестный тип поселения. Сообщите, пожалуйста, на страницу обсуждения шаблона" end
end
if District == nil then do return "Не удалось получить свойства района из викидаты" end end
DistrictName = District:getSitelink() or District:getLabel()
--local Colour = args['цвет'] or "{{Цвет|Россия}}"
local Titul = args['заглавие'] or "Муниципальные образования [[" .. DistrictName .. "|" .. Declension(DistrictName, Genitive) .. "]]"
local State = args['state'] or (#District.claims.P150 > 20 and "<includeonly>collapsed</includeonly>")
local Picture = args['изображение'] or (District.claims.P94 and "[[Файл:" .. District.claims.P94[1].mainsnak.datavalue['value'] .. "|x80px]]")
local Picture2 = args['изображение2'] or (District.claims.P41 and "[[Файл:" .. District.claims.P41[1].mainsnak.datavalue['value'] .. "|x60px|border]]")
local frameTable={}
table.insert( frameTable, "{{навигационная полоса")
table.insert( frameTable, "|имя = Муниципальные образования")
--table.insert( frameTable, "|цвет = " .. Colour)
table.insert( frameTable, "|заглавие = " .. Titul)
if State then table.insert( frameTable, "|state = " .. State) end
if Picture then table.insert( frameTable, "|изображение = " .. Picture) end
if Picture2 then table.insert( frameTable, "|изображение2 = " .. Picture2) end
table.insert( frameTable, "|содержание = ")
local GorodMO={}
local SeloMO={}
for c, claim in pairs( District.claims.P150 ) do
if ( claim['rank'] ~= "deprecated" and claim.mainsnak.datavalue.value['id'] ) then
local childQ = claim.mainsnak.datavalue.value['id']
local Child = mw.wikibase.getEntity( childQ )
if Child.claims.P31 and Child.claims.P31[1].mainsnak.datavalue.value['id'] == "Q634099" then
table.insert (SeloMO, Child:getSitelink() or Child:getLabel())
elseif Child.claims.P31 and Child.claims.P31[1].mainsnak.datavalue.value['id'] == "Q2661988" then
table.insert (GorodMO, Child:getSitelink() or Child:getLabel())
else
do return "Неизвестный тип поселения" end
end
end
end
table.sort(GorodMO)
for key, val in pairs(GorodMO) do
table.insert( frameTable, "{{s|[[" .. val .. "|" .. string.match(val, "([^(]+)") .. "]]}}{{•}}" )
end
frameTable[#frameTable] = string.gsub( frameTable[#frameTable], "}}{{•}}$", "}}<br>")
table.sort(SeloMO)
SeloStr=""
for key, val in pairs(SeloMO) do
table.insert( frameTable, "{{s|[[" .. val)
if string.match(val, "%(") then table.insert( frameTable, "|" .. string.match(val, "([^(]+) %(")) end
table.insert( frameTable, "]]}}{{•}}")
end
frameTable[#frameTable] = string.gsub( frameTable[#frameTable], "}}{{•}}$", "}}")
table.insert( frameTable, "}}")
frameStr=table.concat(frameTable)
return frame:preprocess( frameStr )
end
-- ================================================================================================================================
function p.MakeSettlements (frame)
local args = frame:getParent().args
if args[1]==nil then
CallSite = mw.wikibase.getEntity()
else
CallSite = mw.wikibase.getEntity(string.match( args[1], "Q%d+"))
end
if CallSite==nil then do return "Не удалось получить свойства района из викидаты" end end
local District
if CallSite.claims.P31 and CallSite.claims.P31[1].mainsnak.datavalue.value['id'] == "Q2198484" then
District = CallSite
else
Parent = mw.wikibase.getEntity( CallSite.claims.P131 and CallSite.claims.P131[1].mainsnak.datavalue.value['id'] )
District = mw.wikibase.getEntity( Parent.claims.P131 and Parent.claims.P131[1].mainsnak.datavalue.value['id'] )
if District.claims.P31 and District.claims.P31[1].mainsnak.datavalue.value['id'] ~= "Q2198484" then District = nil end
end
if District == nill then do return "Не удалось получить свойства района из викидаты" end end
DistrictName = District:getSitelink() or District:getLabel()
AdmCenterQ = District.claims.P36 and District.claims.P36[1].mainsnak.datavalue.value['id']
AdmCenter = mw.wikibase.getEntity( AdmCenterQ )
AdmCenterName = AdmCenter:getSitelink() or AdmCenter:getLabel()
--local Colour = args['цвет'] or "{{Цвет|Россия}}"
local Titul = args['заглавие'] or "Населённые пункты [[" .. DistrictName .. "|" .. Declension(DistrictName, Genitive) .. "]]"
local State = args['state'] or (#District.claims.P150 > 20 and "<includeonly>collapsed</includeonly>")
local Picture = args['изображение'] or (District.claims.P94 and "[[Файл:" .. District.claims.P94[1].mainsnak.datavalue['value'] .. "|x80px]]")
local Picture2 = args['изображение2'] or (District.claims.P41 and "[[Файл:" .. District.claims.P41[1].mainsnak.datavalue['value'] .. "|x60px|border]]")
local frameTable={}
table.insert( frameTable, "{{навигационная полоса")
table.insert( frameTable, "|имя = Муниципальные образования")
--table.insert( frameTable, "|цвет = " .. Colour)
table.insert( frameTable, "|заглавие = " .. Titul)
if State then table.insert( frameTable, "|state = " .. State) end
if Picture then table.insert( frameTable, "|изображение = " .. Picture) end
if Picture2 then table.insert( frameTable, "|изображение2 = " .. Picture2) end
table.insert( frameTable, "|содержание = ")
local AdmCenterExist = false
local Settlements={}
for d, DistrictClaim in pairs( District.claims.P150 ) do
if ( DistrictClaim['rank'] ~= "deprecated" and DistrictClaim.mainsnak.datavalue.value['id'] ) then
local MunicipalityQ = DistrictClaim.mainsnak.datavalue.value['id']
local Municipality = mw.wikibase.getEntity( MunicipalityQ )
for m, MunicipalityClaim in pairs( Municipality.claims.P150 ) do
if ( MunicipalityClaim['rank'] ~= "deprecated" and MunicipalityClaim.mainsnak.datavalue.value['id'] ) then
local SettlementQ = MunicipalityClaim.mainsnak.datavalue.value['id']
local Settlement = mw.wikibase.getEntity( SettlementQ )
table.insert (Settlements, Settlement:getSitelink() or Settlement:getLabel())
AdmCenterExist = AdmCenterExist or (AdmCenterQ == SettlementQ)
end
end
end
end
table.insert( frameTable, "'''Районный центр:''' [[" .. AdmCenterName)
if string.match(AdmCenterName, "%(") then table.insert( frameTable, "|" .. string.match(AdmCenterName, "([^(]+) %(")) end
table.insert( frameTable, "]]")
if not AdmCenterExist then table.insert( frameTable, " (в состав района не входит)") end
table.insert( frameTable, "<br>")
table.sort(Settlements)
for key, val in pairs(Settlements) do
if val ~= AdmCenterName then
table.insert( frameTable, "{{s|[[" .. val)
if string.match(val, "%(") then table.insert( frameTable, "|" .. string.match(val, "([^(]+) %(")) end
table.insert( frameTable, "]]}}{{•}}")
end
end
frameTable[#frameTable] = string.gsub( frameTable[#frameTable], "}}{{•}}$", "}}")
table.insert( frameTable, "}}")
frameStr=table.concat(frameTable)
return frame:preprocess( frameStr )
end
-- ================================================================================================================================
function p.MakeMunicipalityDB(frame)
local args = {}
if #frame:getParent().args > 0 then
args = frame:getParent().args
else
args = frame.args
end
if args==nil then do return "Не удалось получить код ОКТМО для данной страницы из викидаты" end end
local CodePage = mw.text.trim(args[1])
local RegionSet = mw.loadData("Модуль:TerritorialDivision/" .. string.sub(CodePage, 1, 2))
local RayonSet = RegionSet[string.sub(CodePage, 1, 5)..'000']
DistrictName = RayonSet[0][1]
-- На случай, если переадресация
local DistrictQ = mw.wikibase.getEntityIdForTitle(mRedirect.luaMain(DistrictName, bracket))
local District = mw.wikibase.getEntity(DistrictQ)
local GorodMO={}
local SeloMO={}
for k, var in pairs(RayonSet) do
if k ~= 0 then
if var[0][2] == 'сельское поселение' then
table.insert (SeloMO, var[0][1])
elseif var[0][2] == 'городское поселение' then
table.insert (GorodMO, var[0][1])
else
do return var[0][1] .. " -> Неизвестный тип поселения" end
end
end
end
local Titul = args['заглавие'] or "Муниципальные образования [[" .. DistrictName .. "|" .. Declension(string.gsub(DistrictName, " *%(.+", ""), Genitive) .. "]]"
local State = args['state'] or (#GorodMO + #SeloMO > 20 and "<includeonly>collapsed</includeonly>")
local Picture = args['изображение'] or (District.claims.P94 and "[[Файл:" .. District.claims.P94[1].mainsnak.datavalue['value'] .. "|x80px]]")
local Picture2 = args['изображение2'] or (District.claims.P41 and "[[Файл:" .. District.claims.P41[1].mainsnak.datavalue['value'] .. "|x60px|border]]")
local frameTable={}
table.insert( frameTable, "{{навигационная полоса")
table.insert( frameTable, "|имя = Муниципальные образования района")
--table.insert( frameTable, "|цвет = " .. Colour)
table.insert( frameTable, "|заглавие = " .. Titul)
if State then table.insert( frameTable, "|state = " .. State) end
if Picture then table.insert( frameTable, "|изображение = " .. Picture) end
if Picture2 then table.insert( frameTable, "|изображение2 = " .. Picture2) end
table.insert( frameTable, "|содержание = ")
table.sort(GorodMO)
for key, val in pairs(GorodMO) do
table.insert( frameTable, "{{s|[[" .. val)
if string.match(val, "%(") then table.insert( frameTable, "|" .. string.gsub(val, " *%(.+", "")) end
table.insert( frameTable, "]]}}{{•}}")
end
frameTable[#frameTable] = string.gsub( frameTable[#frameTable], "}}{{•}}$", "}}<br>")
table.sort(SeloMO)
SeloStr=""
for key, val in pairs(SeloMO) do
table.insert( frameTable, "{{s|[[" .. val)
if string.match(val, "%(") then table.insert( frameTable, "|" .. string.gsub(val, " *%(.+", "")) end
table.insert( frameTable, "]]}}{{•}}")
end
frameTable[#frameTable] = string.gsub( frameTable[#frameTable], "}}{{•}}$", "}}")
table.insert( frameTable, "}}")
frameStr=table.concat(frameTable)
return frame:preprocess( frameStr )
end
-- ================================================================================================================================
function p.MakeSettlementsDB (frame)
local args = {}
if #frame:getParent().args > 0 then
args = frame:getParent().args
else
args = frame.args
end
if args==nil then do return "Не удалось получить код ОКТМО для данной страницы из викидаты" end end
local CodePage = mw.text.trim(args[1])
local RegionSet = mw.loadData("Модуль:TerritorialDivision/"..string.sub(CodePage, 1, 2))
local Poselenie = false
if string.len(CodePage) == 8 and string.find(CodePage, "^(%d%d%d%d%d000)") == nil then Poselenie = true end
local MOSet
if Poselenie then
MOSet = RegionSet[string.sub(CodePage, 1, 5)..'000'][CodePage]
else
MOSet = RegionSet[string.sub(CodePage, 1, 5)..'000']
end
local DistrictName = MOSet[0][1]
local AdmCenterName = MOSet[0][3]
-- На случай, если переадресация
local DistrictQ = mw.wikibase.getEntityIdForTitle(mRedirect.luaMain(DistrictName, bracket))
local District = mw.wikibase.getEntity(DistrictQ)
if District == nill then do return "Не удалось получить свойства района из викидаты" end end
local AdmCenterExist = false
local Settlements={}
for k, var in pairs(MOSet) do
if k ~= 0 then
if var[0] == nil then
if var[1] == AdmCenterName then
AdmCenterExist = true
else
table.insert (Settlements, var[1])
end
else
for s, mo in pairs(var) do
if s ~= 0 then
if mo[1] == AdmCenterName then
AdmCenterExist = true
else
table.insert (Settlements, mo[1])
end
end
end
end
end
end
--local Colour = args['цвет'] or "{{Цвет|Россия}}"
local Titul = args['заглавие'] or "Населённые пункты [[" .. DistrictName .. "|" .. Declension(string.gsub(DistrictName, " *%(.+", ""), Genitive) .. "]]"
local State = args['state'] or (#Settlements > 30 and "<includeonly>collapsed</includeonly>")
local Picture = args['изображение'] or (District.claims.P94 and "[[Файл:" .. District.claims.P94[1].mainsnak.datavalue['value'] .. "|x80px]]")
local Picture2 = args['изображение2'] or (District.claims.P41 and "[[Файл:" .. District.claims.P41[1].mainsnak.datavalue['value'] .. "|x60px|border]]")
local frameTable={}
table.insert( frameTable, "{{навигационная полоса")
table.insert( frameTable, "|имя = Населённые пункты муниципального образования")
--table.insert( frameTable, "|цвет = " .. Colour)
table.insert( frameTable, "|заглавие = " .. Titul)
if State then table.insert( frameTable, "|state = " .. State) end
if Picture then table.insert( frameTable, "|изображение = " .. Picture) end
if Picture2 then table.insert( frameTable, "|изображение2 = " .. Picture2) end
table.insert( frameTable, "|содержание = ")
table.insert( frameTable, "'''Административный центр:''' [[" .. AdmCenterName)
if string.match(AdmCenterName, "%(") then table.insert( frameTable, "|" .. string.gsub(AdmCenterName, " *%(.+", "")) end
table.insert( frameTable, "]]")
if not AdmCenterExist then table.insert( frameTable, " (в состав муниципального образования не входит)") end
table.insert( frameTable, "<br>")
table.sort(Settlements)
for key, val in pairs(Settlements) do
if val ~= AdmCenterName then
table.insert( frameTable, "{{s|[[" .. val)
if string.match(val, "%(") then table.insert( frameTable, "|" .. string.gsub(val, " *%(.+", "")) end
table.insert( frameTable, "]]}}{{•}}")
end
end
frameTable[#frameTable] = string.gsub( frameTable[#frameTable], "}}{{•}}$", "}}")
table.insert( frameTable, "}}")
frameStr=table.concat(frameTable)
return frame:preprocess( frameStr )
end
-- ================================================================================================================================
function p.MakeSettlementsTable(frame)
local args = {}
if #frame:getParent().args > 0 then
args = frame:getParent().args
else
args = frame.args
end
if args==nil then do return "Не удалось получить код ОКТМО для данной страницы из викидаты" end end
local CodePage = mw.text.trim(args[1])
local RegionSet = mw.loadData("Модуль:TerritorialDivision/"..string.sub(CodePage, 1, 2))
local RegionName = RegionSet[string.sub(CodePage, 1, 2)..'000000'][1]
local Poselenie = false
if string.len(CodePage) == 8 and string.find(CodePage, "^(%d%d%d%d%d000)") == nil then Poselenie = true end
local MOSet
if Poselenie then
MOSet = RegionSet[string.sub(CodePage, 1, 5)..'000'][CodePage]
else
MOSet = RegionSet[string.sub(CodePage, 1, 5)..'000']
end
local DistrictName = MOSet[0][1]
local DistrictType = MOSet[0][2]
local AdmCenterName = MOSet[0][3]
local Settlements={}
local Settlement = ''
for k, var in pairs(MOSet) do
if k ~= 0 then
--do return var[0][1] end
if var[0] == nil then
Settlement = '| [[' .. var[1]
if string.match(var[1], "%(") then Settlement = Settlement .. "|" .. string.gsub(var[1], " *%(.+", "") end
Settlement = Settlement .. "]] | " .. var[2]
if var[1] == AdmCenterName then
Settlement = '|%' .. Settlement .. ", {{s|административный центр}}"
else
Settlement = '|' .. Settlement
end
if var[3] == nil then
Settlement = Settlement .. " | {{ Население | " .. var[1] .. " | Регион = " .. RegionName .. " | тс }}"
else
Settlement = Settlement .. " | {{ Население | " .. var[3] .. " | Регион = " .. RegionName .. " | тс }}"
end
table.insert (Settlements, Settlement)
else
MOName = var[0][1]
for s, mo in pairs(var) do
if s ~= 0 then
Settlement = '| [[' .. mo[1]
if string.match(mo[1], "%(") then Settlement = Settlement .. "|" .. string.gsub(mo[1], " *%(.+", "") end
Settlement = Settlement .. "]] | " .. mo[2]
if mo[1] == AdmCenterName then
Settlement = '|%' .. Settlement .. ", {{s|административный центр}}"
else
Settlement = '|' .. Settlement
end
if mo[3] == nil then
Settlement = Settlement .. " | {{ Население | " .. mo[1] .. " | Регион = " .. RegionName .. " | тс }} | [[" .. MOName
else
Settlement = Settlement .. " | {{ Население | " .. mo[3] .. " | Регион = " .. RegionName .. " | тс }} | [[" .. MOName
end
if string.match(MOName, "%(") then Settlement = Settlement .. "|" .. string.gsub(MOName, " *%(.+", "") end
Settlement = Settlement .. "]]"
table.insert (Settlements, Settlement)
end
end
end
end
end
local MOName = ''
local frameTable={}
table.insert( frameTable, "{{Автонумерация")
if DistrictType == "муниципальный район" then
table.insert( frameTable, " | Столбцов = 5")
else
table.insert( frameTable, " | Столбцов = 4")
end
table.insert( frameTable, " | Оформление = standard sortable")
if #Settlements > 29 then
table.insert( frameTable, " collapsible collapsed")
if DistrictType == "муниципальный округ" then
table.insert( frameTable, " | Название = В округ ")
elseif DistrictType == "муниципальный район" then
table.insert( frameTable, " | Название = В район ")
else
table.insert( frameTable, " | Название = " .. "В состав " .. Declension(DistrictType, Genitive) .. "")
end
table.insert( frameTable, "\n")
if (math.fmod(#Settlements, 10) == 1) and not (math.fmod(#Settlements, 100) == 11) then
table.insert( frameTable, " входит " .. #Settlements .. " населённый пункт")
elseif (math.fmod(#Settlements, 10) == 2) and not (math.fmod(#Settlements, 100) == 12) then
table.insert( frameTable, " входят " .. #Settlements .. " населённых пункта")
elseif (math.fmod(#Settlements, 10) == 3) and not (math.fmod(#Settlements, 100) == 13) then
table.insert( frameTable, " входят " .. #Settlements .. " населённых пункта")
elseif (math.fmod(#Settlements, 10) == 4) and not (math.fmod(#Settlements, 100) == 14) then
table.insert( frameTable, " входят " .. #Settlements .. " населённых пункта")
else
table.insert( frameTable, " входят " .. #Settlements .. " населённых пунктов")
end
end
table.insert( frameTable, " | Заголовок2 = Населённый пункт")
table.insert( frameTable, " | Заголовок3 = Тип населённого пункта")
table.insert( frameTable, " | Заголовок4 = Население")
if DistrictType == "муниципальный район" then table.insert( frameTable, " | Заголовок5 = Муниципальное образование") end
table.insert( frameTable, " | Сортировка = 2")
table.insert( frameTable, " | Сортировка4 = число")
table.insert( frameTable, " | Выравнивание4 = right")
-- table.sort(Settlements)
for key, val in pairs(Settlements) do
table.insert( frameTable, val)
end
table.insert( frameTable, "}}")
frameStr=table.concat(frameTable)
return frame:preprocess( frameStr )
end
return p