Modul:Pronunciation
Aspect
local getArgs = require('Modul:Arguments').getArgs
local wikidata = require('Modul:Wikidata')
local getLangLink = require('Modul:InLang').getLangLink
local mIPA = require('Modul:IPA')
local TableTools = require('Modul:TableTools')
local StringUtils = require('Modul:StringUtils')
local p = {}
local function extractValueAndLangFromClaim(q, propId)
local claims = wikidata.findBestClaimsForProperty(q, propId)
local array = {}
if claims then
for _,eachClaim in ipairs(claims) do
if eachClaim.type == 'statement' and eachClaim.mainsnak.snaktype == 'value' then
local audioLang = '_'
if eachClaim.qualifiers and eachClaim.qualifiers['P407'] then
for __,eachLangQual in ipairs(eachClaim.qualifiers['P407']) do
if eachLangQual.snaktype == 'value' then
audioLang = eachLangQual.datavalue.value.id
break
end
end
end
array[audioLang] = eachClaim.mainsnak.datavalue.value
end
end
end
return array
end
p.fromArgs = function(q, langs, hideLangName)
q = q or mw.wikibase.getEntityIdForCurrentPage()
if langs and 0 < #langs then
for langIdx=1,#langs do
langs[langIdx] = mw.text.trim(langs[langIdx])
end
else
local langClaims = {}
TableTools.appendAll(langClaims, wikidata.findBestClaimsForProperty(q, 'P37') or {})
TableTools.appendAll(langClaims, wikidata.findBestClaimsForProperty(q, 'P103') or {})
TableTools.appendAll(langClaims, wikidata.findBestClaimsForProperty(q, 'P364') or {})
local itemCountryQId = wikidata.loadOneValueInChain({q, 'P17', 'raw'})
if itemCountryQId and mw.ustring.len(itemCountryQId) > 0 then
TableTools.appendAll(langClaims, wikidata.findBestClaimsForProperty(itemCountryQId, 'P37'))
end
for _,eachLangClaim in ipairs(langClaims) do
if eachLangClaim.type == 'statement' and eachLangClaim.mainsnak.snaktype == 'value' then
table.insert(langs, eachLangClaim.mainsnak.datavalue.value.id)
end
end
end
local elem = mw.html.create('span')
:addClass('unicode')
:addClass('haudio')
:tag('span')
:addClass('fn')
:tag('span')
:css('white-space', 'no-wrap')
local wikitext = ''
local pronAudio = extractValueAndLangFromClaim(q, 'P443')
local pronIPA = extractValueAndLangFromClaim(q, 'P898')
local pronData = {}
local langProns = {}
for eachLangQID,eachLangData in pairs(pronAudio) do
if 0 < #langs and TableTools.contains(langs, eachLangQID) then
if not pronData[eachLangQID] then pronData[eachLangQID] = {} end
pronData[eachLangQID].audio = eachLangData
end
end
for eachLangQID,eachLangData in pairs(pronIPA) do
if 0 < #langs and TableTools.contains(langs, eachLangQID) then
if not pronData[eachLangQID] then pronData[eachLangQID] = {} end
pronData[eachLangQID].ipa = eachLangData
end
end
for eachLangQID,eachLangData in pairs(pronData) do
if eachLangData.ipa then
local mIPAData = {}
mIPAData.langCode = wikidata.findOneValueNoRef('P305', eachLangQID)
mIPAData.langCode = mw.ustring.gsub(mIPAData.langCode, '%-.*', '')
if not hideLangName and '_' ~= eachLangQID then
mIPAData.pre = getLangLink(eachLangQID) .. ':' .. mw.text.decode(' ')
end
mIPAData.audio = eachLangData.audio
mIPAData.text = eachLangData.ipa
table.insert(langProns, mIPA.fromArgs(mIPAData))
elseif eachLangData.audio then
table.insert(langProns, mw.getCurrentFrame():expandTemplate({
title = 'Audio',
args = { eachLangData.audio, 'audio' }
}))
end
end
local outText = StringUtils._prependToString({StringUtils._emptyToNil({table.concat(langProns, '; ')}), 'pronunție '})
if outText and outText ~= '' then
elem:wikitext(outText)
return tostring(elem)
else
return ''
end
end
p.fromArray = function(array)
local langs = {}
if array and array.langs then
langs = mw.text.split(array.langs, ',')
end
return p.fromArgs(array and array.q, langs, array and (array.hidelangname or array['ascunde_limba']))
end
p.fromFrame = function(frame)
return p.fromArray(getArgs(frame))
end
return p