Нашел еще вот такое решение но не могу понять как его перенести в обычный блок
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Example 1</title> <script> var vowel = new String( 'аеёиоуыэюя' ); // Гласные буквы var voiced = new String( 'бвгджзлмнрхцчшщ' ); // Звонкие и шипящие согласные var deaf = new String( 'кпстф' ); // Глухие согласные var brief = new String( 'й' ); // Й var other = new String( 'ьъ' ); // Другие var cons = new String( 'бвгджзйклмнпрстфхцчшщ' ); // Все согласные // Валидация правильности введенной строки function validateString( s ) { // Поленился делать :) return s; } // function validateString (s) // Есть ли в строке гласные? function isNotLastSep( remainStr ) { var is = false; for ( var i = 0; i < remainStr.length; i++ ) { if ( vowel.indexOf( remainStr.substr( i, 1 ) ) != -1 ) { is = true; break; } } // for (var i = 0; i < remainStr - 1; i++) return is; } // function isLastSep (remainStr) // Собственно функция разбиения слова на слоги function getSeparatedString( s ) { // Добавляем слог в массив и начинаем новый слог function addSep() { sepArr.push( tmpS ); tmpS = ''; } // function addSep () s = validateString( s ); var tmpL = new String(); // Текущий символ var tmpS = new String(); // Текущий слог var sepArr = new Array(); // Массив слогов for ( var i = 0; i < s.length; i++ ) { tmpL = s.substr( i, 1 ); tmpS += tmpL; // Проверка на признаки конца слогов // если буква равна 'й' и она не первая и не последняя и это не последний слог if ( ( i != 0 ) && ( i != s.length - 1 ) && ( brief.indexOf( tmpL ) != -1 ) && ( isNotLastSep( s.substr( i + 1, s.length - i + 1 ) ) ) ) { addSep(); continue; } // если текущая гласная и следующая тоже гласная if ( ( i < s.length - 1 ) && ( vowel.indexOf( tmpL ) != -1 ) && ( vowel.indexOf( s.substr( i + 1, 1 ) ) != -1 ) ) { addSep(); continue; } // если текущая гласная, следующая согласная, а после неё гласная if ( ( i < s.length - 2 ) && ( vowel.indexOf( tmpL ) != -1 ) && ( cons.indexOf( s.substr( i + 1, 1 ) ) != -1 ) && ( vowel.indexOf( s.substr( i + 2, 1 ) ) != -1 ) ) { addSep(); continue; } // если текущая гласная, следующая глухая согласная, а после согласная и это не последний слог if ( ( i < s.length - 2 ) && ( vowel.indexOf( tmpL ) != -1 ) && ( deaf.indexOf( s.substr( i + 1, 1 ) ) != -1 ) && ( cons.indexOf( s.substr( i + 2, 1 ) ) != -1 ) && ( isNotLastSep( s.substr( i + 1, s.length - i + 1 ) ) ) ) { addSep(); continue; } // если текущая звонкая или шипящая согласная, перед ней гласная, следующая не гласная и не другая, и это не последний слог if ( ( i > 0 ) && ( i < s.length - 1 ) && ( voiced.indexOf( tmpL ) != -1 ) && ( vowel.indexOf( s.substr( i - 1, 1 ) ) != -1 ) && ( vowel.indexOf( s.substr( i + 1, 1 ) ) == -1 ) && ( other.indexOf( s.substr( i + 1, 1 ) ) == -1 ) && ( isNotLastSep( s.substr( i + 1, s.length - i + 1 ) ) ) ) { addSep(); continue; } // если текущая другая, а следующая не гласная если это первый слог if ( ( i < s.length - 1 ) && ( other.indexOf( tmpL ) != -1 ) && ( ( vowel.indexOf( s.substr( i + 1, 1 ) ) == -1 ) || ( isNotLastSep( s.substr( 0, i ) ) ) ) ) { addSep(); continue; } } // for (var i = 0; i < s.length; i++) sepArr.push( tmpS ); return sepArr.join( '-' ); } // function getSeparatedString (s) </script> <style> body { width: 60%; margin-left: 20%; } .block { hyphens: auto; -ms-hyphens: auto; -moz-hyphens: auto; -webkit-hyphens: auto; } </style> </head> <body> <div class="blok"> И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что если они группам не нужны? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную связь, потому что проводится много мероприятий, бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает, что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят и те, кто выбирается на служение о многом не знают. </div> <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> </body> </html> |
A если так?
<html> <head> <script> var WholeWord = /[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]+/ig; var Prefixes = /^(над?|объ?|отъ?|пере|подъ?|по|предъ?|при|про|разъ?|рас|со)/i; function Separatist(part, pos, text) { var slab, next, seps = []; var pref; pos += part.match(/^\s*/)[0].length; part = part.replace(/^\s+/, ""); while((pref = part.match(Prefixes)) && pref[0] != "") { seps.push(pref[0]); part = part.substr(pref[0].length); } if(slab = part.match(/^й[ао][дшк]+[аеёиоуыэюя]?/)) { seps.push(part.substr(0, slab[0].length)); part = part.substr(slab[0].length); } while(part.length) { if(slab = part.match(/^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя](й|[бвгджзклмнпрстфхцчшщ]+[ъь]?$)/i)) { seps.push(slab[0]); part = part.substr(slab[0].length); } else if(slab = part.match(/^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя]?/i)) { if(next = part.substr(slab[0].length).match(/^[бвгджзклмнпрстфхцчшщ][ъь]?[аеёиоуыэюя]?/i)) { if(!next[0].match(/[аеёиоуыэюя]/i)) slab[0] += next[0]; } seps.push(slab[0]); part = part.substr(slab[0].length); } else if(slab = part.match(/^[аеёиоуыэюя][бвгджзклмнпрстфхцчшщь]*/i)) { if(slab[0].length > 1 && part.charAt(slab[0].length).match(/[аеёиоуыэюя]/i)) slab[0] = slab[0].substr(0, slab[0].length - 1); seps.push(slab[0]); part = part.substr(slab[0].length); } else { seps.push(part); part = ""; } } if(seps.length > 1 && seps[0].length == 1) seps[0] = seps.shift() + seps[0]; if(seps.length > 1 && seps[seps.length - 1].length == 1) seps[seps.length - 2] = seps[seps.length - 2] + seps.pop(); return seps.join("\u0082\u00AC"); } </script> </head> <body onload='document.getElementById("separated").textContent = document.getElementById("text").value.replace(WholeWord, Separatist)'> <textarea id=text rows=11 cols=120 oninput='document.getElementById("separated").textContent = this.value.replace(WholeWord, Separatist)'> И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную связь, потому что проводится много мероприятий, бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает, что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят и те, кто выбирается на служение о многом не знают. </textarea> <hr /> <pre id=separated></pre> </body>Правда, для более грамотного переноса по правилам нужно ещё добавить обращение к словарю. |
Alikberov,
Спасибо, но мне нужно именно перенос, а тут просто разбили по слогам. Я выше скрипт прикрепил который это делает, то есть разбивает по слогам. |
Цитата:
Ваш вариант просто переносит по гласным. Мой вариант учитывает некоторые из приставок, которые нельзя переносить.:) |
Alikberov,
задача набрать строку максимальной длины! |
Alikberov,
А как добавить обращение к словарю ? |
рони,
Не знаю либо это не возможно либо я не могу найти как правильно написать. А что если в код который создал Alikberov, в строку 46 return seps.join("\u0082\u00AC"); вставить тэг ­ вместо \u0082\u00AC Просто мне кажется это выглядит логично И как я думаю что он должен сработать как Мягкий перенос в HTML м?? |
Сергей Ракипов,
\u00AD |
рони,
Нужен не символ дефиса, а именно тэг ­ он работает по принципу переноса Мягкий перенос — это перенос части слова на новую строку в случае необходимости. Если необходимости в переносе нет, то он никак себя не проявляет. |
Цитата:
вы пробовали \u00AD ? что не так? <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> #separated { width: 80%; } </style> <script> var WholeWord = /[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]+/ig; var Prefixes = /^(над?|объ?|отъ?|пере|подъ?|по|предъ?|при|про|разъ?|рас|со)/i; function Separatist(part, pos, text) { var slab, next, seps = []; var pref; pos += part.match(/^\s*/)[0].length; part = part.replace(/^\s+/, ""); while((pref = part.match(Prefixes)) && pref[0] != "") { seps.push(pref[0]); part = part.substr(pref[0].length); } if(slab = part.match(/^й[ао][дшк]+[аеёиоуыэюя]?/)) { seps.push(part.substr(0, slab[0].length)); part = part.substr(slab[0].length); } while(part.length) { if(slab = part.match(/^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя](й|[бвгджзклмнпрстфхцчшщ]+[ъь]?$)/i)) { seps.push(slab[0]); part = part.substr(slab[0].length); } else if(slab = part.match(/^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя]?/i)) { if(next = part.substr(slab[0].length).match(/^[бвгджзклмнпрстфхцчшщ][ъь]?[аеёиоуыэюя]?/i)) { if(!next[0].match(/[аеёиоуыэюя]/i)) slab[0] += next[0]; } seps.push(slab[0]); part = part.substr(slab[0].length); } else if(slab = part.match(/^[аеёиоуыэюя][бвгджзклмнпрстфхцчшщь]*/i)) { if(slab[0].length > 1 && part.charAt(slab[0].length).match(/[аеёиоуыэюя]/i)) slab[0] = slab[0].substr(0, slab[0].length - 1); seps.push(slab[0]); part = part.substr(slab[0].length); } else { seps.push(part); part = ""; } } if(seps.length > 1 && seps[0].length == 1) seps[0] = seps.shift() + seps[0]; if(seps.length > 1 && seps[seps.length - 1].length == 1) seps[seps.length - 2] = seps[seps.length - 2] + seps.pop(); return seps.join("\u00AD"); } </script> </head> <body onload='document.getElementById("separated").textContent = document.getElementById("text").value.replace(WholeWord, Separatist)'> <textarea id=text rows=11 cols=120 oninput='document.getElementById("separated").textContent = this.value.replace(WholeWord, Separatist)'> И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную связь, потому что проводится много мероприятий, бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает, что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят и те, кто выбирается на служение о многом не знают. </textarea> <hr /> <div id=separated></div> </body> </html> |
Часовой пояс GMT +3, время: 23:02. |