Documentația acestui modul poate fi creată la Modul:Pronunciation/doc
local getArgs = require('Modul:Arguments').getArgs local wikidata = require('Modul:Wikidata') local getLangLink = require('Modul:InLang').getLangLink 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 local langString = '' if not hideLangName and '_' ~= eachLangQID then langString = getLangLink(eachLangQID) .. ':' end if eachLangData.audio then langString = langString .. ' [[Fișier:Loudspeaker.svg|11px|link=Fișier:' .. eachLangData.audio .. '|Pronunție audio]]' end if eachLangData.ipa then langString = langString .. ' ' .. tostring(mw.html.create('span'):attr('title', 'Notație în Alfabetul Fonetic Internațional'):wikitext('[[Alfabetul Fonetic Internațional|/' .. eachLangData.ipa .. '/]]')) elseif eachLangData.audio then langString = langString .. ' [[:Fișier:' .. eachLangData.audio .. '|audio]]' end table.insert(langProns, mw.text.trim(langString)) 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