Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
DJ_Vasek

bb-code + geshi

Рекомендованные сообщения

И так. Geshi - набор классов и функций для красивого отображения различных языков программирования.

Архив

 

 

Php файл bb-code.

Строго не судите т.к. это мои первые шаги (я сам программист c, c++, asm).

 

<?php

class bbcode_cppcode extends bbcode_parent_class implements bbcodePlugin
{

/**
 * Constructor
 *
 * @access	public
 * @param	object		Registry object
 * @return	void
 */
public function __construct( ipsRegistry $registry )
{
	$this->currentBbcode	= 'cppcode';

	parent::__construct( $registry );

}

public function preDbParse( $txt )
{
	return parent::preDbParse( $txt );
}

public function preDisplayParse( $txt )
{
	return parent::preDisplayParse( $txt );
}

/**
 * Do the actual replacement
 *
 * @access	protected
 * @param	string		$txt	Parsed text from database to be edited
 * @return	string				BBCode content, ready for editing
 */
protected function _replaceText( $txt )
{
	$_tags = $this->_retrieveTags();

	foreach( $_tags as $_tag )
	{

		$open_tag	= '[' . $_tag;
		$close_tag	= '[/' . $_tag . ']';

		while( ( $this->end_pos = stripos( $txt, $close_tag, $this->end_pos ) ) !== false )
		{

			$this->cur_pos	= $this->end_pos;	

			while( $this->cur_pos > 0 )
			{

				$this->cur_pos = $this->cur_pos - 1;

				if( $this->cur_pos < 0 )
				{
					break;
				}

				if( stripos( $txt, $open_tag, $this->cur_pos ) === $this->cur_pos )
				{

					$open_length	= strlen($open_tag);

					$_content	= substr( $txt, ($this->cur_pos + $open_length + strlen($_option) + 1));

					$txt = substr_replace( $txt, $this->_buildOutput( $_content), $this->cur_pos, (stripos( $txt, $close_tag, $this->cur_pos ) + strlen($close_tag) - $this->cur_pos) );

					break;
				}
			}

			$this->end_pos += 1;

			if( $this->end_pos > strlen($txt) )
			{					
				$this->end_pos	= 0;
				break;
			}
		}
	}

	return $txt;
}


/**
 * Raw options string
 *
 * @access	private
 * @param	string		$string		The options submitted with the post as a string
 * @return	array					Key => value Option pairs
 */
private function _extractSurgicallyTehOptions( $options='' )
{


	return $finalOpts;
}


/**
 * Build the actual output to show
 *
 * @access	private
 * @param	integer		$option		Font size
 * @param	string		$content	Text
 * @return	string					Content to replace bbcode with
 */
private function _buildOutput( $content)
{
	// Include the GeSHi library//
	require_once('***************/includes/geshi.php'); 
	//// Define some source to highlight, a language to use
	// and the path to the language files//
	;
	 $lang = 'cpp';
	 $geshi = new GeSHi($content, $lang);

	return  $geshi->parse_code(); 
}
}

 

 

Ввожу у себя на формуе:

[cppcode]
#include <iostream>
using namespace std;
[/cppcode] 

 

Цвет, отступы распознает, но

получаю:

<br />

#include <iostream><br />

using namespace std;<br />

 

Хотя отдельно php скрипт пашет без проблем. Как быть?

Поделиться сообщением


Ссылка на сообщение
но получаю:

 

Это от того что Geshi кодирует спецсимволы в хтмл сущности, потом строка еще раз проходит через форумный кодировщик. Получается спецсимволы кодируются два раза. Надо либо в геши отключить, либо декодировать на выходе из него - htmlspecialchars_decode( return $geshi->parse_code() );

Поделиться сообщением


Ссылка на сообщение
08/17/11 21:29 (изменено)

Попробую потыкаться в настройках.

Проблема еще не устранена.

 

 

И так код:

#include <iosream>
using namespace std;
void main()
{
cout<<endl;
}

 

Без декодирования (как было в 1ом сообщении):

<br />
#include <iosream><br />
using namespace std;<br />
void main()<br />
{<br />
cout<<endl;<br />
}<br />

 

С:

<br />
#include <iosream>

using namespace std;<br />
void main()<br />
{<br />
cout<<endl;<br />
}<br />

Изменено пользователем DJ_Vasek

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...