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) &&
       ...