Модуль:AutoDescriptionGames

Документация
--[[
------------------------------------------
--             AutoDescriptionGames
-- Модуль для заполнения компьютерных игр. 
------------------------------------------
--]]

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

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

local entitiesArray = {developer={}, genre={}, orignCNT={}, platform={}, publisher={}}
local entitiesArrayP = {P31="", P123="", P136="", P178="", P400="", P495="", P577=""}

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

-- Последовательно проходим свойства в карточке викиданных, для формирования массива сущностей entitiesArray
function AutoDescriptionGames.parsing(entity)
	entitiesArrayP["P31"] = AutoDescriptionGames.parseP31(entity)
	entitiesArrayP["P123"] = AutoDescriptionGames.parseP123(entity)
	entitiesArrayP["P136"] = AutoDescriptionGames.parseP136(entity)
	entitiesArrayP["P178"] = AutoDescriptionGames.parseP178(entity)
	entitiesArrayP["P400"] = AutoDescriptionGames.parseP400(entity)
	entitiesArrayP["P495"] = AutoDescriptionGames.parseP495(entity)
	entitiesArrayP["P577"] = AutoDescriptionGames.parseP577(entity)
end 

function AutoDescriptionGames.forming()
	
	if(entitiesArrayP["P495"] ~= "") then  
		if(entitiesArrayP["P495"] == "full") then
			if(Country2Adj.launch(entitiesArray.orignCNT[1], "2") ~= nil and Country2Adj.launch(entitiesArray.orignCNT[2], "2") ~= nil and entitiesArray.orignCNT[3] == nil) then 
				description = description .. Country2Adj.launch(entitiesArray.orignCNT[1], "2") .. " и " .. Country2Adj.launch(entitiesArray.orignCNT[2], "2") .. " "
			else	
				local cnt_adj
				for k, v in pairs (entitiesArray.orignCNT) do
					cnt_adj = Country2Adj.launch(v, "2")
					if(cnt_adj ~= nil) then description = description .. cnt_adj .. ", " 
					else categories = categories .. "[[Категория:Страны без прилагательного]]" end 	
				end	
				description = description:sub(1, #description - 2) .. " "
			end
		else 
			local cnt_adj = Country2Adj.launch(entitiesArrayP.P495, "2")
			if(cnt_adj ~= nil) then description = description .. cnt_adj .. " " 
			else categories = categories .. "[[Категория:Страны без прилагательного]]" end
		end	
	end
	
	if(entitiesArrayP["P31"] == "компьютерная игра") then description = description .. "[[Компьютерные игры|компьютерная игра]]." 
	else description = description .. entitiesArrayP["P31"] .. "." 
	end
	
	if(entitiesArrayP["P577"] ~= "") then 
		local data = entitiesArrayP.P577
		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["P136"] == "full") then
		if(entitiesArray["genre"][2] == nil) then 
			description = description .. " Жанр: [[" .. entitiesArray["genre"][1] .. "]]."
			categories = categories .. "[[Категория:Компьютерные игры в жанре "..entitiesArray.genre[1].."]]"
		else
			description = description .. " Жанры: " 
			for k, v in pairs (entitiesArray.genre) do
				description = description .. "[[" .. v.. "]]" .. ", "
				categories = categories .. "[[Категория:Компьютерные игры в жанре "..v.."]]" -- Добавляются категории по жанрам
			end	
			description=description:sub(1, #description - 2)
        	description=description..". " 
		end	
	end	
	
	if(entitiesArrayP["P400"] == "full") then
		if(entitiesArray["platform"][2] == nil) then 
			description = description .. " Платформа [[" .. entitiesArray["platform"][1] .. "]]."
			categories = categories .. "[[Категория:Игры для "..entitiesArray.platform[1].."]]"
		else
			description = description .. " Платформы: " 
			for k, v in pairs (entitiesArray.platform) do
				description = description .. "[[" .. v.. "]]" .. ", "
				categories = categories .. "[[Категория:Игры для "..v.."]]" -- Добавляются категории по платформам
			end	
			description=description:sub(1, #description - 2)
        	description=description..". " 
		end	
	end	
	
	if(entitiesArrayP["P123"] == "full") then
		if(entitiesArray["publisher"][2] == nil) then description = description .. " Издатель: [[" .. entitiesArray["publisher"][1] .. "]]."
		else
			description = description .. " Издатели: " 
			for k, v in pairs (entitiesArray.publisher) do
				description = description .. "[[" .. v.. "]]" .. ", "
			end	
			description=description:sub(1, #description - 2)
        	description=description..". " 
		end	
	end	
	if(entitiesArrayP["P178"] == "full") then
		if(entitiesArray["developer"][2] == nil) then description = description .. " Разработчик: [[" .. entitiesArray["developer"][1] .. "]]."
		else
			description = description .. " Разработчики: " 
			for k, v in pairs (entitiesArray.developer) do
				description = description .. "[[" .. v.. "]]" .. ", "
			end	
			description=description:sub(1, #description - 2)
        	description=description..". " 
		end	
	end	
	
	
	if(entitiesArrayP["P495"] ~= "" and entitiesArrayP["P495"] ~= "full") then  
		local dec = Declension.declineWord(entitiesArrayP.P495, 6)
		if(dec ~= "Logical error Declension.declineWord(arg): word not found") then categories = categories .. "[[Категория:Компьютерные игры в "..dec.."]]"
		else categories = categories .. "[[Категория:Компьютерные игры в "..entitiesArrayP.P495.."]]"
		end	
	end
	
end


function AutoDescriptionGames.parseP31(entity)
 local value = entity:formatPropertyValues("P31", mw.wikibase.entity.claimRanks).value
 if(value ~= "") then return value 
 else return ""	end
end	

function AutoDescriptionGames.parseP136(entity)
 local p136Statements=entity:getAllStatements("P136")
 local i=1
 for ki, vi in pairs (p136Statements) do
 	if(vi['mainsnak'] ~= nil) then
 		entitiesArray['genre'][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 AutoDescriptionGames.parseP123(entity)
 local p123Statements=entity:getAllStatements("P123")
 local i=1
 for ki, vi in pairs (p123Statements) do
 	if(vi['mainsnak'] ~= nil) then
 		local label
 		if(vi['mainsnak']['datavalue'] ~= nil) then label = mw.wikibase.getLabel(vi['mainsnak']['datavalue']['value']['id']) end
 		if(label ~= nil) then entitiesArray['publisher'][i] = label end
 		i = i + 1
 	end	
 end	
 if(i > 1 and entitiesArray['publisher'][1] ~= nil) then return "full"
 else return "" end	
end	

function AutoDescriptionGames.parseP178(entity)
 local p178Statements=entity:getAllStatements("P178")
 local i=1
 for ki, vi in pairs (p178Statements) do
 	if(vi['mainsnak'] ~= nil) then
 		local label = mw.wikibase.getLabel(vi['mainsnak']['datavalue']['value']['id'])
 		if(label ~= nil) then entitiesArray['developer'][i] = label end
 		i = i + 1
 	end	
 end	
 if(i > 1) then return "full"
 else return "" end	
end	

function AutoDescriptionGames.parseP400(entity)
 local p400Statements = entity:getAllStatements("P400")
 local i=1
 for ki, vi in pairs (p400Statements) do
 	if(vi['mainsnak'] ~= nil) then
 		entitiesArray['platform'][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 AutoDescriptionGames.parseP495(entity)
 local value = entity:formatPropertyValues("P495", mw.wikibase.entity.claimRanks).value
 if(value ~= "") then 
 	if(string.find(value, ",")) then 
 		local i = 1
 		local p495Statements=entity:getAllStatements("P495")
		for ki, vi in pairs (p495Statements) do
			if(vi['mainsnak'] ~= nil) then
				local label = mw.wikibase.getLabel(vi['mainsnak']['datavalue']['value']['id'])
				if(label ~= "") then entitiesArray.orignCNT[i] = label 
				else entitiesArray.orignCNT[i] = "" end
				i = i + 1
			end	
		end	
 		return "full"
 	else return value end
 else return ""	end
end	

function AutoDescriptionGames.parseP577(entity)
 local value = entity:formatPropertyValues("P577", mw.wikibase.entity.claimRanks).value
 if(value ~= "" and value ~= nil) then 
 	if(string.find(value, ",")) then 
 		local trash = string.match(value, ',.*')
 		value = string.gsub(value, trash, '') 
 	end
 	return value 
 else return ""	end
end	

return AutoDescriptionGames