Перенос по слогам
Я знаю что есть
Код:
Я нашел вот такую ссылку http://wiki.sawtech.ru/index.php/П...aScript_JQuery но не понимаю работает это решении или просто я что то то делаю не то. |
Там есть вот такое
Перенос по слогам JavaScript JQuery $.fn.rusHyphenate = function () { var all = '[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]', vowel = '[аеёиоуыэюя]', consonant = '[бвгджзклмнпрстфхцчшщ]', zn = '[йъь]', shy = '\xAD', hyp = []; hyp[0] = new RegExp('(' + zn + ')(' + all + all + ')', 'ig'); hyp[1] = new RegExp('(' + vowel + ')(' + vowel + all + ')', 'ig'); hyp[2] = new RegExp('(' + vowel + consonant + ')(' + consonant + vowel + ')', 'ig'); hyp[3] = new RegExp('(' + consonant + vowel + ')(' + consonant + vowel + ')', 'ig'); hyp[4] = new RegExp('(' + vowel + consonant + ')(' + consonant + consonant + vowel + ')', 'ig'); hyp[5] = new RegExp('(' + vowel + consonant + consonant + ')(' + consonant + consonant + vowel + ')', 'ig'); return this.each(function () { var text = $(this).html(); for ( var i = 0; i <= 5; ++i ) { text = text.replace(hyp[i], '$1' + shy + '$2'); } $(this).html(text); }); }; $(selector).rusHyphenate(); Вариант с обработкой длины слова Чтобы переносы были только в длинных словах $.fn.rusHyphenate = function ( options ) { options = $.extend({ maxWordLength: 15, // максимальная длина слова }, options); var all = '[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]', vowel = '[аеёиоуыэюя]', consonant = '[бвгджзклмнпрстфхцчшщ]', zn = '[йъь]', shy = '\xAD', hyp = []; hyp[0] = new RegExp('(' + zn + ')(' + all + all + ')', 'ig'); hyp[1] = new RegExp('(' + vowel + ')(' + vowel + all + ')', 'ig'); hyp[2] = new RegExp('(' + vowel + consonant + ')(' + consonant + vowel + ')', 'ig'); hyp[3] = new RegExp('(' + consonant + vowel + ')(' + consonant + vowel + ')', 'ig'); hyp[4] = new RegExp('(' + vowel + consonant + ')(' + consonant + consonant + vowel + ')', 'ig'); hyp[5] = new RegExp('(' + vowel + consonant + consonant + ')(' + consonant + consonant + vowel + ')', 'ig'); return this.each(function () { var text = $(this).html(), res = ''; text = text.split(' '); text.forEach(function ( word, i ) { if( word.length > options.maxWordLength ) { for ( var i = 0; i <= 5; ++i ) { word = word.replace(hyp[i], '$1' + shy + '$2'); } } res += word + ' ' }) $(this).html(res); }); }; $(selector).rusHyphenate({maxWordLength: 10}); |
Сергей Ракипов, если сможешь сам расставить тег <wbr> - сможешь переносить как захочешь...
|
ksa,
Ну там тире не будет и это очень много что бы все расставить, если только программа какая то есть, и как тире делать |
Сергей Ракипов, какую задачу решаешь?
Что там за огромный текст, который нужно еще и по слогам переносить? |
Да текста много, это вообще не вариант что бы расставлять переносы вы ручную тем более без тире.
|
Сергей Ракипов,
есть плагины на эту тему, https://github.com/mnater/Hyphenopoly https://www.npmjs.com/package/hyphen но как с ними работать не знаю, нужен разбирающийся человек, там и там есть поддержка русского языка. |
Зачем они вообще нужны? Если только очень узкая колонка.
|
|
рони,
Тоже не разобрался |
Нашел еще вот такое решение но не могу понять как его перенести в обычный блок
<!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> |
рони,
Да то что нужно я был просто не внимателен и не увидел разницу в символе. Спасибо. А как вы считаете насколько корректен это перенос с точки зрения русского языка ? И это скрипт не сильно будет тормозить страницу если так будет большой объем текста? |
рони,
А как это скрипт переделать что бы он работал с только с тем блоком у которого есть к класс .tekst |
Сергей Ракипов,
строка 64 укажите нужный класс/ы. <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> .separated { width: 80%; margin: 30px auto; } .separated.min{ width: 30%; } </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"); } document.addEventListener("DOMContentLoaded", function() { let elems = document.querySelectorAll(".separated"); elems.forEach(el => { let txt = el.textContent; el.textContent = txt.replace(WholeWord, Separatist); }) }) </script> </head> <body> <div class="separated">И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную связь, потому что проводится много мероприятий, бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает, что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят и те, кто выбирается на служение о многом не знают.</div> <div class="separated min">И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную связь, потому что проводится много мероприятий, бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает, что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят и те, кто выбирается на служение о многом не знают.</div> </body> </html> |
рони,
:) Спасибо :) |
рони,
А что получается если внутри какой то класс то это класс не будет работать? <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> .separated { width: 80%; margin: 30px auto; } .separated.min{ width: 30%; } .test{ font-size: 2rem; } </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"); } document.addEventListener("DOMContentLoaded", function() { let elems = document.querySelectorAll(".separated"); // указать нужные классы elems.forEach(el => { let txt = el.textContent; el.textContent = txt.replace(WholeWord, Separatist); }) }) </script> </head> <body> <div class="separated">И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную связь, <span class="test">потому что проводится много мероприятий,</span> бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает, что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят и те, кто выбирается на служение о многом не знают.</div> <div class="separated min">И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную связь, потому что проводится много мероприятий, бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает, что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят и те, кто выбирается на служение о многом не знают.</div> </body> </html> |
Цитата:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> .separated { width: 80%; margin: 30px auto; } .separated.min{ width: 30%; } .test{ font-size: 2rem; } </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"); } document.addEventListener("DOMContentLoaded", function() { let elems = document.querySelectorAll(".separated"); // указать нужные классы elems.forEach(el => { let txt; walk=document.createTreeWalker(el,NodeFilter.SHOW_TEXT,null,false); while(txt=walk.nextNode()) txt.data = txt.data.replace(WholeWord, Separatist); }) }) </script> </head> <body> <div class="separated">И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную связь, <span class="test">потому что проводится много мероприятий,</span> бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает, что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят и те, кто выбирается на служение о многом не знают.</div> <div class="separated min">И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную связь, потому что проводится много мероприятий, бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает, что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят и те, кто выбирается на служение о многом не знают.</div> </body> </html> |
рони,
А это я был не внимательный или скрипт изменен был? |
Сергей Ракипов,
скрипт, конечно, изменён, в новом варианте, внутри элемента изменяются все текстовые блоки, а не текст целиком, что приводило к стиранию внутренних элементов. |
рони,
Спасибо ) я правда вам благодарен за все года что вы помогаете тут. Спасибо :) |
Неплохo было бы вставить весь текст отсюда («Война и Мир») здесь и оценить время работы функции на большом объёме текста…:yes:
(К тому же все баги переноса выявятся на этой классике.) P.S.: Не думаю, что на сайтах будут публиковать колонки размером больше классики… В худшем случае, можно на серверной стороне предобработать все тексты заранее (в момент первого доступа к конкретному) и закешировать, выдавая пользователю их уже в готовом виде с переносами. P.P.S.: Исправил ещё один баг: Слово «тускловатый» делилось на «тус-кло-ва-тый» (верно - «туск-ло-ва-тый»)… Фиксится вот этот код этим: if(slab = part.match(/^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя]?/i)) { if(next = part.substr(slab[0].length).match(/^([бвгджзклмнпрстфхцчшщ]+)[бвгджзклмнпрстфхцчшщ][ъь]?[аеёиоуыэюя]?/i)) slab[0] += next[1]; seps.push(slab[0]); part = part.substr(slab[0].length); } else |
Alikberov,
Я думаю что смогу это сделать, только скажите как оценить время работы функции, есть какой то сервис или это в браузере можно извлечь информацию. В сети нету подобного рабочего скрипта для русского языка. Может кому то еще будет он полезен. |
Alikberov,
:thanks: Сергей Ракипов, добавил фикс от Alikberov, <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> .separated { width: 80%; margin: 30px auto; } .separated.min { width: 30%; } .test { font-size: 2rem; } </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)) slab[0] += next[1]; 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"); } document.addEventListener("DOMContentLoaded", function() { let elems = document.querySelectorAll(".separated"); // указать нужные классы console.time("time for separated"); elems.forEach(el => { let txt; walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false); while (txt = walk.nextNode()) txt.data = txt.data.replace(WholeWord, Separatist); }); console.timeEnd("time for separated"); }) </script> </head> <body> <div class="separated">тускловатый И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную связь, <span class="test">потому что проводится много мероприятий,</span> бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает, что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят и те, кто выбирается на служение о многом не знают.</div> <div class="separated min">И я постоянно спрашиваю представителей Литкома, группы, ведь это мнение важно. Мы можем посмотреть у других местностей, какие есть проекты, например, как те же открытки. Он затрагивает денежный ресурс. мы можем все это напечатать и сделать, но что если они группам не нужны войлок, йодомарин в йошкар-оле? И только вот эта связь через представителя группы с Комитетом осуществляет продуктивность, как я это понимаю сегодня и как я понимал, когда был Литкомом группы. Мы просим приносить обратную связь, потому что проводится много мероприятий, бывают периодически опросы переводческого Комитета, ZOOM собрания, где регионы просят обратную связь и Литком — связующее звено. Наше служение — не только обеспечение литературой. Мало кто знает, что девяносто процентов всех денег АН идут с продажи литературы. Для миссий на развитие, рабочие поездки, обеспечение БУ Комитета литературой. Деньги на это идут с продажи литературы. И вот обо всем об этом рассказывет Литком, ведь новички приходят и те, кто выбирается на служение о многом не знают.</div> </body> </html> |
рони,
А я уже видел его, уже сам добавил, там не сложно было. |
Цитата:
|
Вложений: 1
Вот оценка
1 часть Война и мир time for separated: 227.430908203125 ms |
Нeмного оффтопа…
Не ожидал, что мой вариант скрипта здесь в теме приглянётся автору, так как просто хотел накаракулить свой вариант. Лингвисты бы меня расстреляли за выдаваемый скриптом результат (особенно на примере текста «Война и Мир»). Если мне не удастся в ближайшее время его улучшить, я бы не хотел, чтобы он разошёлся по сети как «вариант Аликберова».:-? P.S.: Рекомендую автору просто найти и скачать БД всех слов с предопределёнными переносами… Или обратиться к нейросети для отсеивания неверных (позорных) вариантов переноса. |
Alikberov,
#7 там в плагинах всё есть для переносов ru-текста, но как этим воспользоваться, кто бы подсказал? ))) |
Alikberov,
Для меня нейросети это слишком сложно я JS знаю на примитивном уровне а тут что то более сложное. Мне правда кажется что это скрипт может быть полезен людям |
Вот про эти плагины писал Рони
есть плагины на эту тему, https://github.com/mnater/Hyphenopoly https://www.npmjs.com/package/hyphen но как с ними работать не знаю, нужен разбирающийся человек, там и там есть поддержка русского языка. |
Eсли это поможет, попытался написать тестер с интерактивной правкой правил.
<html> <head> <script> var WholeWord = /[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]+/ig; var Prefixes = /^(над?|объ?|отъ?|пере|подъ?|по|предъ?|при|про|раз[оъ]?|рас|со)/i; var Regulars = []; 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(Regulars[0])) { // Правило №1 seps.push(slab[0]); part = part.substr(slab[0].length); } else if(slab = part.match(Regulars[1])) { // Правила №2 и №3 if(next = part.substr(slab[0].length).match(Regulars[2])) slab[0] += next[1]; seps.push(slab[0]); part = part.substr(slab[0].length); } else if(slab = part.match(Regulars[3])) { // Правило №4 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(this.shy ? this.shy : "\u2011"); } </script> <script> function Separatism() { if(document.querySelectorAll("input")[4].checked) document.getElementById("separated").textContent = document.getElementById("text").value.replace(WholeWord, Separatist); else document.getElementById("separated").textContent = document.getElementById("text").value.replace(WholeWord, Separatist.bind({shy: "\u00AD"})); } function Separatory() { var hInputs = document.querySelectorAll("input"); for(var i = 0; i < hInputs.length; ++ i) { try { Regulars[i] = new RegExp(hInputs[i].value, "i"); hInputs[i].style.backgroundColor = "#DFD"; } catch(err) { hInputs[i].style.backgroundColor = "#FDD"; } } } </script> </head> <body onload='Separatory(); Separatism()'> Правило №1<input type=text style=width:99% maxlength=128 onchange='Separatory(); Separatism()' value='^[бвгджзклмнпрстфхцчшщ]+[ъь]?[аеёиоуыьэюя](й|[бвгджзклмнпрстфхцчшщ]+[ъь]?$)'><br> Правило №2<input type=text style=width:99% maxlength=128 onchange='Separatory(); Separatism()' value='^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя]?'><br> Правило №3<input type=text style=width:99% maxlength=128 onchange='Separatory(); Separatism()' value='^([бвгджзклмнпрстфхцчшщь]+)[бвгджзклмнпрстфхцчшщ][ъь]?[аеёиоуыэюя]?'><br> Правило №4<input type=text style=width:99% maxlength=128 onchange='Separatory(); Separatism()' value='^[аеёиоуыэюя][бвгджзклмнпрстфхцчшщь]*'><br> <input type=checkbox onchange='this.nextSibling.textContent = this.checked ? "Активный" : "Мягкий"; Separatism()'><span></span> перенос <textarea id=text rows=5 style=width:99% oninput='Separatism()'> Пьер жил у князя Василия Курагина и участвовал в разгульной жизни его сына Анатоля, того самого, которого для исправления собирались женить на сестре князя Андрея. – Знаете что! – сказал Пьер, как будто ему пришла неожиданно счастливая мысль, – серьезно, я давно это думал. С этою жизнью я ничего не могу ни решить, ни обдумать. Голова болит, денег нет. Нынче он меня звал, я не поеду. – Дай мне честное слово, что ты не будешь ездить? – Честное слово! Уже был второй час ночи, когда Пьер вышел от своего друга. Ночь была июньская петербургская, бессумрачная ночь. Пьер сел в извозчичью коляску с намерением ехать домой. Но чем ближе он подъезжал, тем более он чувствовал невозможность заснуть в эту ночь, походившую более на вечер или на утро. Далеко было видно по пустым улицам. Дорогой Пьер вспомнил, что у Анатоля Курагина нынче вечером должно было собраться обычное игорное общество, после которого обыкновенно шла попойка, кончавшаяся одним из любимых увеселений Пьера. «Хорошо бы было поехать к Курагину», – подумал он. Но тотчас же он вспомнил данное князю Андрею честное слово не бывать у Курагина. Но тотчас же, как это бывает с людьми, называемыми бесхарактерными, ему так страстно захотелось еще раз испытать эту столь знакомую ему беспутную жизнь, что он решился ехать. И тотчас же ему пришла в голову мысль, что данное слово ничего не значит, потому что еще прежде, чем князю Андрею, он дал также князю Анатолю слово быть у него; наконец, он подумал, что все эти честные слова – такие условные вещи, не имеющие никакого определенного смысла, особенно ежели сообразить, что, может быть, завтра же или он умрет, или случится с ним что-нибудь такое необыкновенное, что не будет уже ни честного, ни бесчестного. Такого рода рассуждения, уничтожая все его решения и предположения, часто приходили Пьеру. Он поехал к Курагину. Подъехав к крыльцу большого дома у конногвардейских казарм, в котором жил Анатоль, он поднялся на освещенное крыльцо, на лестницу, и вошел в отворенную дверь. В передней никого не было; валялись пустые бутылки, плащи, калоши; пахло вином, слышался дальний говор и крик. Игра и ужин уже кончились, но гости еще не разъезжались. Пьер скинул плащ и вошел в первую комнату, где стояли остатки ужина и один лакей, думая, что его никто не видит, допивал тайком недопитые стаканы. Из третьей комнаты слышалась возня, хохот, крики знакомых голосов и рев медведя. Человек восемь молодых людей толпились озабоченно около открытого окна. Трое возились с молодым медведем, которого один таскал на цепи, пугая им другого. – Держу за Стивенса сто! – кричал один. – Смотри не поддерживать! – кричал другой. – Я за Долохова! – кричал третий. – Разними, Курагин. – Ну, бросьте Мишку, тут пари. – Одним духом, иначе проиграно, – кричал четвертый. – Яков! Давай бутылку, Яков! – кричал сам хозяин, высокий красавец, стоявший посреди толпы в одной тонкой рубашке, раскрытой на средине груди. – Стойте, господа. Вот он, Петруша, милый друг, – обратился он к Пьеру. Другой голос невысокого человека с ясными голубыми глазами, особенно поражавший среди этих всех пьяных голосов своим трезвым выражением, закричал от окна: – Иди сюда – разойми пари! – Это был Долохов, семеновский офицер, известный игрок и бретёр, живший вместе с Анатолем. Пьер улыбался, весело глядя вокруг себя. – Ничего не понимаю. В чем дело? – спросил он. – Стойте, он не пьян. Дай бутылку, – сказал Анатоль и, взяв со стола стакан, подошел к Пьеру. – Прежде всего пей. Пьер стал пить стакан за стаканом, исподлобья оглядывая пьяных гостей, которые опять столпились у окна, и прислушиваясь к их говору. Анатоль наливал ему вино и рассказывал, что Долохов держит пари с англичанином Стивенсом, моряком, бывшим тут, в том, что он, Долохов, выпьет бутылку рома, сидя на окне третьего этажа с опущенными наружу ногами. – Ну, пей же всю, – сказал Анатоль, подавая последний стакан Пьеру, – а то не пущу! – Нет, не хочу, – сказал Пьер, отталкивая Анатоля, и подошел к окну. Долохов держал за руку англичанина и ясно, отчетливо выговаривал условия пари, обращаясь преимущественно к Анатолю и Пьеру. Долохов был человек среднего роста, курчавый и с светлыми голубыми глазами. Ему было лет двадцать пять. Он не носил усов, как и все пехотные офицеры, и рот его, самая поразительная черта его лица, был весь виден. Линии этого рта были замечательно тонко изогнуты. В середине верхняя губа энергически опускалась на крепкую нижнюю острым клином, и в углах образовывалось постоянно что-то вроде двух улыбок, по одной с каждой стороны; и все вместе, а особенно в соединении с твердым, наглым, умным взглядом, составляло впечатление такое, что нельзя было не заметить этого лица. Долохов был небогатый человек, без всяких связей. И несмотря на то, что Анатоль проживал десятки тысяч, Долохов жил с ним и успел себя поставить так, что Анатоль и все знавшие их уважали Долохова больше, чем Анатоля. Долохов играл во все игры и почти всегда выигрывал. Сколько бы он ни пил, он никогда не терял ясности головы. И Курагин и Долохов в то время были знаменитостями в мире повес и кутил Петербурга. Бутылка рома была принесена; раму, не пускавшую сесть на наружный откос окна, выламывали два лакея, видимо, торопившиеся и робевшие от советов и криков окружавших господ. Анатоль с своим победительным видом подошел к окну. Ему хотелось сломать что-нибудь. Он оттолкнул лакеев и потянул раму, но рама не сдавалась. Он разбил стекло. – Ну-ка ты, силач, – обратился он к Пьеру. Пьер взялся за перекладины, потянул и с треском где сломал, где выворотил дубовую раму. – Всю вон, а то подумают, что я держусь, – сказал Долохов. – Англичанин хвастает… а?.. хорошо?.. – говорил Анатоль. – Хорошо, – сказал Пьер, глядя на Долохова, который, взяв в руки бутылку рома, подходил к окну, из которого виднелся свет неба и сливавшихся на нем утренней и вечерней зари. Долохов с бутылкой рома в руке вскочил на окно. – Слушать! – крикнул он, стоя на подоконнике и обращаясь в комнату. Все замолчали. – Я держу пари (он говорил по-французски, чтоб его понял англичанин, и говорил не слишком хорошо на этом языке). Держу пари на пятьдесят империалов, хотите на сто? – прибавил он, обращаясь к англичанину. – Нет, пятьдесят, – сказал англичанин. – Хорошо, на пятьдесят империалов, – что я выпью бутылку рома всю, не отнимая ото рта, выпью, сидя за окном, вот на этом месте (он нагнулся и показал покатый выступ стены за окном), и не держась ни за что… Так?</textarea> <hr /> <p id=separated> </body>Но, так или иначе, этот алгоритм из разряда «дёшего и сердито» для ознакомительных целей… |
Часовой пояс GMT +3, время: 21:54. |