перенос слов !wordwrap

msdn11

Новичок
перенос слов !wordwrap

всем привет!
есть задача выровнять строку так,как это делают на печати, а именно
по всем прави-
лам :) могучего языка. Т.е. мне надо бать текст, на строки по 80(например)
символов, и делать перенос по всем правилам.

Пока удалось используя wordwrap и
самопальную ф-цию, которая дописывает в строку пробелы,
выровнять по ширине, но этого не достаточно. Хочу узнать
предстоит ли мне быть первопроходцем, или же кто-то, что-то
похожее уже делал или слышал и сможет помочь?

понятно что речь идет о простом, неформатированном тексте.
 

denver

?>Скриптер
Имхо перенос слов, т.е. с разрывом через дефис, это анахронизм (вос(нис)ходящий еще к печатным машинкам). Если стоит цель убрать висящие строки то есть CSS свойство align:justify. А вот тексты с переносом а ля "книж-ный стиль" просто будут фигово индексироваться поисковиками. Да и вообще в таком тексте туго искать некоторые слова/фразы которые "ну точно видел же в середине".

-~{}~ 29.08.06 00:55:

.е. мне надо бать текст, на строки по 80(например)
Ну если это нужно только и только для печати из-под MS Dos 6.22 то можно и посмотреть правила переноса в русском языке :) По идее разбивка по слогам (т.е. практически по гласным) плюс 10-15 частных случаев.
 

SelenIT

IT-лунатик :)
Поиск - ваш друг. Там непременно найдется что-нибудь а-ля "алгоpитм П.Хpистова в модификации Дымченко и Ваpсанофьева". А вместе с ним - куча готовых решений.
 

msdn11

Новичок
Автор оригинала: SelenIT
Поиск - ваш друг. Там непременно найдется что-нибудь а-ля "алгоpитм П.Хpистова в модификации Дымченко и Ваpсанофьева". А вместе с ним - куча готовых решений.
ну не куча, а кое что есть, вот он

http://forum.dklab.ru/php/advises/Hyphen_wordsRasstanovkaQuotMyagkihQuotPerenosovVSlovah.html

PHP:
/**
 * Расстановка "мягких" переносов в словах.
 * Браузеры, которые показывают их: IE 6.0.x, Opera 7.54u2
 * В Firefox 1.0.4, Opera 7.11 не работает.
 * Поддерживается текст для русского (UTF-8) и английского языков (ANSI).
 *
 * @link     [url]http://shy.dklab.ru/newest/[/url]
 * @author   Nasibullin Rinat <rin at starlink ru>
 * @charset  ANSI
 * @version  2.0.2
 */
function hyphen_words($text)
{
    #буква (letter)
    $l = '(?:\xd0[\x90-\xbf\x81]|\xd1[\x80-\x8f\x91]  #А-я (все)
           | [a-zA-Z]
           )';

    #гласная (vowel)
    $v = '(?:\xd0[\xb0\xb5\xb8\xbe]|\xd1[\x83\x8b\x8d\x8e\x8f\x91]  #аеиоуыэюяё (гласные)
           | \xd0[\x90\x95\x98\x9e\xa3\xab\xad\xae\xaf\x81]         #АЕИОУЫЭЮЯЁ (гласные)
           | (?i:[aeiouy])
           )';

    #согласная (consonant)
    $c = '(?:\xd0[\xb1-\xb4\xb6\xb7\xba-\xbd\xbf]|\xd1[\x80\x81\x82\x84-\x89]  #бвгджзклмнпрстфхцчшщ (согласные)
           | \xd0[\x91-\x94\x96\x97\x9a-\x9d\x9f-\xa2\xa4-\xa9]                #БВГДЖЗКЛМНПРСТФХЦЧШЩ (согласные)
           | (?i:sh|ch|qu|[bcdfghjklmnpqrstvwxz])
           )';

    #специальные
    $x = '(?:\xd0[\x99\xaa\xac\xb9]|\xd1[\x8a\x8c])';   #ЙЪЬйъь (специальные)

    /*
    #алгоpитм П.Хpистова в модификации Дымченко и Ваpсанофьева
    $rules = array(
        # $1       $2
        "/($x)     ($l$l)/sx",
        "/($v)     ($v$l)/sx",
        "/($v$c)   ($c$v)/sx",
        "/($c$v)   ($c$v)/sx",
        "/($v$c)   ($c$c$v)/sx",
        "/($v$c$c) ($c$c$v)/sx"
    );
    */

    #improved rules by D. Koteroff
    $rules = array(
        # $1       $2
        "/($x)     ($l$l)/sx",
        "/($v$c$c) ($c$c$v)/sx",
        "/($v$c$c) ($c$v)/sx",
        "/($v$c)   ($c$c$v)/sx",
        "/($c$v)   ($c$v)/sx",
        "/($v$c)   ($c$v)/sx",
        "/($c$v)   ($v$l)/sx",
    );

    #\xc2\xad = &shy;
    return preg_replace($rules, "$1\xc2\xad$2", $text);
}
а куда вписыать мои 80 символов? че-то я не пойму как это использовать?
 

msdn11

Новичок
Автор оригинала: denver
Блин неуч.
я и не скрываю. был у нас в универе профессор информатики, да и тот помер, когда я был на 1 курсе, остались одни барышни, и вот результат... :)
а если серьезно, как это заюзать?

-~{}~ 29.08.06 09:35:

всем спасибо, я попробовал и понял...
 
Сверху