Moduuli:tavutus/fi/paino
Ulkoasu
< Moduuli:tavutus | fi
Moduulin tavutus/fi/paino käyttöohje [näytä tämä käyttöohje omalla sivullaan] [muokkaa tätä käyttöohjetta] [päivitä] [testit] [hiekkalaatikko]
✓ Kaikki testit läpäisty.
Testi | Odotettu | Tulos | |
---|---|---|---|
✓ | testi #-merkillä voi merkitä pääsanarajan, jos sana on yhdyssanoista koostuva yhdyssana | ||
✓ | testi #-merkillä voi merkitä sanarajan | ||
✓ | testi +-merkillä voi merkitä sanarajan | ||
✓ | testi Alle nelitavuisiin ei tule sivupainoa | ||
✓ | testi Jos kolmas tavu on lyhyt paino siirtyy seuraavalle pitkälle tavulle | ||
✓ | testi Jos kolmas tavu on lyhyt paino siirtyy seuraavalle pitkälle tavulle paitsi, jos se on viimeinen | ||
✓ | testi Sivupaino tulee yhdysviivan kohdalle | ||
✓ | testi Yli kolmitavuisiin tulee sivupaino yleensä joka toiselle tavulle, paitsi viimeiselle |
local mallinetyokalut = require("Moduuli:Mallinetyokalut")
local export = {}
local function get_next_long(tbl, start)
for i = (start or 1), #tbl do
if tbl[i].first_syllable then
return nil
elseif tbl[i].short_or_long == "long" then
return i
end
end
return nil
end
--- Palauttaa arvauksen wordn pääpainon ja sivupainon paikasta.
function export.get_stresses2(syllableInfos)
local out = { }
local since_prev = 2
-- Koska sanalle näytetään vain pääpaino ja sivupaino, arvotetaan sivupainot siten,
-- että saadaan selvimme mikä tulostetaan. Pääpainon arvo on 1. Jos yhdyssana koostuu
-- yhdyssanoista, pitää pääosat erottaa '#'-merkillä, sen arvo on 2. Muun yhdyssanan
-- voi merkitä '+'- ja '-'-merkeillä. Niiden arvo on 3. Yhdistämättömän sanan tavujen
-- painon arvo on 4.
local dominant_secondary_stress = 99
local i = 1
while i <= #syllableInfos do
if syllableInfos[i].first_syllable
and (syllableInfos[i].word_separator == "#"
or syllableInfos[i].word_separator == "ˌ")
then
table.insert(
out,
{
text = syllableInfos[i].text,
pos = syllableInfos[i].pos,
stressed = 2
}
)
dominant_secondary_stress = 2
since_prev = 0
elseif syllableInfos[i].first_syllable
and (syllableInfos[i].word_separator == "-"
or syllableInfos[i].word_separator == "+")
then
table.insert(
out,
{
text = syllableInfos[i].text,
pos = syllableInfos[i].pos,
stressed = 3
}
)
dominant_secondary_stress = math.min(3, dominant_secondary_stress)
since_prev = 0
elseif i >= 3
and since_prev >= 2
and i < #syllableInfos
then
local next_long = get_next_long(syllableInfos, i)
if next_long and next_long > i and next_long < #syllableInfos then
for j = i, next_long - 1 do
table.insert(
out,
{
text = syllableInfos[j].text,
pos = syllableInfos[j].pos,
}
)
end
i = next_long
end
table.insert(
out,
{
text = syllableInfos[i].text,
pos = syllableInfos[i].pos,
stressed = 4
}
)
dominant_secondary_stress = math.min(4, dominant_secondary_stress)
since_prev = 0
else
table.insert(
out,
{
text = syllableInfos[i].text,
pos = syllableInfos[i].pos,
stressed = 99
}
)
end
since_prev = since_prev + 1
i = i + 1
end
if out[1] then
out[1].stressed = 1
end
return table.concat(
mallinetyokalut.map(
function (item)
if item.stressed == 1 then
return "ˈ" .. item.text
elseif dominant_secondary_stress ~= 99 and item.stressed == dominant_secondary_stress then
return "ˌ" .. item.text
else
return "." .. item.text
end
end,
out
),
""
)
end
return export