Syllabes
by esteewhy
HTML
<form>
<input type="text" size="30" name="fromString" value="">
<input type="button" value="Go!" onClick="document.forms[0].elements[2].value = getSeparatedString (document.forms[0].elements[0].value);">
<br>
<input type="text" size="30" name="toString" value="">
</form>
JavaScript
var vowel = 'аеєіїиоуюя'; // Гласные буквы
var voiced = 'бвгджзлмнрхцчшщ'; // Звонкие и шипящие согласные
var deaf = 'кпстф'; // Глухие согласные
var brief = 'й';
var other = '\''; // Другие
var cons = 'бвгджзйклмнпрстфхцчшщ'; // Все согласные
// Есть ли в строке гласные?
function isNotLastSep(remainStr) {
for (var i = 0; i < remainStr.length; i++) {
if (vowel.indexOf(remainStr[i]) > -1) {
return true;
}
}
return false;
}
// Собственно функция разбиения слова на слоги
function getSeparatedString(s) {
var tmpL = ''; // Текущий символ
var tmpS = ''; // Текущий слог
var sepArr = []; // Массив слогов
for (var i = 0; i < s.length; i++) {
tmpL = s[i];
tmpS += tmpL;
if (
// Проверка на признаки конца слогов
// если буква равна 'й' и она не первая и не последняя и это не последний слог
(i != 0) &&
(i != s.length - 1) &&
(brief.indexOf(tmpL) != -1) &&
(isNotLastSep(s.substr(i + 1, s.length - i + 1)))
|| // если текущая гласная и следующая тоже гласная
(i < s.length - 1) &&
(vowel.indexOf(tmpL) != -1) &&
(vowel.indexOf(s[i + 1]) != -1)
|| // если текущая гласная, следующая согласная, а после неё гласная
(i < s.length - 2) &&
(vowel.indexOf(tmpL) != -1) &&
(cons.indexOf(s[i + 1]) != -1) &&
(vowel.indexOf(s[i + 2]) != -1)
|| // если текущая гласная, следующая глухая согласная, а после согласная и это не последний слог
(i < s.length - 2) &&
(vowel.indexOf(tmpL) != -1) &&
(deaf.indexOf(s[i + 1]) != -1) &&
(cons.indexOf(s[i + 2]) != -1) &&
(isNotLastSep(s.substr(i + 1, s.length - i + 1)))
|| // если текущая звонкая или шипящая согласная, перед ней гласная, следующая не гласная и не другая, и это не последний слог
(i > 0) &&
(i < s.length - 1) &&
(voiced.indexOf(tmpL) != -1) &&
(vowel.indexOf(s[i - 1]) != -1) &&
...