Модуль:AutoDescriptionMetro
Этому модулю не хватает документации. |
--[[
------------------------------------------
-- AutoDescriptionMetro
-- Модуль для заполнения станций метрополитена.
------------------------------------------
--]]
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 AutoDescriptionMetro={}
-- Формируем и возвращаем три переменных
local description = "" -- строка описания
local details = "" -- уточнение
local categories = "[[Категория:Станции метрополитена по алфавиту]]" -- категории
-- Промежуточный массив сущностей, в который помещаются результаты парсинга перед формированием описания
local entitiesArray = {administrativeT={}, instanceOf={}}
local entitiesArrayP = {P16="", P31="", P81="", P131="", P361="", P1619="", P2043=""}
--P16:транспортная сеть (тоже что и P361 - например, Московский метрополитен)
--P31:instance of / является частью понятия
--P81:железнодорожная линия
--P361:part of / часть от (например, Московский метрополитен)
--P131:located in the administrative territorial entity / административно-территориальная единица (например, район N)
--P1619:дата официального открытия
--P2043:length / длина
local propertyFull = {P131=""} --Какие поля заполнены в категории
-- Точка входа
function AutoDescriptionMetro.launch(entity)
AutoDescriptionMetro.parsing(entity) -- парсим карточку викиданных
AutoDescriptionMetro.forming() -- формируем переменные
return details, description, categories
end
-- Последовательно проходим свойства в карточке викиданных, для формирования массива сущностей entitiesArray
function AutoDescriptionMetro.parsing(entity)
entitiesArrayP["P16"] = AutoDescriptionMetro.parseP16(entity)
entitiesArrayP["P31"] = AutoDescriptionMetro.parseP31(entity)
entitiesArrayP["P81"] = AutoDescriptionMetro.parseP81(entity)
entitiesArrayP["P131"] = AutoDescriptionMetro.parseP131(entity)
entitiesArrayP["P361"] = AutoDescriptionMetro.parseP361(entity)
entitiesArrayP["P1619"] = AutoDescriptionMetro.parseP1619(entity)
entitiesArrayP["P2043"] = AutoDescriptionMetro.parseP2043(entity)
end
function AutoDescriptionMetro.forming()
--Станция метрополитена?
if(entitiesArrayP["P31"] == "станция метрополитена")
then description = description .. "[[Станция метрополитена|станция]]."
else
description = description .. "станция."
end
--Какого именно метропоолитена
if(entitiesArrayP["P16"] ~= "") then
description = description:sub(1, -2) --удалил точку
if(entitiesArrayP["P16"] == "full") then
for k, v in pairs (entitiesArray.administrativeT) do
if(v ~= " ") then
local dec2 = Declension.declineWord(v, 2)
if(dec2 ~= "Logical error Declension.declineWord(arg): word not found") then
if(propertyFull["P16"] ~= "YES") then description = description .. " в " end
description = description .. "[[" .. v .. "|" .. dec2 .. "]], "
categories = categories .. "[[Категория:Станции " .. dec2 .."]]"
else
if(propertyFull["P16"] ~= "YES") then description = description .. " в " end
description = description .. "([[" .. v .. "]]), "
end
propertyFull["P16"] = "YES" --P16 для категории заполнена
end
end
description = description:sub(1, #description - 2)
else
local dec2 = Declension.declineWord(entitiesArrayP.P16, 2)
if(dec2 ~= "Logical error Declension.declineWord(arg): word not found") then
description = description .. " [[" .. entitiesArrayP.P16 .. "|" .. dec2 .. "]]"
categories = categories .. "[[Категория:Станции " .. dec2 .."]]"
propertyFull["P16"] = "YES" --P16 для категории заполнена
end
end
description = description .. "."
end
--Какого именно метропоолитена № 2
if(entitiesArrayP["P361"] ~= "") then
description = description:sub(1, -2) --удалил точку
if(entitiesArrayP["P361"] == "full") then
for k, v in pairs (entitiesArray.administrativeT) do
if(v ~= " ") then
local dec2 = Declension.declineWord(v, 2)
if(dec2 ~= "Logical error Declension.declineWord(arg): word not found") then
if(propertyFull["P361"] ~= "YES") then description = description .. " в " end
description = description .. "[[" .. v .. "|" .. dec2 .. "]], "
categories = categories .. "[[Категория:Станции " .. dec2 .."]]"
else
if(propertyFull["P361"] ~= "YES") then description = description .. " в " end
description = description .. "([[" .. v .. "]]), "
end
propertyFull["P361"] = "YES" --P361 для категории заполнена
end
end
description = description:sub(1, #description - 2)
else
local dec2 = Declension.declineWord(entitiesArrayP.P361, 2)
if(dec2 ~= "Logical error Declension.declineWord(arg): word not found") then
description = description .. " [[" .. entitiesArrayP.P361 .. "|" .. dec2 .. "]]"
categories = categories .. "[[Категория:Станции " .. dec2 .."]]"
propertyFull["P361"] = "YES" --P361 для категории заполнена
end
end
description = description .. "."
end
--На какой линии (P81)
if(entitiesArrayP["P81"] ~= "") then
description = description:sub(1, -2) --удалил точку
if(entitiesArrayP["P81"] == "full") then
for k, v in pairs (entitiesArray.administrativeT) do
if(v ~= " ") then
local dec2 = Declension.declineWord(v, 2)
if(dec2 ~= "Logical error Declension.declineWord(arg): word not found") then
if(propertyFull["P81"] ~= "YES") then description = description .. " в " end
description = description .. "на [[" .. v .. "|" .. dec2 .. "]], "
categories = categories .. "[[Категория:" .. v .."]]"
else
if(propertyFull["P81"] ~= "YES") then description = description .. " в " end
description = description .. "([[" .. v .. "]]), "
end
propertyFull["P81"] = "YES" --P81 для категории заполнена
end
end
description = description:sub(1, #description - 2)
else
local dec2 = Declension.declineWord(entitiesArrayP.P81, 2)
if(dec2 ~= "Logical error Declension.declineWord(arg): word not found") then
description = description .. " на [[" .. entitiesArrayP.P81 .. "|" .. dec2 .. "]]"
propertyFull["P81"] = "YES" --P81 для категории заполнена
end
end
description = description .. "."
end
end
--Какая транспортная сеть
function AutoDescriptionMetro.parseP16(entity)
local value = entity:formatPropertyValues("P16", mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
function AutoDescriptionMetro.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 AutoDescriptionMetro.parseP81(entity)
local value = entity:formatPropertyValues("P81", mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
function AutoDescriptionMetro.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 AutoDescriptionMetro.parseP361(entity)
local value = entity:formatPropertyValues("P361", mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
function AutoDescriptionMetro.parseP1619(entity)
local value = entity:formatPropertyValues("P1619", mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
function AutoDescriptionMetro.parseP2043(entity)
local value = entity:formatPropertyValues("P2043", mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
return AutoDescriptionMetro