Text processor module
| > Module written by Matt Mecham
|
+--------------------------------------------------------------------------
*/
class post_parser {
var $error = "";
var $image_count = 0;
var $emoticon_count = 0;
var $quote_html = array();
var $quote_open = 0;
var $quote_closed = 0;
var $quote_error = 0;
var $emoticons = "";
var $badwords = "";
var $strip_quotes = "";
function smilie_length_sort($a, $b)
{
if ( strlen($a['typed']) == strlen($b['typed']) )
{
return 0;
}
return ( strlen($a['typed']) > strlen($b['typed']) ) ? -1 : 1;
}
function word_length_sort($a, $b)
{
if ( strlen($a['type']) == strlen($b['type']) )
{
return 0;
}
return ( strlen($a['type']) > strlen($b['type']) ) ? -1 : 1;
}
function post_parser($load=0)
{
global $ibforums, $DB;
$this->strip_quotes = $ibforums->vars['strip_quotes'];
if ($load != 0)
{
// Pre-load the bad words
$DB->query("SELECT * from ibf_badwords");
if ( $DB->get_num_rows() )
{
while ( $r = $DB->fetch_row() )
{
$this->badwords[] = array( 'type' => stripslashes($r['type']),
'swop' => stripslashes($r['swop']),
'm_exact' => $r['m_exact'],
);
}
}
// Pre-load the smilies
$this->emoticons = array();
$DB->query("SELECT typed, image from ibf_emoticons");
if ( $DB->get_num_rows() )
{
while ( $r = $DB->fetch_row() )
{
$this->emoticons[] = array( 'typed' => stripslashes($r['typed']),
'image' => stripslashes($r['image']),
'clickable' => $r['clickable'],
);
}
}
}
}
/**************************************************/
// PARSE POLL TAGS
// Converts certain code tags for polling
/**************************************************/
function parse_poll_tags($txt)
{
// if you want to parse more tags for polls, simply cut n' paste from the "convert" routine
// anywhere here.
$txt = preg_replace( "#\[img\](.+?)\[/img\]#ie" , "\$this->regex_check_image('\\1')", $txt );
$txt = preg_replace( "#\[url\](\S+?)\[/url\]#ie" , "\$this->regex_build_url(array('html' => '\\1', 'show' => '\\1'))", $txt );
$txt = preg_replace( "#\[url\s*=\s*\"\;\s*(\S+?)\s*\"\;\s*\](.*?)\[\/url\]#ie" , "\$this->regex_build_url(array('html' => '\\1', 'show' => '\\2'))", $txt );
$txt = preg_replace( "#\[url\s*=\s*(\S+?)\s*\](.*?)\[\/url\]#ie" , "\$this->regex_build_url(array('html' => '\\1', 'show' => '\\2'))", $txt );
return $txt;
}
/**************************************************/
// convert:
// Parses raw text into smilies, HTML and iB CODE
/**************************************************/
function convert($in=array( 'TEXT' => "", 'SMILIES' => 0, 'CODE' => 0, 'SIGNATURE' => 0, 'HTML' => 0)) {
global $ibforums, $DB;
$txt = $in['TEXT'];
//--------------------------------------
// Returns any errors as $this->error
//--------------------------------------
// Remove session id's from any post
$txt = preg_replace( "#[?&;]s=([0-9a-zA-Z]){32}#", "", $txt );
//--------------------------------------
// convert
to \n
//--------------------------------------
$txt = preg_replace( "/
|
/", "\n", $txt );
//--------------------------------------
// Are we parsing iB_CODE and do we have either '[' or ']' in the
// text we are processing?
//--------------------------------------
if ( $in['CODE'] == 1 ) {
//--------------------------------------
// Auto parse URLs
//--------------------------------------
$txt = preg_replace( "#(^|\s)((http|https|news|ftp)://\w+\S+)#ie" , "\$this->regex_build_url(array('html' => '\\2', 'show' => '\\2', 'st' => '\\1'))", $txt );
//---------------------------------
// Do [CODE] tag
//---------------------------------
$txt = preg_replace( "#\[code\](.+?)\[/code\]#ies", "\$this->regex_code_tag('\\1')", $txt );
//---------------------------------
// Do [QUOTE(name,date)] tags
//---------------------------------
// Find the first, and last quote tag (greedy match)...
$txt = preg_replace( "#(\[quote.*\].*\[/quote\])#ies" , "\$this->regex_parse_quotes('\\1')" , $txt );
/***********************************************/
// If we are not parsing a siggie, lets have a bash
// at the [PHP] [SQL] and [HTML] tags.
/***********************************************/
if ($in['SIGNATURE'] != 1) {
$txt = preg_replace( "#\[sql\](.+?)\[/sql\]#ies" , "\$this->regex_sql_tag('\\1')" , $txt );
$txt = preg_replace( "#\[html\](.+?)\[/html\]#ies" , "\$this->regex_html_tag('\\1')" , $txt );
// [LIST] [*] [/LIST]
//-------------------------
$txt = preg_replace( "#\[list\]#i" , "
" , $txt );
$txt = preg_replace( "#\[\*\]#" , "- " , $txt );
$txt = preg_replace( "#\[/list\]#i" , "
", $txt );
}
//---------------------------------
// Do [IMG] [FLASH] tags
//---------------------------------
if ($ibforums->vars['allow_images'])
{
$txt = preg_replace( "#\[img\](.+?)\[/img\]#ie" , "\$this->regex_check_image('\\1')" , $txt );
$txt = preg_replace( "#(\[flash=)(\S+?)(\,)(\S+?)(\])(\S+?)(\[\/flash\])#ie", "\$this->regex_check_flash('\\2','\\4','\\6')", $txt );
}
// Start off with the easy stuff
$txt = preg_replace( "#\[b\](.+?)\[/b\]#is", "\\1", $txt );
$txt = preg_replace( "#\[i\](.+?)\[/i\]#is", "\\1", $txt );
$txt = preg_replace( "#\[u\](.+?)\[/u\]#is", "\\1", $txt );
$txt = preg_replace( "#\[s\](.+?)\[/s\]#is", "\\1", $txt );
// (c) (r) and (tm)
$txt = preg_replace( "#\(c\)#i" , "©" , $txt );
$txt = preg_replace( "#\(tm\)#i" , "" , $txt );
$txt = preg_replace( "#\(r\)#i" , "®" , $txt );
// font size, colour and font style
// [font=courier]Text here[/font] [size=6]Text here[/size] [color=red]Text here[/color]
while ( preg_match( "#\[size=([^\]]+)\](.+?)\[/size\]#ies", $txt ) )
{
$txt = preg_replace( "#\[size=([^\]]+)\](.+?)\[/size\]#ies" , "\$this->regex_font_attr(array('s'=>'size','1'=>'\\1','2'=>'\\2'))", $txt );
}
while ( preg_match( "#\[font=([^\]]+)\](.*?)\[/font\]#ies", $txt ) )
{
$txt = preg_replace( "#\[font=([^\]]+)\](.*?)\[/font\]#ies" , "\$this->regex_font_attr(array('s'=>'font','1'=>'\\1','2'=>'\\2'))", $txt );
}
while( preg_match( "#\[color=([^\]]+)\](.+?)\[/color\]#ies", $txt ) )
{
$txt = preg_replace( "#\[color=([^\]]+)\](.+?)\[/color\]#ies" , "\$this->regex_font_attr(array('s'=>'col' ,'1'=>'\\1','2'=>'\\2'))", $txt );
}
// email tags
// [email]matt@index.com[/email] [email=matt@index.com]Email me[/email]
$txt = preg_replace( "#\[email\](\S+?)\[/email\]#i" , "\\1", $txt );
$txt = preg_replace( "#\[email\s*=\s*\"\;([\.\w\-]+\@[\.\w\-]+\.[\.\w\-]+)\s*\"\;\s*\](.*?)\[\/email\]#i" , "\\2", $txt );
$txt = preg_replace( "#\[email\s*=\s*([\.\w\-]+\@[\.\w\-]+\.[\w\-]+)\s*\](.*?)\[\/email\]#i" , "\\2", $txt );
// url tags
// [url]http://www.index.com[/url] [url=http://www.index.com]ibforums![/url]
$txt = preg_replace( "#\[url\](\S+?)\[/url\]#ie" , "\$this->regex_build_url(array('html' => '\\1', 'show' => '\\1'))", $txt );
$txt = preg_replace( "#\[url\s*=\s*\"\;\s*(\S+?)\s*\"\;\s*\](.*?)\[\/url\]#ie" , "\$this->regex_build_url(array('html' => '\\1', 'show' => '\\2'))", $txt );
$txt = preg_replace( "#\[url\s*=\s*(\S+?)\s*\](.*?)\[\/url\]#ie" , "\$this->regex_build_url(array('html' => '\\1', 'show' => '\\2'))", $txt );
}
// Swop \n back to
$txt = preg_replace( "/\n/", "
", $txt );
//+---------------------------------------------------------------------------------------------------
// Parse smilies (disallow smilies in siggies, or we'll have to query the DB for each post
// and each signature when viewing a topic, not something that we really want to do.
//+---------------------------------------------------------------------------------------------------
if ($in['SMILIES'] != 0 and $in['SIGNATURE'] == 0) {
if ( ! is_array($this->emoticons) )
{
$DB->query("SELECT typed, image from ibf_emoticons");
$this->emoticons = array();
if ( $DB->get_num_rows() )
{
while ( $r = $DB->fetch_row() )
{
$this->emoticons[] = array( 'typed' => stripslashes($r['typed']),
'image' => stripslashes($r['image']),
'clickable' => $r['clickable'],
);
}
}
}
usort($this->emoticons, array( 'post_parser', 'smilie_length_sort' ) );
if ( count($this->emoticons) > 0 )
{
foreach($this->emoticons as $a_id => $row)
{
$code = $row['typed'];
$image = $row['image'];
/*$code = str_replace( "&", "&", $code );
$code = str_replace( "<", "<" , $code );
$code = str_replace( ">", ">" , $code );
$code = str_replace( "\"", """, $code);
$code = str_replace( "'", "'" , $code);
$code = str_replace( "!", "!" , $code);
$code = str_replace( "|", "|" , $code);*/
// Make safe for regex
$code = preg_quote($code, "/");
$txt = preg_replace( "!(?<=[^\w&])$code(?=.\W|\W.|\W$)!ei", "\$this->convert_emoticon('$code', '$image')", ' '.$txt.' ' );
}
}
if ($ibforums->vars['max_emos'])
{
if ($this->emoticon_count > $ibforums->vars['max_emos'])
{
$this->error = 'too_many_emoticons';
}
}
}
$txt = $this->bad_words($txt);
if ($in['HTML'] == 1)
{
$txt = str_replace( "<" ,"<" , $txt );
$txt = str_replace( ">" ,">" , $txt );
$txt = str_replace( """ ,"\"", $txt);
$txt = str_replace( "'" ,"'" , $txt);
$txt = str_replace( "&" ,"&" , $txt );
}
return $txt; //trim($txt);
}
/**************************************************/
// Badwords:
// Swops naughty, naugty words and stuff
/**************************************************/
function bad_words($text = "")
{
global $DB, $ibforums;
if ($text == "")
{
return "";
}
//--------------------------------
if ( ! is_array($this->badwords) )
{
$DB->query("SELECT * from ibf_badwords");
$this->badwords = array();
if ( $DB->get_num_rows() )
{
while ( $r = $DB->fetch_row() )
{
$this->badwords[] = array( 'type' => stripslashes($r['type']),
'swop' => stripslashes($r['swop']),
'm_exact' => $r['m_exact'],
);
}
}
}
usort($this->badwords, array( 'post_parser', 'word_length_sort' ) );
if ( count($this->badwords) > 0 )
{
foreach($this->badwords as $idx => $r)
{
if ($r['swop'] == "")
{
$replace = '######';
}
else
{
$replace = $r['swop'];
}
//---------------------------
$r['type'] = preg_quote($r['type'], "/");
//---------------------------
if ($r['m_exact'] == 1)
{
$text = preg_replace( "/(^|\b)".$r['type']."(\b|!|\?|\.|,|$)/i", "$replace", $text );
}
else
{
$text = preg_replace( "/".$r['type']."/i", "$replace", $text );
}
}
}
return $text;
}
/**************************************************/
// unconvert:
// Parses the HTML back into plain text
/**************************************************/
function unconvert($txt="", $code=1, $html=0) {
if ($code == 1)
{
$txt = preg_replace( "#.+?#", "\\1" , $txt );
$txt = preg_replace( "#(.+?)(.+?)(.+?)#e" , "\$this->unconvert_sql(\"\\2\")", $txt);
$txt = preg_replace( "#(.+?)(.+?)(.+?)#e", "\$this->unconvert_htm(\"\\2\")", $txt);
$txt = preg_replace( "#.+?#e" , "\$this->unconvert_flash('\\1')", $txt );
$txt = preg_replace( "#
#" , "\[IMG\]\\1\[/IMG\]" , $txt );
$txt = preg_replace( "#(.+?)#" , "\[URL=\\1\\2\]\\3\[/URL\]" , $txt );
$txt = preg_replace( "#(.+?)#" , "\[EMAIL=\\1\]\\2\[/EMAIL\]" , $txt );
$txt = preg_replace( "#(.+?)#" , "\[i\]\\1\[/i\]" , $txt );
$txt = preg_replace( "#(.+?)#" , "\[b\]\\1\[/b\]" , $txt );
$txt = preg_replace( "#(.+?)#" , "\[s\]\\1\[/s\]" , $txt );
$txt = preg_replace( "#(.+?)#" , "\[u\]\\1\[/u\]" , $txt );
$txt = preg_replace( "##" , "\[LIST\]" , $txt );
$txt = preg_replace( "#- #" , "\[*\]" , $txt );
$txt = preg_replace( "#
#", "\[/LIST\]" , $txt );
$txt = preg_replace( "#(.+?)#e" , "\$this->unconvert_me('\\1', '\\2')", $txt );
$txt = preg_replace( "#(.+?)#e" , "\$this->unconvert_size('\\1', '\\2')", $txt );
$txt = preg_replace( "#(.+?)#" , "\[color=\\1\]\\2\[/color\]", $txt );
$txt = preg_replace( "#(.+?)#" , "\[font=\\1\]\\2\[/font\]" , $txt );
$txt = preg_replace( "#(.+?)#", '[CODE]' , $txt );
$txt = preg_replace( "#(.+?)#", '[/CODE]' , $txt );
$txt = preg_replace( "#(.+?)#" , '[QUOTE]' , $txt );
$txt = preg_replace( "#(.+?)#" , "[QUOTE=\\1,\\2]" , $txt );
$txt = preg_replace( "#(.+?)#" , '[/QUOTE]' , $txt );
// Tidy up the end quote stuff
$txt = preg_replace( "#(\[/QUOTE\])\s*?
\s*#si", "\\1\n", $txt );
$txt = preg_replace( "##" , "" , $txt );
}
if ($html == 1)
{
$txt = str_replace( "'", "'", $txt);
}
$txt = preg_replace( "#
#", "\n", $txt );
return trim(stripslashes($txt));
}
//+-----------------------------------------------------------------------------------------
//+-----------------------------------------------------------------------------------------
// UNCONVERT FUNCTIONS
//+-----------------------------------------------------------------------------------------
//+-----------------------------------------------------------------------------------------
function unconvert_size($size="", $text="") {
$size -= 7;
return '[SIZE='.$size.']'.$text.'[/SIZE]';
}
function unconvert_flash($flash="") {
$f_arr = explode( "+", $flash );
return '[FLASH='.$f_arr[0].','.$f_arr[1].']'.$f_arr[2].'[/FLASH]';
}
function unconvert_me($name="", $text="") {
$text = preg_replace( "#(.+?)#", "\\1" , $text );
$text = preg_replace( "#$name#", "", $text );
return '[ME='.$name.']'.$text.'[/ME]';
}
function unconvert_sql($sql="") {
$sql = stripslashes($sql);
$sql = preg_replace( "#(.+?)#", "\\1", $sql );
$sql = preg_replace( "#\s*$#" , "", $sql );
return '[SQL]'.$sql.'[/SQL]';
}
function unconvert_htm($html="") {
$html = stripslashes($html);
$html = preg_replace( "#(.+?)#", "\\1", $html );
$html = preg_replace( "#\s*$#" , "", $html );
return '[HTML]'.$html.'[/HTML]';
}
//+-----------------------------------------------------------------------------------------
//+-----------------------------------------------------------------------------------------
// CONVERT FUNCTIONS
//+-----------------------------------------------------------------------------------------
//+-----------------------------------------------------------------------------------------
/**************************************************/
// convert_emoticon:
// replaces the text with the emoticon image
/**************************************************/
function convert_emoticon($code="", $image="") {
global $ibforums;
if (!$code or !$image) return;
// Remove slashes added by preg_quote
$code = stripslashes($code);
$this->emoticon_count++;
return "
";
}
/**************************************************/
// wrap style:
// code and quote table HTML generator
/**************************************************/
function wrap_style( $in=array() ) {
global $ibforums;
if (! isset($in['TYPE']) ) $in['TYPE'] = 'class';
if (! isset($in['CSS']) ) $in['CSS'] = 'postcolor';
if (! isset($in['STYLE']) ) $in['STYLE'] = 'QUOTE';
//-----------------------------
// This returns two array elements:
// START: Contains the HTML code for the start wrapper
// END : Contains the HTML code for the end wrapper
//-----------------------------
$possible_use = array( 'CODE' => array( 'CODE', 'CODE' ),
'QUOTE' => array( 'QUOTE', 'QUOTE' ),
'SQL' => array( 'CODE' , 'SQL'),
'HTML' => array( 'CODE' , 'HTML'),
'PHP' => array( 'CODE' , 'PHP')
);
return array( 'START' => "| {$possible_use[$in[STYLE]][1]} {$in[EXTRA]} |
| ",
'END' => " |
"
);
}
/**************************************************/
// regex_html_tag: HTML syntax highlighting
//
/**************************************************/
function regex_html_tag($html="") {
if ($html == "") return;
// Ensure that spacing is preserved
// Too many embedded code/quote/html/sql tags can crash Opera and Moz
if (preg_match( "/\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\]/i", $html) ) {
return $default;
}
//$html = preg_replace( "#\s{2}#", " ", $html );
// Knock off any preceeding newlines (which have
// since been converted into
)
//$html = nl2br($html);
$html = preg_replace( "/^
/", "", $html );
$html = preg_replace( "/^\s+/" , "", $html );
$html = preg_replace( "#<([^&<>]+)>#" , "<\\1>" , $html ); //Matches
$html = preg_replace( "#<([^&<>]+)=#" , "<\\1=" , $html ); //Matches \\1>" , $html ); //Matches
$html = preg_replace( "!=("|')(.+?)("|')(\s|>)!" , "=\\1\\2\\3\\4" , $html ); //Matches ='this'
$html = preg_replace( "!<!--(.+?)-->!" , "<!--\\1-->", $html );
$wrap = $this->wrap_style( array( 'STYLE' => 'HTML' ) );
return "{$wrap['START']}$html{$wrap['END']}";
}
/**************************************************/
// regex_sql_tag: SQL syntax highlighting
//
/**************************************************/
function regex_sql_tag($sql="") {
if ($sql == "") return;
// Too many embedded code/quote/html/sql tags can crash Opera and Moz
if (preg_match( "/\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\]/i", $sql) ) {
return $default;
}
// Knock off any preceeding newlines (which have
// since been converted into
)
$sql = preg_replace( "/^
/", "", $sql );
$sql = preg_replace( "/^\s+/" , "", $sql );
// Make certain regex work..
if (! preg_match( "/\s+$/" , $sql) )
{
$sql = $sql.' ';
}
$sql = preg_replace( "#(=|\+|\-|>|<|~|==|\!=|LIKE|NOT LIKE|REGEXP)#i" , "\\1", $sql );
$sql = preg_replace( "#(MAX|AVG|SUM|COUNT|MIN)\(#i" , "\\1(" , $sql );
$sql = preg_replace( "!("|'|')(.+?)("|'|')!i" , "\\1\\2\\3" , $sql );
$sql = preg_replace( "#\s{1,}(AND|OR)\s{1,}#i" , " \\1 " , $sql );
$sql = preg_replace( "#(WHERE|MODIFY|CHANGE|AS|DISTINCT|IN|ASC|DESC|ORDER BY)\s{1,}#i" , "\\1 " , $sql );
$sql = preg_replace( "#LIMIT\s*(\d+)\s*,\s*(\d+)#i" , "LIMIT \\1, \\2" , $sql );
$sql = preg_replace( "#(FROM|INTO)\s{1,}(\S+?)\s{1,}#i" , "\\1 \\2 ", $sql );
$sql = preg_replace( "#(SELECT|INSERT|UPDATE|DELETE|ALTER TABLE|DROP)#i" , "\\1" , $sql );
$html = $this->wrap_style( array( 'STYLE' => 'SQL' ) );
return "{$html['START']}{$sql}{$html['END']}";
}
/**************************************************/
// regex_code_tag: Builds this code tag HTML
//
/**************************************************/
function regex_code_tag($txt="") {
global $ibforums;
$default = "\[code\]$txt\[/code\]";
if ($txt == "") return;
// Too many embedded code/quote/html/sql tags can crash Opera and Moz
if (preg_match( "/\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\]/i", $txt) ) {
return $default;
}
// Take a stab at removing most of the common
// smilie characters.
$txt = preg_replace( "#<#" , "<", $txt );
$txt = preg_replace( "#>#" , ">", $txt );
$txt = preg_replace( "#"#" , """, $txt );
$txt = preg_replace( "#\s{1};#" , ";", $txt );
$txt = preg_replace( "#:#" , ":", $txt );
$txt = preg_replace( "#\[#" , "[", $txt );
$txt = preg_replace( "#\]#" , "]", $txt );
$txt = preg_replace( "#\)#" , ")", $txt );
$txt = preg_replace( "#\(#" , "(", $txt );
$txt = preg_replace( "#\r#" , "
", $txt );
$txt = preg_replace( "#\n#" , "
", $txt );
// Ensure that spacing is preserved
$txt = preg_replace( "#\s{2}#", " ", $txt );
$html = $this->wrap_style( array( 'STYLE' => 'CODE' ) );
return "{$html['START']}$txt{$html['END']}";
}
/****************************************************************************************************/
// regex_parse_quotes: Builds this quote tag HTML
// [QUOTE] .. [/QUOTE] - allows for embedded quotes
/**************************************************/
function regex_parse_quotes($the_txt="") {
if ($the_txt == "") return;
$txt = $the_txt;
// Too many embedded code/quote/html/sql tags can crash Opera and Moz
/*if (preg_match( "/\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\].+?\[(quote|code|html|sql)\]/is", $txt) ) {
$this->quote_error++;
return $txt;
}*/
$this->quote_html = $this->wrap_style( array( 'STYLE' => 'QUOTE' ) );
$txt = preg_replace( "#\[quote\]#ie" , "\$this->regex_simple_quote_tag()" , $txt );
$txt = preg_replace( "#\[quote=(.+?),\s*(.+?)\]#ie" , "\$this->regex_quote_tag('\\1', '\\2')" , $txt );
$txt = preg_replace( "#\[/quote\]#ie" , "\$this->regex_close_quote()" , $txt );
$txt = preg_replace( "/\n/", "
", $txt );
if ( ($this->quote_open == $this->quote_closed) and ($this->quote_error == 0) ) {
// Preserve spacing
$txt = preg_replace( "#(.+?)#es", "\$this->regex_preserve_spacing('\\1')", trim($txt) );
return $txt;
} else {
return $the_txt;
}
}
/**************************************************/
// regex_preserve_spacing: keeps double spaces
// without CSS killing tags
/**************************************************/
function regex_preserve_spacing($txt="") {
$txt = preg_replace( "#\s{2}#", " ", trim($txt) );
return $txt;
}
/**************************************************/
// regex_simple_quote_tag: Builds this quote tag HTML
// [QUOTE] .. [/QUOTE]
/**************************************************/
function regex_simple_quote_tag() {
global $ibforums;
$this->quote_open++;
return "{$this->quote_html['START']}";
}
/**************************************************/
// regex_close_quote: closes a quote tag
//
/**************************************************/
function regex_close_quote() {
if ($this->quote_open == 0) {
$this->quote_error++;
return;
}
$this->quote_closed++;
return "{$this->quote_html['END']}";
}
/**************************************************/
// regex_quote_tag: Builds this quote tag HTML
// [QUOTE=Matthew,14 February 2002]
/**************************************************/
function regex_quote_tag($name="", $date="") {
global $ibforums;
$default = "\[quote=$name,$date\]";
$this->quote_open++;
$html = $this->wrap_style( array( 'STYLE' => 'QUOTE', 'EXTRA' => "($name @ $date)" ) );
$extra = "--$name+$date";
return "{$html['START']}";
}
/****************************************************************************************************/
// regex_check_flash: Checks, and builds the