Текст в таблицах.
-
ivank
Текст в таблицах.
Я у себя на страничке собираюсь постить куски кода, т.к. в одном куске обычно в ширину 60-80 символов, то таблицы обычно разъезжаются а вместе с ними и весь остальной текст, мне это не нравится, и хотелось бы знать как сего можно избежать...
-
ivank
-
vasketsov
Re: Текст в таблицах.
Вот примерный шаблон моей страницы:
Код:
Так вот, справая ячейка расползается в следствии того, что строку с кодом нельзя разбивать (тэг не позволяет), То что вся таблица разёезжается, это не страшно, плохо то, что весь текст (не только код) разъезжается и занимает более одного экрана в ширину. Как следствие, читать подобную страницу становится "немножко" трудно...
Код:
Код: Выделить всё
тут стандартные html-заголовки
<table width=100%><tr><td width=20%>менюшка</td>
<td width=80%>Тут некий очень интересный текст, в который
по детской прихоти возникло желание вставить кусок кода...
<pre>а тут длииииииииииииииииииииииииииииииииииииииииииииииинный кусок кода и ещё длиннее.....</pre>
</td></tr></table>
тут стандартный html футерТак вот, справая ячейка расползается в следствии того, что строку с кодом нельзя разбивать (тэг не позволяет), То что вся таблица разёезжается, это не страшно, плохо то, что весь текст (не только код) разъезжается и занимает более одного экрана в ширину. Как следствие, читать подобную страницу становится "немножко" трудно...
-
vasketsov
Re: Текст в таблицах.
Если ты хочешь побороть тег PRE - то тут не знаю что делать. Ну то есть, очевидный ответ - его не использовать.
Если же надо просто научить броузер переносить длинные слова - то это можно.
Я, например, у себя на сайте (в новой версии, на перле которая) храню имена параметров как NoWebView, а при выводе, если включить это в опциях, оно будет при нехватке места переноситься, причем перенос в 2-х местах возможен (в этом конкретном случае), а если не надо переноса - он появляться и не будет. Разумеется, это все автоматически, без проверки ширины экрана.
Я думаю, скрипт сам напишешь, который бы форматировал слово так, чтоб при необходимости он начинало переноситься. А сам HTML посмотри у меня.
Или я это все зря, и ты принципиально с PRE борешься?
Если же надо просто научить броузер переносить длинные слова - то это можно.
Я, например, у себя на сайте (в новой версии, на перле которая) храню имена параметров как NoWebView, а при выводе, если включить это в опциях, оно будет при нехватке места переноситься, причем перенос в 2-х местах возможен (в этом конкретном случае), а если не надо переноса - он появляться и не будет. Разумеется, это все автоматически, без проверки ширины экрана.
Я думаю, скрипт сам напишешь, который бы форматировал слово так, чтоб при необходимости он начинало переноситься. А сам HTML посмотри у меня.
Или я это все зря, и ты принципиально с PRE борешься?
-
BigMac
Re: Текст в таблицах.
ivank
Тег "pre" специально сделан для того, чтобы формат текста оставлять......таблица всегда будет разъезжаться...поверь мне......не юзай этот тег просто
Тег "pre" специально сделан для того, чтобы формат текста оставлять......таблица всегда будет разъезжаться...поверь мне......не юзай этот тег просто
-
ivank
Re: Текст в таблицах.
vasketsov
Без форматирование текста на фиг уезжает, а без него читать сурсы неудобно.
BigMac
Да мне пофиг, что таблица разъезжается -- лишь быостальной текст в ней не расширялся то же...
Пока я сделал автоматичесские переносы, о некузяво это как-то...
Без форматирование текста на фиг уезжает, а без него читать сурсы неудобно.
BigMac
Да мне пофиг, что таблица разъезжается -- лишь быостальной текст в ней не расширялся то же...
Пока я сделал автоматичесские переносы, о некузяво это как-то...
-
vasketsov
Re: Текст в таблицах.
ivank
>читать сурсы неудобно
я так понял, тебе надо
1) моноширинный шрифт
2) чтобы переносы строк оставались
1-е можно и стилем.
2-е тоже можно попробовать стилями поиграться, вот только идентично ли поведение (т.е. форматирование) текста внутри куска с ПРЕ или со стилем- не знаю, по идее ничего получиться не должно. Какое-то странное форматирование. Переносы строк остаются, а остальное - переносится.
>читать сурсы неудобно
я так понял, тебе надо
1) моноширинный шрифт
2) чтобы переносы строк оставались
1-е можно и стилем.
2-е тоже можно попробовать стилями поиграться, вот только идентично ли поведение (т.е. форматирование) текста внутри куска с ПРЕ или со стилем- не знаю, по идее ничего получиться не должно. Какое-то странное форматирование. Переносы строк остаются, а остальное - переносится.
-
ivank
Re: Текст в таблицах.
vasketsov
Я вот такой вот скриптик (вернее часть PHP-класса) написал -- строки свыше 60 символов разбивает на части, но всё это с сохранением форматирования. Переносы по возможности делает по словам:
Код:
Если кому-нибудь нуно могу дать вариант на perl'е. Работает как часы. Причём, гораздо лучше чем простое
Код:
Добавлено:
Но, вообще, я решил применять решение проще -- сделать шрифт для кода меньше, и весь код, который я собираюсь публиковать на страницы сразу (вручную) форматировать по ширине на 60 символов -- всё прекрасно смотрится даже в 640x480.
Я вот такой вот скриптик (вернее часть 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", '', $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 ''; print_r( $f );
* *return substr( $str, 0, 60 );
}
// ...
};Если кому-нибудь нуно могу дать вариант на perl'е. Работает как часы. Причём, гораздо лучше чем простое
Код:
Код: Выделить всё
$str =~ s/([^\n]{60})([^\n])/$1\n$2/;Добавлено:
Но, вообще, я решил применять решение проще -- сделать шрифт для кода меньше, и весь код, который я собираюсь публиковать на страницы сразу (вручную) форматировать по ширине на 60 символов -- всё прекрасно смотрится даже в 640x480.