###############################################################################
# YaBBC.pl #
###############################################################################
# YaBB: Yet another Bulletin Board #
# Open-Source Community Software for Webmasters #
# Software Version: YaBB 1 Gold - SP1 #
# Released: December 2001 #
# =========================================================================== #
# Software Distributed by: http://yabb.xnull.com #
# Support, News, Updates at: http://yabb.xnull.com/community/ #
# =========================================================================== #
# Copyright (c) 2000-2002 Xnull (www.xnull.com) - All Rights Reserved. #
# Software by: The YaBB Development Team #
# with assistance from the YaBB community. #
###############################################################################
$yabbcplver = "1 Gold - SP1";
$yyYaBBCloaded = 1;
sub validwidth {
return ( $_[0] > 400 ? 400 : $_[0] );
}
sub MakeSmileys {
# --- Added for Notify Plus 2.2 --- #
local($parameter) = @_;
# Save & Change Image Directory
if ($parameter eq "IncludeImage") {
$save_imagesdir = $imagesdir;
$imagesdir = $imagesurl;
}
# --- /Added for Notify Plus 2.2 --- #
$message =~ s/\[smilie=(.*?)\]/\ /isg;
$message =~ s/\[smiley=(.*?)\]/\ /isg;
$message =~ s/(\W|\A)\;\)/$1\ /g;
$message =~ s/(\W|\A)\;\-\)/$1\ /g;
$message =~ s/(\W|\A)\;D/$1\ /g;
$message =~ s/\Q:'(\E/\ /g;
$message =~ s/(\W)\:\-\//$1\ /g;
$message =~ s/:\-\// /g;
$message =~ s/\Q:-X\E/\ /g;
$message =~ s/\Q:-[\E/\ /g;
$message =~ s/\Q:-*\E/\ /g;
$message =~ s/\Q>:(\E/\ /g;
$message =~ s/\Q>:(\E/\ /g;
$message =~ s/\Q::)\E/\ /g;
$message =~ s/\Q:P\E/\ /g;
$message =~ s/\Q:)\E/\ /g;
$message =~ s/\Q:-)\E/\ /g;
$message =~ s/\Q:D\E/\ /g;
$message =~ s/\Q:-(\E/\ /g;
$message =~ s/\Q:(\E/\ /g;
$message =~ s/\Q:o\E/\ /gi;
$message =~ s/\Q8)\E/\ /g;
$message =~ s/\Q???\E/\ /g;
$message =~ s/\Q?!?\E/\ /g;
$count=0;
while($SmilieURL[$count]) {
if ($SmilieURL[$count]=~ /\//i) {$tmpurl = $SmilieURL[$count];} else {$tmpurl = qq~$imagesdir/$SmilieURL[$count]~;}
$tmpcode = $SmilieCode[$count];
$tmpcode =~ s/$/\$/g;
$tmpcode =~ s/@/\@/g;
$message =~ s/\Q$tmpcode\E/\ /g;
$count++
}
# --- Added for Notify Plus 2.2 --- #
# Restore Image Directory
if ($parameter eq "IncludeImage") {
$imagesdir = $save_imagesdir;
}
# --- /Added for Notify Plus 2.2 --- #
}
$MAXIMGWIDTH = 400;
$MAXIMGHEIGHT = 500;
sub restrictimage {
my($w,$h,$s) = @_;
$w = $w <= $MAXIMGWIDTH ? $w : $MAXIMGWIDTH;
$h = $h <= $MAXIMGHEIGHT ? $h : $MAXIMGHEIGHT;
return qq~ ~;
}
sub box {
$parameter{'width'} = "";
$parameter{'color'} = "";
my ($tmpstuff, $tmpmessage) = @_;
foreach $dummy (split(/ /,$tmpstuff)) {
($key, $value) = split(/=/,$dummy);
$parameter{$key} = $value;
}
if ($parameter{'width'} eq "") {$parameter{'width'} = "90%";}
if ($parameter{'color'} ne "") {$parameter{'color'} = qq~ bgcolor="$parameter{'color'}" style="background-color:$parameter{'color'}"~;}
if ($parameter{'align'} ne "") {$parameter{'align'} = qq~ align="$parameter{'align'}"~;}
$_ = $txt{'706a'};
$_ =~ s~BOXWIDTH~$parameter{"width"}~ig;
$_ =~ s~BOXSTYLE~$parameter{'color'}~ig;
$_ =~ s~BOXALIGN~$parameter{'align'}~ig;
$_ =~ s~BOXMESSAGE~$tmpmessage~ig;
return $_;
}
sub whisper {
my ($whisper_name, $whisper_msg) = @_;
&LoadUserDisplay($whisper_name);
if ($whisper_name eq $username) {
$whisper_msg =~ s~\/me\s+(.*?)(\n.*?)~* $1 ~ig;
$whisper_msg =~ s~(.*?)\/me~$1\&\#47\;me~ig;
$whisper_msg =~ s~\/me\s+([\s\S]*)~* $1 ~ig;
$whisper_msg =~ s~\/me~\&\#47\;me~ig;
return qq~$YaBBCtxt{'whsp2'} $whisper_msg~;
} elsif ($username eq $tmpuname || $moderators{$username} || $settings[7] eq 'Administrator' || $settings[7] eq 'Global Moderator') {
return qq~$YaBBCtxt{'whsp1'} $userprofile{$whisper_name}->[1]: $whisper_msg~;
} else {
return qq~[$YaBBCtxt{'whsp3'} $userprofile{$whisper_name}->[1] ]~;
}
}
sub xwhisper {
my ($whisper_name, $whisper_msg) = @_;
&LoadUserDisplay($whisper_name);
if ($whisper_name ne $username && $username ne 'Guest') {
$whisper_msg =~ s~\/me\s+(.*?)(\n.*?)~* $1 ~ig;
$whisper_msg =~ s~(.*?)\/me~$1\&\#47\;me~ig;
$whisper_msg =~ s~\/me\s+([\s\S]*)~* $1 ~ig;
$whisper_msg =~ s~\/me~\&\#47\;me~ig;
return qq~$YaBBCtxt{'whsp2'} $whisper_msg~;
} elsif ($username eq $tmpuname || $moderators{$username} || $settings[7] eq 'Administrator' || $settings[7] eq 'Global Moderator') {
return qq~$YaBBCtxt{'whsp4'} $userprofile{$whisper_name}->[1]: $whisper_msg~;
} else {
return qq~[$YaBBCtxt{'whsp5'} $userprofile{$whisper_name}->[1] ]~;
}
}
sub quotemsg {
my( $qauthor, $qlink, $qdate, $qmessage ) = @_;
$qmessage =~ s~\/me\s+(.*?)(\n.*?)~* $qauthor $1 $2~ig;
$qmessage =~ s~(.*?)\/me~$1\&\#47\;me~ig;
$qmessage =~ s~\/me\s+([\s\S]*)~* $qauthor $1 ~ig;
$qdate = &timeformat($qdate);
######### Media Player mod
$qmessage =~ s~\[media~\[qmedia~ig;
$qmessage =~ s~\[\/media~\[\/qmedia~ig;
$qmediausername = $qauthor;
$mediaflag = 'quote';
######### Media Player mod end
if($action ne "imshow") { $_ = $txt{'704'}; }
else { $_ = $imtxt{'68'}; }
$_ =~ s~AUTHOR~$qauthor~g;
$_ =~ s~QUOTELINK~$scripturl?action=display;$qlink~g;
$_ =~ s~DATE~$qdate~g;
$_ =~ s~QUOTE~$qmessage~g;
return $_;
}
sub simplequotemsg {
my $qmessage = $_[0];
$qmessage =~ s~\/me\s+(.*?)(\n.*?)~* $1 ~ig;
$qmessage =~ s~(.*?)\/me~$1\&\#47\;me~ig;
$qmessage =~ s~\/me\s+([\s\S]*)~* $1 ~ig;
$qmessage =~ s~\/me~\&\#47\;me~ig;
$_ = $txt{'705'};
$_ =~ s~QUOTE~$qmessage~g;
return $_;
}
{
my %killhash = (
';' => ';',
'!' => '!',
'(' => '(',
')' => ')',
'-' => '-',
'.' => '.',
'/' => '/',
':' => ':',
'?' => '?',
'[' => '[',
'\\' => '\',
']' => ']',
'^' => '^'
);
sub codemsg {
my $code = $_[0];
if($code !~ /&\S*;/) { $code =~ s/;/;/g; }
$code =~ s~([\(\)\-\:\\\/\?\!\]\[\.\^])~$killhash{$1}~g;
$code =~ s~\&\#91\;highlight\&\#93\;(.*?)\&\#91\;\&\#47\;highlight\&\#93\;~$1 ~isg;
$code =~ s~\&\#91\;highlight size=(.*?) color=(.*?) background=(.*?)\&\#93\;(.*?)\&\#91\;\&\#47\;highlight\&\#93\;~$4 ~isg;
$_ = $txt{'706'};
$_ =~ s~CODE~$code~g;
return $_;
}
}
sub DoUBBC {
$message =~ s~\[code\]~ \[code\]~ig;
$message =~ s~\[/code\]~ \[/code\]~ig;
$message =~ s~\[quote\]~ \[quote\]~ig;
$message =~ s~\[/quote\]~ \[/quote\]~ig;
$message =~ s~\[glow\]~ \[glow\]~ig;
$message =~ s~\[/glow\]~ \[/glow\]~ig;
$message =~ s~ ~\n~ig;
$message =~ s~\[code\]\n*(.+?)\n*\[/code\]~&codemsg($1)~eisg;
if ($message =~ /\#nosmileys/isg || $ns =~ "NS") {$message =~ s/\#nosmileys//isg;} else { &MakeSmileys; }
$message =~ s~\[([^\]]{0,30})\n([^\]]{0,30})\]~\[$1$2\]~g;
$message =~ s~\[/([^\]]{0,30})\n([^\]]{0,30})\]~\[/$1$2\]~g;
$message =~ s~(\w+://[^<>\s\n\"\]\[]+)\n([^<>\s\n\"\]\[]+)~$1\n$2~g;
$message =~ s~\[b\](.+?)\[/b\]~$1 ~isg;
$message =~ s~\[i\](.+?)\[/i\]~$1 ~isg;
$message =~ s~\[u\](.+?)\[/u\]~$1 ~isg;
$message =~ s~\[s\](.+?)\[/s\]~$1 ~isg;
$message =~ s~\[move\](.+?)\[/move\]~$1 ~isg;
$message =~ s~\[glow(.*?)\](.*?)\[/glow\]~qq^[glow$1]^ . &elimnests($2) . q^[/glow]^~eisg;
$message =~ s~\[shadow(.*?)\](.*?)\[/shadow\]~qq^[shadow$1]^ . &elimnests($2) . q^[/shadow]^~eisg;
$message =~ s~\[shadow=(\S+?),(.+?),(.+?)\](.+?)\[/shadow\]~q^[&table width=^ . validwidth($3) . qq^ style="filter:shadow\(color=$1, direction=$2\)"\]$4\[/\&table\]^~eisg;
$message =~ s~\[glow=(\S+?),(.+?),(.+?)\](.+?)\[/glow\]~q^[&table width=^ . validwidth($3) . qq^ style="filter:glow\(color=$1, strength=$2\)"\]$4\[/\&table\]^~eisg;
$message =~ s~\[color=([\w#]+)\](.*?)\[/color\]~$2 ~isg;
$message =~ s~\[black\](.*?)\[/black\]~$1 ~isg;
$message =~ s~\[white\](.*?)\[/white\]~$1 ~isg;
$message =~ s~\[red\](.*?)\[/red\]~$1 ~isg;
$message =~ s~\[green\](.*?)\[/green\]~$1 ~isg;
$message =~ s~\[blue\](.*?)\[/blue\]~$1 ~isg;
$message =~ s~\[highlight\](.*?)\[/highlight\]~$1 ~isg;
$message =~ s~\[highlight size=(.*?) color=(.*?) background=(.*?)\](.*?)\[/highlight\]~$4 ~isg;
$message =~ s~\[font=(.+?)\](.+?)\[/font\]~$2 ~isg;
$message =~ s~\[size=(.+?)\](.+?)\[/size\]~$2 ~isg;
$char_160 = chr(160);
$message =~ s~\[img\][\s*\t*\n*( )*($char_160)*]*(http\:\/\/)*(.+?)[\s*\t*\n*( )*($char_160)*]*\[/img\]~ ~isg;
$message =~ s~\[img width=(\d+) height=(\d+)\][\s*\t*\n*( )*($char_160)*]*(http\:\/\/)*(.+?)[\s*\t*\n*( )*($char_160)*]*\[/img\]~restrictimage($1,$2,'http://'.$4)~eisg;
$message =~ s~\[tt\](.*?)\[/tt\]~$1 ~isg;
$message =~ s~\[left\](.+?)\[/left\]~$1
~isg;
$message =~ s~\[center\](.+?)\[/center\]~
$1 ~isg;
$message =~ s~\[right\](.+?)\[/right\]~$1
~isg;
$message =~ s~\[sub\](.+?)\[/sub\]~$1 ~isg;
$message =~ s~\[sup\](.+?)\[/sup\]~$1 ~isg;
$message =~ s~\[fixed\](.+?)\[/fixed\]~$1 ~isg;
$message =~ s~\[hr\]\n~ ~g;
$message =~ s~\[hr\]~ ~g;
$message =~ s~\[br\]~\n~ig;
if( $autolinkurls ) {
$message =~ s~([^\w\"\=\[\]]|[\n\b]|\A)\\*(\w+://[\w\~\.\;\:\,\$\-\+\!\*\?/\=\&\@\#\%]+\.[\w\~\;\:\$\-\+\!\*\?/\=\&\@\#\%]+[\w\~\;\:\$\-\+\!\*\?/\=\&\@\#\%])~$1$2 ~isg;
$message =~ s~([^\"\=\[\]/\:\.(\://\w+)]|[\n\b]|\A)\\*(www\.[^\.][\w\~\.\;\:\,\$\-\+\!\*\?/\=\&\@\#\%]+\.[\w\~\;\:\$\-\+\!\*\?/\=\&\@\#\%]+[\w\~\;\:\$\-\+\!\*\?/\=\&\@\#\%])~$1$2 ~isg;
}
$message =~ s~\[url\]www\.\s*(.+?)\s*\[/url\]~www.$1 ~isg;
$message =~ s~\[url=\s*(\w+\://.+?)\](.+?)\s*\[/url\]~$2 ~isg;
$message =~ s~\[url=\s*(.+?)\]\s*(.+?)\s*\[/url\]~$2 ~isg;
$message =~ s~\[url\]\s*(.+?)\s*\[/url\]~$1 ~isg;
$message =~ s~\[link\]www\.\s*(.+?)\s*\[/link\]~www.$1 ~isg;
$message =~ s~\[link=\s*(\w+\://.+?)\](.+?)\s*\[/link\]~$2 ~isg;
$message =~ s~\[link=\s*(.+?)\]\s*(.+?)\s*\[/link\]~$2 ~isg;
$message =~ s~\[link\]\s*(.+?)\s*\[/link\]~$1 ~isg;
$message =~ s~\[email\]\s*(\S+?\@\S+?)\s*\[/email\]~$1 ~isg;
$message =~ s~\[email=\s*(\S+?\@\S+?)\]\s*(.*?)\s*\[/email\]~$2 ~isg;
$message =~ s~\[news\](.+?)\[/news\]~$1 ~isg;
$message =~ s~\[gopher\](.+?)\[/gopher\]~$1 ~isg;
$message =~ s~\[ftp\](.+?)\[/ftp\]~$1 ~isg;
$message =~ s~\[box+(.*?)\](.*?)\[\/box\]~&box($1,$2)~eisg;
$message =~ s~\[quote\s+author=(.*?)link=(.*?)\s+date=(.*?)\s*\]\n*(.*?)\n*\[/quote\]~"emsg($1,$2,$3,$4)~eisg;
$message =~ s~\[quote\]\n*(.+?)\n*\[/quote\]~&simplequotemsg($1)~eisg;
$message =~ s~\[offtopic\](.+?)\[/offtopic\]~~isg;
$message =~ s~\[haha\](.+?)\[/haha\]~~isg;
# The following tags are by Doctor San #
$message =~ s~\[beg\](.*?)\[/beg\]~~isg;
$message =~ s~\[e191\](.*?)\[/e191\]~~isg;
$message =~ s~\[hehe\](.*?)\[/hehe\]~~isg;
$message =~ s~\[to=(.+?)\](.+?)\[/to\]~~isg;
$message =~ s~\[doctor\](.*?)\[/doctor\]~~isg;
$message =~ s~\[oops\](.*?)\[/oops\]~$santxt{'13'}
$1 $santxt{'13'} $santxt{'13'} $santxt{'13'}
~isg;
$message =~ s~\[sorry\](.*?)\[/sorry\]~~isg;
# end of mod #
$message =~ s~\[san1=(.+?)\](.+?)\[/san1\]~~isg;
$message =~ s~\[san2=(.+?)\](.+?)\[/san2\]~~isg;
$message =~ s~\[san3=(.+?)\](.+?)\[/san3\]~~isg;
$message =~ s~\[san4=(.+?)\](.+?)\[/san4\]~~isg;
$message =~ s~\[san5=(.+?)\](.+?)\[/san5\]~~isg;
$message =~ s~\[san6=(.+?)\](.+?)\[/san6\]~~isg;
#SanSound
if (($action eq "viewprofile" || $action eq "profile2")) {
$char_160 = chr(160);
$message =~ s~\[SanSound\][\s*\t*\n*(?: )*(?:$char_160)*]*(?:http\:\/\/)*(.+?)[\s*\t*\n*(?:&n bsp;)*(?:$char_160)*]*\[/SanSound\]~ $santxt{'28'} ~isog;
} else {
$message =~ s~\[SanSound\](.+?)\[/SanSound\]~~isg;
}
#End of SanSound
#### ironwing commented this stuff out
#more attribute in table tag by Doctor San#
# if( $message =~ m/\[table\]/g or $message =~ m/\[table(.*?)\]/g ) {
# $message =~ s~\[table(.*?)\]~~g;
# $message =~ s~\[tr(.*?)\]~~g;
# $message =~ s~\[td(.*?)\]~~g;
# $message =~ s~\[tr\]~ ~g;
# $message =~ s~\[td\]~~g;
# $message =~ s~\[/td\]~ ~g;
# $message =~ s~\[/tr\]~ ~g;
# $message =~ s~\[/table\]~
~g;
# }
#end more attribute in table tag by Doctor San#
###########################################################
##################### Hidden/Spoiler Mod ####################
#############Copyright ? by Chicano and Darkened##############
##########################################################
$random = 'S'.int(rand(9999));
$message =~ s~\[hidden\](.+?)\[/hidden\]~
$santxt{'23'} $santxt{'24'} :
$1
~isg;
$randomtitle = 'T'.int(rand(9999));
$message =~ s~\[hidden title=(.+?)\](.+?)\[/hidden\]~
$1
$2
~isg;
$randomone = 'one'.int(rand(9999));
$message =~ s~\[hidden style=1\](.+?)\[/hidden\]~
$santxt{'23'} $santxt{'24'} :
$2
~isg;
$message =~ s~\[hidden style=2\](.+?)\[/hidden\]~
$santxt{'23'} $santxt{'25'}
~isg;
$randomtitleoneone = 'T11'.int(rand(9999));
$message =~ s~\[hidden style=1 title=(.+?)\](.+?)\[/hidden\]~
$1
$2
~isg;
# Title + Style 2 (2)
$message =~ s~\[hidden style=2 title=(.+?)\](.+?)\[/hidden\]~
~isg;
###########################################################
##################### Hidden/Spoiler Mod ####################
#################### elchicano99@yahoo.com##################
################## zeke_summers@hotmail.com#################
$message =~ s~\/me\s+(.*)~* $displayname $1 ~ig;
$message =~ s~\[kazip\=(.+?)\](.+?)\[\/kazip\]~&whisper($1,$2)~eisg;
$message =~ s~\[kazip\!(.+?)\](.+?)\[\/kazip\]~&xwhisper($1,$2)~eisg;
# more lists mod
$message =~ s~\[list type=1\](.+?)\[/list\]~$1 ~isg;
$message =~ s~\[list type=a\](.+?)\[/list\]~$1 ~sg;
$message =~ s~\[list type=A\](.+?)\[/list\]~$1 ~isg;
$message =~ s~\[list type=i\](.+?)\[/list\]~$1 ~sg;
$message =~ s~\[list type=I\](.+?)\[/list\]~$1 ~isg;
$message =~ s~\[list type=bullet\](.+?)\[/list\]~~isg;
$message =~ s~\[list type=disc\](.+?)\[/list\]~~isg;
$message =~ s~\[list type=square\](.+?)\[/list\]~~isg;
$message =~ s~\[list\](.+?)\[/list\]~~isg;
$message =~ s~\[\*\]~~isg;
# end more lists mod
$message =~ s~\[pre\](.+?)\[/pre\]~'' . dopre($1) . ' '~iseg;
###### Media Player mod
require "$vardir/mediasettings.txt";
if( $flashtags == 1 ){
$message =~ /\[flash\=(\S+?),(\S+?)](\S+?)\[\/flash\]/;
$width = $1;
$height = $2;
if ($width > 500) { $width = 500; }
if ($height > 500) { $height = 500; }
$message =~ s~\[flash\=(\S+?),(\S+?)](\S+?)\[\/flash\]~ ~g;
}
if ( ( $message =~ m~\[qmedia\=(\S+?),(\S+?),(\S+?)]\s*(.+?)\s*\[\/qmedia\]~ ) || ( $message =~ m~\[media\=(\S+?),(\S+?),(\S+?)]\s*(.+?)\s*\[\/media\]~ ) ) {
require "$sourcedir/Media.pl";
if ( $mediaflag eq 'quote' ) {
$message =~ s~\[qmedia\=(\S+?),(\S+?),(\S+?)]\s*(.+?)\s*\[\/qmedia\]~&MediaTags2($1,$2,$3,$4)~eisg;
$message =~ s~\[media\=(\S+?),(\S+?),(\S+?)]\s*(.+?)\s*\[\/media\]~&MediaTags1($1,$2,$3,$4)~eisg;
} else {
$message =~ s~\[media\=(\S+?),(\S+?),(\S+?)]\s*(.+?)\s*\[\/media\]~&MediaTags1($1,$2,$3,$4)~eisg;
}
}
###### Media Player mod end
### table tag stuff by ironwing
while ( $message =~ m/\[table(.*?)\]/i ) {
$tabletagcontents = $1;
$tabletagcontents =~ s/\cM//g;
$tabletagcontents =~ s~\[([^\]]{0,30})\n([^\]]{0,30})\]~\[$1$2\]~g;
$tabletagcontents =~ s~\[/([^\]]{0,30})\n([^\]]{0,30})\]~\[/$1$2\]~g;
$tabletagcontents =~ s~(\w+://[^<>\s\n\"\]\[]+)\n([^<>\s\n\"\]\[]+)~$1\n$2~g;
&ToHTML($tabletagcontents);
$message =~ s~\[table(.*?)\]~\~i;
}
while ( $message =~ m/\[tr(.*?)\]/i ) {
$tabletagcontents = $1;
$tabletagcontents =~ s/\cM//g;
$tabletagcontents =~ s~\[([^\]]{0,30})\n([^\]]{0,30})\]~\[$1$2\]~g;
$tabletagcontents =~ s~\[/([^\]]{0,30})\n([^\]]{0,30})\]~\[/$1$2\]~g;
$tabletagcontents =~ s~(\w+://[^<>\s\n\"\]\[]+)\n([^<>\s\n\"\]\[]+)~$1\n$2~g;
&ToHTML($tabletagcontents);
$message =~ s~\[tr(.*?)\]~\~i;
}
while( $message =~ m/\[td(.*?)\]/i ) {
$tabletagcontents = $1;
$tabletagcontents =~ s/\cM//g;
$tabletagcontents =~ s~\[([^\]]{0,30})\n([^\]]{0,30})\]~\[$1$2\]~g;
$tabletagcontents =~ s~\[/([^\]]{0,30})\n([^\]]{0,30})\]~\[/$1$2\]~g;
$tabletagcontents =~ s~(\w+://[^<>\s\n\"\]\[]+)\n([^<>\s\n\"\]\[]+)~$1\n$2~g;
&ToHTML($tabletagcontents);
$message =~ s~\[td(.*?)\]~\~i;
}
$message =~ s~\[/td\]~ ~ig;
$message =~ s~\[/tr\]~ ~ig;
$message =~ s~\[/table\]~
~ig;
### table test stuff by ironwing end
#### ironwing temporarily conmmented this stuff out
# if( $message =~ m~\[table\]\s*(.+?)\s*\[tr\]~i ) {
# while( $message =~ s~(.*?)\[table\](.*?)\[/table\](.*?) ~$1$3 ~s ) {}
# while( $message =~ s~(.*?)\[table\](.*?) (.*?)\[/table\]~$1\[//table\]$2 $3\[//table\]~s ) {}
# while( $message =~ s~\[table\](.*?)(.*?)\[/table\](.*?) ~\[//table\]$1$2\[//table\]$3 ~s ) {}
# $message =~ s~\n{0,1}\[table\]\n*(.+?)\n*\[/table\]\n{0,1}~~isg;
# while( $message =~ s~\(.*?)\n*\[tr\]\n*(.*?)\n*\[/tr\]\n*(.*?)\
~~is ) {}
# while( $message =~ s~\(.*?)\n*\[td\]\n{0,1}(.*?)\n{0,1}\[/td\]\n*(.*?)\ ~$1$2 $3 ~is ) {}
# }
################
while( $message =~ s~]*?)\n([^>]*)>~ ~ ) {}
while( $message =~ s~ ]*)>([^<]*?)\n([^<]*) ~$2$3 ~ ) {}
while( $message =~ s~]*?)&([^>]*)>~ ~ ) {}
while( $message =~ s~ ]*?)\n([^>]*)>~ ~ ) {}
while( $message =~ s~ ]*?)&([^>]*)>~ ~ ) {}
$message =~ s~\[\&table(.*?)\]~ ~g;
$message =~ s~\[/\&table\]~
~g;
$message =~ s~\n~ ~ig;
}
1;