Mòdul:es-pron
A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]
Mòdul de suport per la plantilla:es-pron. Vegeu la documentació de la plantilla. La pronúncia és generada pel Mòdul:es-pron/AFI.
local p = {}
local lang = {code = "es", name = "castellà", sc = "Latn"}
local m_utilities = require('Module:utilitats')
local function formatIPA(text)
return '<span class="IPA" title="pronúncia AFI">' .. text .. '</span>'
end
-- Funció d'entrada de la plantilla:es-pron
function p.plantilla(frame)
local args = frame:getParent().args
local pagename = mw.ustring.lower(mw.title.getCurrentTitle().subpageText)
local namespace = mw.title.getCurrentTitle().nsText
local pron = {}
if args[1] then
if mw.ustring.find(args[1], "[/\\[]") then
pron.gen = args[1]
else
pron = require("Module:es-pron/AFI").show(args[1])
end
else
pron = require("Module:es-pron/AFI").show(pagename)
end
local pronrima = string.sub(args.rima or pron.ps or pron.gen, 2, -2)
local unstressed = mw.ustring.find(args.q or "", "àton")
if unstressed or pronrima == "" then
pronrima = nil
end
local geolects = {
"ps", -- peninsular septentrional, Northern peninsular (Madrid, Valladolid)
"pm", -- peninsular meridional, Southern peninsular (Sevilla)
"aa", -- americà alt, Highland Americas (México DF, Bogotá, Andes)
"ab", -- americà baix, Lowland Americas (Caracas, Antillas)
"rp", -- americà austral, rioplatense (variant "ab", Buenos Aires, Montevideo)
}
for _, geo in ipairs(geolects) do
if args[geo] == '-' then
pron[geo] = nil
elseif args[geo] then
pron[geo] = args[geo]
elseif pron[geo] and unstressed then
pron[geo] = string.sub(pron[geo], 1, 1) .. mw.ustring.gsub(string.sub(pron[geo], 2), "^[ˈˌ]", "")
pron[geo] = mw.ustring.gsub(pron[geo], "[ˈˌ]", ".")
end
end
-- Simplificació de variants idèntiques
if pron.rp == pron.ab then
pron.rp = nil
end
if pron.aa == pron.ab then
pron.am = pron.aa
pron.aa = nil
pron.ab = nil
end
if pron.ps == pron.pm then
pron.pen = pron.ps
pron.ps = nil
pron.pm = nil
end
if pron.pen == pron.am then
if pron.gen == nil then
pron.gen = pron.pen
end
pron.pen = nil
pron.am = nil
end
-- Formatació
local numPron = 0
for _, v in pairs(pron) do
if v ~= nil then
numPron = numPron + 1
end
end
local ret = {}
table.insert(ret, ':*<span style="font-weight: bold;">Pronúncia</span><sup>[[Viccionari:Pronúncia del castellà|(i)]]</sup>: ')
if args.q then
table.insert(ret, '(' .. args.q .. ') ')
end
local dueslinies = numPron > 2 and (pron.pen or pron.ps or pron.pm) and (pron.am or pron.aa or pron.ab or pron.rp)
local comma = false
if pron.gen then
table.insert(ret, formatIPA(pron.gen))
comma = true
end
if dueslinies then
table.insert(ret, '\n:: Peninsular: ')
comma = false
elseif pron.ps or pron.pm then
table.insert(ret, ' peninsular: ')
comma = false
end
if pron.pen then
if dueslinies then
table.insert(ret, formatIPA(pron.pen))
else
table.insert(ret, (comma and ', ' or '') .. 'peninsular ' .. formatIPA(pron.pen))
end
comma = true
end
if pron.ps then
table.insert(ret, (comma and ', ' or '') .. 'septentrional ' .. formatIPA(pron.ps))
comma = true
end
if pron.pm then
table.insert(ret, (comma and ', ' or '') .. 'meridional ' .. formatIPA(pron.pm))
comma = true
end
if dueslinies then
table.insert(ret, '\n:: Americà: ')
comma = false
elseif pron.aa or pron.ab or pron.rp then
table.insert(ret, ' americà: ')
comma = false
end
if pron.am then
if dueslinies then
table.insert(ret, formatIPA(pron.am))
else
table.insert(ret, (comma and ', ' or '') .. 'americà ' .. formatIPA(pron.am))
end
comma = true
end
if pron.aa then
table.insert(ret, (comma and ', ' or '') .. 'alt ' .. formatIPA(pron.aa))
comma = true
end
if pron.ab then
table.insert(ret, (comma and ', ' or '') .. 'baix ' .. formatIPA(pron.ab))
comma = true
end
if pron.rp then
table.insert(ret, (comma and ', ' or '') .. 'austral ' .. formatIPA(pron.rp))
end
-- Rimes
if pronrima and namespace == ""
-- sense locucions ni prefixos o sufixos
and not (string.find(pagename, "[^ ]+ [^ ]+") or string.find(pagename, "^-") or string.find(pagename, "-$"))
then
pronrima = mw.ustring.gsub(pronrima, "[%(%)]", "")
-- número de síl·labes per ordenar categoria de rimes
local numsil
pronrima = mw.ustring.gsub(pronrima, "^[ˈˌ]", "")
_, numsil = mw.ustring.gsub(pronrima, "[.ˌˈ]", "")
numsil = numsil + 1
-- inici des de l'accent
local posaccent = mw.ustring.find(pronrima, "ˈ") or 0
pronrima = mw.ustring.sub(pronrima, posaccent + 1)
pronrima = mw.ustring.gsub(pronrima, "%.", "")
-- inici des de la vocal accentuada
local vocals = m_utilities.llista({'a', 'e', 'i', 'o', 'u'})
local rima = ''
for i = 1, mw.ustring.len(pronrima) do
if vocals[mw.ustring.sub(pronrima, i, i)] then
rima = mw.ustring.sub(pronrima, i)
break
end
end
-- substitució d'aproximants
local from_pron = 'βðɣɱŋ͡'
local to_pron = 'bdɡnn'
for j = 1, mw.ustring.len(from_pron) do
rima = mw.ustring.gsub(rima, mw.ustring.sub(from_pron, j, j), mw.ustring.sub(to_pron, j, j) or '')
end
--rima = mw.ustring.gsub(rima, "r([^aeiou])", "ɾ%1")
--rima = mw.ustring.gsub(rima, "r$", "ɾ")
table.insert(ret, '\n:*<span style="font-weight: bold;">Rimes</span>: [[:Categoria:Rimes en castellà -' .. rima .. '|-' .. rima .. ']]')
local sorting = numsil
if sorting > 9 then
sorting = ">"
else
sorting = tostring(numsil)
end
sorting = sorting .. require('Module:es-general').ordena()
table.insert(ret, m_utilities.format_categories({'Rimes en castellà -' .. rima}, lang, sorting))
end
return table.concat(ret)
end
return p