Per il momento questo è ciò che sono riuscito a tirare fuori... Non dovrebbero esserci errori:
<?php
/**
* @version $Id: geshi .php 2970 2006?03?30 08:01:32Z stingrey $
* @package Joomla
* @copyright Copyright (C) 2005 Open Source Matters. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modi?ed pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses .
* See COPYRIGHT.php for copyright notices and details.
*/
// no direct access
defined( '_VALID_MOS' ) or die( 'Restricted access' );
$_MAMBOTS->registerFunction( 'onPrepareContent', 'botGeshi' );
/**
* Code Highlighting Mambot
*
* Replaces {geshi lang="LANGUAGE" lines="true"}...{/geshi} tags with highlighted text
*/
function botGeshi( $published, &$row, &$params, $page=0 ) {
// define the regular expression for the bot
$regex = "#{geshi\s*(.*?)}(.*?){/geshi}#s";
// check whether mambot has been unpublished
if ( !$published ) {
return true;
}
// perform the replacement
$row->text = preg_replace_callback( $regex, 'botGeshi_replacer', $row->text );
return true;
}
/**
* Replaces the matched tags an image
* @param array An array of matches (see preg match all)
* @return string
*/
function botGeshi_replacer( &$matches ) {
require_once( $GLOBALS['mosConfig_absolute_path'] . '/includes/domit/xml_saxy_shared.php' );
include_once( dirname( _FILE_ ) . '/geshi/geshi.php' );
$parser = new SAXY_Parser_Base();
$args = $parser->parseAttributes( strtr($matches[1], $parser->predefinedEntities) );
$text = $matches[2];
$lang = mosGetParam( $args, 'lang', 'php' );
$lines = mosGetParam( $args, 'lines', 'false' );
$html_entities_match = array( "|\<br \/\>|", "#<#", "#>#", "|'|", '#"#', '# #' );
$html_entities_replace = array( "\n", '<', '>', "'", '"', ' ' );
$text = preg_replace( $html_entities_match, $html_entities_replace, $text );
$text = str_replace ('<', '<', $text) ;
$text = str_replace ('>', '>', $text) ;
// Replace tabs with " " so tabbed code indents sorta right without making huge long lines
//$text = str_replace ("\t", " ", $text);
$text = str_replace ( "\t", ' ', $text ) ;
$geshi = new GeSHi( $text, $lang, dirname( __FILE__ ) . '/geshi/geshi' );
if ( $lines == 'true') {
$geshi->enable_line_numbers( GESHI_NORMAL_LINE_NUMBERS );
}
$text = $geshi->parse_code();
return $text;
}
?>