Modul:Výslovnost češtiny
Dokumentaci tohoto modulu lze vytvořit na stránce Nápověda:Modul:Výslovnost češtiny
p = {}
function p.Nahrad (a)
local out = mw.ustring.lower(a)
local consonants_group = "([bcdďfghjklmnpqrřsštťvwxzž])"
local voiceless_group = "([ptťkfsščp])"
-- Spíše experimentálně stanovená skupina, nebojte se opravovat
local voiced_assimilation_group = "([bdďghzž])"
local replacements = {
-- Spodoba znělosti
-- Nepřevádí přímo do IPA (kvůli eliminaci konfliktů s dalšími pravidly)
-- Znělá, neznělá -> neznělá, neznělá
{"b" .. voiceless_group, "p%1"},
{"d" .. voiceless_group, "t%1"},
{"ď" .. voiceless_group, "ť%1"},
{"g" .. voiceless_group, "k%1"},
{"([^c])h" .. voiceless_group, "%1ch%2"},
{"^h" .. voiceless_group, "ch%1"},
{"v" .. voiceless_group, "f%1"},
{"z" .. voiceless_group, "s%1"},
{"ž" .. voiceless_group, "š%1"},
{"bch", "pch"},
{"dch", "tch"},
{"ďch", "ťch"},
{"gch", "kch"},
{"vch", "fch"},
{"zch", "sch"},
{"žch", "šch"},
-- Neznělá, znělá -> znělá, znělá
{"p" .. voiced_assimilation_group, "b%1"},
{"t" .. voiced_assimilation_group, "d%1"},
{"ť" .. voiced_assimilation_group, "ď%1"},
{"k" .. voiced_assimilation_group, "g%1"},
{"ch" .. voiced_assimilation_group, "h%1"},
{"f" .. voiced_assimilation_group, "v%1"},
{"s" .. voiced_assimilation_group, "z%1"},
{"š" .. voiced_assimilation_group, "ž%1"},
-- Konec slova
{"b$", "p"},
{"b ", "p "},
{"d$", "t"},
{"d ", "t "},
{"ď$", "ť"},
{"ď ", "ť "},
{"g$", "k"},
{"g ", "k "},
{"([^c])h$", "%1ch"},
{"([^c])h ", "%1ch "},
{"v$", "f"},
{"v ", "f "},
{"z$", "s"},
{"z ", "s "},
{"ž$", "š"},
{"ž ", "š "},
-- Slabikotvorné r (priorita kvůli závislosti na kontextu)
{consonants_group .. "r" .. consonants_group, "%1r̩%2"},
{consonants_group .. "r$", "%1r̩"},
{consonants_group .. "r ", "%1r̩ "},
-- Slabikotvorné l (priorita kvůli závislosti na kontextu)
{consonants_group .. "l" .. consonants_group, "%1l̩%2"},
{consonants_group .. "l$", "%1l̩"},
{consonants_group .. "l ", "%1l̩ "},
-- Slabikotvorné m (nižší priorita než r, l kvůli řidčímu výskytu)
{consonants_group .. "m" .. consonants_group, "%1m̩%2"},
{consonants_group .. "m$", "%1m̩"},
{consonants_group .. "m ", "%1m̩ "},
-- Znělé a neznělé ř (priorita kvůli závislosti na kontextu)
{voiceless_group .. "ř", "%1r̝̊"},
{"ř" .. voiceless_group, "r̝̊%1"},
{"chř", "chr̝̊"},
{"řch", "r̝̊ch"},
{"ř$", "r̝̊"},
{"ř ", "r̝̊ "},
{"ř", "r̝"},
-- dvojhlásky
{"au", "aʊ̯"},
{"eu", "ɛʊ̯"},
{"ou", "ɔʊ̯"},
-- Skupiny samohlásek <ia, ie, ii, io, iu> v cizích slovech
{"ia", "ɪja̯"},
{"ie", "ɪjɛ"},
{"ii", "ɪjɪ̯"},
{"io", "ɪjo̯"},
{"iu", "ɪju̯"},
-- Prioritně nahrazené x, ch, c a ts (pro zamezení konfliktů)
{"ex([aeiou])", "egz%1"},
{"x", "ks"},
{"ch", "x"},
{"c", "t͡s"},
{"ts", "t͡s"},
-- di, ti, ni (í nepřevedeno přímo kvůli konfliktu s pravidlem pro i)
{"di", "ɟɪ"},
{"dí", "ɟí"},
{"ti", "cɪ"},
{"tí", "cí"},
{"ni", "ɲɪ"},
{"ní", "ɲí"},
-- ě
{"bě", "bjɛ"},
{"dě", "ɟɛ"},
{"mě", "mɲɛ"},
{"ně", "ɲɛ"},
{"pě", "pjɛ"},
{"tě", "cɛ"},
{"vě", "vjɛ"},
-- samohlásky
{"a", "a"},
{"á", "aː"},
{"e", "ɛ"},
{"é", "ɛː"},
{"i", "ɪ"},
{"y", "ɪ"},
{"í", "iː"},
{"ý", "iː"},
{"o", "ɔ"},
{"ó", "ɔː"},
{"u", "ʊ"},
{"ú", "uː"},
{"ů", "uː"},
--souhlásky
{"dž", "d͡ʒ"},
{"čb", "d͡ʒb"},
{"š", "ʃ"},
{"ž", "ʒ"},
{"ň", "ɲ"},
{"ť", "c"},
{"ď", "ɟ"},
{"h", "ɦ"},
{"dz", "d͡z"},
{"č", "t͡ʃ"},
--[ɱ] je realizací /m/ před /f/ a /v/ (např. ve slově tramvaj)
{"mf", "ɱf"},
{"mv", "ɱv"},
--[ŋ] je realizací /n/ před /k/ a /g/ (např. ve slově banka)
{"nk", "ŋk"},
{"ng", "ŋg"},
}
for _, replacement in ipairs(replacements) do
out = mw.ustring.gsub(out, replacement[1], replacement[2])
end
return out
end
function p.print (frame)
if frame.args[1] and frame.args[1] ~= "" then
return p.Nahrad (frame.args[1])
elseif not frame.args[1] then
return "Chyba: Nic nezadáno"
elseif frame.args[1] == "" then
return "Chyba: Prázdný argument"
else
return "Neznámá chyba"
end
end
function p.test (frame)
local arg = {}
local nArg = 0
for a in pairs (frame:getParent().args) do
nArg = nArg + 1
table.insert (arg, mw.text.trim (frame:getParent().args[nArg]) )
end
local out = "TEST automatické vyslovnosti pro češtinu<br />"
out = out .. "<hr />"
if nArg == 1 then
out = out .. "Zadáno: <b>" .. arg[1] .. "</b> IPA: <i>" .. p.Nahrad (arg[1]) .. "</i><br />"
local audio = mw.title.new( 'File:Cs-' .. arg[1] .. '.ogg').file
if audio.exists then
out = out .. "Audio soubor odpovídající " .. arg[1] .. " existuje.<br />"
else
out = out .. "Soubor " .. 'Cs-' .. arg[1] .. '.ogg nenalezen.<br />'
end
elseif nArg >1 then
out = out .. "<table class=\"wikitable sortable\">"
out = out .. "<th>zadáno</th><th>IPA</th><th>soubor</th>"
for n in pairs (arg) do
out = out .. "<tr><td>" .. arg[n] .. "</td><td>" .. p.Nahrad (arg[n]) .. "</td>"
local audio = mw.title.new( 'File:Cs-' .. arg[n] .. '.ogg').file
if audio.exists then
out = out .. "<td>Soubor " .. 'Cs-' .. arg[n] .. '.ogg' .. " existuje </td>"
else
out = out .. "<td>Soubor " .. 'Cs-' .. arg[n] .. '.ogg' .. " neexistuje </td>"
end
out = out .. "</tr>"
end
out = out .. "</table>"
end
return out
end
return p