Документация за този модул може да бъде създадена на Модул:AutoDescriptionGalaxy/doc

--[[
------------------------------------------
--             AutoDescriptionGalaxy
-- Модуль для заполнения галактик. 
------------------------------------------
--]]

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 AutoDescriptionGalaxy={}


-- Нам необходимо сформировать и вернуть три переменных
local description = "" -- уточнение
local details = "" -- строка описания
local categories = "[[Категория:Галактики по азбучен ред]]" .. "[[Категория:Астрономически обекти по азбучен ред]]" -- категории-- Промежуточный масив сущностей, в который помещаются результаты парсинга перед формированием описания


local entitiesArray = {catalog={}, code={}, constellation="", redShift="", UGC="", DDO=""}
local entitiesArrayP = {P31="", P59="", P61="", P223="", P528="", P575="", P1090="", P1215="", P2067="", P2583="", P6257="", P6258=""}
local priority = {}


-- Точка входа
function AutoDescriptionGalaxy.launch(entity)
 AutoDescriptionGalaxy.parsing(entity) -- парсим карточку викиданных
 AutoDescriptionGalaxy.forming() -- формируем переменные
 return details, description, categories
end	

-- Последовательно проходим свойства в карточке викиданных, для формирования массива сущностей entitiesArray
function AutoDescriptionGalaxy.parsing(entity)
	AutoDescriptionGalaxy.parseP31(entity)
	entitiesArrayP["P59"]=AutoDescriptionGalaxy.parseP59(entity)
	entitiesArrayP["P61"]=AutoDescriptionGalaxy.parseP61(entity)
	entitiesArrayP["P223"]= AutoDescriptionGalaxy.parseP223(entity)
	entitiesArrayP["P528"]=AutoDescriptionGalaxy.parseP528(entity)
	entitiesArrayP["P575"]=AutoDescriptionGalaxy.parseP575(entity)
	entitiesArrayP["P1090"]=AutoDescriptionGalaxy.parseP1090(entity)
	entitiesArrayP["P1215"]=AutoDescriptionGalaxy.parseP1215(entity)
	entitiesArrayP["P2067"]=AutoDescriptionGalaxy.parseP2067(entity)
	entitiesArrayP["P2583"]=AutoDescriptionGalaxy.parseP2583(entity)
	entitiesArrayP["P6257"]=AutoDescriptionGalaxy.parseP6257(entity)
	entitiesArrayP["P6258"]=AutoDescriptionGalaxy.parseP6258(entity)
end

