Forum Webscript.Ru

Программирование => Perl => Тема начата: Ardzhan от 26 Апреля 2002, 14:41:48

Название: Перенос слов и горизонтальная прокрутка!
Отправлено: Ardzhan от 26 Апреля 2002, 14:41:48
Возник такой вопрос! Браузер переносит слова по пробелам. А если написать "одно длинное слово", то дизайн в гостевой книге будет испоганен, появится горизонтальная прокрутка! Как с этим можно бороться?
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: Chs от 26 Апреля 2002, 14:55:05
Цитировать
Как с этим можно бороться?

Делить длинные слова.
Либо просто ограничивая длину строки, либо учитывая переносы и т.д.:)
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: Ardzhan от 26 Апреля 2002, 14:59:13
А как их делить? Я на PHP где-то видел такую функцию. У перла есть аналоги?
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: Ardzhan от 26 Апреля 2002, 15:04:23
$text=wordwrap($text, 20, "\\n", 1); - это на пхп
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: NeoNox от 26 Апреля 2002, 16:21:39
use Text::Wrap

  $Text::Wrap::columns = 12;  
  $text1="eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
  print wrap(\'\', \'\', $text1);

выдает:
eeeeeeeeeee
eeeeeeeeeee
eeeeeeeeeee
eeeeeeeeeee
eeeeeeee
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: Chs от 26 Апреля 2002, 16:33:04
Цитировать
use Text::Wrap

Или по простому - регулярным выражением пройтись.:)
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: NeoNox от 26 Апреля 2002, 16:45:03
Цитировать
Или по простому

Ага! И главное никакой разницы - что в Perl что в PHP ...
Читайте доки по регэкспам бо они рулез! :)
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: Ardzhan от 26 Апреля 2002, 16:47:23
Спасибо.  А без подключения модуля? Извиняюсь за назойливость... может кто делал?
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: Green Kakadu от 26 Апреля 2002, 19:18:28
$text=~s/(\\S{30})/$1 /g;
все что длинее 30 символов порубит
другое дело, что могут быть проблемы со ссылками..
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: ESE от 26 Апреля 2002, 23:01:52
Альтернатива :)

#!/usr/bin/perl
print "Content-type: text/html\\n\\n";
$preform=10;#допустимое кол-во символов в строке
$text="http://my_domen.com/my_domen.com/my_domen.com/my_dome";
if (length($text)>$preform){&format_text}
print $text;

sub format_text {
@text=split(//,$text);$n=1;
foreach $text (@text){
$format_text="$format_text$text";
if ($n==$preform){$format_text="$format_text
";$n=0;}$n++}
$text=$format_text   }
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: Green Kakadu от 27 Апреля 2002, 01:22:32
Цитировать
$text="http://my_domen.com/my_domen.com/my_domen.com/my_dome";
if (length($text)>$preform){&format_text}

не подойдет, т.к. текст, по идее, будет содержать не одну лишь строку длиной в полкилометра, а много разных слов, и там символов может быть и более 10, например:
$text="domen.com вася убежал за угол, козел он!";
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: Chs от 27 Апреля 2002, 09:16:58
Цитировать
$text=~s/(\\S{30})/$1 /g;
все что длинее 30 символов порубит
другое дело, что могут быть проблемы со ссылками..

Убираем проблемы со ссылками:
s|([^ \\/\\\\]{30})|$1 |g;
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: Боря Елкин от 27 Апреля 2002, 10:36:33
Цитировать
Убираем проблемы со ссылками:
s|([^ \\/\\\\]{30})|$1 |g;


В принципе тоже не решение, можно и длинной ссылкой растянуть дизайн. Нужно делать как в этом форуме - ссылку укорачивать и вставлять в href.

Но это одним regexpом не сделать.
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: Chs от 27 Апреля 2002, 11:31:58
Цитировать
Но это одним regexpом не сделать.

Можно сделать, но сразу говорю, что писать его не буду.:)
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: Green Kakadu от 27 Апреля 2002, 14:59:40
Цитировать
Но это одним regexpом не сделать.

Можно сделать, но сразу говорю, что писать его не буду.

наверное лучше/проще двумя, например чуть лучший вариант:

1. режем все что вне тегов:
$text~=s/>([^><]{30})$1

2. уже это:
$text~=s|([^ \\/\\\\]{30})|$1 |g;

конечно возможен такой вариант баловства:
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: Ardzhan от 27 Апреля 2002, 15:25:40
Спасибо большое! Принцип понятен. Теперь гадить в гостевой не будут :)
P.S. Предлагаю поместить эту тему в FAQ!
Название: Перенос слов и горизонтальная прокрутка!
Отправлено: ESE от 27 Апреля 2002, 15:59:22
Цитировать
$text="http://my_domen.com/my_domen.com/my_domen.com/my_dome";
if (length($text)>$preform){&format_text}



не подойдет, т.к. текст, по идее, будет содержать не одну лишь строку длиной в полкилометра, а много разных слов, и там символов может быть и более 10, например:
$text="domen.com вася убежал за угол, козел он!";


Ну а что мешет брать по одному слову из всех, чикирить  его на соответствие и выводить на печать. Потом для ссылок в гостевых книгах предусмотрено специальное поле....