Очень красиво, когда код на каком-либо языке программирования оформлен в записях аналогично тому, как его видит разработчики. Данная штука, пожалуй, была уже у всех блггеров, кроме меня :)

Поэтому, я тоже прикрутил класс для подсветки синтаксиса в свой блог и сейчас покажу, как это сделал.

Если делать как многие, то нужно использовать самый классный класс :) для этих задач (я сравнивал несколько – этот лучший). Скачаем GeSHi – Generic Syntax Highlighter и забросим его в свой каталог классов.

Для себя я сделал специальную функцию, которая подсвечивает коды в тексте по принципу BB кодов. То есть подсвечиваются только блоки [/code]

</em>. Параметр "синтаксис" необязателен. Если его нет, то функция подсветит блок по дефолтному значению языка. Для меня это php. Получается, что блоки "<strong>[ code=php] ... немного php кода ... и "[ code] ... еще примеры php функций ... [/code]" будут обработаны одинаково по правилам php.

Итак, лицезрим работу класса для подсветки синтаксиса на примере этой функции :)

function geshi_highlight($sText, $sLang = 'php')
{
// В  0-ом весь блок (с тегами), 1-ом названия языков, во 2-ом сам код.
preg_match_all('#\[code=?[\'"]?([0-9a-z]*)[\'"]?\](.*?)\[/code\]#si', $sText, $a);

if (@$a[2][0])
{
$cd = dirname(__FILE__) . '/';

require_once($cd . 'geshi.php');

// Передается текст, язык, путь к файлам с правилами подсветки
$oGeshi =& new GeSHi('', $sLang, $cd . 'geshi/');

foreach ($a[2] as $n=>$sCode)
{
if (trim($a[1][$n]))
$sLang = trim($a[1][$n]);

$oGeshi->set_source(trim($sCode));

$oGeshi->set_language($sLang);

$sCode  = '
<div class="geshi_highlighted">';
$sCode .= $oGeshi->parse_code() . '</div>
';

$sText = str_replace($a[0][$n], $sCode, $sText);
}
}

return $sText;

}

Функцию я запихнул в файл с именем helper_geshi.php и положил там же, где файл geshi.php. Пример использования в скриптах понятен. Верно? :) Можно заметить, что будут проблемы, если в тексте окажется два и более блока с одинаковым кодом, так как str_replace() заменяет все совпадения. Но только я себе не могу представить такой пример, когда бывали такие совпадения :)

Внес изменения в цветовую гамму файла для подсветки php синтаксиса. Стандартный какой-то весь красный. А в PHP Expert Editor-е как-то все более красиво всегда было. Мой вариант раскрасски здесь.

Еще мне понадобилось расписать стили блока, в который я вставил обработанный код. В файл стилей добавлено следующее описание.

.geshi_highlighted
{
border: 1px solid #555555;
padding: 0px 7px;
display: block;
overflow: auto;
font-size: 14px;
background: #f5f5f5;
/* И, всетаки, IE уебан */
// width: 570px;
}

Красота...



Leave a Comment