Модуль:AutoDescriptionStreet
Этому модулю не хватает документации. |
--[[
------------------------------------------
-- AutoDescriptionStreet
-- Модуль для заполнения улиц.
------------------------------------------
--]]
local Dates = require("Module:Dates")
local Declension = require("Module:Declension")
local Langs = require("Module:Langs")
local MathTonumber = require("Module:Math/tonumber")
local ReturnGendered = require("Module:ReturnGendered")
local SerializeTable = require("Module:SerializeTable")
local Math = require("Module:Math")
local Country2Adj = require("Module:Country2Adj")
local AutoDescriptionStreet={}
-- Формируем и возвращаем три переменных
local description = "" -- строка описания
local details = "" -- уточнение
local categories = "[[Категория:Улицы по алфавиту]]" -- категории-- Промежуточный масив сущностей, в который помещаются результаты парсинга перед формированием описания
local entitiesArray = {administrativeT={}, instanceOf={}}
local entitiesArrayP = {P17="", P31="", P131="", P281="", P2043=""}
--P31:instance of
--P17:country
--P31:instance of
--P131:located in the administrative territorial entity
--P281:postal code
--P2043:length
local propertyFull = {P131=""} --Какие поля заполнены в категории
-- Точка входа
function AutoDescriptionStreet.launch(entity)
AutoDescriptionStreet.parsing(entity) -- парсим карточку викиданных
AutoDescriptionStreet.forming() -- формируем переменные
return details, description, categories
end
-- Последовательно проходим свойства в карточке викиданных, для формирования массива сущностей entitiesArray
function AutoDescriptionStreet.parsing(entity)
entitiesArrayP["P17"] = AutoDescriptionStreet.parseP17(entity)
entitiesArrayP["P31"] = AutoDescriptionStreet.parseP31(entity)
entitiesArrayP["P131"] = AutoDescriptionStreet.parseP131(entity)
entitiesArrayP["P281"] = AutoDescriptionStreet.parseP281(entity)
entitiesArrayP["P2043"] = AutoDescriptionStreet.parseP2043(entity)
end
function AutoDescriptionStreet.forming()
if(entitiesArrayP["P31"] == "улица") then description = description .. "[[Улицы|улица]]."
else
description = description .. "улица."
end
--В каком районе
if(entitiesArrayP["P131"] ~= "") then
description = description:sub(1, -2) --удалил точку
if(entitiesArrayP["P131"] == "full") then
for k, v in pairs (entitiesArray.administrativeT) do
if(v ~= " ") then
local dec2 = Declension.declineWord(v, 2)
local dec6 = Declension.declineWord(v, 6)
if(dec2 ~= "Logical error Declension.declineWord(arg): word not found") then
if(propertyFull["P131"] ~= "YES") then description = description .. " в " end
description = description .. "[[" .. v .. "|" .. dec6 .. "]], "
categories = categories .. "[[Категория:Улицы " .. dec2 .."]]"
else
if(propertyFull["P131"] ~= "YES") then description = description .. " в " end
description = description .. "([[" .. v .. "]]), "
end
propertyFull["P131"] = "YES" --P131 для категории заполнена
end
end
description = description:sub(1, #description - 2)
else
local dec2 = Declension.declineWord(entitiesArrayP.P131, 2)
local dec6 = Declension.declineWord(entitiesArrayP.P131, 6)
if(dec2 ~= "Logical error Declension.declineWord(arg): word not found") then
description = description .. " в [[" .. entitiesArrayP.P131 .. "|" .. dec6 .. "]]"
categories = categories .. "[[Категория:Улицы " .. dec2 .."]]"
propertyFull["P131"] = "YES" --P131 для категории заполнена
end
end
description = description .. "."
end
--В какой стране
if(entitiesArrayP["P17"] ~= "") then
description = description:sub(1, -2) --удалил точку
local dec2 = Declension.declineWord(entitiesArrayP.P17, 2)
local dec6 = Declension.declineWord(entitiesArrayP.P17, 6)
if(dec2 ~= "Logical error Declension.declineWord(arg): word not found") then
if(propertyFull["P131"] == "YES") then description = description .. ", " --Если уже известен район, то 'в' не пишется
else description = description .. " в " end
description = description .. "[[" .. entitiesArrayP.P17 .. "|" .. dec6 .. "]]"
categories = categories .. "[[Категория:Улицы " .. dec2 .."]]"
end
description = description .. "."
end
if(entitiesArrayP["P281"] ~= "") then
description = description .. " Почтовый индекс: " .. entitiesArrayP.P281 .. "."
end
--Длина
if(entitiesArrayP["P2043"] ~= "") then
description = description .. " Протяжённость: " .. entitiesArrayP.P2043 .. "."
end
end
function AutoDescriptionStreet.parseP17(entity)
local value = entity:formatPropertyValues("P17", mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
function AutoDescriptionStreet.parseP31(entity)
local p31Statements=mw.wikibase.getAllStatements(entity:getId(), 'P31' )
local i=0
if(p31Statements ~= "") then
for ki, vi in pairs (p31Statements) do
if((vi['mainsnak'] ~= nil)) then
local state=mw.wikibase.getLabel(vi['mainsnak']['datavalue']['value']['id'])
if (state ~= "") then
i=i+1
entitiesArray.instanceOf[i]=state
end
end
end
if(i>0) then return "full"
else return "улица" end
end
end
function AutoDescriptionStreet.parseP131(entity)
local p131Statements=mw.wikibase.getAllStatements(entity:getId(), 'P131' )
local i=0
if(p131Statements ~= "") then
for ki, vi in pairs (p131Statements) do
if((vi['mainsnak'] ~= nil)) then
local state=mw.wikibase.getLabel(vi['mainsnak']['datavalue']['value']['id'])
if (state ~= "") then
i=i+1
entitiesArray.administrativeT[i]=state
end
end
end
if(i>0) then return "full"
else
value = entity:formatPropertyValues("P131", mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return value end
end
else return "" end
end
function AutoDescriptionStreet.parseP281(entity)
local value = entity:formatPropertyValues("P281", mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
function AutoDescriptionStreet.parseP2043(entity)
local value = entity:formatPropertyValues("P2043", mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
return AutoDescriptionStreet