03.08.2022, 03:17
|
Профессор
|
|
Регистрация: 01.06.2010
Сообщений: 668
|
|
Нашел еще вот такое решение но не могу понять как его перенести в обычный блок
<!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>
|
|
04.08.2022, 19:53
|
|
Кандидат Javascript-наук
|
|
Регистрация: 16.08.2018
Сообщений: 109
|
|
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, 05.08.2022 в 16:53.
|
|
05.08.2022, 03:47
|
Профессор
|
|
Регистрация: 01.06.2010
Сообщений: 668
|
|
Alikberov,
Спасибо, но мне нужно именно перенос, а тут просто разбили по слогам. Я выше скрипт прикрепил который это делает, то есть разбивает по слогам.
|
|
05.08.2022, 16:30
|
|
Кандидат Javascript-наук
|
|
Регистрация: 16.08.2018
Сообщений: 109
|
|
Сообщение от Сергей Ракипов
|
Alikberov,
Спасибо, но мне нужно именно перенос, а тут просто разбили по слогам. Я выше скрипт прикрепил который это делает, то есть разбивает по слогам.
|
Нo Ваш вариант переносит «у-ни-фор-ма» и «э-то», что нарушает Правила переноса слов в русском языке…
Ваш вариант просто переносит по гласным.
Мой вариант учитывает некоторые из приставок, которые нельзя переносить.
|
|
05.08.2022, 18:06
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Alikberov,
задача набрать строку максимальной длины!
|
|
07.08.2022, 04:45
|
Профессор
|
|
Регистрация: 01.06.2010
Сообщений: 668
|
|
Alikberov,
А как добавить обращение к словарю ?
|
|
07.08.2022, 06:56
|
Профессор
|
|
Регистрация: 01.06.2010
Сообщений: 668
|
|
рони,
Не знаю либо это не возможно либо я не могу найти как правильно написать.
А что если в код который создал Alikberov, в строку 46 return seps.join("\u0082\u00AC");
вставить тэг ­ вместо \u0082\u00AC Просто мне кажется это выглядит логично
И как я думаю что он должен сработать как Мягкий перенос в HTML
м??
|
|
07.08.2022, 07:33
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сергей Ракипов,
\u00AD
|
|
07.08.2022, 08:22
|
Профессор
|
|
Регистрация: 01.06.2010
Сообщений: 668
|
|
рони,
Нужен не символ дефиса, а именно тэг ­ он работает по принципу переноса
Мягкий перенос — это перенос части слова на новую строку в случае необходимости. Если необходимости в переносе нет, то он никак себя не проявляет.
|
|
07.08.2022, 08:27
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от Сергей Ракипов
|
Нужен не символ дефиса,
|
???
вы пробовали \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>
|
|
|
|