PDA

Показать полную графическую версию : Текст в таблицах.


ivank
10-04-2002, 09:35
Я у себя на страничке собираюсь постить куски кода, т.к. в одном куске обычно в ширину 60-80 символов, то таблицы обычно разъезжаются а вместе с ними и весь остальной текст, мне это не нравится, и хотелось бы знать как сего можно избежать...

vasketsov
10-04-2002, 13:18
ivank
а чем width="число тута, проценты или 0*" не катит?

ivank
10-04-2002, 19:45
Вот примерный шаблон моей страницы:
тут стандартные html-заголовки
<table width=100%><tr><td width=20%>менюшка</td>
<td width=80%>Тут некий очень интересный текст, в который
по детской прихоти возникло желание вставить кусок кода...
<pre>а тут длииииииииииииииииииииииииииииииииииииииииииииииинный кусок кода     и ещё длиннее.....</pre>
</td></tr></table>
тут стандартный html футер
Так вот, справая ячейка расползается в следствии того, что строку с кодом нельзя разбивать (тэг <pre> не позволяет), То что вся таблица разёезжается, это не страшно, плохо то, что весь текст (не только код) разъезжается и занимает более одного экрана в ширину. Как следствие, читать подобную страницу становится "немножко" трудно...

vasketsov
10-04-2002, 20:33
Если ты хочешь побороть тег PRE - то тут не знаю что делать. Ну то есть, очевидный ответ - его не использовать.

Если же надо просто научить броузер переносить длинные слова - то это можно.
Я, например, у себя на сайте (в новой версии, на перле которая) храню имена параметров как NoWebView, а при выводе, если включить это в опциях, оно будет при нехватке места переноситься, причем перенос в 2-х местах возможен (в этом конкретном случае), а если не надо переноса - он появляться и не будет. Разумеется, это все автоматически, без проверки ширины экрана.
Я думаю, скрипт сам напишешь, который бы форматировал слово так, чтоб при необходимости он начинало переноситься. А сам HTML посмотри у меня.

Или я это все зря, и ты принципиально с PRE борешься?

BigMac
10-04-2002, 22:39
ivank
Тег "pre" специально сделан для того, чтобы формат текста оставлять......таблица всегда будет разъезжаться...поверь мне......не юзай этот тег просто

ivank
11-04-2002, 09:48
vasketsov
Без <pre> форматирование текста на фиг уезжает, а без него читать сурсы неудобно.

BigMac
Да мне пофиг, что таблица разъезжается -- лишь быостальной текст в ней не расширялся то же...

Пока я сделал автоматичесские переносы, о некузяво это как-то...

vasketsov
11-04-2002, 13:05
ivank
>читать сурсы неудобно
я так понял, тебе надо
1) моноширинный шрифт
2) чтобы переносы строк оставались

1-е можно и стилем.
2-е тоже можно попробовать стилями поиграться, вот только идентично ли поведение (т.е. форматирование) текста внутри куска с ПРЕ или со стилем- не знаю, по идее ничего получиться не должно. Какое-то странное форматирование. Переносы строк остаются, а остальное - переносится.

ivank
11-04-2002, 13:46
vasketsov
Я вот такой вот скриптик (вернее часть PHP-класса) написал -- строки свыше 60 символов разбивает на части, но всё это с сохранением форматирования. Переносы по возможности делает по словам:

class page
{

//...

function _do_code_brs( $str )
{
* *// Суть *этого манёвра, что бы спецсимволы, заменённые на их коды
* *// (< на < *итп) опять стали односимвольными -- что б прально
* *// работал подсчёт символов в строке.
* *$tmp_chars = array( "\x05", "\x06", "\x07", *"\x08" *);
* *$codes * * = array( '<', '>', '&', '"');
* *for( $i = 0; $i < count( $codes ); ++$i )
* * * *$str = str_replace( $codes[$i], $tmp_chars[$i], $str );

* *while( preg_match( "/[^\n\x01]{61,}/", $str ) )
* * * *$str = preg_replace( "/([^\n\x01]{61,})/e",
* * * * * * * * * * * * * * '$this->_do_code_brs_(\'\\1\')', $str );

* *for( $i = 0; $i < count( $codes ); ++$i )
* * * *$str = str_replace( $tmp_chars[$i], $codes[$i], $str );

* *return str_replace( "\x01", '<img src="/trash/br.gif">', $str );
}

function _do_code_brs_( $str )
{
* *preg_match( '/^(.{0,60})(\S*)(.*)$/', $str, $f );
* *preg_match( '/ */', $str, $offset );
* *if( $f[2] != '' )
* *{
* * * *preg_match( '/\S*$/', $f[1], $last_word );
* * * *if( $last_word[0] != $f[1] )
* * * * * *return
    * * * * * *substr( $f[1], 0, strlen( $f[1] ) - strlen( $last_word[0] ) )
* *     * * * *. "\x01\n" . $offset[0] . $last_word[0] . $f[2] . $f[3];
* *}
* *preg_match( '/ */', $str, $offset );
* *return $f[1]."\x01\n".$offset[0].$f[2].$f[3];
* *echo '<pre>'; print_r( $f );
* *return substr( $str, 0, 60 );
}

// ...

};

Если кому-нибудь нуно могу дать вариант на perl'е. Работает как часы. Причём, гораздо лучше чем простое $str =~ s/([^\n]{60})([^\n])/$1\n$2/;

Добавлено:

Но, вообще, я решил применять решение проще -- сделать шрифт для кода меньше, и весь код, который я собираюсь публиковать на страницы сразу (вручную) форматировать по ширине на 60 символов -- всё прекрасно смотрится даже в 640x480.




© OSzone.net 2001-2012