Модуль:AutoDescriptionAsteroid
Внешний вид
Этому модулю не хватает документации. |
--[[
------------------------------------------
-- AutoDescriptionAsteroid
-- Модуль для заполнения астероидов.
------------------------------------------
--]]
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 AutoDescriptionAsteroid={}
-- Нам необходимо сформировать и вернуть три переменных
local description = "" -- Описание
local details = "" -- Детали
local categories = "[[Категория:Астероиды по алфавиту]]" -- категории-- Промежуточный масив сущностей, в который помещаются результаты парсинга перед формированием описания
local entitiesArray = {argumentP="", orbitalI="", discoverer={}}
local entitiesArrayP = {P31="", P61="", P196="", P575="", P2045="", P2248 =""}
--P2045:orbital inclination
--P2248:argument of periapsis
-- Точка входа
function AutoDescriptionAsteroid.launch(entity)
AutoDescriptionAsteroid.parsing(entity) -- парсим карточку викиданных
AutoDescriptionAsteroid.forming() -- формируем переменные
return details, description, categories
end
-- Последовательно проходим свойства в карточке викиданных, для формирования массива сущностей entitiesArray
function AutoDescriptionAsteroid.parsing(entity)
entitiesArrayP["P31"] = AutoDescriptionAsteroid.parseP31(entity)
entitiesArrayP["P61"] = AutoDescriptionAsteroid.parseP61(entity)
entitiesArrayP["P196"] = AutoDescriptionAsteroid.parseP196(entity)
entitiesArrayP["P575"] = AutoDescriptionAsteroid.parseP575(entity)
entitiesArrayP["P2045"] = AutoDescriptionAsteroid.parseP2045(entity)
entitiesArrayP["P2248"] = AutoDescriptionAsteroid.parseP2248(entity)
end
function AutoDescriptionAsteroid.forming()
if(entitiesArrayP["P31"] == "астероид") then description = description .. "[[Астероиды|астероид]]."
else description = description .. entitiesArrayP["P31"] .. "."
end
if(entitiesArrayP["P575"] ~= "") then
local data = entitiesArrayP.P575
if (#data > 4) then
description = description .. " Дата открытия: " .. "[[" .. data .. " года]]."
else
description = description:sub(1, #description - 1) .. "открытый в [[" .. data .. " год]]у."
end
local year = data:sub(#data - 4, #data)
categories = categories .. "[[Категория:Астероиды, открытые в "..year.." году".."]]" -- Добавляется категория Астероиды * года
end
if(entitiesArrayP["P61"] == "full") then
if(entitiesArray["discoverer"][2] == nil) then description = description .. " Первооткрыватель: [[" .. entitiesArray["discoverer"][1] .. "]]."
else
description = description .. " Первооткрыватели: "
for k, v in pairs (entitiesArray.discoverer) do
description = description .. "[[" .. v.. "]]" .. ", "
end
description=description:sub(1, #description - 2)
description=description..". "
end
end
if(entitiesArrayP["P196"] ~= "") then
description = description .. " Группа малых планет: " .. entitiesArrayP.P196 .. "."
local minorPlanet = entitiesArrayP.P196:sub(1,1):upper() .. entitiesArrayP.P196:sub(2) --Капитализирую первый символ для категории
categories = categories .. "[[Категория:" .. minorPlanet .. "]]"
end
description = description .. "<br>"
if(entitiesArrayP["P2045"] ~= "") then
description = description .. " Наклонение орбиты: " .. entitiesArray.orbitalI .. "°."
end
if(entitiesArrayP["P2248"] ~= "") then
description = description .. " Аргумент перицентра: " .. entitiesArray.argumentP .. "°."
end
end
function AutoDescriptionAsteroid.parseP31(entity)
local value = entity:formatPropertyValues("P31", mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
function AutoDescriptionAsteroid.parseP61(entity)
local p61Statements=entity:getAllStatements("P61")
local i=1
for ki, vi in pairs (p61Statements) do
if(vi['mainsnak'] ~= nil) then
entitiesArray['discoverer'][i]=mw.wikibase.getLabel(vi['mainsnak']['datavalue']['value']['id'])
i = i + 1
end
end
if(i > 1) then return "full"
else return "" end
end
function AutoDescriptionAsteroid.parseP196(entity)
local value = entity:formatPropertyValues("P196", mw.wikibase.entity.claimRanks).value
if(value ~= "") then return value
else return "" end
end
function AutoDescriptionAsteroid.parseP575(entity)
local value = entity:formatPropertyValues("P575", mw.wikibase.entity.claimRanks).value
if(value ~= "") then
if(string.find(value, ",")) then
local trash = string.match(value, ',.*')
value = string.gsub(value, trash, '')
end
return value
else return "" end
end
--Наклонение орбиты
function AutoDescriptionAsteroid.parseP2045(entity)
local value = entity:formatPropertyValues("P2045", mw.wikibase.entity.claimRanks).value
if(value ~= "") then
if(string.find(value, "градус")) then
entitiesArray["orbitalI"] = string.gsub(value, "градус", '')
else entitiesArray["orbitalI"] = value end
return value
else return "" end
end
--Аргумент перицентра
function AutoDescriptionAsteroid.parseP2248(entity)
local value = entity:formatPropertyValues("P2248", mw.wikibase.entity.claimRanks).value
if(value ~= "") then
if(string.find(value, "градус")) then
entitiesArray["argumentP"] = string.gsub(value, "градус", '')
else entitiesArray["argumentP"] = value end
return value
else return "" end
end
return AutoDescriptionAsteroid