Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
DJ_Vasek

bb-code + geshi

Recommended Posts

И так. 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 скрипт пашет без проблем. Как быть?

Share this post


Link to post
Share on other sites
но получаю:

 

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

Share this post


Link to post
Share on other sites

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

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

 

 

И так код:

#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 />

Edited by DJ_Vasek

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...