<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2003 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | hide@address.com so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Stijn de Reede <hide@address.com> |
// +----------------------------------------------------------------------+
//
// $Id: SQL.php,v 1.1 2004/05/26 22:05:25 cb_fog Exp $
//
/**
* @package HTML_BBCodeParser
* @author Stijn de Reede <hide@address.com>
*/
require_once('HTML/BBCodeParser.php');
require_once("Text/Highlighter.php");
class HTML_BBCodeParser_Filter_SQL extends HTML_BBCodeParser
{
/**
* An array of tags parsed by the engine
*
* @access private
* @var array
*/
var $_definedTags = array( 'sql' => array( 'allowed' => 'none^img' ));
/**
* Executes statements before the actual array building starts
*
* This method should be overwritten in a filter if you want to do
* something before the parsing process starts. This can be useful to
* allow certain short alternative tags which then can be converted into
* proper tags with preg_replace() calls.
* The main class walks through all the filters and and calls this
* method if it exists. The filters should modify their private $_text
* variable.
*
* @return none
* @access private
* @see $_text
* @author Stijn de Reede <hide@address.com>
*/
function _preparse()
{
$options = PEAR::getStaticProperty('HTML_BBCodeParser','_options');
$o = $options['open'];
$c = $options['close'];
$oe = $options['open_esc'];
$ce = $options['close_esc'];
/* Highlighter für Code */
$hl_sql = & Text_Highlighter::factory('MYSQL');
$translationTable = get_html_translation_table(HTML_SPECIALCHARS);
$translationTable = array_flip($translationTable);
preg_match_all("/\[sql](.*)\[\/sql\]/miUs", $this->_text, $_pregSQLMatches);
$text = preg_replace("/\[sql](.*)\[\/sql\]/miUs", "[sql]", $this->_text);
/*
* jeden Codeblock einzeln highlighten
*/
$_sqlMatches = array();
foreach($_pregSQLMatches[1] as $_code) {
$_sqlMatch = $hl_sql->highlight(strtr(trim(preg_replace( '!<br.*>!iU', "", $_code)), $translationTable));
$_sqlMatch = '<script type="text/javascript">window.document.write( "<div style=\"white-space:nowrap;overflow:" + ( window.document.all?"scroll":"auto" ) + ";padding-bottom:7px;width:90%;\">" );</script>'.$_sqlMatch.'</div>';
$_sqlMatches[] = $_sqlMatch;
}
/*
* jeden PHP Match wieder zurück in den Text parsen
*/
for($i = 0; $i < count($_sqlMatches); $i++) {
$text = preg_replace("/\[sql]/miUs", $_sqlMatches[$i], $text, 1);
}
$this->_preparsed = $text;
}
}
?>