Sari la conținut

Modul:StandardWikidataIntro

De la Wikipedia, enciclopedia liberă

local p = {}
local Wikidata = require ('Modul:Wikidata')           --- used for wikidata access and wikidata claim formatting
local StringUtils = require ('Modul:StringUtils')     --- used for capitalization of phrases 
local TableTools = require ('Modul:TableTools')       --- used for array manipulation
local join = require ('Modul:Separated entries').main --- used for conjunction-join

local propDescriptions = {
	['loc'] = {
		['intro'] = 'se află $1',
		['props'] = {'P706', 'P206', 'P501', 'P2044', 'P610', 'P2046'},
		['intro_props'] = { 
			['P706'] = 'în $1',
			['P206'] = 'lângă $1',
			['P2044'] = 'la o altitudine de $1 deasupra nivelului mării',
			['P501'] = 'enclavă în $1',
			['P610'] = 'cu cel mai înalt punct în $1',
			['P2046'] = 'având o suprafață de $1'
		},
		['qualifiers'] = {
			['P610'] = {'P2044'},
			['intro'] = 'la $1'
		}
	},
	['con'] = {
		['intro'] = 'se leagă de $1',
		['props'] = { 'P2789' },
		['qualifiers'] = {}
	},
	['pop'] = {
		['intro'] = 'are o populație de $1 de locuitori',
		['props'] = { 'P1082' },
		['qualifiers'] = {
			['P1082'] = {'P585', 'P459'},
			['intro'] = 'determinată $1',
			['intro_props'] = {
				['P459'] = 'prin $1',
				['P585'] = 'în $1'
			}
		}
	}
}

local function createPhraseForChapter(chapter, q)
	if not chapter['props'] then return nil end
	
	local sentences = {}
	for _,eachProp in ipairs(chapter['props']) do
		local propValueClaims = Wikidata.findBestClaimsForProperty(q, eachProp)
		if propValueClaims then
			local propValues = {}
			for _,eachPropValueClaim in ipairs(propValueClaims) do
				if eachPropValueClaim.type == 'statement' and eachPropValueClaim.mainsnak and eachPropValueClaim.mainsnak.snaktype == 'value' then
					local commaSeparatedStatementParts = {}
					if eachPropValueClaim.qualifiers and chapter['qualifiers'] and chapter['qualifiers'][eachProp] then for _,eachSupportedQual in ipairs(chapter['qualifiers'][eachProp]) do
						if eachPropValueClaim.qualifiers[eachSupportedQual] then
							local qualValues = {}
							for _,eachQualifierValueInstance in ipairs(eachPropValueClaim.qualifiers[eachSupportedQual]) do
								if eachQualifierValueInstance.snaktype == 'value' then
									if substedQualifierSentencePart then table.insert(qualValues, Wikidata.printSnak(eachQualifierValueInstance)) end
								end
							end
							if #qualValues > 0 then
								local substedQualifierSentencePart = mw.ustring.gsub(chapter['qualifiers']['intro_props'] and chapter['qualifiers']['intro_props'][eachProp] or '$1', '$1', table.concat(qualValues, ', '))
								table.insert(commaSeparatedStatementParts, substedQualifierSentencePart)
							end
						end
					end end
					local qualifierSummary = nil
					if #commaSeparatedStatementParts > 0 then
						qualifierSummary = mw.ustring.gsub(chapter['qualifiers']['intro'] or '$1', '$1', table.concat(commaSeparatedStatementParts, ', '))
					end
					table.insert(propValues, table.concat(TableTools.compressSparseArray({Wikidata.printSnak(eachPropValueClaim.mainsnak), qualifierSummary}), ', '))
				end
			end
			if #propValues > 0 then
				propValues.separator = ', '
				propValues.conjunction = ' și '
				local replacedSentence = mw.ustring.gsub(chapter['intro_props'] and chapter['intro_props'][eachProp] or '$1', '$1', join(propValues))
				table.insert(sentences, replacedSentence)
			end
		end
	end
	
	if #sentences > 0 then
		sentences.separator = '; '
		sentences.conjunction = '; și '
		return mw.ustring.gsub(chapter['intro'] or '$1', '$1', join(sentences))
	end
	return nil
end

local function display(frame)
	local q = frame.args.q or mw.wikibase.getEntityIdForCurrentPage()
	local outphrases = {}

	for _,eachChapter in pairs(propDescriptions) do
		local crtPhrase = createPhraseForChapter(eachChapter, q)
		if crtPhrase then
			table.insert(outphrases, crtPhrase)
		end
	end

	local capitalizedOutphrases = {}
	for _,eachoutphrase in ipairs(outphrases) do
		table.insert(capitalizedOutphrases, StringUtils._capitalize({eachoutphrase}))
	end
	return table.concat(capitalizedOutphrases, '. ')
end

p.display = display
return p