Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2006-02-17 07:16:11

marazmus
Гость

GeSHi - модуль подсветки синтаксиса

Здравствуйте.

Кто-нибудь пытался прикрутить к форуму модуль GeSHi (Generic Syntax Highlighter) ?
Очень удобная штука, особенно для околопрограммистских форумов.
Расцвечивает код в зависмости от указанного языка, подсветка через css.

Спасибо заранее.

p.s. В PHP не силен, к сожалению.
p.p.s. Сайт модуля, на всякий случай smile - http://qbnz.com/highlighter/

Редактировался marazmus (2006-02-17 07:18:56)

#2 2006-02-17 21:57:27

beotiger
Гость

Re: GeSHi - модуль подсветки синтаксиса

Получилось!
Короче, эта штука ставится через сторонний мод Multy Syntax от zaher dirkey ([email protected]).

Скачиваешь мод http://www.parmaja.com/downloads/phpMul … -1.1.0.zip
Скачиваешь сам geshi - http://prdownloads.sourceforge.net/gesh … p?download
(или другую версию, эта последняя стабильная на сегодня).

В основной папке форума создаёшь папку syn. Туда запихиваешь целиком каталог geshi (как есть),
а также файлы syn.css и punbb_geshi.php из мода.
Затем читаешь readme.txt в моде и меняешь include/parser.php и header.php как там описано
(только никакие файлы можно больше не копировать, если тебе нужен только geshi -кстати, оригинальный мод у меня так и не заработал, но geshi поддерживает больше языков, правда работает чуть медленней).

Затем в include/parser.php находишь следующее:

//syn: include your favorite beautifiers
    include(PUN_ROOT.'syn/punbb_msh.php');
    //include(PUN_ROOT.'syn/punbb_geshi.php');

Меняешь на это:

//syn: include your favorite beautifiers
    //include(PUN_ROOT.'syn/punbb_msh.php');
    include(PUN_ROOT.'syn/punbb_geshi.php');

(то есть подключаем движок geshi вместо оригинального msh)

Теперь содержимое syn/punbb_geshi.php заменяешь на следующее:

<?
if (!defined('PUN_ROOT'))
    exit('The constant PUN_ROOT must be defined and point to a valid PunBB installation root directory.');

  //upload geshi to domain.com/forums/geshi
  include_once(PUN_ROOT.'syn/geshi/geshi.php');
  $geshi = new GeSHi($code, $codename, PUN_ROOT.'syn/geshi/geshi');
//  $geshi->set_header_type(GESHI_HEADER_PRE);
// $geshi->enable_classes(true);
//  $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS);
  $code=$geshi->parse_code();
?>

Сохраняешься.
Всё. geshi работает. И это круто.
Если какие вопросы - спрашивай.
Тестировалось на punBB 1.2.10.

#3 2006-03-26 22:02:13

beotiger
Гость

Re: GeSHi - модуль подсветки синтаксиса

Замечание к вышуизложенному объяснению - похоже, файл syn.css в этом случае можно опустить, он нужен только для оригинального мода.

#4 2006-03-27 21:03:43

uT)Dev1L
Гость

Re: GeSHi - модуль подсветки синтаксиса

У меня заработал и стандартный скрипт, я все понял почему не работал, просто  у меня стоял мод allow html smile

Редактировался uT)Dev1L (2006-03-27 21:07:10)

#5 2006-03-29 19:44:58

beotiger
Гость

Re: GeSHi - модуль подсветки синтаксиса

uT)Dev1L пишет:

У меня заработал и стандартный скрипт, я все понял почему не работал, просто  у меня стоял мод allow html smile

Если не трудно, скажи, что за мод (allow) и чем он мешал нормальной работе multisyn?

#6 2006-03-30 04:47:49

uT)Dev1L
Гость

Re: GeSHi - модуль подсветки синтаксиса

allow html- разрешает писать админам и модераторам html на форуме, а мешает он вот чем:

if ($cur_post['g_id'] == 1 || $cur_post['g_id'] == 2) { //Mod or admin
    $cur_post['message'] = parse_admin_message($cur_post['message'], $cur_post['hide_smilies']);
}
else
{
    $cur_post['message'] = parse_message($cur_post['message'], $cur_post['hide_smilies']);
}

остальные то пользователи могут писать multisyn а вот админ из-за этого кода обламывается т.к. на parse_admin_message написан свой парсер вот такой:
//Mod: parse_admin_message allows html and does not censor!
function parse_admin_message($text, $hide_smilies)
{
    global $pun_config, $lang_common, $pun_user;

    //CENSOR REMOVED

    // Convert applicable characters to HTML entities:REMOVED

    // If the message contains a code tag we have to split it up (text within
shouldn't be touched)
    if (strpos($text, '

') !== false && strpos($text, '

') !== false)
    {
        list($inside, $outside) = split_text($text, '

', '

');
        $outside = array_map('ltrim', $outside);
        $text = implode('<">', $outside);
    }

    if ($pun_config['o_make_links'] == '1')
        $text = do_clickable($text);

    if ($pun_config['o_smilies'] == '1' && $pun_user['show_smilies'] == '1' && $hide_smilies == '0')
        $text = do_smilies($text);

    if ($pun_config['p_message_bbcode'] == '1' && strpos($text, '[') !== false && strpos($text, ']') !== false)
    {
        $text = do_bbcode($text);

        if ($pun_config['p_message_img_tag'] == '1')
        {
//            $text = preg_replace('#\[img\]((ht|f)tps?://)([^\s<"]*?)\.(jpg|jpeg|png|gif)\[/img\]#e', 'handle_img_tag(\'$1$3.$4\')', $text);
            $text = preg_replace('#\[img\]((ht|f)tps?://)([^\s<"]*?)\[/img\]#e', 'handle_img_tag(\'$1$3\')', $text);
        }
    }

    // Deal with newlines, tabs and multiple spaces
    $pattern = array("\n", "\t", '  ', '  ');
    $replace = array('<br />', '&nbsp; &nbsp; ', '&nbsp; ', ' &nbsp;');
    $text = str_replace($pattern, $replace, $text);

    // If we split up the message before we have to concatenate it together again (code tags)
    if (isset($inside))
    {
        $outside = explode('<">', $text);
        $text = '';

        $num_tokens = count($outside);

        for ($i = 0; $i < $num_tokens; ++$i)
        {
            $text .= $outside[$i];
            if (isset($inside[$i]))
            {
                $num_lines = ((substr_count($inside[$i], "\n")) + 3) * 1.5;
                $height_str = ($num_lines > 35) ? '35em' : $num_lines.'em';
                $text .= '</p><div class="codebox"><div class="incqbox"><h4>'.$lang_common['Code'].':</h4><div class="scrollbox" style="height: '.$height_str.'"><pre>'.$inside[$i].'</pre></div></div></div><p>';
            }
        }
    }

    // Add paragraph tag around post, but make sure there are no empty paragraphs
    $text = str_replace('<p></p>', '', '<p>'.$text.'</p>');

    return $text;
}
По этому мне просто пришлось прибить его smile

#7 2006-05-15 20:08:39

phpforum
Гость

Re: GeSHi - модуль подсветки синтаксиса

Прошу показать на примере где установлен этот мод, после установки не вижу существенных изменений, только портится вид, я устанавливал оффлайн на денвере, может в нем что : )  Но в любом случае есть ли примененный на каком нибудь форуме

#8 2006-06-19 17:05:26

alafin
Гость

Re: GeSHi - модуль подсветки синтаксиса

Скажите, как поменять шрифт подсветки кода?

Подвал доски

Под управлением FluxBB. Хостинг Hostens