|
|
|
| Все привет!
Кто нить уже решал задачу переноса слов по правилам русского языка?
пример:
функция ( количество символов в строке, строка )
обрезает строку по правилам русского языка если в строке больше чем заданное количество символов. тоесть если нам надо чтобы в строке было по 15 символов то функция должна сделать со строкой "принадлежащий моему юридическому лицу" примерно следующее
"принадлежащий<br /> моему юридичес-<br>кому лицу"
поставит дефис и перенесет строку, погрешность переноса 1-3 символа.
Если кто уже делал, дайте пожалуйста скриптик -), оч надо в жизни. | |
|
|
|
|
|
|
|
для: школьник
(14.12.2006 в 19:51)
| | Ребят, ну помогите решить задачку? | |
|
|
|
|
|
|
|
для: школьник
(15.12.2006 в 22:15)
| | Входных данных мало. Какой БД будете пользоваться? (конкретной) Как хранить на клиенте, или где собираетесь вставлять переносы? Очевидно, на клиенте, потому что там узнаётся ширина колонки. Но главное - дайте БД переносов, потом будем думать об алгоритме. | |
|
|
|
|
|
|
|
для: 12345
(16.12.2006 в 01:40)
| | Я строю дерево каталогов, мне необходимо чтобы в одной строке выводилось например по 30 символов, перенос по слогам. и т.д.
А какая разница какую базу использовать, или где хранить данные. Я думал про функцию универсальную, два параметра, 1 - сколько в строке символов и строка которая разбивается на строки по количеству символов. | |
|
|
|
|
|
|
|
для: школьник
(17.12.2006 в 12:36)
| |
<html>
<head>
<script>
window.onload=function()
{
var div = document.getElementById('myDiv');
div.innerHTML = f(div.innerHTML,30);
}
var a = [];
function f(t,l)
{
if(!a.length)makeArray();
function makeArray()
{
a = t.split(/\s/g);
for(var i in a)a[i] = a[i].split('|');
}
var b = [];
var r = [];
for(var i in a)
{
for(var j in a[i])
{
b.push(a[i][j]);
if(b.join('').length>=l)
{
r.push(b.join('')+'<br>');
var b = [];
}
}
if(b.length)b.push(' ');
}
if(b.length)r.push(b.join(''));
return r.join('');
}
</script>
</head>
<body>
<div id="myDiv">
Трав|ка зе|ле|не|ет, сол|ныш|ко блес|тит. Лас|точ|ка с вес|ною в гос|ти к нам ле|тит.
</div>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: RMW
(17.12.2006 в 17:12)
| | Круто!
Но здесь слоги, определяют " | ", а как сделать чтобы программа сама знала где сделать перенос, если например сложные слова типа с двумя "нн" и т.д.
Если функция получится оч. хорошей, у меня предложение авторам форума, выложить в "Примеры Javascript" и все смогут использовать. | |
|
|
|
|
|
|
|
для: школьник
(14.12.2006 в 19:51)
| | Давайте вернемся к задаче! | |
|
|
|
|
|
|
|
для: школьник
(18.12.2006 в 13:10)
| | к сожалению javascript не знает правил русского языка, так что только так или может кто-то за очень приличное вознаграждение сможет описать эти правила на языке js.
если делать перенос по словам - то это намного проще. | |
|
|
|
|
|
|
|
для: AlexSol
(18.12.2006 в 13:27)
| | Перенос по словам делает браузер, для этого стоит указать только ширину.
Я знаю что это сложная задачка, была бы легкая уже бы давно написал =) | |
|
|
|
|
|
|
|
для: AlexSol
(18.12.2006 в 13:27)
| | (Оно может стать не таким приличным, если будет база данных переносов. В и-нете есть бесплатные словари с переносами. Так что, автор: найдите словарь, потом вместе попробуем по нему работать. Подозреваю, что работать будет медленно, да и словарь привести к читаемому в JS виду - надо придумать как.)
Школьник: к сведению, если вы не в курсе, в IE имеется специальный символ мягкого переноса - & shy ; (писать вместе). Но он, конечно, не поможет, если мы его не поставим в нужные места. B в FF не действует, там действительно придётся расставлять дефисы. | |
|
|
|
|
|
|
|
для: 12345
(18.12.2006 в 14:16)
| | Да нет, вы в сложную сторону клоните, все намного проще.
Смотрите как,
есть строка "Ответить на сообщение", нужно разбить на строки по 7 символов, что делает прога, она пробегает по строке по символьно, если добежав до 7 символа она не находит пробел, тогда она смотрит что за символ стоит 7 в символе, если это гласная буква то можно переносить, просто вставить "-<br />" после 7 символа, если это согласная буква, тогда двигаемся вперед до гласной и делаем перенос, если двойная согласная то делаем перенос между ними, если пробел на 7 символе то вставим "<br />". Итого мы получаем строку "Ответить<br /> на соо-<br />бщение".
Тоесть это не совсем по правилам русского языка, но как бы так. | |
|
|
|
|
|
|
|
для: школьник
(18.12.2006 в 14:46)
| | Нет, такое решение никуда не годится. (Любой читатель решит, что автор неграмотный, поэтому к его словам не стоит серьёзно относиться.) | |
|
|
|
|
|
|
|
для: 12345
(18.12.2006 в 15:14)
| | Тоесть если делать такую нужную функцию, то делать сразу серьезно!? | |
|
|
|
|
|
|
|
для: 12345
(18.12.2006 в 15:14)
| | Но разве нельзя описать на JS правила переноса слов? Зачем делать базу слов, как правило исключений не так уж и много, и их можно предусмотреть. | |
|
|
|
|
|
|
|
для: школьник
(19.12.2006 в 16:15)
| | Ну а кому нужна плохо работающая функция? Лучше уж вообще не делать, а разделять слова пробелом или / / в произвольном месте. (Поступают обычно первым способом.)
Пожалуйста, опишите - будет предмет разговора. (Многие "спасибо" скажут. Я ни разу не слышал о системе, правильно переносящей не по словарю.) | |
|
|
|
|
|
|
|
|
для: RMW
(19.12.2006 в 21:42)
| | "Эти люди уже прониклись любовью к красивым текстам" - пишет автор. Как что-то можно назвать красивым с то и дело встречающимися ошибками? Хотя это как раз то, что хотел автор вопроса :) . | |
|
|
|
|
|
|
|
для: 12345
(19.12.2006 в 23:35)
| | По сей день неизвестен браузер, который бы правил-
ьно обрабатывал мягкие переносы.
=============================================
хихихи. как раз на слове "правильно" перенос неправильный | |
|
|
|
|
|
|
|
для: RMW
(19.12.2006 в 21:42)
| | RMW - красавец!
Счас только разбираюсь, но мне кажется - это именно то что надо!
Великое спасибо RMW! | |
|
|
|