Forum Webscript.Ru

Программирование => Perl => Тема начата: st_steev от 25 Сентября 2002, 13:15:30

Название: длинное слово
Отправлено: st_steev от 25 Сентября 2002, 13:15:30
Подскажите, плззз... Вобщем в форуме добавляются теги в виде [a ]link[ /a], которые потом при выводе формируются в link.Ну дык вот, этот линк, который между тегами, если он длинный, не помещается в таблицу, тем самым растягивая ее. Вот и вопрос: как сделать так, чтоб этот линк между тегами переносился по необходимости на другую строчку?
Тут либо я уже туплю, либо одно из двух...
Спасибо заранее:)
Название: длинное слово
Отправлено: NeoNox от 25 Сентября 2002, 13:39:28
Разбивай слово (линк) на куски по 4-5 символов и вставляй символ мягкого переноса: ­ — ­ . Есть модуль смыслового переноса для русского языка, но я бы не советовал его юзать. Кривовато -- раз, увеличивает код -- два.
Название: длинное слово
Отправлено: USE от 25 Сентября 2002, 16:29:42
Цитировать
как сделать так, чтоб этот линк между тегами переносился по необходимости на другую строчку?

а нафига переносить? сделай лучше как на этом форуме, что где-то в середине вставляется "..." и всем понятно, что обрезается, главное чтобы в href все было верно прописано.
Цитировать
Есть модуль смыслового переноса для русского языка,

дело в том, что он в этом случае не подойдет ведь разбивать надо непосредственно урл, а не слово... см. цитату:
Цитировать
link

какой может быть смысловой перенос в link? ;)
Название: длинное слово
Отправлено: Maniac от 25 Сентября 2002, 19:07:34
Цитировать
дело в том, что он в этом случае не подойдет ведь разбивать надо непосредственно урл,

А я так понял, что разбивать надо именно слово (разве адрес в href\'e влияет на компоновку???)
Название: длинное слово
Отправлено: USE от 25 Сентября 2002, 19:23:27
2 Maniac
Цитировать
А я так понял, что разбивать надо именно слово (разве адрес в href\'e влияет на компоновку???)


а я понял немного не так. да и адрес в href не влияет. но прочитай более внимательно постановку задачи:

Цитировать
Вобщем в форуме добавляются теги в виде [a ]link[ /a], которые потом при выводе формируются в link


видишь, что link повторяется и в href и между тегами, поэтому надо разбивать урл! просто ведь все :) может быть автор хотел спросить что-то другое, но спросил именно это. имхо.
Название: длинное слово
Отправлено: NeoNox от 25 Сентября 2002, 19:50:26
Цитировать
может быть автор хотел спросить что-то другое, но спросил именно это.

Давайте тогда автора дождемся. ;)
Название: длинное слово
Отправлено: USE от 25 Сентября 2002, 23:44:37
Цитировать
Давайте тогда автора дождемся.

пролетала у меня как-то такая мысля, NeoNox, ты прямо читаешь их :)
Название: длинное слово
Отправлено: st_steev от 26 Сентября 2002, 03:02:59
Тут имеется ввиду обычная ситуация: вместо тега
вставляется [a ] [/a ] а линк между ними при последующей обработке идет как в href="link" так и в название, те то, что между тегами. и надо разбить то, что между тегами.
Кстати,USE  ты говорил про то, что б выписывать только несколько первых символов, а остальное заменить ... Я тоже об этом задумавался. Вот только я регэкспами неочень покачто. Если нетрудно, то подскажи рег выражение для этого, пожалуйста:)  Заранее спасибо:)
Название: длинное слово
Отправлено: mike от 26 Сентября 2002, 15:36:21
Цитировать
Если нетрудно, то подскажи рег выражение для этого, пожалуйста


Ееееххх... Какие ж тут регэкспы? :)

$MAX_LEN = 20;
$url_text = substr($url, 0, $MAX_LEN).\'...\';
print qq($url_text);

:) Alles.
Название: длинное слово
Отправлено: st_steev от 26 Сентября 2002, 17:41:44
Ну до этого и я догадался. Но этих урлов много может быть, и я сомневаюсь, что эта штука заменит их всех....
Название: длинное слово
Отправлено: mike от 26 Сентября 2002, 18:12:09
Если урл не выделяется для проверки и обработки, то однозначно ;)
Название: длинное слово
Отправлено: st_steev от 26 Сентября 2002, 18:58:09
АААААААААААААААААААААА, не допру:(
Вот смотри, есть, например, массив @mes. Каждый его элемент идет в отдельную ячейку таблицы, те делается цикл. Ну вот, в каждом элементе $mes[$i] надо найти [a ]aaaaaaaaaa[/ a] и заменить на aaa.... Т.о., создается цикл, где выводится таблица с этими сообщениями. Ну вот, там(в этом цикле) и происходит замена в каждом элементе $mes[$i].  Получается заменить только первое. Плзззз:)
Просто я уже ничего не соображаюююююююююююююююю
Название: длинное слово
Отправлено: mike от 26 Сентября 2002, 19:23:41
Как вариант (это навскидку, и немного громоздко :) )


$MAXLEN=10;

foreach my $mes (@mes) {

   $mes =~ s|\\[a\\](.*?)\\[/a\\]|qq().(length($1)<=$MAXLEN?$1:(substr($1,0,$MAXLEN)."...")).""|eg;

#do smth with $mes

}


А вообще - perldoc perlre и perldoc perlop. ;)
Название: длинное слово
Отправлено: mike от 26 Сентября 2002, 19:30:52
Упс :D
Смайлик в коде - это двоеточие с открывающейся скобкой :)
Название: длинное слово
Отправлено: st_steev от 27 Сентября 2002, 00:13:07
Вот спасибо, если бы ты только знал как выручил:) У меня вся запарка и была в условии в регскэпе:) Короче, все, перебираюсь теперь на этот форум!!!!!!!!!!
Название: длинное слово
Отправлено: USE от 27 Сентября 2002, 11:32:20
Цитировать
Кстати,USE ты говорил про то, что б выписывать только несколько первых символов, а остальное заменить ... Я тоже об этом задумавался. Вот только я регэкспами неочень покачто. Если нетрудно, то подскажи рег выражение для этого, пожалуйста Заранее спасибо

я имел в виду, чтобы урл разрывался, т.е. не первые десять или 20 символов брались, а несколько вначале и несколько в конце а между ними "..." вот например:

$url = \'http://forums.webscript.ru/showthread.php?threadid=8368&goto=newpost\';
print "$url\\n";
$url =~ s/^(.{20}).+?(.{20})$/$1\\.\\.\\.$2/ig;
print "$url";

после чего получается, что на выводе (после замены) будет:

[url]http://forums.webscript.ru/showthread.php?threadid=8368&goto=newpost[/url]
[url]http://forums.webscr...id=8368&goto=newpost[/url]
Название: длинное слово
Отправлено: USE от 27 Сентября 2002, 11:40:18
Вот видишь даже этот форум делает замену, тот урл, что выше должен был быть полным, а тот что ниже, уже после обработки регекспом.

http://forums.webscript.ru/showthread.php?threadid=8368&goto=newpost
http://forums.webscr...id=8368&goto=newpost

да и регексп можно еще немного подогнать под задачу, а то так он любую строку размажет ;)
Название: длинное слово
Отправлено: st_steev от 02 Октября 2002, 11:35:03
и еще раз спасибо:)