Module:Matériau : Différence entre versions
m (speciallabel pour gros oeuvre) |
|||
(12 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
local p = {} | local p = {} | ||
− | local wikidata = require | + | local wikidata = require 'Module:Interface Wikidata'.fromLua |
− | local linguistic = require | + | local linguistic = require 'Module:Linguistique' |
− | local speciallabels = { -- | + | local speciallabels = { -- libellés définis localement, qui priment sur ceux de Wikidata |
− | Q296955 = '[[Peinture à l\'huile|huile]]' | + | 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) | + | function p.formatFromItem(item, params) -- affiche le matériau en fonction de Property:P186, et de son qualificatif P518 ('s'applique à') |
− | + | params = params or {} | |
− | local | + | params.speciallabels = speciallabels |
− | if not | + | |
+ | local claims = wikidata.getClaims{entity = item, property = 'P186'} | ||
+ | if not claims then | ||
return nil | return nil | ||
end | end | ||
− | local | + | |
− | local | + | -- 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 | + | |
− | + | ||
− | + | 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) | |
− | |||
− | |||
− | |||
− | |||
− | table.insert( | ||
else | else | ||
− | table.insert( | + | 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 | ||
end | end | ||
− | + | for i, j in pairs(claims) do | |
− | + | assignClaim(j) | |
− | |||
− | |||
end | end | ||
− | + | ||
− | + | -- transforme en chaîne la table des valeurs sans qualificatif | |
+ | 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 | end | ||
+ | |||
return p | return p |
Version actuelle datée du 27 août 2015 à 16:46
La documentation pour ce module peut être créée à Module:Matériau/doc
local p = {} local wikidata = require 'Module:Interface Wikidata'.fromLua 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 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