Перейти к содержанию

Модуль: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