Нумерация строк
1.
Дмитрий (09.06.2011 / 16:33)
вообщем пытаюсь сделать нумерацию строк в подсветке бб кода
<?php
function highlight($code)
{
$code = highlight_string($code, true);
$code = '<div class="num">' . implode(range(1, mb_strlen($code, 'UTF8')+1), '<br/>') . '</div>';
return $code;
}
?>
работает не так как надо, в чем дело?
2.
KOZZ (09.06.2011 / 16:38)
строка 1 единственная потому что считается
как я вижу решение: нужно делить с помощью wordwrap, а затем уже считать количество "\n", и исходя из этого нумеровать
Добавлено через 05:34 сек.
хотя чую анусом что можно сделать это изящнее
3.
KOZZ (09.06.2011 / 17:09)
http://php.su/forum/topic.php?forum=1&topic=3125
4.
Валерий (09.06.2011 / 17:10)
ты функцию implode не правильно используешь.. параметры местами поменяй
5.
KOZZ (09.06.2011 / 17:16)
тем кодом что автор делает, он просто сделает так:
01234567891011<? echo 'hello world';?>
так не прокатит, логика не верна
6.
Дмитрий (09.06.2011 / 17:54)
#4 куда местами менять?
#5 там ничего путнего нет)
7.
KOZZ (10.06.2011 / 06:33)
<?php
function highlight($code)
{
$count = mb_strlen($code, 'UTF8');
$ret = '';
$code = explode("\n",highlight_string($code, true));
for($i=0;$i<=$count;$i++){
$ret.= $i /* номер строки */ .') '.$code[$i]."\n" /*сама строка + перенос */;
}
return $ret;
}
?>
не тестил, но что-то в таком роде в общем
8.
Дмитрий (11.06.2011 / 03:20)
Получилось вот так
0) 1)
<?
echo 'Hallo';
2) 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) 13) 14) 15) 16) 17) 18) 19) 20) 21)
9.
ramzes (11.06.2011 / 04:04)
<?
$code = explode(PHP_EOL, $code);
$ret = '<pre>';
foreach ($code as $line => $string){
$ret .= rtrim($string) . '<br>';
}
$ret .= '</pre>';
?>
правда у меня это со своим классом подсветки работает, не знаю как поведет себя с highlight_string()
10.
Дмитрий (11.06.2011 / 04:16)
рамзес, так тоже не канает, если ретурню $code возвращает Array если $ret возвращает обычный код, без нумерации, но с пробелами
Добавлено через 02:45 сек.
да, и откуда берется $line ? как я понял это будет return $code[$line]; ?
11.
ramzes (11.06.2011 / 04:42)
Замени в этом коде <br> на PHP_EOL
line из цикла же берется
будет return $ret;
12.
Дмитрий (11.06.2011 / 04:49)
Вот так кое-как работает
<?
function numeric($var)
{
$var = explode('<br/>', $var);
foreach ($var as $line => $string) {
$ret .= $line . ' ' . $string . '<br/>';
}
return $ret;
}
?>
строки сбиваются иногда, и то срабатывает только когда вырублю highlight_string()
13.
Валерий (11.06.2011 / 12:41)
Как то так. Хотя решение не идеально.. надо сделать чтоб, при копировании кода, номера строк не копировались.
<style type="text/css">
div.code{width:50%;border:solid 1px #cccccc;margin:20px;padding-left:15px;overflow: auto;}
div.code span.nums{margin-right:15px;position:relative;right:0px; color:#000000;background-color:#cccccc;}
</style>
<?php
$str=highlight_file('index.php',true);
$arr=explode("<br />",$str);
$text='';
$i=0;
foreach($arr AS $str)
{
$i++;
$text.='<div><span class="nums">'.$i.'</span>'.$str.'</div>';
}
echo '<div class="code">';
echo $text;
echo '</div>';
?>
14.
KOZZ (11.06.2011 / 18:18)
$i=0;
foreach($arr AS $str)
{
$i++;
мб for($i=0;$i<=**;$i++) будет красивее?
15.
ramzes (11.06.2011 / 18:44)
eGo Свободу Пандам (11 Июня 2011 / 18:18)
мб for($i=0;$i<=**;$i++) будет красивее?
неа, меньше действий, меньше кода.
у меня есть класс подсветки, но он не работает с хайлайт стринг (там в ней какие то странности со строками), только с живым текстом, (подсветка css и js)
считает отлично строки, вот из него я и дал метод подсчета
16.
Дмитрий (13.06.2011 / 14:53)
valerik (11 Июня 2011 / 12:41)
Как то так. Хотя решение не идеально.. надо сделать чтоб, при копировании кода, номера строк не копировались.
<style type="text/css">
div.code{width:50%;border:solid 1px #cccccc;margin:20px;padding-left:15px;overflow: auto;}
div.code span.nums{margin-right:15px;position:relative;right:0px; color:#000000;background-color:#cccccc;}
</style>
<?php
$str=highlight_file('index.php',true);
$arr=explode("<br />",$str);
$text='';
$i=0;
foreach($arr AS $str)
{
$i++;
$text.='<div><span class="nums">'.$i.'</span>'.$str.'</div>';
}
echo '<div class="code">';
echo $text;
echo '</div>';
?>
то, что номера строк будут копироватся то не беда, но данный пример не подходит, т.к. мне не нужно подсвечивать весь файл, а только тот кусок кода который я выделю в
[i][size=1]Добавлено через 08:04 сек.[/size][/i]
Сделал вот так
[code]
<?
$str = СООБЩЕНИЕ;
$arr=explode("<br/>",$str);
$text='';
$i=0;
foreach($arr as $str)
{
$i++;
$text.=''.$i.' '.$str.'<br/>';
}
echo '<div class="code">';
echo $text;
echo '</div>';
выводит вот так
1
2 <?
3 echo 'Hallo';
4 ?>
5
17.
Дмитрий (13.06.2011 / 16:13)
Вот так еще пробовал
$arr = explode("<br/>", $message);
foreach($arr as $num => $message)
{
$text .= $num . ' ' . $message . '<br/>';
}
echo bb_code($text);
выводит вверху ноль, потом начинается подсветка, но номера строк не правильные
18.
ramzes (13.06.2011 / 16:53)
ладно не мучайтесь
<?php
//--- Функция подсветки кода ---//
function highlight_code($code){
$code = strtr($code,array('<br />'=>"\r\n",'[br]'=>"\r\n",'<br/>'=>"\r\n",'<'=>'<','>'=>'>','&'=>'&','$'=>'$','"'=>'"','''=>"'",'\'=>'`','%'=>'%','^'=>'^'));
if(!strpos($code,'<?') && substr($code,0,2)!='<?'){
$code="<?php\r\n".trim($code);
}
$code = highlight_string($code,true);
$code = strtr($code,array('<br />'=>"\r\n",'[br]'=>"\r\n",'<br/>'=>"\r\n"));
$code = preg_replace('|( ){2,40}|', "\1\r\n", $code);
$codeline = explode("\r\n", $code);
foreach ($codeline as $line => $string){
if($string!=''){
$ret.='<span style="color:#666">'.($line+1).'</span> '.trim($string).'<br />';
}
}
$code = strtr($ret, array('$'=>'$',"'"=>''','`'=>'\','%'=>'%','^'=>'^'));
return '<div class="php"><div class="code">'.$code.'</div></div>';
}
?>
http://www.wapblog.in/blogpost/opredelenie-TYC-sayta/ вот что получиться должно
19.
Дмитрий (13.06.2011 / 17:34)
Ваш положительный голос за пользователя ramzes успешно оставлен!
Добавлено через 05:38 сек.
PS а что а кврадраитики в пробелах у тебя и у меня ?
Добавлено через 09:17 сек.
ага, понял, это из-за \1
20.
ramzes (13.06.2011 / 17:44)
Какие квадратики?
21.
ramzes (13.06.2011 / 17:58)
19.
Mr-General, \1 это пробелы.
у меня ни каких квадратиков нет, походу у тебя что то со шрифтом..
22.
Дмитрий (13.06.2011 / 18:02)
Вот скрин,
http://upwap.ru/1550370 строки 3я 5я 8я 10я и тд , у меня тоже были, я убрал \1 оставил только \n\r и нету их
23.
ramzes (13.06.2011 / 18:12)
22.
Mr-General, у тебя шрифт косячный, смени его попробуй, должно помочь.
ты убрал пробелы которыми отступы делаются
\\ поправочка, проглатывал отступы, разваливалось форматирование строк
$code = preg_replace('|( {2,})|', "\r\n\1", $code);
вот так правильнее
24.
Дмитрий (13.06.2011 / 18:23)
ок сыпысы
#теперь close#
URL:
https://visavi.net/topics/22265