Aller au contenu

« Module:Matériau » : différence entre les versions

De Wreck
Modèle:Infobox>Zolo
mAucun résumé des modifications
m 22 versions importées
 
(14 versions intermédiaires par 4 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
local p = {}
local p = {}
local wikidata = require('Module:Wikidata')
local wikidata = require 'Module:Wikidata'
local linguistic = require('Module:Linguistique')
local linguistic = require 'Module:Linguistique'


local speciallabels = { -- libellés définis localement, qui priment sur ceux de Wikidata
local speciallabels = { -- libellés définis localement, qui priment sur ceux de Wikidata
Ligne 7 : Ligne 7 :
Q22731 = '[[Pierre naturelle|pierre]]',
Q22731 = '[[Pierre naturelle|pierre]]',
Q4259259 = '[[Toile (peinture)|toile]]',
Q4259259 = '[[Toile (peinture)|toile]]',
Q2448108 = 'structure', --QID de "gros oeuvre" mais parait un peu bizarre dans des contexte comme "gros oeuvre en acier"
}
}


function p.formatFromItem(item, args)
function p.formatFromItem(item, params) -- affiche le matériau en fonction de Property:P186, et de son qualificatif P518 ('s'applique à')
args = args or {}
params = params or {}
-- affiche le matériau en fonction de Property:P186, et de son qualificatif P518 ('s'applique à')
params.speciallabels = speciallabels
local materials = wikidata.getClaims{entity = item, property = 'P186'}
if not materials then
local claims = wikidata.getClaims{entity = item, property = 'P186'}
if not claims then
return nil
return nil
end
end
local vals = {} -- table des valeurs formatées
 
vals.main = {} -- valeurs sans qualficatif P518
-- crée trois tables : main pour celle sans P518, support pour celle avec qualif "s'applique à "support de peinture" et "parts" pour les autres
for i, j in pairs(materials) do
local main, support, parts = {}, {}, {}
local val = wikidata.formatSnak(j.mainsnak, {speciallabels = speciallabels})
 
if not j.qualifiers or not j.qualifiers.P518 then
 
table.insert(vals.main, val)
local function assignClaim(claim) -- met une claims dans la bonne table
else for k, qualif in pairs(j.qualifiers.P518) do
local str = wikidata.formatStatement(claim, params)
local key = wikidata.getid(qualif)
if (not claim.qualifiers) or (not claim.qualifiers.P518) then
if not vals[key] then
table.insert(main, str)
vals[key] = {}
else
end
for _, val in pairs(claim.qualifiers.P518) do
table.insert(vals[key], val)
local key = wikidata.getId(val)
end end
if key == 'Q861259' then
table.insert(support, str)
else
parts[key] = parts[key] or {}
table.insert(parts[key], str)
end
end
end
end
end
local mainstr, supportstr, withpartstr -- supportstr pour le support de peintrue, withpartstr, pour celle avec un autre qualificateur P518
mainstr = linguistic.conj(vals.main)
for i, j in pairs(claims) do
vals.main = nil
assignClaim(j)
if vals['Q861259'] then
supportstr = ' sur ' .. linguistic.conj(vals['Q861259'])
vals['Q861259'] = nil
end
end
local withpart = {} -- table des données contenant un qualificatif P518, sauf "support de peinture"
-- transforme en chaîne la table des valeurs sans qualificatif
for part, materials in pairs(vals) do
local mainstr = linguistic.conj(main)
table.insert(withpart, wikidata._getLabel(part) .. ' en ' .. linguistic.conj(materials))
-- ajoute le support de peinture (sur toile)
local supportstr = linguistic.conj(support)
mainstr = linguistic.conj({mainstr, supportstr}, ' sur ')
-- chaîne des autres valeurs avec qualifs: [piédestal] = {marbre, bronze} => 'piédestal en marbre et bronze'
local formattedparts = {}
for part, materials in pairs(parts) do
local str = wikidata.formatEntity(part, {link = '-', speciallabels = speciallabels}) .. ' en ' .. linguistic.conj(materials)
table.insert(formattedparts, str)
end
end
withpartstr = linguistic.conj(withpart, 'comma')
local partsStr = linguistic.conj(formattedparts, 'comma')
if mainstr or supportstr then
mainstr = (mainstr or '').. (supportstr or '')
mainstr = linguistic.conj({mainstr, partsStr}, 'comma')
 
if (params.linkback ~= '-') then
mainstr = wikidata.addLinkBack(mainstr, item, 'P186')
end
end
mainstr = linguistic.conj({mainstr, withpartstr}, 'comma')
return  mainstr .. wikidata.addTrackingCat('P186')
if (args.linkback ~= '-') then
mainstr = wikidata.addLinkback(mainstr, item, 'P186')
end
return  mainstr .. wikidata.addtrackingcat('P186')
end
end
return p
return p

Dernière version du 22 février 2026 à 00:17

La documentation pour ce module peut être créée à Module:Matériau/doc

local p = {}
local wikidata = require 'Module:Wikidata'
local linguistic = require 'Module:Linguistique'

local speciallabels = { -- libellés définis localement, qui priment sur ceux de Wikidata
	Q296955 = '[[Peinture à l\'huile|huile]]',
	Q22731 = '[[Pierre naturelle|pierre]]',
	Q4259259 = '[[Toile (peinture)|toile]]',
	Q2448108 = 'structure', --QID de "gros oeuvre" mais parait un peu bizarre dans des contexte comme "gros oeuvre en acier"
}

function p.formatFromItem(item, params)	-- affiche le matériau en fonction de Property:P186, et de son qualificatif P518 ('s'applique à')
	params = params or {}
	params.speciallabels = speciallabels
	
	local claims = wikidata.getClaims{entity = item, property = 'P186'}
	if not claims then
		return nil
	end

	-- crée trois tables : main pour celle sans P518, support pour celle avec qualif "s'applique à "support de peinture" et "parts" pour les autres
	local main, support, parts = {}, {}, {}


	local function assignClaim(claim) -- met une claims dans la bonne table
		local str = wikidata.formatStatement(claim, params)
		if (not claim.qualifiers) or (not claim.qualifiers.P518) then
			table.insert(main, str)
		else
			for _, val in pairs(claim.qualifiers.P518) do
				local key = wikidata.getId(val)
				if key == 'Q861259' then
				table.insert(support, str)
				else
					parts[key] = parts[key] or {}
					table.insert(parts[key], str)
				end
			end	
		end
	end
	
	for i, j in pairs(claims) do
		assignClaim(j)
	end
	
	-- transforme en chaîne la table des valeurs sans qualificatif
	local mainstr = linguistic.conj(main)
	
	-- ajoute le support de peinture (sur toile)
	local supportstr = linguistic.conj(support)
	mainstr = linguistic.conj({mainstr, supportstr}, ' sur ')
	
	-- chaîne des autres valeurs avec qualifs: [piédestal] = {marbre, bronze} => 'piédestal en marbre et bronze'
	local formattedparts = {}
	for part, materials in pairs(parts) do
		local str = wikidata.formatEntity(part, {link = '-', speciallabels = speciallabels}) .. '  en ' .. linguistic.conj(materials)
		table.insert(formattedparts, str)
	end
	local partsStr = linguistic.conj(formattedparts, 'comma')
	
	mainstr = linguistic.conj({mainstr, partsStr}, 'comma')

	if (params.linkback ~= '-') then
		mainstr = wikidata.addLinkBack(mainstr, item, 'P186')
	end
	return  mainstr .. wikidata.addTrackingCat('P186')
end

return p