подсветка синтаксиса

Главные вкладки

Аватар пользователя qnub qnub 19 октября 2006 в 19:54

вобщем совал было на сайт модуль Texy! но послу настроки поиска - текси стало плохо и его пришлось усыпить. мотив для установки текса был прост как все генитальное - подсветка синтаксиса. хотя в итоге как оказалось сам текс пользуется для этих целей сторонней библиотекой fshl. после недолгих раздумий пришла идея прикрутить доблестный (действительно быстрый и качественный подсвечиватель) fshl ко всем любимому и понятному bbcode.

изменения внесены в 2 файла модуля bbcode (отрывки кода приведены с кусками окружения, чтоб легче найти):

сам bbcode.module - в него добавлена функция bbcode_menu которая добавляет css со стилями подсвечиваемых слов. почему эта функция - не знаю, посмотрел в других модулях - они свои css так добавляют.

// $Id: bbcode.module,v 1.41 2006/07/08 10:44:04 naudefj Exp $

function bbcode_menu ($may_cache) {
  // add stylesheet for sintax heighlight
  theme_add_style(drupal_get_path('module', 'bbcode') . '/fshl/styles/COHEN_style.css');
  return NULL;
}

function bbcode_help($section) {

второй измененный файл - bbcode-filter.inc изменения следующие:

1. вкладываем подсвечиватель и его конфигурационный файл (так было сделано в Texy!)

// $Id: bbcode-filter.inc,v 1.49 2006/07/05 15:56:13 naudefj Exp $

require_once ('fshl/fshl.php');
require_once ('fshl/fshl-config.php');

function _bbcode_filter_process(&$body, $format = -1) {

2. правим строчку замены текста в теге php bbcode на вызов исправлнной функции и добавляем остальные (имеющиееся в fshl на данный момент синтаксисы)

    '#\[/quote(?::\w+)?\]#si' => '</blockquote></div>',

    // syntax highlighted PHP, CPP, CSS, HTML, JAVA, JS, SQL
    '#\[php(?::\w+)?\](?:[\r\n])*(.*?)\[/php(?::\w+)?\]#sie' => '_bbcode_php_tag(\'PHP\',\'\\1\')',
    '#\[cpp(?::\w+)?\](?:[\r\n])*(.*?)\[/cpp(?::\w+)?\]#sie' => '_bbcode_php_tag(\'CPP\',\'\\1\')',
    '#\[css(?::\w+)?\](?:[\r\n])*(.*?)\[/css(?::\w+)?\]#sie' => '_bbcode_php_tag(\'CSS\',\'\\1\')',
    '#\[html(?::\w+)?\](?:[\r\n])*(.*?)\[/html(?::\w+)?\]#sie' => '_bbcode_php_tag(\'HTML\',\'\\1\')',
    '#\[java(?::\w+)?\](?:[\r\n])*(.*?)\[/java(?::\w+)?\]#sie' => '_bbcode_php_tag(\'JAVA\',\'\\1\')',
    '#\[js(?::\w+)?\](?:[\r\n])*(.*?)\[/js(?::\w+)?\]#sie' => '_bbcode_php_tag(\'JS\',\'\\1\')',
    '#\[javascript(?::\w+)?\](?:[\r\n])*(.*?)\[/javascript(?::\w+)?\]#sie' => '_bbcode_php_tag(\'JS\',\'\\1\')',
    '#\[sql(?::\w+)?\](?:[\r\n])*(.*?)\[/sql(?::\w+)?\]#sie' => '_bbcode_php_tag(\'SQL\',\'\\1\')',

    // Links to popular sites
    '#\[google(?::\w+)?\]([\w\s-]+?)\[/google(?::\w+)?\]#si' => '<a href="http://www.google.com/search?q=\\1">\\1</a>',

3. правим родную функцию bbcode для подсветки не только php но и всего остального (она самая последняя в файле)


function _bbcode_php_tag($type = 'CPP', $text = NULL) {
  $parser_options = P_TAB_INDENT;
  $parser = new fshlParser('HTML_UTF8', $parser_options);
  return '<pre>'. $parser->highlightString($type, str_replace('<br />', '', stripslashes($text))) .'</pre>';
}

ну и в итоге, чтобы увидеть результат, нужно выключить и снова включить филтр bbcode в вашем формате ввода (видимо они кешируются).

прикладываю готовый модуль bbcode+fshl+моя руссификация, проверенную на drupal 4.7.3

да. неплохо было бы и здесь такое прикрутить. а то запарился угловые скобки перерисовывать Smile

ВложениеРазмер
Двоичные данные bbcode.tar_.gz65.57 КБ

Комментарии

Аватар пользователя dyp@drupal.org dyp@drupal.org 21 октября 2006 в 2:49

gnub боюсь показаться занудой, но сейчас зашел на ваш сайт, посмотрел одну страницу, после чего у меня на вашем сайте больше ничего не открывается. пустые белые страницы.

Аватар пользователя qnub qnub 21 октября 2006 в 7:42

боюсь с вами согласиться. есть такая проблема - не могу понять почему. у меня все нормально работает. но многие сообщают о таких вот косяках. или страница пустая или бред на странице

Аватар пользователя ˛ ˛ 21 октября 2006 в 9:30

а сейчас открылось и всё нормально отобразилось!
мож перегрузки на сервере?
ну он хоть бы сообщение что-ли выдавал...