function AutoDescriptionGalaxy.forming()
	
	if(entitiesArray["UGC"] ~= "") or (entitiesArray["DDO"] ~= "") then
		local det=""
		details = details .. "(также известен как"
		if(entitiesArray["UGC"] ~= "") then det = det .. " [[Общ каталог на галактиките Упсала|" .. entitiesArray.UGC .. "]]," end
		if(entitiesArray["DDO"] ~= "") then det = det .. " [[Каталог на обсерваторията на Дейвид Данлапа|" .. entitiesArray.DDO .. "]]," end
        det=det:sub(1, #det - 1)
		details = details .. det
		details = details .. ")"
	end	
	
	if(entitiesArrayP["P31"] == "галактика") then description = description .. "[[Галактики|галактика]]" 
	else description = description .. "[[" .. entitiesArrayP.P31 .. "]]" end
	if(entitiesArray["constellation"] ~= "") then 
		if (string.find(entitiesArray["constellation"], ",") ) then
		else description = description .. " [[" .. entitiesArray["constellation"] .. "  (созвездие)|созвездия " .. entitiesArray["constellation"] ..  "]]." end
	else description = description .. "." end
	
	if(entitiesArrayP["P223"] ~= "") then 
		description = description .. " [[Морфологическа класификация на галактиките|Морфологически тип галактики]]: " .. entitiesArrayP.P223 .. "."
	end
	
	if(entitiesArrayP["P1215"] ~= "") then 
		description = description .. " [[Видима звездна величина|Блясък]]: " .. entitiesArrayP.P1215 .. "."
	end
	if(entitiesArrayP["P2067"] ~= "") then description = description .. " Маса: " .. entitiesArray["mass"] .. "M☉ ([[Солнечная масса|M☉]] = (1,98847 ± 0,00007)⋅10<sup>30</sup> кг)." end
	
	if(entitiesArrayP["P575"] ~= "") then description = description .. " Открита [[" .. entitiesArrayP.P575 .. " год]]у." end 
	if(entitiesArrayP["P61"] ~= "") then description = description .. " Първооткривател — [[" .. entitiesArrayP.P61 .. "]]." end 
	
	if(entitiesArrayP["P1090"] ~= "") then description = description .. " [[Червено отместване]]: " .. entitiesArrayP.P1090 .. '.' end
	if(entitiesArrayP["P2583"] == "full") then  description = description .. " Разстояние от [[Земя|Земята]]: " .. entitiesArray.distanceFromEarth .. " в cветлинни години." end
	
	if(entitiesArrayP["P6257"] ~= "") then description = description .. " [[Пряко възхождение]]: " .. entitiesArrayP.P6257 .. '.' end
	if(entitiesArrayP["P6258"] ~= "") then description = description .. " [[Склонение]]: " .. entitiesArrayP.P6258 .. '.' end 
	
	if(entitiesArrayP["P528"] == "full") then
		description = description .. " <br><br>Код в каталоге: "
     	for k, v in pairs (entitiesArray.code) do
     		if(v ~= " ") then 
     			if (entitiesArray["catalog"][k] ~= " ") then description = description ..  v .. ' ([[' .. entitiesArray['catalog'][k] .. ']])' .. ", "
     			else description = description ..  v .. ", " end
     		end	
     	end	
        description=description:sub(1, #description - 2)
        description=description..". " 
	end	
	
	
	if(entitiesArray["constellation"] ~= "") then  
		if (string.find(entitiesArray["constellation"], ",") ) then 
		else categories = categories .. "[[Категория:Галактики съзвездия " .. entitiesArray["constellation"] .. "]]" end
	end
	
	if(entitiesArrayP["P528"] == "full") then
     	for k, v in pairs (entitiesArray.code) do
     		if(v ~= " ") then 
     			if (entitiesArray["catalog"][k] ~= " ") then categories = categories .. "[[Категория:" .. entitiesArray["catalog"][k] .. "]]" end	
     		end	
     	end	
	end	
	
	if(entitiesArrayP["P223"] ~= "") then 
		categories = categories .. "[[Категория:" .. entitiesArrayP.P223 .. " (Морфологически тип галактики)]]" 
	end
end	

function AutoDescriptionGalaxy.parseP31(entity)
 local value = entity:formatPropertyValues("P31",mw.wikibase.entity.claimRanks).value
 if(value ~= "") then entitiesArrayP["P31"]=value end
end	

function AutoDescriptionGalaxy.parseP59(entity)
 local value = entity:formatPropertyValues("P59",mw.wikibase.entity.claimRanks).value
 if(value ~= "") then 
 	entitiesArray["constellation"]=value
 	return value
 else return "" end
end	

function AutoDescriptionGalaxy.parseP61(entity)
 local value = entity:formatPropertyValues("P61",mw.wikibase.entity.claimRanks).value
 if(value ~= "") then return value
 else return "" end
end	

function AutoDescriptionGalaxy.parseP223(entity)
 local value = entity:formatPropertyValues("P223",mw.wikibase.entity.claimRanks).value
 if(value ~= "") then return value
 else return "" end
end	

function AutoDescriptionGalaxy.parseP528(entity)
  local p528Statements=mw.wikibase.getBestStatements(entity:getId(), 'P528' )
  i=1
  for ki, vi in pairs (p528Statements) do
  	local catalog=""
  	local code=""
  	if(vi['qualifiers'] ~= nil) then
  		if((vi['qualifiers']['P972'] ~= nil)) then catalog=vi['qualifiers']['P972'][1]['datavalue']['value']['id'] end	
  		if((vi['mainsnak'] ~= nil)) then code=vi['mainsnak']['datavalue']['value'] end
     	if (catalog ~= "") then entitiesArray["catalog"][i] = mw.wikibase.getLabel(catalog) 
     	else entitiesArray["catalog"][i] = " " end
     	if (code ~= "") then entitiesArray["code"][i] = code 
     	else entitiesArray["code"][i] = " "	end
  		i=i+1
  	end	
  	if (catalog ~= "") then
  		if (catalog == "Q2074058") then entitiesArray["DDO"] = code 
		elseif (catalog == "Q615925") then entitiesArray["UGC"] = code 
		else end	
  	end
  end	
  if (i>1) then return "full" 
  else return "" end 
end	

function AutoDescriptionGalaxy.parseP575(entity)
 local value = entity:formatPropertyValues("P575",mw.wikibase.entity.claimRanks).value
 if(value ~= "") then return value
 else return "" end
end	

function AutoDescriptionGalaxy.parseP1090(entity)
 local value = entity:formatPropertyValues("P1090",mw.wikibase.entity.claimRanks).value
 if(value ~= "") then return value
 else return "" end
end	

function AutoDescriptionGalaxy.parseP1215(entity)
 local value = entity:formatPropertyValues("P1215",mw.wikibase.entity.claimRanks).value
 if(value ~= "") then return value
 else return "" end
end	

function AutoDescriptionGalaxy.parseP2067(entity)
 local value = entity:formatPropertyValues("P2067",mw.wikibase.entity.claimRanks).value
 if(value ~= "") then 
 	entitiesArray["mass"]=MathTonumber.integerModule(value)
 	return value
 else return "" end
end	

function AutoDescriptionGalaxy.parseP2583(entity)
  local p2583Statements=entity:getAllStatements("P2583")
  local i=1
  for ki, vi in pairs (p2583Statements) do
  	local amount=""
  	local upperBound=""
  	local erroR=""
  	if(vi['mainsnak'] ~= nil) then
  		if(vi['mainsnak']['datavalue']['value']['amount'] ~= nil) then amount=vi['mainsnak']['datavalue']['value']['amount'] end
  		if(vi['mainsnak']['datavalue']['value']['upperBound'] ~= nil) then 
  			upperBound=vi['mainsnak']['datavalue']['value']['upperBound'] 
  			erroR=MathTonumber.integerModule(upperBound)-MathTonumber.integerModule(amount)
  		end
  		if (erroR ~= "") then entitiesArray["distanceFromEarth"] = MathTonumber.integerModule(amount).."±"..erroR
  		else entitiesArray["distanceFromEarth"] = MathTonumber.integerModule(amount) end	
  		i=i+1
  	end	
  end	
  if(i>1) then return "full" end
end	

function AutoDescriptionGalaxy.parseP6257(entity)
 local value = entity:formatPropertyValues("P6257",mw.wikibase.entity.claimRanks).value
 if(value ~= "") then return value
 else return "" end
end	

function AutoDescriptionGalaxy.parseP6258(entity)
 local value = entity:formatPropertyValues("P6258",mw.wikibase.entity.claimRanks).value
 if(value ~= "") then return value
 else return "" end
end	

return AutoDescriptionGalaxy