Wikislovník
skwiktionary
https://sk.wiktionary.org/wiki/Wikislovn%C3%ADk:Hlavn%C3%A1_str%C3%A1nka
MediaWiki 1.47.0-wmf.21
case-sensitive
Médiá
Špeciálne
Diskusia
Používateľ
Diskusia s používateľom
Wikislovník
Diskusia k Wikislovníku
Súbor
Diskusia k súboru
MediaWiki
Diskusia k MediaWiki
Šablóna
Diskusia k šablóne
Pomoc
Diskusia k pomoci
Kategória
Diskusia ku kategórii
Príloha
Diskusia k prílohe
TimedText
TimedText talk
Modul
Diskusia k modulu
Podujatie
Diskusia k podujatiu
jednička
0
2471
197616
193874
2026-09-28T16:36:24Z
TomášPolonec
3256
preklepy
197616
wikitext
text/x-wiki
== Slovenčina ==
=== Podstatné meno ===
* ''rod ženský''
==== Skloňovanie ====
{{Podstatné meno (sk)
| snom = jednička
| sgen = jedničky
| sdat = jedničke
| saku = jedničku
| slok = jedničke
| sinš = jedničkou
| pnom = jedničky
| pgen = jedničiek
| pdat = jedničkám
| paku = jedničky
| plok = jedničkách
| pinš = jedničkami
}}
==== Význam ====
# ''nesprávny variant slova'' {{Odkaz|sk|jednotka}}
==== Príbuzné slová ====
* [[jedničkár]]
==== Preklady ====
{{Preklady|význam=číslica|preklady=
{{P|cs|jednička|ž}}
{{P|da|één|ž}}, {{P2|da|ene|m}}
{{P|eo|unu}}
{{P|fi|ykkönen}}
{{P|fr|un|m}}
{{P|de|Eins|ž}}
{{P|ia|uno}}
{{P|it|uno|m}}
{{P|pl|jedynka|ž}}
{{P|pt|um|m}}
{{P|ro|unu|m}}
{{P|ru|единица|ž}}
{{P|sv|etta}}
}}
== Čeština ==
=== Podstatné meno ===
* ''rod ženský''
==== Skloňovanie ====
{{Podstatné meno (cs)
| snom = jednička
| sgen = jedničky
| sdat = jedničce
| saku = jedničku
| svok = jedničko
| slok = jedničce
| sinš = jedničkou
| pnom = jedničky
| pgen = jedniček
| pdat = jedničkám
| paku = jedničky
| pvok = jedničky
| plok = jedničkách
| pinš = jedničkami
}}
==== Význam ====
# [[jednotka]] (číslo, číslica)
==== Príbuzné slová ====
* [[jedničkový]]
* [[jedničkář]]
[[Kategória:Slovenské podstatné mená]]
[[Kategória:České podstatné mená]]
82atplofh0lu76l0lwmo4gr2gar66rc
toreador
0
21124
197618
117232
2026-09-28T16:50:50Z
Ulla Bille
7783
/* Preklady */ +hu
197618
wikitext
text/x-wiki
== Slovenčina ==
=== Výslovnosť ===
* {{IPA|tɔrɛadɔr}}
=== Podstatné meno ===
* ''rod mužský''
==== Skloňovanie ====
{{Podstatné meno (sk)
| snom = toreador
| sgen = toreadora
| sdat = toreadorovi
| saku = toreadora
| slok = toreadorovi
| sinš = toreadorom
| pnom = toreadori
| pgen = toreadorov
| pdat = toreadorom
| paku = toreadorov
| plok = toreadoroch
| pinš = toreadormi
}}
==== Význam ====
# [[zápasník]] [[s]] [[býk]]mi
==== Príbuzné slová ====
* [[toreadorský]]
==== Preklady ====
{{Preklady|význam=|preklady=
{{P|en|bullfighter}}
{{P|fr|torero}}
{{P|hu|torreádor}}
{{P|de|Toreador}}
}}
[[Kategória:Slovenské podstatné mená]]
m5iioaonp64vfbwfht6d1izxx0w4zjc
trombóza
0
29929
197619
136444
2026-09-28T16:54:17Z
Ulla Bille
7783
/* Preklady */ +hu
197619
wikitext
text/x-wiki
== Slovenčina ==
=== Výslovnosť ===
* {{IPA|trɔmbɔːza}}
=== Podstatné meno ===
* ''rod ženský''
==== Skloňovanie ====
{{Podstatné meno (sk)
| snom = trombóza
| sgen = trombózy
| sdat = trombóze
| saku = trombózu
| slok = trombóze
| sinš = trombózou
| pnom = trombózy
| pgen = trombóz
| pdat = trombózam
| paku = trombózy
| plok = trombózach
| pinš = trombózami
}}
==== Význam ====
# [[upchatie]] [[žila|žily]] [[tromb]]om
==== Preklady ====
{{Preklady|význam=|preklady=
{{P|en|thrombosis}}
{{P|cs|trombóza|ž}}
{{P|fr|thrombose}}
{{P|hu|trombózis}}
{{P|ru|тромбоз}}
}}
[[Kategória:Slovenské podstatné mená]]
jnfjlf1op9b13pc02b5vzj1xotrts7p
algoritmus
0
46931
197605
190523
2026-09-28T15:27:29Z
JanSuchy
1859
/* Preklady */ +pl|algorytm|m, ru|алгоритм|m, sv|algoritm|c
197605
wikitext
text/x-wiki
== Slovenčina ==
=== Výslovnosť ===
* {{IPA|algɔrɪtmʊs}}
=== Delenie ===
* al-go-rit-mus
=== Etymológia ===
Polatinčením slova al-Chorezmí, mena perzského matematika, astronóma a geografa [[w:Muhammad al-Chorezmí|Muhammada al-Chorezmího]].<ref name="Znám1" group="sk">[[w:Štefan Znám|ZNÁM, Štefan]] a kol.. Pohľad do dejín matematiky. 1. vyd. Bratislava : [[w:Alfa (vydavateľstvo)|Alfa]], 1986. S. 91.</ref>
=== Podstatné meno ===
* ''rod mužský neživotný''
==== Skloňovanie ====
{{Podstatné meno (sk)
| snom = algoritmus
| sgen = algoritmu
| sdat = algoritmu
| saku = algoritmus
| slok = algoritme
| sinš = algoritmom
| pnom = algoritmy
| pgen = algoritmov
| pdat = algoritmom
| paku = algoritmy
| plok = algoritmoch
| pinš = algoritmami
}}
==== Význam ====
# {{Príznaky|sk|odb.}} [[postupnosť]] [[presne]] [[definovaný]]ch [[inštrukcia|inštrukcií]] [[na]] [[splnenie]] [[určitý|určitej]] [[úloha|úlohy]]
#* {{Príklad|sk|Iste, ideálne by bolo, keby existoval algoritmus, ktorý by umožňoval pre ľubovoľný iný algoritmus rozhodnúť, či sa jeho výpočet vždy skončí. A je dokázané, že takýto algoritmus neexistuje.}}<ref name="Znám2" group="sk">[[w:Štefan Znám|ZNÁM, Štefan]] a kol.. Pohľad do dejín matematiky. 1. vyd. Bratislava : [[w:Alfa (vydavateľstvo)|Alfa]], 1986. S. 215.</ref>
==== Príbuzné slová ====
* [[algoritmicky]]
* [[algoritmický]]
* [[algoritmickosť]]
* [[algoritmizácia]]
* [[algoritmizovať]]
==== Preklady ====
{{Preklady|význam=|preklady=
{{P|en|algorithm}}
{{P|cs|algoritmus|m}}
{{P|de|Algorithmus|m}}
{{P|pl|algorytm|m}}
{{P|ru|алгоритм|m}}
{{P|es|algoritmo|m}}
{{P|sv|algoritm|c}}
}}
==== Referencie ====
<references group="sk" />
=== Externé odkazy ===
{{Projekt|w=Algoritmus|commons=Category:Algorithms}}
* {{JÚĽŠ|algoritmus|2025-10-11}}
== Čeština ==
=== Výslovnosť ===
* {{IPA|algɔrɪtmʊs}}
=== Delenie ===
* al-go-rit-mus
=== Podstatné meno ===
* ''rod mužský neživotný''
==== Skloňovanie ====
{{Podstatné meno (cs)
| snom = algoritmus
| sgen = algoritmu
| sdat = algoritmu
| saku = algoritmus
| svok = algoritme
| slok = algoritmu
| sinš = algoritmem
| pnom = algoritmy
| pgen = algoritmů
| pdat = algoritmům
| paku = algoritmy
| pvok = algoritmy
| plok = algoritmech
| pinš = algoritmy
}}
==== Význam ====
# [[algoritmus#Slovenčina|algoritmus]]
=== Externé odkazy ===
* {{IJP|algoritmus|2025-10-11}}
[[Kategória:Slovenské podstatné mená]]
[[Kategória:České podstatné mená]]
tpzucwab7d2llr3am2ka2fjqu3od6y5
Modul:sk-pron
828
48355
197606
196847
2026-09-28T16:31:36Z
TomášPolonec
3256
mäkký lokál
197606
Scribunto
text/plain
local export = {}
-- =============================================================================
-- [[ DATA TABLES ]]
-- =============================================================================
-- [[ 1. Phonological Sets ]] --
local diphthongs_set = {
["ia"]=true, ["ie"]=true, ["iu"]=true, ["ô"]=true
}
local bigraphs_set = {
["ch"]=true, ["dz"]=true, ["dž"]=true
}
-- Combined Vowels (Short & Long + Foreign)
local vowels_set = {
["a"]=true, ["e"]=true, ["i"]=true, ["o"]=true, ["u"]=true, ["y"]=true,
["ä"]=true, ["ö"]=true, ["ü"]=true,
["á"]=true, ["é"]=true, ["í"]=true, ["ó"]=true, ["ú"]=true, ["ý"]=true,
["ő"]=true, ["ű"]=true
}
local soft = {['d']='ď',['t']='ť',['n']='ň',['l']='ľ'}
-- Voicing & Sonorants
local sonorants = {
['m']=true, ['n']=true, ['ň']=true, ['l']=true, ['ľ']=true, ['ĺ']=true,
['r']=true, ['ŕ']=true, ['j']=true, ['v']=true
}
local voiced_paired = {
['b']=true, ['d']=true, ['ď']=true, ['g']=true, ['dz']=true,
['dž']=true, ['h']=true, ['z']=true, ['ž']=true, ['w']=true
}
local voiceless_paired = {
['p']=true, ['t']=true, ['ť']=true, ['k']=true, ['c']=true,
['č']=true, ['ch']=true, ['s']=true, ['š']=true, ['f']=true
}
local voicing_map = {
-- Voiced to Voiceless
['b']='p', ['d']='t', ['ď']='ť', ['g']='k', ['dz']='c', ['dž']='č',
['h']='ch', ['w']='f', ['z']='s', ['ž']='š',
-- Voiceless to Voiced
['p']='b', ['t']='d', ['ť']='ď', ['k']='g', ['c']='dz', ['č']='dž',
['ch']='h', ['f']='w', ['s']='z', ['š']='ž'
}
-- [[ 2. Assimilation & Encoding ]] --
local dental_mergers = {
['z']='dzdz', ['dz']='dzdz', ['s']='cc', ['c']='cc',
['ž']='dždž', ['dž']='dždž', ['š']='čč', ['č']='čč'
}
-- Mergers: Encodes t.s -> 15, d.z -> 26, etc.
local c1_enc = {['t']=1, ['d']=2, ['ť']=3, ['ď']=4}
local c2_enc = {
['c']=1, ['dz']=2, ['č']=3, ['dž']=4, ['s']=5, ['z']=6, ['š']=7, ['ž']=8
}
-- Decoding: Used by IPA renderer to convert "15" -> t.ts
local c1_dec = { 't', 'd', 'c', 'ɟ' }
local c2_dec = { 't͡s', 'd͡z', 't͡ʃ', 'd͡ʒ', 's', 'z', 'ʃ', 'ʒ' }
-- [[ 3. Morphological & Lexical Exceptions ]] --
local prefixes = {
['pod']=true, ['ob']=true, ['od']=true, ['ráz']=true, ['roz']=true,
['bez']=true, ['ab']=true, ['vz']=true, ['pred']=true, ['nad']=true
}
local prepositions_set = {
["bez"]=true, ["cez"]=true, ["do"]=true, ["k"]=true, ["ku"]=true,
["na"]=true, ["nad"]=true, ["o"]=true, ["od"]=true, ["po"]=true,
["pod"]=true, ["pre"]=true, ["pred"]=true, ["pri"]=true, ["s"]=true,
["so"]=true, ["u"]=true, ["v"]=true, ["vo"]=true, ["z"]=true,
["za"]=true, ["zo"]=true
}
local clitics = {
["byť"]=true, ["som"]=true, ["si"]=true, ["je"]=true, ["sme"]=true,
["ste"]=true, ["sú"]=true, ["bol"]=true, ["mi"]=true, ["ti"]=true,
["mu"]=true, ["jej"]=true, ["ma"]=true, ["ťa"]=true, ["sa"]=true,
["ho"]=true, ["ju"]=true, ["nám"]=true, ["vám"]=true, ["im"]=true,
["nás"]=true, ["vás"]=true, ["ich"]=true, ["ten"]=true, ["tá"]=true,
["to"]=true, ["on"]=true, ["a"]=true, ["i"]=true, ["aj"]=true,
["že"]=true, ["keď"]=true, ["až"]=true, ["len"]=true, ["či"]=true,
["kde"]=true, ["ba"]=true, ["ak"]=true, ["už"]=true, ["by"]=true
}
local preposition_blockers = {
['mnou']=true, ['mne']=true, ['tebou']=true, ['ňou']=true,
['ním']=true, ['nami']=true, ['vami']=true, ['nimi']=true,
['tebe']=true, ['nemu']=true, ['nej']=true, ['nám']=true,
['vám']=true, ['nim']=true
}
-- [[ 4. IPA Output Maps ]] --
local ipa_map = {
-- Vowels
['a']='a', ['á']='aː', ['ä']='æ', ['e']='e', ['é']='eː',
['i']='i', ['í']='iː', ['o']='ɔ', ['ó']='ɔː', ['ô']='u̯ɔ',
['u']='u', ['ú']='uː', ['y']='i', ['ý']='iː', ['ö']='ø',
['ő']='øː', ['ü']='y', ['ű']='yː',
-- Consonants
['b']='b', ['c']='t͡s', ['č']='t͡ʃ', ['d']='d', ['ď']='ɟ',
['g']='ɡ', ['h']='ɦ', ['j']='j', ['k']='k', ['l']='l',
['ľ']='ʎ', ['m']='m', ['n']='n', ['ň']='ɲ', ['p']='p',
['r']='r', ['ř']='r̝', ['ŕ']='r̩ː', ['ĺ']='l̩ː', ['s']='s',
['š']='ʃ', ['t']='t', ['ť']='c', ['z']='z', ['ž']='ʒ',
['x']='x',
-- Special
['v']='v', ['w']='w', ['F']='F', ['f']='f', ['ů']='ů', ["'"]='ˈ',
-- Digraphs/Multigraphs
['dz']='d͡z', ['dž']='d͡ʒ', ['ch']='x', ['dzdz']='d͡zː', ['dždž']='d͡ʒː',
['ia']='ɪ̯a', ['ie']='ɪ̯e', ['iu']='ɪ̯u'
}
local variant_map = {
["H"]={"ɣ","ɦ"}, ["W"]={"ʋ","v"}, ["U"]={"u̯","ʋ"},
["J"]={"ɪ̯","j"}, ["N"]={"n","n̠"}
}
-- Module-level state variables
local IS_MO_VARIANT = false
local NAMESPACE = ""
local PAGENAME = ""
local LOAN = 0
local HARD_SUFFIX = 0
local SOFT_SUFFIX = 0
local AS_IMP = 0
-- =============================================================================
-- [[ HELPER FUNCTIONS ]]
-- =============================================================================
function get_voiced_counterpart(char) return voicing_map[char] end
-- Tokenizer (Preserves digraphs)
function get_graphemes(word)
local units = {}
local len = mw.ustring.len(word)
local i = 1
local is_loan = (LOAN == 1)
while i <= len do
local two_char = mw.ustring.sub(word, i, i + 1)
if bigraphs_set[two_char] or (diphthongs_set[two_char] and not is_loan) then
table.insert(units, two_char)
i = i + 2
else
table.insert(units, mw.ustring.sub(word, i, i))
i = i + 1
end
end
return units
end
-- Resolve Cluster (Contact Assimilation Logic)
function resolve_cluster(c1, c2, is_boundary)
-- GUARD: v/f complex logic
if c1 == 'v' or c1 == 'f' then return nil end
-- 1. SPECIAL: <h> or <ch> logic
if c1 == 'ch' or c1 == 'h' then
if (voiced_paired[c2] or sonorants[c2]) and is_boundary then return 'H' .. c2 end
end
-- 2. Standard Assimilation
local c1_new = c1
if (voiceless_paired[c1] and (voiced_paired[c2] or (is_boundary and (sonorants[c2] or vowels_set[c2]))))
or (voiced_paired[c1] and voiceless_paired[c2]) then
c1_new = voicing_map[c1] or c1
end
-- 3. Mergers & Gemination
if c1_enc[c1_new] and dental_mergers[c2] then
if is_boundary then
local d1, d2 = c1_enc[c1_new], c2_enc[c2]
if d1 and d2 then return d1 .. d2 end
end
return dental_mergers[c2]
end
if c1_new ~= c1 then return c1_new .. c2 end
return nil
end
function apply_assimilation(tokens, i, j, is_boundary)
if IS_MO_VARIANT and i == #tokens - 3 then return end
local res = resolve_cluster(tokens[i], tokens[j], is_boundary)
if res then
local res_tokens = get_graphemes(res)
if #res_tokens == 2 then
tokens[i] = res_tokens[1]; tokens[j] = res_tokens[2]
elseif #res_tokens == 1 then
tokens[i] = res_tokens[1]; tokens[j] = ""
end
end
end
local function check_vowel(units, i, d, len)
while i > 0 and i <= len do
local t = units[i]
if vowels_set[t] or diphthongs_set[t] then return true end
if t ~= "'" and t ~= "-" and t ~= " " and t ~= "_" then return false end
i = i + d
end
return false
end
function split_into_syllables(word)
local units = get_graphemes(word)
local nuc, syl, len = {}, {}, #units
-- Helper: Check if index k is a Nucleus
local function is_nuc(k)
local u = units[k]; if not u then return false end
if diphthongs_set[u] or vowels_set[u] then return true end
if not (u == 'r' or u == 'l' or u == 'ŕ' or u == 'ĺ') then return false end
return not (check_vowel(units, k-1, -1, len) or check_vowel(units, k+1, 1, len))
end
for i = 1, len do if is_nuc(i) then table.insert(nuc, i) end end
if #nuc == 0 then return {table.concat(units)} end
local start = 1
for k = 1, #nuc - 1 do
local curr, next_n = nuc[k], nuc[k+1]
local split = curr -- Default: Split after vowel (V-CV)
local c_cnt, first_c = 0, nil
for j = curr + 1, next_n - 1 do
local c = units[j]
if c == "-" or c == " " then split = j; c_cnt = -1; break -- 1. Hard Boundary
elseif c == "'" then split = j - 1; c_cnt = -1; break -- 2. Stress Boundary
elseif c ~= "." then c_cnt = c_cnt + 1; first_c = first_c or j end
end
if c_cnt >= 2 then split = first_c end -- 3. Cluster Rule (VC-CV)
table.insert(syl, table.concat(units, "", start, split))
start = split + 1
end
table.insert(syl, table.concat(units, "", start))
return syl
end
-- [[ Core IPA Transformation Logic ]] --
local function ipa_transform_worker(word)
-- 1. Preprocess: Strip punctuation but map boundaries
local bound, idx = {}, 0
word = mw.ustring.gsub(word, ".", function(c)
if c == "-" or c == "." then bound[idx] = true; return "" end
idx = idx + 1
end) -- Returns cleaned word, populates 'bound'
local sub = mw.ustring.sub
local w_len, res, i = idx, {}, 1
local function is_C(c)
return not c or c == "" or (not vowels_set[c] and not diphthongs_set[c])
end
while i <= w_len do
local c1 = sub(word, i, i)
if c1 == "+" then
i = i + 1
else
local nxt = sub(word, i+1, i+1)
local c2_raw = (nxt == "+") and sub(word, i+2, i+2) or nxt
local c2, c4 = c1 .. c2_raw, sub(word, i, i+3)
local jump = (nxt == "+") and 1 or 0
local sym, step, raw = nil, 1, c1
if c4 == "dzdz" or c4 == "dždž" then
sym, step, raw = ipa_map[c4], 4, c4
elseif (c1 == c2_raw or c2 == "čš") and ipa_map[c1] and not vowels_set[c1] then
sym, step, raw = ipa_map[c1] .. "ː", 2 + jump, c1
elseif (ipa_map[c2] and not diphthongs_set[c2])
or (diphthongs_set[c2] and (LOAN~=1 or jump>0) and not bound[i]) then
sym, step, raw = ipa_map[c2], 2 + jump, c2 -- treat as diphthong only if native or explicitly marked with +
else
sym = ipa_map[c1] or c1
end
if sym then
if (raw=='r' or raw=='l') and is_C(i>1 and sub(word,i-1,i-1)) and is_C(sub(word,i+step,i+step)) then
sym = sym .. '̩' -- mark liquid as syllabic if sandwiched between non-vowels
end
table.insert(res, sym)
end
i = i + step
end
end
local out = table.concat(res)
-- Post-processing for loanword endings (-ovan-)
if LOAN == 1 then
local sfx = mw.ustring.match(word, ".*ovan(.+)$")
if sfx then
local m = ipa_map
local fix = {
["ie"]=m["ie"], ["ia"]=m["ia"], ["iu"]=m["iu"],
["í"]=m["í"], ["ím"]=m["í"]..(m["m"] or 'm'),
["iam"]=m["ia"]..(m["m"] or 'm'), ["iach"]=m["ia"]..(m["x"] or 'x'),
["iami"]=m["ia"]..(m["m"] or 'm')..(m["i"] or 'i')
}
if fix[sfx] then
local bad = (m["n"] or 'n') .. sfx:gsub(".", function(c) return m[c] or c end)
out = mw.ustring.gsub(out, bad:gsub("[%p]", "%%%0") .. "$", (m['ň'] or 'ɲ') .. fix[sfx]) -- correct [n] to [ň] before soft vowels in loan suffixes
end
end
end
return out
end
-- [[ 2. STAGE 2: PHONETIC RESOLVER ]] --
function resolve_phonetic_base(base_text)
local res = {}
local len = mw.ustring.len(base_text)
local i = 1
-- Map for standard phonetic realization
local map = { ['v']='ʋ', ['w']='v', ['F']='v', ['f']='f', ['ů']='u̯', ['I']='ɪ̯' }
local sub = mw.ustring.sub -- Local ref
while i <= len do
local c = sub(base_text, i, i)
local symbol = map[c] or c
local next_c = (i < len) and sub(base_text, i+1, i+1) or ""
local next_resolved = map[next_c] or next_c
-- Apply FULL Nasal Assimilation
if c == 'm' then
if next_resolved == 'f' or next_resolved == 'v' or next_resolved == 'ʋ' then symbol = 'ɱ' end
elseif c == 'n' then
if next_resolved == 'k' or next_resolved == 'ɡ' then symbol = 'ŋ'
elseif next_resolved == 's' or next_resolved == 'z' or next_resolved == 'ʃ' or next_resolved == 'ʒ' then symbol = 'N'
elseif next_resolved == 'x' then symbol = 'ɰ̃'
elseif next_resolved == 'p' or next_resolved == 'b' then symbol = 'm' end
end
table.insert(res, symbol)
i = i + 1
end
return table.concat(res)
end
-- [[ 3. FINAL GENERATION ]] --
local function expand_variants(txt)
local find, sub, gsub = mw.ustring.find, mw.ustring.sub, mw.ustring.gsub
-- 1. Digits: Binary Branch (All-Split vs All-Merged)
if find(txt, "%d[ˈ%s_]*%d") then
local res = {}
for m = 1, 2 do
local s = gsub(txt, "(%d)([ˈ%s_]*)(%d)", function(d1, sep, d2)
d1, d2 = tonumber(d1), tonumber(d2)
if m == 1 then -- Split (Unassimilated)
local f = ((d1+d2)%2==1) and (d1 + (d2%2==0 and 1 or -1)) or d1
return (c1_dec[f] or "") .. sep .. (c2_dec[d2] or "")
else -- Merged (Assimilated)
local c = c2_dec[d2>4 and d2-4 or d2] or ""
-- If stressed: Unreleased + Short (t̚ ˈt͡s). If not: Long (t͡sː)
return find(sep, "ˈ") and (sub(c,1,1).."̚ ˈ"..c) or (c.."ː")
end
end)
for _, v in ipairs(expand_variants(s)) do table.insert(res, v) end
end
return res
end
-- 2. Letters: Recursive Expansion (HWUJN)
local s, e, k = find(txt, "([HWUJN])")
if not s then return {txt} end -- Base case
local res, h, t = {}, sub(txt, 1, s-1), sub(txt, e+1)
for _, r in ipairs(variant_map[k]) do
for _, sub in ipairs(expand_variants(h..r..t)) do table.insert(res, sub) end
end
return res
end
local function format_ipa_output(res)
local distinct = table.concat(res.high) ~= table.concat(res.low)
local out = {}
-- Base prefix with the hardcoded link and phonemic output
table.insert(out, "* [[:w:Medzinárodná fonetická abeceda|IPA]]: /" .. res.phonemic .. "/")
local function add(list, tag)
for i, ipa in ipairs(list) do
local labels = {}
-- Add primary register label
if distinct and tag and i == 1 then table.insert(labels, tag) end
-- Add rare label if applicable
if mw.ustring.find(ipa, "ɦ ?ˈ?ɦ") then table.insert(labels, "ojedinele") end
local label_str = ""
if #labels > 0 then
label_str = "(''" .. table.concat(labels, ", ") .. "'') "
end
table.insert(out, label_str .. "[" .. ipa .. "]")
end
end
add(res.high, "vyšší štýl")
if distinct then add(res.low, "bežne") end
-- Concatenate everything with comma-spaces matching the screenshot style
return table.concat(out, ", ")
end
-- =============================================================================
-- [[ PROCESSING STEPS ]]
-- =============================================================================
function step_foreign_graphemes(word)
word = mw.ustring.lower(word)
word = mw.ustring.gsub(word, "ů", "ú")
word = mw.ustring.gsub(word, "x", "ks")
word = mw.ustring.gsub(word, "w", "v")
word = mw.ustring.gsub(word, "qu", "kv")
word = mw.ustring.gsub(word, "[,']", "")
return word
end
local function is_empty_or_space(w, k)
local x = mw.ustring.sub(w, k, k)
return x == "" or x == " "
end
function step_softening(w)
if LOAN == 1 then
if SOFT_SUFFIX == 1 then
local c = string.sub(w, -2, -2)
return string.sub(w, 1, -3) .. (soft[c] or c) .. string.sub(w, -1)
end
return w
end
local sub = mw.ustring.sub
local res, len = {}, mw.ustring.len(w)
for i = 1, len do
local c = sub(w, i, i)
local s = false
if soft[c] then
local n1 = sub(w, i+1, i+1)
local n2 = sub(w, i+1, i+2)
if n2 == "ia" or n2 == "ie" or n2 == "iu" then
s = true
elseif n1 == "i" or n1 == "í" or n1 == "e" then
s = true
if HARD_SUFFIX == 1 then
local n3 = sub(w, i+1, i+3)
if (n1 == "i" or n1 == "í" or n1 == "e") and is_empty_or_space(w, i+2) then s = false
elseif n2 == "ej" and is_empty_or_space(w, i+3) then s = false
elseif (n3 == "eho" or n3 == "emu") and is_empty_or_space(w, i+4) then s = false
end
end
end
end
table.insert(res, s and soft[c] or c)
end
return table.concat(res)
end
function step_prosody(word)
-- 1. Merge Prepositions
word = mw.ustring.gsub(word, "%f[%a](%a+) +", function(w)
return prepositions_set[mw.ustring.lower(w)] and (w .. "_") or nil
end)
-- 2. Add Stress
return mw.ustring.gsub(word, "%S+", function(w)
local raw = mw.ustring.lower(mw.ustring.gsub(w, "_", ""))
-- Exclusions: Clitics OR Starts with hyphen OR Single letter OR No syllabic nucleus
if clitics[raw]
or mw.ustring.sub(w, 1, 1) == "-"
or mw.ustring.sub(w, -1) == "-"
or mw.ustring.len(w) == 1
or not mw.ustring.find(raw, "[aáäeéiíoóuúyýöőüűôrŕlĺ]") then
return w
end
return "'" .. w
end)
end
function step_simplification(word)
local patterns = { "s[tť]s[tk]", "[pd][tz]sk", "[tďdz]st", "[ztd]šť", "[zdt]sk", "ptč" }
local function resolve(w)
local c1 = mw.ustring.sub(w, 1, 1)
if c1 == "s" then return c1 .. mw.ustring.sub(w, 4)
elseif c1 == "p" then return c1 .. mw.ustring.sub(w, 3)
else
w = mw.ustring.gsub(w, "z", "")
if mw.ustring.len(w) <= 2 then return w end
local c2 = mw.ustring.sub(w, 2, 2)
local head = (c2 == "s") and "c" or "č"
return head .. mw.ustring.sub(w, 3)
end
end
for _, pat in ipairs(patterns) do
word = mw.ustring.gsub(word, pat, resolve)
end
return word
end
function step_assimilation(word)
-- [[ 1. Pre-processing & Morphological Exceptions ]] --
word = mw.ustring.gsub(word, "('[nv]ášmu)(%f[%A])", function(match)
return mw.ustring.gsub(match, "š", "ž")
end)
-- 2. sme -> zme (Only if surrounded by boundaries)
if mw.ustring.find(word, "sme") then
word = mw.ustring.gsub(mw.ustring.gsub(word, "^sme$", "zme"), "^sme(%s)", "zme%1")
word = mw.ustring.gsub(mw.ustring.gsub(word, "(%s)sme$", "%1zme"), "(%s)sme(%s)", "%1zme%2")
end
-- A. Prefix "eks-" (eks- + vowel/voiced -> egz-)
local v_set = "[aeiouyáéíóúýäôglmnňrjvzhdbžg]"
word = mw.ustring.gsub(word, "^('?)eks("..v_set..")", "%1egz%2")
word = mw.ustring.gsub(word, "([%s_])('?)eks("..v_set..")", "%1%2egz%3")
word = mw.ustring.gsub(word, "^('?)dis("..v_set..")", "%1diz%2")
word = mw.ustring.gsub(word, "([%s_])('?)dis("..v_set..")", "%1%diz%3")
-- B. Preposition Vocalization (so/ku -> zo/gu)
word = mw.ustring.gsub(word, "([%s'])([sk][ou])(_)([^%s%._]+)", function(before, prep, sep, next_w)
if not preposition_blockers[next_w] then
local voiced = (prep == "so") and "zo" or "gu"
return before .. voiced .. sep .. next_w
end
end)
-- C. Imperative Suffix "-me" (Voice preceding consonant)
if AS_IMP == 1 then
word = mw.ustring.gsub(word, "([ptsťkfcčš])me", function(c)
return (voicing_map[c] or c) .. "me"
end)
end
-- [[ 2. Main Assimilation Logic ]] --
local tokens = get_graphemes(word)
local len = #tokens
local str = table.concat(tokens)
-- Check for "-mo" variant trigger
if mw.ustring.find(word, "[ptsčškcfx]%.mo%f[%A]") or mw.ustring.find(word, "ch%.mo%f[%A]") then
IS_MO_VARIANT = true
end
-- Helpers
local function prev_C(k)
while k >= 1 do
local t = tokens[k];
if t ~= "'" and t ~= "_" and t ~= " " and t ~= "-" and t ~= "." then return k end
k = k - 1
end
end
local function is_bound(k)
return k < 1 or k > len or tokens[k] == " " or tokens[k] == "_" or tokens[k] == "-"
end
local function prev_bound(k)
local l, idx = 0, k - 1
while idx - l >= 1 do
local t = tokens[idx - l]
if t == "'" or t == "_" or t == " " or t == "-" then break end
l = l + 1
end
return l
end
local function match_prefix(start_idx, end_idx)
local diff = end_idx - start_idx + 1
if diff == 2 then return prefixes[tokens[start_idx] .. tokens[start_idx+1]]
elseif diff == 3 then return prefixes[tokens[start_idx] .. tokens[start_idx+1] .. tokens[start_idx+2]]
elseif diff == 4 then return prefixes[tokens[start_idx] .. tokens[start_idx+1] .. tokens[start_idx+2] .. tokens[start_idx+3]]
end
return false
end
local simple = not mw.ustring.find(str, "[ %-_]")
local w_offset = (simple and tokens[1] == "'") and 1 or 0
-- p_len = Exact count of characters before 'i'
local p_len = simple and (len - w_offset - 1) or prev_bound(len)
-- Reverse Loop (Regressive Assimilation)
for i = len, 2, -1 do
-- Reset state if we crossed a word boundary
if not simple and is_bound(i+1) then p_len = prev_bound(i) end
local is_prefix = false
-- A. Prefix Check
if p_len >= 2 and p_len <= 4 then
if match_prefix(i - p_len, i - 1) then
apply_assimilation(tokens, i - 1, i, true)
is_prefix = true
end
end
-- B. General Assimilation (If not prefix)
if not is_prefix then
local tgt = prev_C(i-1)
if tgt then
local is_opt = false
for k = tgt + 1, i - 1 do
if tokens[k] == " " or tokens[k] == "-" or tokens[k] == "_" then is_opt = true; break end
end
-- Handles both Devoicing (standard) and Voicing (at boundaries)
apply_assimilation(tokens, tgt, i, is_opt)
end
end
p_len = p_len - 1
end
return table.concat(tokens)
end
local function is_nuc(c)
return vowels_set[c] or diphthongs_set[c] or c == 'r' or c == 'l' or c == 'ŕ' or c == 'ĺ'
end
function step_v_f_j_realization(word)
word = mw.ustring.gsub(mw.ustring.gsub(word, "anje[lľ]", "aňɪ̯el"), "_", "")
word = mw.ustring.gsub(mw.ustring.gsub(word, "%+u", "ů"), "%+i", "I")
local syllables = split_into_syllables(word)
local res_syls = {}
local clean_chars = {}
local char_map = {}
local idx = 1
for s_i, syl in ipairs(syllables) do
char_map[s_i] = {}
for c_i = 1, mw.ustring.len(syl) do
local c = mw.ustring.sub(syl, c_i, c_i)
if c ~= "'" and c ~= "." and c ~= "-" then
clean_chars[idx] = c
char_map[s_i][c_i] = idx
idx = idx + 1
end
end
end
for s_i, syl in ipairs(syllables) do
local s_len, res = mw.ustring.len(syl), {}
local nuc_i = nil
for k = 1, s_len do
if is_nuc(mw.ustring.sub(syl, k, k)) then nuc_i = k; break end
end
for c_i = 1, s_len do
local c = mw.ustring.sub(syl, c_i, c_i)
local out = c
if c ~= "'" and c ~= "." and c ~= "-" then
local flat_idx = char_map[s_i][c_i]
local prev = clean_chars[flat_idx - 1]
local nxt = clean_chars[flat_idx + 1]
local after_nxt = clean_chars[flat_idx + 2]
-- 2. DETECT POSITIONS (Ignore ' and .)
local is_onset = (mw.ustring.gsub(mw.ustring.sub(syl, 1, c_i-1), "['%.%-]", "") == "")
local is_coda = nuc_i and (c_i > nuc_i)
if c == 'u' then
if prev == 'o' and (not nxt or nxt == ' ') then out = "ů" end
elseif c == 'v' then
if is_coda and prev and is_nuc(prev) then
local is_u_prev = (prev == 'u' or prev == 'ú')
local is_amb_next = (nxt and (nxt == 'n' or nxt == 'ň' or nxt == 'l' or nxt == 'ľ' or nxt == 'r'))
out = (is_u_prev or is_amb_next) and "U" or "ů"
else
local prev_nuc = false
if s_i > 1 then prev_nuc = prev and is_nuc(prev) or false end
local next_is_vn = (nxt and (nxt == 'n' or nxt == 'ň'))
if is_onset and (s_i == 1 or prev_nuc) and next_is_vn then
out = "W"
else
local next_is_z = (nxt == 'z')
local after_z = next_is_z and after_nxt
local vz_unv = (next_is_z and after_z and voiceless_paired[after_z])
if vz_unv or (nxt and voiceless_paired[nxt]) then out = "f"
elseif nxt and voiced_paired[nxt] and not sonorants[nxt] then out = "w"
else out = "v" end
end
end
elseif c == 'f' then
if is_coda and nxt and (voiced_paired[nxt] or sonorants[nxt]) then out = "F" end
elseif c == 'j' then
local prev_is_iy = (prev == 'i' or prev == 'í' or prev == 'y' or prev == 'ý')
if is_onset then out = "j"
elseif not vowels_set[prev] or prev_is_iy then out = "J"
else out = "I" end
end
end
table.insert(res, out)
end
table.insert(res_syls, table.concat(res))
end
return table.concat(res_syls)
end
function step_final_devoicing(word)
local tokens = get_graphemes(word)
local i = #tokens
while i > 0 do
local c = tokens[i]
if voiced_paired[c] then tokens[i] = voicing_map[c]; i = i - 1
elseif voiceless_paired[c] then i = i - 1
else break end
end
return table.concat(tokens)
end
function generate_all_transcriptions(word, original_word)
local gsub = mw.ustring.gsub
-- A. Base IPA
local base_ipa = ipa_transform_worker(word)
-- B. Phonemic
local phonemic = gsub(gsub(base_ipa, "ˈ", ""), "[vwFůWU]", "v")
phonemic = gsub(gsub(phonemic, "J", "j"), "H", "ɦ")
phonemic = gsub(gsub(phonemic, "ä", "æ"), "ľ", "ʎ")
phonemic = gsub(phonemic, "I", "j")
-- Decode Dental Clusters
phonemic = gsub(phonemic, "(%d['%s_]*%d)", function(k)
local d1, sep, d2 = mw.ustring.match(k, "(%d)(['%s_]*)(%d)")
d1, d2 = tonumber(d1), tonumber(d2)
local d1_fix = ((d1+d2)%2==1) and (d1 + (d2%2==0 and 1 or -1)) or d1
return (c1_dec[d1_fix] or "") .. sep .. (c2_dec[d2] or "")
end)
-- C. Phonetic Base
local phonetic_base = resolve_phonetic_base(base_ipa)
local roots = { phonetic_base }
-- D. Handle "-mo" Variant
if IS_MO_VARIANT and original_word then
local c = mw.ustring.sub(original_word, -4, -4) -- grab the consonant immediately preceding the ".mo" suffix
local c_voiced = voicing_map[c]
if c_voiced then
local ipa_voiceless = (ipa_map[c] or c)
local ipa_voiced = (ipa_map[c_voiced] or c_voiced)
local pattern = mw.ustring.gsub(ipa_voiceless, "([%^%$%(%)%%%.%[%]%*%+%-%?])", "%%%1") .. "mɔ$" -- escape IPA chars for regex and target the end of string
local new_root, count = mw.ustring.gsub(phonetic_base, pattern, ipa_voiced .. "mɔ")
if count > 0 then
table.insert(roots, new_root)
end
end
end
-- E. Expand Variants
local bases_expanded = {}
for _, root in ipairs(roots) do
local expansions = expand_variants(root)
for _, e in ipairs(expansions) do table.insert(bases_expanded, e) end
end
-- F. Generate Registers
local high_res, low_res = {}, {}
for _, ipa in ipairs(bases_expanded) do
table.insert(high_res, (gsub(ipa, "æ", "ɛɐ̯")))
local l = gsub(gsub(gsub(ipa, "æ", "e"), "ʎ", "l"), "l ?ˈ?l", "lː")
table.insert(low_res, (gsub(l, "n([fvʋ])", "ɱ%1")))
end
return {
phonemic = phonemic,
high = high_res,
low = low_res
}
end
-- =============================================================================
-- [[ MAIN EXPORT ]]
-- =============================================================================
function export.show(frame)
local args = frame:getParent().args
local title = mw.title.getCurrentTitle()
local t = args["t"] or ""
NAMESPACE = title.nsText
PAGENAME = (NAMESPACE == "") and title.text or (args["pagename"] or "Nebol identifikovaný názov stránky")
LOAN = mw.ustring.find(t, "cudzie") and 1 or 0
HARD_SUFFIX = mw.ustring.find(t, "adj") and 1 or 0
SOFT_SUFFIX = mw.ustring.find(t, "lok") and 1 or 0
AS_IMP = mw.ustring.find(t, "imp") and 1 or 0
IS_MO_VARIANT = false
local word = (args["1"] ~= nil) and args["1"] or PAGENAME
local original_word = word
local manual_hard = (args["1"] ~= nil and mw.ustring.find(args["1"], "[DTNL]"))
-- Pipeline
if not manual_hard then word = step_foreign_graphemes(word) end
word = step_softening(word)
if manual_hard then word = step_foreign_graphemes(word) end
word = step_prosody(word)
word = step_simplification(word)
word = step_assimilation(word)
word = step_v_f_j_realization(word)
word = step_final_devoicing(word)
local final = generate_all_transcriptions(word, original_word)
return format_ipa_output(final)
end
return export
r94xhy51d6hie0zk69x8hveub4vflz1
disketu
0
49467
197610
197276
2026-09-28T16:34:00Z
TomášPolonec
3256
/* Slovenčina */ výslovnosť
197610
wikitext
text/x-wiki
== Slovenčina ==
=== Výslovnosť ===
* {{sk-IPA|t=cudzie}}
=== Podstatné meno ===
==== Význam ====
# ''akuzatív jednotného čísla podstatného mena'' {{Odkaz|sk|disketa}}
[[Kategória:Tvary slovenských podstatných mien]]
rxaleir8yyv433dpdlwadxd8oikiww0
disketách
0
49468
197614
197277
2026-09-28T16:35:34Z
TomášPolonec
3256
/* Slovenčina */ +etymológia
197614
wikitext
text/x-wiki
== Slovenčina ==
=== Výslovnosť ===
* {{sk-IPA|t=cudzie}}
=== Podstatné meno ===
==== Význam ====
# ''lokál množného čísla podstatného mena'' {{Odkaz|sk|disketa}}
[[Kategória:Tvary slovenských podstatných mien]]
395t6qphf4rsruvjvt9q62ofb18ew2v
diskety
0
49469
197608
197278
2026-09-28T16:33:10Z
TomášPolonec
3256
/* Slovenčina */ výslovnosť
197608
wikitext
text/x-wiki
== Slovenčina ==
=== Výslovnosť ===
* {{sk-IPA|t=cudzie}}
=== Podstatné meno ===
==== Význam ====
# ''genitív jednotného čísla podstatného mena'' {{Odkaz|sk|disketa}}
# ''nominatív množného čísla podstatného mena'' {{Odkaz|sk|disketa}}
# ''akuzatív množného čísla podstatného mena'' {{Odkaz|sk|disketa}}
[[Kategória:Tvary slovenských podstatných mien]]
qkd7c293r0ric6v4b5eiddz822mgnlx
disketám
0
49470
197613
197279
2026-09-28T16:35:24Z
TomášPolonec
3256
/* Slovenčina */ výslovnosť
197613
wikitext
text/x-wiki
== Slovenčina ==
=== Výslovnosť ===
* {{sk-IPA|t=cudzie}}
=== Podstatné meno ===
==== Význam ====
# ''datív množného čísla podstatného mena'' {{Odkaz|sk|disketa}}
[[Kategória:Tvary slovenských podstatných mien]]
kexxpqldpyy1eqim4r6258mzby2olo6
diskete
0
49471
197609
197280
2026-09-28T16:33:51Z
TomášPolonec
3256
/* Slovenčina */ výslovnosť
197609
wikitext
text/x-wiki
== Slovenčina ==
=== Výslovnosť ===
* {{sk-IPA|t=cudzie,lok}}
=== Podstatné meno ===
==== Význam ====
# ''datív jednotného čísla podstatného mena'' {{Odkaz|sk|disketa}}
# ''lokál jednotného čísla podstatného mena'' {{Odkaz|sk|disketa}}
[[Kategória:Tvary slovenských podstatných mien]]
564r94yy09rkgujezjhlgkcf6pr1484
diskiet
0
49472
197612
197281
2026-09-28T16:35:14Z
TomášPolonec
3256
/* Slovenčina */ výslovnosť
197612
wikitext
text/x-wiki
== Slovenčina ==
=== Výslovnosť ===
* {{sk-IPA|diski+et|t=cudzie}}
=== Podstatné meno ===
==== Význam ====
# ''genitív množného čísla podstatného mena'' {{Odkaz|sk|disketa}}
[[Kategória:Tvary slovenských podstatných mien]]
lruqln76sz7p8oqrs2rb0nse47iw6d2
disketami
0
49473
197615
197282
2026-09-28T16:35:45Z
TomášPolonec
3256
/* Slovenčina */ výslovnosť
197615
wikitext
text/x-wiki
== Slovenčina ==
=== Výslovnosť ===
* {{sk-IPA|t=cudzie}}
=== Podstatné meno ===
==== Význam ====
# ''inštrumentál množného čísla podstatného mena'' {{Odkaz|sk|disketa}}
[[Kategória:Tvary slovenských podstatných mien]]
2bqyt2r4xevl0cwy6xjujj81iat2iar
disketou
0
49474
197611
197283
2026-09-28T16:34:08Z
TomášPolonec
3256
/* Slovenčina */ výslovnosť
197611
wikitext
text/x-wiki
== Slovenčina ==
=== Výslovnosť ===
* {{sk-IPA|t=cudzie}}
=== Podstatné meno ===
==== Význam ====
# ''inštrumentál jednotného čísla podstatného mena'' {{Odkaz|sk|disketa}}
[[Kategória:Tvary slovenských podstatných mien]]
pppo09kyiywhg2fui2fg43hyrkib8f8
internete
0
49703
197607
197512
2026-09-28T16:32:40Z
TomášPolonec
3256
/* Slovenčina */ výslovnosť
197607
wikitext
text/x-wiki
== Slovenčina ==
=== Výslovnosť ===
* {{sk-IPA|t=cudzie,lok}}
=== Podstatné meno ===
==== Význam ====
# ''lokál jednotného čísla podstatného mena'' {{Odkaz|sk|internet}}
[[Kategória:Tvary slovenských podstatných mien]]
mi194wip0m2lfyd251g0dzc36t9rcpg
jedničkami
0
49796
197617
2026-09-28T16:37:09Z
TomášPolonec
3256
+tvar
197617
wikitext
text/x-wiki
== Slovenčina ==
=== Výslovnosť ===
* {{sk-IPA}}
=== Podstatné meno ===
==== Význam ====
# ''inštrumentál množného čísla podstatného mena'' {{Odkaz|sk|jednička}}
[[Kategória:Tvary slovenských podstatných mien]]
cwqny07t6wjvess66jrj6pc1ls0yo60