F:\WEBSITES\testbed\zipped\yabb_svn_new\branches\2.5.2\cgi-bin\yabb2\Sources\YaBBC.pl F:\WEBSITES\testbed\zipped\yabb_svn_new\trunk\cgi-bin\yabb2\Sources\YaBBC.pm
############################################################################### ###############################################################################
# YaBBC.pl                                                                    # # YaBBC.pm                                                                    #
  # $Date: 01.05.16 $                                                           #
############################################################################### ###############################################################################
# YaBB: Yet another Bulletin Board                                            # # YaBB: Yet another Bulletin Board                                            #
# Open-Source Community Software for Webmasters                               # # Open-Source Community Software for Webmasters                               #
# Version:        YaBB 2.5.2                                                  # # Version:        YaBB 2.6.12                                                 #
# Packaged:       October 21, 2012                                            # # Packaged:       January 5, 2016                                             #
# Distributed by: http://www.yabbforum.com                                    # # Distributed by: http://www.yabbforum.com                                    #
# =========================================================================== # # =========================================================================== #
# Copyright (c) 2000-2012 YaBB (www.yabbforum.com) - All Rights Reserved.     # # Copyright (c) 2000-2016 YaBB (www.yabbforum.com) - All Rights Reserved.     #
# Software by:  The YaBB Development Team                                     # # Software by:  The YaBB Development Team                                     #
#               with assistance from the YaBB community.                      # #               with assistance from the YaBB community.                      #
############################################################################### ###############################################################################
  our $VERSION = '2.6.12';
   
$yabbcplver = 'YaBB 2.5.2 $Revision: 1.1 $'; $yabbcpmver = 'YaBB 2.6.12 $Revision: 1651 $';
if ($action eq 'detailedversion') { return 1; } if ( $action eq 'detailedversion' ) { return 1; }
   
&LoadLanguage('Post');  LoadLanguage('Post'); 
   
$yyYaBBCloaded = 1; $yyYaBBCloaded = 1;
   
sub MakeSmileys { sub MakeSmileys {
   my $message = join "", @_;    my ($inp) = @_;
   my $i = 0;     my $message = join q{}, $inp; 
   my @HTMLtags;     my $i = 0; 
   while ($message =~ s/(<.+?>)/[HTML$i]/s) { push(@HTMLtags, $1); $i++; }     my @HTMLtags; 
     while ( $message =~ s/(<.+?>)/[HTML$i]/sm ) { push @HTMLtags, $1; $i++; }
   $message =~ s/(\W|^)\[smil(ie|ey)=(\S+?\.(gif|jpg|png|bmp))\]/$1<img src="$smiliesurl\/$3" border="0" alt="$post_txt{'287'}" title="$post_txt{'287'}" \/>/ig;  
   $message =~ s/(\W|^);-?\)/$1<img src="$imagesdir\/wink.gif" border="0" alt="$post_txt{'292'}" title="$post_txt{'292'}" \/>/g;     $message =~ s~(\W|^)\[smil(ie|ey)=(\S+?\.(gif|jpg|png|bmp))\]~$1<img class="smil" data-rel="\[smil$2=$3\]" src="$yyhtml_root/Smilies/$3" alt="$post_txt{'287'}" title="$post_txt{'287'}" />~gism; 
   $message =~ s/(\W|^);D/$1<img src="$imagesdir\/grin.gif" border="0" alt="$post_txt{'293'}" title="$post_txt{'293'}" \/>/g;     $message =~ s~(\W|^);-?\)~$1<img class="smil" data-rel=";&#45;&#41;" src="$defaultimagesdir/wink.gif" alt="$post_txt{'292'}" title="$post_txt{'292'}" />~gsm; 
   $message =~ s/(\W|^):'\(/$1<img src="$imagesdir\/cry.gif" border="0" alt="$post_txt{'530'}" title="$post_txt{'530'}" \/>/g; #' make my text editor happy;     $message =~ s~(\W|^);D~$1<img class="smil" data-rel=";D" src="$defaultimagesdir/grin.gif" alt="$post_txt{'293'}" title="$post_txt{'293'}" />~gsm; 
   $message =~ s/(\W|^):-\//$1<img src="$imagesdir\/undecided.gif" border="0" alt="$post_txt{'528'}" title="$post_txt{'528'}" \/>/g;     $message =~ s~(\W|^):\x27\(~$1<img class="smil" data-rel="&#58;\x27&#40;" src="$defaultimagesdir/cry.gif" alt="$post_txt{'530'}" title="$post_txt{'530'}" />~gsm; 
   $message =~ s/(\W|^):-X/$1<img src="$imagesdir\/lipsrsealed.gif" border="0" alt="$post_txt{'527'}" title="$post_txt{'527'}" \/>/g;     $message =~ s~(\W|^):-/~$1<img class="smil" data-rel="&#58;&#45;/" src="$defaultimagesdir/undecided.gif" alt="$post_txt{'528'}" title="$post_txt{'528'}" />~gsm; 
   $message =~ s/(\W|^):-\[/$1<img src="$imagesdir\/embarassed.gif" border="0" alt="$post_txt{'526'}" title="$post_txt{'526'}" \/>/g;     $message =~ s~(\W|^):-X~$1<img class="smil" data-rel="&#58;&#45;X" src="$defaultimagesdir/lipsrsealed.gif" alt="$post_txt{'527'}" title="$post_txt{'527'}" />~gsm; 
   $message =~ s/(\W|^):-\*/$1<img src="$imagesdir\/kiss.gif" border="0" alt="$post_txt{'529'}" title="$post_txt{'529'}" \/>/g;     $message =~ s~(\W|^):-\[~$1<img class="smil" data-rel="&#58;&#45;\[" src="$defaultimagesdir/embarassed.gif" alt="$post_txt{'526'}" title="$post_txt{'526'}" />~gsm; 
   $message =~ s/(\W|^)&gt;:\(/$1<img src="$imagesdir\/angry.gif" border="0" alt="$post_txt{'288'}" title="$post_txt{'288'}" \/>/g;     $message =~ s~(\W|^):-\*~$1<img class="smil" data-rel="&#58;&#45;\*" src="$defaultimagesdir/kiss.gif" alt="$post_txt{'529'}" title="$post_txt{'529'}" />~gsm; 
   $message =~ s/(\W|^)::\)/$1<img src="$imagesdir\/rolleyes\.gif" border="0" alt="$post_txt{'450'}" title="$post_txt{'450'}" \/>/g;     $message =~ s~(\W|^)&gt;:\(~$1<img class="smil" data-rel="&gt;:&#40;" src="$defaultimagesdir/angry.gif" alt="$post_txt{'288'}" title="$post_txt{'288'}" />~gsm; 
   $message =~ s/(\W|^):P/$1<img src="$imagesdir\/tongue\.gif" border="0" alt="$post_txt{'451'}" title="$post_txt{'451'}" \/>/g;     $message =~ s~(\W|^)::\)~$1<img class="smil" data-rel="&#58;&#58;&#41;" src="$defaultimagesdir/rolleyes.gif" alt="$post_txt{'450'}" title="$post_txt{'450'}" />~gsm; 
   $message =~ s/(\W|^):-?\)/$1<img src="$imagesdir\/smiley\.gif" border="0" alt="$post_txt{'287'}" title="$post_txt{'287'}" \/>/g;     $message =~ s~(\W|^):P~$1<img class="smil" data-rel=":P" src="$defaultimagesdir/tongue.gif" alt="$post_txt{'451'}" title="$post_txt{'451'}" />~gsm; 
   $message =~ s/(\W|^):D/$1<img src="$imagesdir\/cheesy.gif" border="0" alt="$post_txt{'289'}" title="$post_txt{'289'}" \/>/g;     $message =~ s~(\W|^):-?\)~$1<img class="smil" data-rel="&#58;&#45;&#41;" src="$defaultimagesdir/smiley.gif" alt="$post_txt{'287'}" title="$post_txt{'287'}" />~gsm; 
   $message =~ s/(\W|^):-?\(/$1<img src="$imagesdir\/sad.gif" border="0" alt="$post_txt{'291'}" title="$post_txt{'291'}" \/>/g;     $message =~ s~(\W|^):D~$1<img class="smil" data-rel="&#58;D" src="$defaultimagesdir/cheesy.gif" alt="$post_txt{'289'}" title="$post_txt{'289'}" />~gsm; 
   $message =~ s/(\W|^):o/$1<img src="$imagesdir\/shocked.gif" border="0" alt="$post_txt{'294'}" title="$post_txt{'294'}" \/>/gi;     $message =~ s~(\W|^):-?\(~$1<img class="smil" data-rel="&#58;&#45;&#40;" src="$defaultimagesdir/sad.gif" alt="$post_txt{'291'}" title="$post_txt{'291'}" />~gsm; 
   $message =~ s/(\W|^)8-\)/$1<img src="$imagesdir\/cool.gif" border="0" alt="$post_txt{'295'}" title="$post_txt{'295'}" \/>/g;     $message =~ s~(\W|^):o~$1<img class="smil" data-rel="&#58;o" src="$defaultimagesdir/shocked.gif" alt="$post_txt{'294'}" title="$post_txt{'294'}" />~gism; 
   $message =~ s/(\W|^):-\?/$1<img src="$imagesdir\/huh.gif" border="0" alt="$post_txt{'296'}" title="$post_txt{'296'}" \/>/g;     $message =~ s~(\W|^)8-\)~$1<img class="smil" data-rel="8-&#41;" src="$defaultimagesdir/cool.gif" alt="$post_txt{'295'}" title="$post_txt{'295'}" />~gsm; 
   $message =~ s/(\W|^)\^_\^/$1<img src="$imagesdir\/happy.gif" border="0" alt="$post_txt{'801'}" title="$post_txt{'801'}" \/>/g;     $message =~ s~(\W|^):-\?~$1<img class="smil" data-rel="&#58;-\?" src="$defaultimagesdir/huh.gif" alt="$post_txt{'296'}" title="$post_txt{'296'}" />~gsm; 
   $message =~ s/(\W|^):thumb:/$1<img src="$imagesdir\/thumbsup.gif" border="0" alt="$post_txt{'282'}" title="$post_txt{'282'}" \/>/g;     $message =~ s~(\W|^)\^_\^~$1<img class="smil" data-rel="\^_\^" src="$defaultimagesdir/happy.gif" alt="$post_txt{'801'}" title="$post_txt{'801'}" />~gsm; 
   $message =~ s/(\W|^)&gt;:-D/$1<img src="$imagesdir\/evil.gif" border="0" alt="$post_txt{'802'}" title="$post_txt{'802'}" \/>/g;     $message =~ s~(\W|^):thumb~$1<img class="smil" data-rel="&#58;thumb" src="$defaultimagesdir/thumbup.gif" alt="$post_txt{'282'}" title="$post_txt{'282'}" />~gsm; 
     $message =~ s~(\W|^)&gt;:-D~$1<img class="smil" data-rel="&gt;&#58;-D" src="$defaultimagesdir/evil.gif" alt="$post_txt{'802'}" title="$post_txt{'802'}" />~gsm;
   my $count = 0;  
   while ($SmilieURL[$count]) {     my $count = 0; 
       if ($SmilieURL[$count] =~ /\//i) { $tmpurl = $SmilieURL[$count]; }     while ($SmilieURL[$count]) { 
       else { $tmpurl = qq~$imagesdir/$SmilieURL[$count]~; }        if ( $SmilieURL[$count] =~ /\//ixsm ) { $tmpurl = $SmilieURL[$count]; }
       $tmpcode = $SmilieCode[$count];         else { $tmpurl = qq~$imagesdir/$SmilieURL[$count]~; } 
       $tmpcode =~ s/&#36;/\$/g;         $tmpcode = $SmilieCode[$count]; 
       $tmpcode =~ s/&#64;/\@/g;         $tmpcode =~ s/&\x2336;/\$/gxsm; 
       $message =~ s~\Q$tmpcode\E~<img src="$tmpurl" border="0" alt="$SmilieDescription[$count]" title="$SmilieDescription[$count]" />~g;         $tmpcode =~ s/&\x2364;/\@/gxsm; 
       $count++;         $message =~ s/\Q$tmpcode\E/<img class="smil" data-rel="$SmilieCode[$count]" src="$tmpurl" alt="$SmilieDescription[$count]" title="$SmilieDescription[$count]" \/>/gsm; 
   }         $count++; 
     }
   
   $i = 0;    $i = 0;
   while ($message =~ s/\[HTML$i\]/$HTMLtags[$i]/s) { $i++; }    while ( $message =~ s/\[HTML$i\]/$HTMLtags[$i]/xsm ) { $i++; }
   
   return $message;    return $message;
} }
   
  @ycssvalues  = qw ( quote quote2 );
  $ycssnum     = 2;
  $ycsscounter = 2;
  $qid_cnt     = 0;
   
sub quotemsg { sub quotemsg {
   my ($qauthor, $qlink, $qdate, $qmessage) = @_;    my ( $qauthor, $qlink, $qdate, $qmessage ) = @_;
   my ($testauthor,$fqauthor);     my ( $testauthor, $fqauthor ); 
   if ($qauthor) {  
       $usernames_life_quote{'temp_quote_autor'} = $qauthor; # for display names in Quotes in LivePreview  
       &ToChars($qauthor);  
       if (!-e "$memberdir/$qauthor.vars"){ # if the file is there it is an unencrypted user ID  
           $qauthor = &decloak($qauthor); # if not, decrypt it and see if it is a regged user  
           if (!-e "$memberdir/$qauthor.vars"){ # if still not found probably the author is a screen name  
               $testauthor = &MemberIndex("who_is", "$qauthor"); # check if this name exists in the memberlist  
               if ($testauthor ne ""){ # if it is, load the user id returned  
                   $qauthor = $testauthor;  
                   &LoadUser($qauthor);  
                   $fqauthor = ${$uid.$qauthor}{'realname'}; # set final author var to the current users screen name  
               } else {  
                   $fqauthor = &decloak($qauthor); # if all fails it is a non existing real name so decode and asign as screenname  
               }  
           } else {  
               &LoadUser($qauthor); # after encoding the user ID was found and loaded, setting the current real name  
               $fqauthor = ${$uid.$qauthor}{'realname'};  
           }  
       } else {  
           &LoadUser($qauthor); # it was an old style user id which could be loaded and screen name set to final author  
           $fqauthor = ${$uid.$qauthor}{'realname'};  
       }  
       $qmessage =~ s~\/me\s+(.*?)(\n|\Z)(.*?)~<i><span style="color: #FF0000;"><b>$fqauthor</b><\/span> $1<\/i>$2$3~ig;  
   }  
   # next 2 lines: for display names in Quotes in LivePreview  
   $usernames_life_quote{$usernames_life_quote{'temp_quote_autor'}} = $fqauthor;  
   delete $usernames_life_quote{'temp_quote_autor'};  
   
   $qmessage = &parseimgflash($qmessage);  
   $qdate    = &timeformat($qdate); # generates also the global variable $daytxt  
   if ($fqauthor eq '' || $qlink eq '' || $qdate eq '') { $_ = $post_txt{'601'}; }  
   elsif ($qlink eq 'impost') {  
       $_ = $daytxt ? $post_txt{'600a_d'} : $post_txt{'600a'};  
       $_ =~ s~AUTHOR2~$scripturl?action=viewprofile;username=$useraccount{$qauthor}~g; }  
   elsif ($action ne 'imshow' && $action ne 'imsend' && $action ne 'imsend2') { $_ = $daytxt ? $post_txt{'600_d'} : $post_txt{'600'}; }  
   else  { $_ = $daytxt ? $post_txt{'599_d'} : $post_txt{'599'}; }  
   $_ =~ s~AUTHOR~$fqauthor~g;  
   $_ =~ s~QUOTELINK~$scripturl?num=$qlink~g;  
   $_ =~ s~DATE~$qdate~g;  
   $_ =~ s~QUOTE~$qmessage~g;  
   $_;  
}  
   
sub parseimgflash {     $qid = $qauthor . $qid_cnt; 
   my $tmp_message = $_[0];     $qid_cnt++; 
   $tmp_message =~ s~\[flash\=(\S+?),(\S+?)](\S+?)\[\/flash\]~<b>$display_txt{'769'} ($1 x $2):</b> <a href="$3" target="_blank" onclick="window.open('$3', 'flash', 'resizable,width=$1,height=$2'); return false;">>$3</a>~g;  
   my $char_160  = chr(160);     if ($qauthor) { 
   my $hardspace = qq~&nbsp;~;         $usernames_life_quote{'temp_quote_autor'} = 
   if (!$showimageinquote) {           $qauthor;    # for display names in Quotes in LivePreview 
       $tmp_message =~ s~\[img (.+?)\]~[img\]~isg;         ToChars($qauthor); 
       $tmp_message =~ s~\[img\](?:\s|\t|\n|$hardspace|$char_160)*(http\:\/\/)*(.+?)(?:\s|\t|\n|$hardspace|$char_160)*\[/img\]~\[url\]$1$2\[\/url\]~isg;         if ( !-e "$memberdir/$qauthor.vars" ) 
   }         {              # if the file is there it is an unencrypted user ID 
   $tmp_message;             $qauthor = decloak($qauthor); 
   
             # if not, decrypt it and see if it is a registered user
             if ( !-e "$memberdir/$qauthor.vars" )
             {          # if still not found probably the author is a screen name
                 $testauthor = MemberIndex( 'check_exist', "$qauthor" );
   
                 # check if this name exists in the memberlist
                 if ( $testauthor ne q{} )
                 {      # if it is, load the user id returned
                     $qauthor = $testauthor;
                     LoadUser($qauthor);
                     $fqauthor = ${ $uid . $qauthor }{'realname'};
   
                     # set final author var to the current users screen name
                 }
                 else {
                     $fqauthor = decloak($qauthor);
   
  # if all fails it is a non-existent real name so decode and assign as screenname
                 }
             }
             else {
                 LoadUser($qauthor);
   
  # after encoding the user ID was found and loaded, setting the current real name
                 $fqauthor = ${ $uid . $qauthor }{'realname'};
             }
         }
         else {
             LoadUser($qauthor);
   
  # it was an old style user id which could be loaded and screen name set to final author
             $fqauthor = ${ $uid . $qauthor }{'realname'};
         }
         $qmessage =~ s/\/me\s+(.*?)(\n|\Z)(.*?)/<i><span class="my_me">* $fqauthor<\/span> $1<\/i>$2$3/igsm;
     }
   
     # next 2 lines: for display names in Quotes in LivePreview
     $usernames_life_quote{ $usernames_life_quote{'temp_quote_autor'} } =
       $fqauthor;
     delete $usernames_life_quote{'temp_quote_autor'};
   
     $qmessage = parseimgflash($qmessage);
     $qdate = timeformat($qdate,0,0,0,1);    # generates also the global variable $daytxt
     $cssbg = $ycssvalues[ ( $ycsscounter % $ycssnum ) ];
     $ycsscounter++;
     if ( $fqauthor eq q{} || $qlink eq q{} || $qdate eq q{} ) {
         $_ = $post_txt{'601'};
     }
     elsif ( $qlink eq 'impost' ) {
         $_ = $daytxt ? $post_txt{'600a_d'} : $post_txt{'600a'};
         $_ =~ s/AUTHOR2/$scripturl?action=viewprofile;username=$useraccount{$qauthor}/gxsm;
     }
     elsif ( $action ne 'imshow' && $action ne 'imsend' && $action ne 'imsend2' )
     {
         $_ = $daytxt ? $post_txt{'600_d'} : $post_txt{'600'};
     }
     else { $_ = $daytxt ? $post_txt{'599_d'} : $post_txt{'599'}; }
     $_ =~ s/AUTHOR/$fqauthor/gxsm;
     $_ =~ s/QUOTELINK/$scripturl?num=$qlink/gxsm;
     $_ =~ s/DATE/$qdate/gxsm;
     $_ =~ s/QUOTE/$qmessage/gxsm;
     $_ =~ s/QID/$qid/gxsm;
     $_ =~ s/QEND/<!--$qid-->/gxsm;
     return $_;
} }
   
sub sizefont { sub parseimgflash {
   ## limit minimum and maximum font pitch as CSS does not restrict it at all. ##     my ($tmp_message) = @_; 
   my ($tsize, $ttext) = @_;     $tmp_message =~ 
   if    (!$fontsizemax)         { $fontsizemax = 72; }  s/\[flash\=(\S+?),(\S+?)](\S+?)\[\/flash\]/<b>$display_txt{'769'} ($1 x $2):<\/b> <a href="$3" target="_blank" onclick="window.open('$3', 'flash', 'resizable,width=$1,height=$2'); return false;">>$3<\/a>/gxsm; 
   if    (!$fontsizemin)         { $fontsizemin = 6; }     my $char_160  = chr 160; 
   if    ($tsize < $fontsizemin) { $tsize       = $fontsizemin; }     my $hardspace = q~&nbsp;~; 
   elsif ($tsize > $fontsizemax) { $tsize       = $fontsizemax; }      if ( !$showimageinquote || ( ${ $uid . $username }{'hide_img'} && $user_hide_img ) ) { 
   return qq~<div style="display:inline; font-size:$tsize\pt;">$ttext</div>~;         $tmp_message =~ s/\[img (.+?)\]/[img\]/igsm; 
         $tmp_message =~ s/\[img\](?:\s|\t|\n|$hardspace|$char_160)*(http\:\/\/)*(.+?)(?:\s|\t|\n|$hardspace|$char_160)*\[\/img\]/\[url\]$1$2\[\/url\]/igsm;
     }
     return $tmp_message;
} }
   
{ {
   my %killhash = (    my %killhash = (
       ';'  => '&#059;',        q{;}  => '&#059;',
       '!'  => '&#33;',        q{!}  => '&#33;',
       '('  => '&#40;',        q{(}  => '&#40;',
       ')'  => '&#41;',        q{)}  => '&#41;',
       '-'  => '&#45;',        q{-}  => '&#45;',
       '.'  => '&#46;',        q{.}  => '&#46;',
       '/'  => '&#47;',        q{/}  => '&#47;',
       ':'  => '&#58;',        q{:}  => '&#58;',
       '?'  => '&#63;',        q{?}  => '&#63;',
       '['  => '&#91;',        q{[}  => '&#91;',
       '\\' => '&#92;',        q{\\} => '&#92;',
       ']'  => '&#93;',        q{]}  => '&#93;',
       '^'  => '&#94;',        q{^}  => '&#94;',
       'D'  => '&#068;'         'D'   => '&#068;', 
       );    );
   
   sub codemsg {     $codecnt = 0; 
       my $code = $_[0];  
       my $class = $_[1];     sub codemsg { 
       my $prclass = "";         my ( $code, $class ) = @_; 
       if(lc $class eq "c++") { $insclass = "sh_cpp"; $prclass = " (C++)"; }         my @codeclass = ( 
       elsif(lc $class eq "css") { $insclass = "sh_css"; $prclass = " (CSS)"; }             [ 
       elsif(lc $class eq "html") { $insclass = "sh_html"; $prclass = " (HTML)"; }                 'c++',        'css',    'html', 'java', 
       elsif(lc $class eq "java") { $insclass = "sh_java"; $prclass = " (Java)"; }                 'javascript', 'pascal', 'perl', 'php', 
       elsif(lc $class eq "javascript") { $insclass = "sh_javascript"; $prclass = " (Javascript)"; }                 'sql', 
       elsif(lc $class eq "pascal") { $insclass = "sh_pascal"; $prclass = " (Pascal)"; }             ], 
       elsif(lc $class eq "perl") { $insclass = "sh_perl"; $prclass = " (Perl)"; }             [ 
       elsif(lc $class eq "php") { $insclass = "sh_php"; $prclass = " (PHP)"; }                 'sh_cpp',        'sh_css',    'sh_html', 'sh_java', 
       elsif(lc $class eq "sql") { $insclass = "sh_sql"; $prclass = " (SQL)"; }                 'sh_javascript', 'sh_pascal', 'sh_perl', 'sh_php', 
       else { $insclass = "code"; }                 'sh_sql', 
       &ToChars($code);             ], 
       if ($code !~ /&\S*;/) { $code =~ s/;/&#059;/g; }             [ 
       $code =~ s~([\(\)\-\:\\\/\?\!\]\[\.\^\.D])~$killhash{$1}~g;                 ' (C++)', 
       $code =~ s~\&\#91\;highlight\&\#93\;(.*?)\&\#91\;\&\#47\;highlight\&\#93\;~<span class="highlight">$1</span>~isg;                 ' (CSS)', 
       $_ = $post_txt{'602'};                 ' (HTML)', 
                 ' (Java)',
       # Thx. to Michael Prager for the improved Code boxes                 ' (Javascript)', 
       # count lines in code                 ' (Pascal)', 
       $linecount = () = $code =~ /\n/g;                 ' (Perl)', 
                 ' (PHP)',
       # if more that 20 lines then limit code box height                 ' (SQL)' 
       if ($linecount > 20) {             ], 
           $height = "height: 300px;";         ); 
       } else {         my $insclass = 'code'; 
           $height = "";         my $prclass  = q{}; 
       }         foreach my $i ( 0 .. 8 ) { 
             my $img0 = $codeclass[0]->[$i];
       # try to display text as it was originally intended             my $img1 = $codeclass[1]->[$i]; 
       $code =~ s~ \&nbsp; \&nbsp; \&nbsp;~\t~ig;             my $img2 = $codeclass[2]->[$i]; 
       $code =~ s~\&nbsp;~ ~ig;             if ( lc $class eq $img0 ) { 
       $code =~ s~\s*?\n\s*?~\[code_br\]~ig; # we need to keep normal linebreaks inside <pre> tag                 $insclass = $img1; 
       $code = qq~<pre class="$insclass" style="margin: 0px; width: 90%; $height overflow: scroll;">$code\[code_br][code_br]</pre>~;                 $prclass  = $img2; 
       $_ =~ s~XLANGX~$prclass~g;             } 
       $_ =~ s~CODE~$code~g;         } 
       $_;         ToChars($code); 
   }        if ( $code !~ /&\S*;/gsm ) { $code =~ s/;/&\x23059;/gsm; }
         $code =~ s/([\(\)\-\:\\\/\?\!\]\[\.\^\.D])/$killhash{$1}/gxsm;
   sub noparse {         $code =~ s/\&\#91\;highlight\&\#93\;(.*?)\&\#91\;\&\#47\;highlight\&\#93\;/<span class="highlight">$1<\/span>/isgxsm; 
       my $noubbc = $_[0];         $_ = $post_txt{'602'}; 
       $noubbc =~ s~([;!\(\)\-\.\/:\?\[\\\]\^D])~$killhash{$1}~g;  
       return $noubbc;         # Thx. to Michael Prager for the improved Code boxes 
   }         # count lines in code 
         $linecount = () = $code =~ /\n/gxsm;
   
         # if more that 20 lines then limit code box height
         if ( $linecount > 20 ) {
             $height = 'height: 300px;';
         }
         else {
             $height = q{};
         }
   
         # try to display text as it was originally intended
         $code =~ s/ \&nbsp; \&nbsp; \&nbsp;/\t/igsm;
         $code =~ s/\&nbsp;/ /igxsm;
         $code =~ s/\s*?\n\s*?/\[code_br\]/igxsm;
   
         # we need to keep normal linebreaks inside <pre> tag
         $code =~ s/&quot;&gt;/\[code_qgt\]/igxsm;
         $codecnt++;
         if ( $guest_media_disallowed && $iamguest ) {
             $prselect = q{};
         }
         else {
             $prselect =
  qq~<a href="javascript:selectAllCode($codecnt)"><img src="$imagesdir/codeselect.png" alt="$post_txt{'selectall'}" title="$post_txt{'selectall'}" /></a>~;
         }
   
         $code =
  qq~<pre class="$insclass" id="code$codecnt">$code\[code_br][code_br]</pre>~;
         $_ =~ s/XSELECTX/$prselect/gxsm;
         $_ =~ s/XLANGX/$prclass/gxsm;
         $_ =~ s/CODE/$code/gxsm;
         return $_;
     }
   
     sub noparse {
         my ($noubbc) = @_;
         $noubbc =~ s/([!\(\)\-\.\/:\?\[\\\]\^D])/$killhash{$1}/gxsm;
         return $noubbc;
     }
} }
   
sub imagemsg { sub imagemsg {
   my ($rest,$attribut,$url,$type) = @_;    my ( $rest, $attribut, $url, $type ) = @_;
   # use or kill urls  
   $url =~ s~\[url\](.*?)\[/url\]~$1~ig;  
   $url =~ s~\[link\](.*?)\[/link\]~$1~ig;  
   $url =~ s~\[url\s*=\s*(.*?)\s*.*?\].*?\[/url\]~$1~ig;  
   $url =~ s~\[link\s*=\s*(.*?)\s*.*?\].*?\[/link\]~$1~ig;  
   $url =~ s~\[url.*?/url\]~~ig;  
   $url =~ s~\[link.*?/link\]~~ig;  
   
   my $char_160 = chr(160);  
   $url =~ s/\s|\?|&nbsp;|$char_160//g;  
   
   if ($url !~ /^http.+\.(gif|jpg|jpeg|png|bmp)$/i) {return $rest . $url;}  
   
   my %parameter;  
   &FromHTML($attribut);  
   $attribut =~ s/(\s|$char_160)+/ /g;  
   foreach (split(/ +/, $attribut)) {  
       my ($key, $value) = split(/=/, $_);  
       $value =~ s/["']//g; #" make my text editor happy;  
       $parameter{$key} = $value;  
   }  
   
   $parameter{'name'} = $type ? 'signat_img_resize' : 'post_img_resize';  
   $parameter{'alt'} =~ s/[<>"]/*/g; #" make my text editor happy;  
   $parameter{'alt'} ||= "...";  
   $parameter{'align'}  =~ s~[^a-z]~~ig;  
   $parameter{'width'}  =~ s~\D~~g;  
   $parameter{'height'} =~ s~\D~~g;  
   if ($parameter{'align'})  { $parameter{'align'}  = qq~ align="$parameter{'align'}"~; }  
   if ($parameter{'width'})  { $parameter{'width'}  = qq~ width="$parameter{'width'}"~; }  
   if ($parameter{'height'}) { $parameter{'height'} = qq~ height="$parameter{'height'}"~; }  
   
   my $linkedimg = $rest =~ /\[url[^\[]*\]\s*$/i ? 1 : 0;     # use or kill urls 
   $rest . ((!$linkedimg && $img_greybox) ? qq~<a href="$url" rel="gb_image[nice_pics]" title="$parameter{'alt'}">~ : '') . qq~<img src="$url" name="$parameter{'name'}" alt="$parameter{'alt'}" title="$parameter{'alt'}"$parameter{'align'}$parameter{'width'}$parameter{'height'} border="0" style="display:none" />~ . ((!$linkedimg && $img_greybox) ? '</a>' : '');     $url =~ s/\[url\](.*?)\[\/url\]/$1/igxsm; 
     $url =~ s/\[link\](.*?)\[\/link\]/$1/igxsm;
     $url =~ s/\[url\s*=\s*(.*?)\s*.*?\].*?\[\/url\]/$1/igxsm;
     $url =~ s/\[link\s*=\s*(.*?)\s*.*?\].*?\[\/link\]/$1/igxsm;
     $url =~ s/\[url.*?\/url\]//igxsm;
     $url =~ s/\[link.*?\/link\]//igxsm;
   
     my $char_160 = chr 160;
     $url =~ s/\s|\?|&nbsp;|$char_160//gxsm;
   
     if ( $url !~ /^http.+\.(gif|jpg|jpeg|png|bmp)$/ixsm ) {
         return $rest . $url;
     }
   
     my %parameter;
     FromHTML($attribut);
     $attribut =~ s/(\s|$char_160)+/ /gxsm;
   
     *altconv = sub {
         my ( $attfirst, $attalt, $attlast ) = @_;
         $attalt =~ s/\s/_/gxsm;
         $attfirst . qq~ alt=$attalt $attlast~;
     };
     $attribut =~ s/(.*?)alt=(.+?)(\s\S+=|\Z)/ altconv($1,$2,$3)/eisgxm;
     foreach ( split / +/sm, $attribut ) {
         my ( $key, $value ) = split /=/sm, $_;
         $value =~ s/[\x22\x27]//gxsm;
         $parameter{$key} = $value;
     }
   
     my $use_greybox = $img_greybox;
     if (   $action eq 'ajxmessage' 
         || $action eq 'ajximmessage' 
         || $action eq 'ajxcal' )
     {
         $parameter{'name'} = q~class="liveimg" name="post_liveimg_resize"~;
         $use_greybox = 0;
     }
     elsif ( $action eq 'eventcal' ) {
         $parameter{'name'} = q~id="post_img_resize"~;
     }
     else {
         $parameter{'name'} =
           $type ? q~id="signat_img_resize"~ : q~id="post_img_resize"~;
     }
   
     $parameter{'alt'} =~ s/[<>"]/*/gxsm;
     $parameter{'alt'} =~ s/_/ /gxsm;
     if ( $url =~ /([^\/]+?)$/xsm ) {
         $parameter{'alt'} ||= $1;
     }
     $parameter{'align'}  =~ s/[^a-z]//igxsm;
     $parameter{'width'}  =~ s/\D//gxsm;
     $parameter{'height'} =~ s/\D//gxsm;
     if ( $parameter{'align'} ) {
         $parameter{'align'} = qq~ style="vertical-align:$parameter{'align'}"~;
     }
     if ( $parameter{'width'} ) {
         $parameter{'width'} = qq~ width="$parameter{'width'}"~;
     }
     if ( $parameter{'height'} ) {
         $parameter{'height'} = qq~ height="$parameter{'height'}"~;
     }
   
     my $linkedimg = $rest =~ /\[url[^\[]*\]\s*$/ism ? 1 : 0;
     return $rest
       . (
         ( !$linkedimg && $use_greybox )
         ? qq~<a href="$url" data-rel="gb_image[nice_pics]" title="$parameter{'alt'}">~
         : q{}
       )
       . qq~<img src="$url" $parameter{'name'} alt="$parameter{'alt'}" title="$parameter{'alt'}"$parameter{'align'}$parameter{'width'}$parameter{'height'} style="display:none" />~
       . ( ( !$linkedimg && $img_greybox ) ? '</a>' : q{} );
} }
   
#greybox image bug fixed; #greybox image bug fixed;
sub DoUBBC { sub DoUBBC {
   my $image_type = $_[0];     my ($image_type) = @_; 
   if ( $ns eq 'NS' || $message =~ s/#nosmileys//isgm ) { return $message; }     $ycsscounter = 2; 
     if ( $ns eq 'NS' || $message =~ s/\x23nosmileys//isgm ) { return $message; }
     if ( ${ $uid . $username }{'hide_img'} && $user_hide_img ) { $message = parseimgflash($message); }
   $message =~ s/\[noparse\](.*?)(\[\/noparse\]|$)/noparse($1)/eisgm;    $message =~ s/\[noparse\](.*?)(\[\/noparse\]|$)/noparse($1)/eisgm;
     $message =~ s/\[reason\](.+?)\[\/reason\]//igsm;
   $message =~ s/\[code\]/ \[code\]/igsm;    $message =~ s/\[code\]/ \[code\]/igsm;
   $message =~ s/\[\/code\]/ \[\/code\]/igsm;    $message =~ s/\[\/code\]/ \[\/code\]/igsm;
   $message =~ s/\[quote\]/ \[quote\]/igsm;    $message =~ s/\[quote\]/ \[quote\]/igsm;
   $message =~ s/\[\/quote\]/ \[\/quote\]/igsm;    $message =~ s/\[\/quote\]/ \[\/quote\]/igsm;
   $message =~ s/\[glow\]/ \[glow\]/igsm;    $message =~ s/\[glow\]/ \[glow\]/igsm;
   $message =~ s/\[\/glow\]/ \[\/glow\]/igsm;    $message =~ s/\[\/glow\]/ \[\/glow\]/igsm;
   $message =~ s/<br>|<br \/>/\n/igsm;    $message =~ s/<br>|<br \/>/\n/igsm;
   $message =~ s/<br>\x1f|<br \/>\x1f/\n/igsm;    $message =~ s/<br>\x1f|<br \/>\x1f/\n/igsm;
   $message =~ s/\[code\s*(.*?)\]\n*(.+?)\n*\[\/code\]/&codemsg($2,$1)/eisgm     $message =~ s/\[code\s*(.*?)\]\n*(.+?)\n*\[\/code\]/codemsg($2,$1)/eisgm; 
     ;    # [code] must come at first! At least before image transformation!  
   
     # [code] must come at first! At least before image transformation!
   $message =~ s/\[([^\]\[]{0,30})\n([^\]\[]{0,30})\]/\[$1$2\]/gsm;    $message =~ s/\[([^\]\[]{0,30})\n([^\]\[]{0,30})\]/\[$1$2\]/gsm;
   $message =~ s/\[\/([^\]\[]{0,30})\n([^\]\[]{0,30})\]/\[\/$1$2\]/gsm;    $message =~ s/\[\/([^\]\[]{0,30})\n([^\]\[]{0,30})\]/\[\/$1$2\]/gsm;
   
   #$message =~ s~(\w+://[^<>\s\n\"\]\[]+)\n([^<>\s\n\"\]\[]+)~$1\n$2~g;    #$message =~ s~(\w+://[^<>\s\n\"\]\[]+)\n([^<>\s\n\"\]\[]+)~$1\n$2~g;
   $message =~ s/\[b\](.*?)\[\/b\]/<b>$1<\/b>/isgm;    $message =~ s/\[b\](.*?)\[\/b\]/<b>$1<\/b>/isgm;
   $message =~ s/\[i\](.*?)\[\/i\]/<i>$1<\/i>/isgm;    $message =~ s/\[i\](.*?)\[\/i\]/<i>$1<\/i>/isgm;
   $message =~ s/\[u\](.*?)\[\/u\]/<span class="u">$1<\/span>/isgm;  
   $message =~    $message =~
s/\[s\](.*?)\[\/s\]/<span style="text-decoration: line-through">$1<\/span>/isgm;       s/\[u\](.*?)\[\/u\]/<span class="under">$1<\/span><!--underline-->/isgm; 
     $message =~
  s/\[s\](.*?)\[\/s\]/<span style="text-decoration: line-through">$1<\/span><!--linethrough-->/isgm;
   $message =~ s/\[glb\](.*?)\[\/glb\]/<div class="glb">$1<\/div>/isgm;    $message =~ s/\[glb\](.*?)\[\/glb\]/<div class="glb">$1<\/div>/isgm;
   
#    $message =~ #    $message =~
#s/( |&nbsp;)*\[move\](.*?)\[\/move\]/<div style="overflow: auto; overflow-style: marquee-line; white-space:nowrap">$2<\/div>/isg; #s/( |&nbsp;)*\[move\](.*?)\[\/move\]/<div style="overflow: auto; overflow-style: marquee-line; white-space:nowrap">$2<\/div>/isg;
   $message =~ s/( |&nbsp;)*\[move\](.*?)\[\/move\]/<marquee>$2<\/marquee>/isg;     $message =~ 
       s/( |&nbsp;)*\[move\](.*?)\[\/move\]/<marquee>$2<\/marquee>/isgm;
     # Quote message
     while ( $message =~
  s/\[quote(\s+author=(.*?)\s+link=(.*?)\s+date=(.*?)\s*)?\]\n*(.*?)\n*\[\/quote\]/ quotemsg($2,$3,$4,$5) /eisgm ){}
   
  # Images in message. Must come behind "Quote message" due to $showimageinquote in &quotemsg -> &parseimgflash
     while ( $message =~
  s/(\[url[^\[]*\]\s*)?\[img(.*?)\](.*?)\[\/img\]/ imagemsg($1,$2,$3,$image_type) /eisgm ) { }
   
   # Quote message     $message =~ 
   while ($message =~ s~\[quote(\s+author=(.*?)\s+link=(.*?)\s+date=(.*?)\s*)?\]\n*(.*?)\n*\[/quote\]~ &quotemsg($2,$3,$4,$5) ~eisg) { }  s/\[color=([A-Za-z0-9# ]+)\](.+?)\[\/color\]/<span style="color: $1;">$2<\/span><!--color-->/isgm; 
     $message =~
       s/\[black\](.*?)\[\/black\]/<span style="color:#000000;">$1<\/span>/isgm;
     $message =~
       s/\[white\](.*?)\[\/white\]/<span style="color:#FFFFFF;">$1<\/span>/isgm;
     $message =~
       s/\[red\](.*?)\[\/red\]/<span style="color:#FF0000;">$1<\/span>/isgm;
     $message =~
       s/\[green\](.*?)\[\/green\]/<span style="color:#00FF00;">$1<\/span>/isgm;
     $message =~
       s/\[blue\](.*?)\[\/blue\]/<span style="color:#0000FF;">$1<\/span>/isgm;
     $message =~ s/\[timestamp\=([\d]{9,10})\]/timeformat($1)/eisgm;
     $message =~
  s/\[font=([A-Za-z0-9# -]+)\](.+?)\[\/font\]/<span style="font-family: $1;">$2<\/span><!--font-->/isgm;
   
     while ( $message =~
         s/\[size=([A-Za-z0-9# ]+)\](.+?)\[\/size\]/sizefont($1,$2)/eisgm ) { }
   
     $message =~
       s/\[tt\](.*?)\[\/tt\]/<span style="font-family:monospace">$1<\/span>/isgm;
     $message =~
  s/\[left\](.*?)\[\/left\]/<div style="text-align: left;">$1<\/div><!--left-->/isgm;
     $message =~
  s/\[center\](.*?)\[\/center\]/<div style="text-align:center">$1<\/div>/isgm;
     $message =~
  s/\[right\](.*?)\[\/right\]/<div style="text-align: right;">$1<\/div><!--right-->/isgm;
     $message =~
  s/\[justify\](.*?)\[\/justify\]/<div style="text-align: justify">$1<\/div><!--justify-->/isgm;
     $message =~ s/\[sub\](.*?)\[\/sub\]/<sub>$1<\/sub>/isgm;
     $message =~ s/\[sup\](.*?)\[\/sup\]/<sup>$1<\/sup>/isgm;
     $message =~
  s/\[fixed\](.*?)\[\/fixed\]/<span style="display:inline; font-family: Courier New;">$1<\/span>/isgm;
   
   # Images in message. Must come behind "Quote message" due to $showimageinquote in &quotemsg -> &parseimgflash     $message =~ s/\[hr\]\n/<hr class="hr_s" \/>/gsm; 
   while ($message =~ s~(\[url[^\[]*\]\s*)?\[img(.*?)\](.*?)\[/img\]~ &imagemsg($1,$2,$3,$image_type) ~eisg) { }     $message =~ s/\[hr\]/<hr class="hr_s" \/>/gsm; 
     $message =~ s/\[br\]/\n/igsm;
  ## code moved ##
   
   $message =~ s~\[color=([A-Za-z0-9# ]+)\](.+?)\[/color\]~<div style="display:inline; color: $1;">$2</div>~isg;     $message =~ 
   $message =~ s~\[black\](.*?)\[/black\]~<div style="display:inline; color:#000000;">$1</div>~isg;  s/\[highlight\](.*?)\[\/highlight\]/<span class="highlight">$1<\/span><!--highlight-->/isgm; 
   $message =~ s~\[white\](.*?)\[/white\]~<div style="display:inline; color:#FFFFFF;">$1</div>~isg;  
   $message =~ s~\[red\](.*?)\[/red\]~<div style="display:inline; color:#FF0000;">$1</div>~isg;  
   $message =~ s~\[green\](.*?)\[/green\]~<div style="display:inline; color:#00FF00;">$1</div>~isg;  
   $message =~ s~\[blue\](.*?)\[/blue\]~<div style="display:inline; color:#0000FF;">$1</div>~isg;  
   $message =~ s~\[timestamp\=([\d]{9,10})\]~&timeformat($1)~eisg;  
   $message =~ s~\[font=([A-Za-z0-9# -]+)\](.+?)\[/font\]~<div style="display:inline; font-family: $1;">$2</div>~isg;  
   while ($message =~ s~\[size=([A-Za-z0-9# ]+)\](.+?)\[/size\]~&sizefont($1,$2)~eisg) { }  
   
   $message =~ s~\[tt\](.*?)\[/tt\]~<tt>$1</tt>~isg;  
   $message =~ s~\[left\](.*?)\[/left\]~<div style="text-align: left;">$1</div>~isg;  
   $message =~ s~\[center\](.*?)\[/center\]~<center>$1</center>~isg;  
   $message =~ s~\[right\](.*?)\[/right\]~<div style="text-align: right;">$1</div>~isg;  
   $message =~ s~\[justify\](.*?)\[/justify\]~<div style="text-align: justify">$1</div>~isg;  
   $message =~ s~\[sub\](.*?)\[/sub\]~<sub>$1</sub>~isg;  
   $message =~ s~\[sup\](.*?)\[/sup\]~<sup>$1</sup>~isg;  
   $message =~ s~\[fixed\](.*?)\[/fixed\]~<div style="display:inline; font-family: Courier New;">$1</div>~isg;  
   
   $message =~ s~\[hr\]\n~<hr width="40%" align="left" size="1" class="hr" />~g;  
   $message =~ s~\[hr\]~<hr width="40%" align="left" size="1" class="hr" />~g;  
   $message =~ s~\[br\]~\n~ig;  
   $message =~ s~\s$YaBBversion\s~ \<a style\=\"font-weight: bold;\" href\=\"http\:\/\/www\.yabbforum\.com\/downloads\.php\"\>$YaBBversion Forum Software\<\/a\> ~g;  
   
   $message =~ s~\[highlight\](.*?)\[/highlight\]~<span class="highlight">$1</span>~isg;  
   
   sub format_url {  
       my ($txtfirst, $txturl) = @_;  
       my $lasttxt = "";  
       if ($txturl =~ m~(.*?)(\.|\.\)|\)\.|\!|\!\)|\)\!|\,|\)\,|\)|\;|\&quot\;|\&quot\;\.|\.\&quot\;|\&quot\;\,|\,\&quot\;|\&quot\;\;|\<\/)\Z~) {  
           $txturl = $1;  
           $lasttxt = $2;  
       }  
       my $realurl = $txturl;  
       $txturl =~ s~(\[highlight\]|\[\/highlight\]|\[edit\]|\[\/edit\])~~ig;  
       $txturl =~ s~\[~&#91;~g;  
       $txturl =~ s~\]~&#93;~g;  
       $txturl =~ s~\<.+?\>~~ig;  
       qq~$txtfirst\[url\=$txturl\]$realurl\[\/url\]$lasttxt~;  
   }  
   sub format_url2 {  
       my ($txturl, $txtlink) = @_;  
       $txturl =~ s~(\[highlight\]|\[\/highlight\]|\[edit\]|\[\/edit\])~~ig;  
       $txturl =~ s~\<.+?\>~~ig;  
       qq~[url=$txturl]$txtlink\[/url]~;  
   }  
   sub format_url3 {  
       my $txturl = $_[0];  
       my $txtlink = $txturl;  
       $txturl =~ s~(\[highlight\]|\[\/highlight\]|\[edit\]|\[\/edit\])~~ig;  
       $txturl =~ s~\[~&#91;~g;  
       $txturl =~ s~\]~&#93;~g;  
       $txturl =~ s~\<.+?\>~~ig;  
       qq~[url=$txturl]$txtlink\[/url]~;  
   }  
   
   $message =~ s~\[url=\s*(.+?)\s*\]\s*(.+?)\s*\[/url\]~&format_url2($1, $2)~eisg;  
   $message =~ s~\[url\]\s*(\S+?)\s*\[/url\]~&format_url3($1)~eisg;  
   
   if ($autolinkurls) {  
       $message =~ s~\[url\]\s*([^\[]+)\s*\[/url\]~[url]$1\[/url]~g;  
       $message =~ s~\[link\]\s*([^\[]+)\s*\[/link\]~[link]$1\[/link]~g;  
       $message =~ s~\[news\](\S+?)\[/news\]~<a href="$1">$1</a>~isg;  
       $message =~ s~\[gopher\](\S+?)\[/gopher\]~<a href="$1">$1</a>~isg;  
       $message =~ s~&quot;&gt;~">~g; #"   
       $message =~ s~(\[\*\])~ $1~g;  
       $message =~ s~(\[\/list\])~ $1~g;  
       $message =~ s~(\[\/td\])~ $1~g;  
       $message =~ s~(\[\/td\])~ $1~g;  
       $message =~ s~\<span style\=~\<span_style\=~g;  
       $message =~ s~\<div style\=~\<div_style\=~g;  
       $message =~ s~([^\w\"\=\[\]]|[\n\b]|\&quot\;|\[quote.*?\]|\[edit\]|\[highlight\]|\[\*\]|\[td\]|\A)\\*(\w+?\:\/\/(?:[\w\~\;\:\,\$\-\+\!\*\?/\=\&\@\#\%\(\)\[\](?:\<\S+?\>\S+?\<\/\S+?\>)]+?)\.(?:[\w\~\.\;\:\,\$\-\+\!\*\?/\=\&\@\#\%\(\)\[\]\x80-\xFF]{1,})+?)~&format_url($1,$2)~eisg;  
       $message =~ s~([^\"\=\[\]/\:\.\-(\://\w+)]|[\n\b]|\&quot\;|\[quote.*?\]|\[edit\]|\[highlight\]|\[\*\]|\[td\]|\A|\()\\*(www\.[^\.](?:[\w\~\;\:\,\$\-\+\!\*\?/\=\&\@\#\%\(\)\[\](?:\<\S+?\>\S+?\<\/\S+?\>)]+?)\.(?:[\w\~\.\;\:\,\$\-\+\!\*\?/\=\&\@\#\%\(\)\[\]\x80-\xFF]{1,})+?)~&format_url($1,$2)~eisg;  
       $message =~ s~\<span_style\=~\<span style\=~g;  
       $message =~ s~\<div_style\=~\<div style\=~g;  
   }  
   
   if ($stealthurl) {  
       #$message =~ s~\[url\]\s*www\.\s*(.+?)\s*\[/url\]~<a href="$boardurl/$yyexec.$yyext?action=dereferer;url=http://www.$1" target="_blank">www.$1</a>~isg;  
       $message =~ s~\[url=\s*(\w+\://.+?)\](.+?)\s*\[/url\]~<a href="$boardurl/$yyexec.$yyext?action=dereferer;url=$1" target="_blank">$2</a>~isg;  
       $message =~ s~\[url=\s*(.+?)\]\s*(.+?)\s*\[/url\]~<a href="$boardurl/$yyexec.$yyext?action=dereferer;url=http://$1" target="_blank">$2</a>~isg;  
       #$message =~ s~\[url\]\s*(.+?)\s*\[/url\]~<a href="$boardurl/$yyexec.$yyext?action=dereferer;url=$1" target="_blank">$1</a>~isg;  
   
       $message =~ s~\[link\]\s*www\.\s*(.+?)\s*\[/link\]~<a href="$boardurl/$yyexec.$yyext?action=dereferer;url=http://www.$1">www.$1</a>~isg;  
       $message =~ s~\[link=\s*(\w+\://.+?)\](.+?)\s*\[/link\]~<a href="$boardurl/$yyexec.$yyext?action=dereferer;url=$1">$2</a>~isg;  
       $message =~ s~\[link=\s*(.+?)\]\s*(.+?)\s*\[/link\]~<a href="$boardurl/$yyexec.$yyext?action=dereferer;url=http://$1">$2</a>~isg;  
       $message =~ s~\[link\]\s*(.+?)\s*\[/link\]~<a href="$boardurl/$yyexec.$yyext?action=dereferer;url=$1">$1</a>~isg;  
   
       $message =~ s~\[ftp\]\s*(.+?)\s*\[/ftp\]~<a href="$boardurl/$yyexec.$yyext?action=dereferer;url=$1" target="_blank">$1</a>~isg;  
   } else {  
       #$message =~ s~\[url\]\s*www\.(\S+?)\s*\[/url\]~<a href="http://www.$1" target="_blank">www.$1</a>~isg;  
       $message =~ s~\[url=\s*(\S\w+\://\S+?)\s*\](.+?)\[/url\]~<a href="$1" target="_blank">$2</a>~isg;  
       $message =~ s~\[url=\s*(\S+?)\](.+?)\s*\[/url\]~<a href="http://$1" target="_blank">$2</a>~isg;  
       #$message =~ s~\[url\]\s*(http://)?(\S+?)\s*\[/url\]~<a href="http://$2" target="_blank">$1$2</a>~isg;  
   
       $message =~ s~\[link\]\s*www\.(\S+?)\s*\[/link\]~<a href="http://www.$1">www.$1</a>~isg;  
       $message =~ s~\[link=\s*(\S\w+\://\S+?)\s*\](.+?)\[/link\]~<a href="$1">$2</a>~isg;  
       $message =~ s~\[link=\s*(\S+?)\](.+?)\s*\[/link\]~<a href="http://$1">$2</a>~isg;  
       $message =~ s~\[link\]\s*(\S+?)\s*\[/link\]~<a href="$1">$1</a>~isg;  
   
       $message =~ s~\[ftp\]\s*(ftp://)?(.+?)\s*\[/ftp\]~<a href="ftp://$2">$1$2</a>~isg;  
   }  
   
   $message =~ s~(dereferer\;url\=http\:\/\/.*?)#(\S+?\")~$1;anch=$2~isg;  
   $message =~ s~\[email\]\s*(\S+?\@\S+?)\s*\[/email\]~<a href="mailto:$1">$1</a>~isg;  
   $message =~ s~\[email=\s*(\S+?\@\S+?)\](.*?)\[/email\]~<a href="mailto:$1">$2</a>~isg;  
   
   $message =~ s~\[edit\](.*?)\[/edit\]~<b>$post_txt{'603'}: </b><br /><div class="editbg" style="overflow: auto;">$1</div>~isg;  
   
#   $message =~ s~/me ~<i>$displayname</i> ~ig;  
   $message =~ s~/me\s+(.*)~<i><span style="color: #FF0000;"><b>$displayname</b></span> $1</i>~ig;  
   
   if($message =~ /\[media/ || $message =~ /\[flash/) {  
       require "$sourcedir/MediaCenter.pl";  
       $message =~ s~\[flash\](.*?)\[/flash\]~\[media\]$1\[/media\]~isg; # convert old flash tags to media tags  
       while ($message =~ s~\[flash\s*(.*?)\]\n*(.*?)\n*\[/flash\]~&flashconvert($2,$1)~eisg){ } # convert old flash tags to media tags  
       while ($message =~ s~\[media\]\n*(.*?)\n*\[/media\]~&embed($1)~eisg){ }  
       while ($message =~ s~\[media\s*(.*?)\]\n*(.*?)\n*\[/media\]~&embed($2,$1)~eisg){ }  
       $message =~ s~media:~http:~ig;  
   }  
   
   if ($guest_media_disallowed && $iamguest) {  
       my $oops = qq~$maintxt{'40'}&nbsp;&nbsp;$maintxt{'41'} <a href="$scripturl?action=login;sesredir=num\~$curnum">$img{'login'}</a>~;  
       if ($regtype) { $oops .= qq~ $maintxt{'42'} <a href="$scripturl?action=register">$img{'register'}</a>~; }  
   
       $showattach = '';  
       $showattachhr = '';  
       $attachment =~ s~<a href=".+?</a>~[oops]~g;  
       $attachment =~ s~<img src=".+?>~[oops]~g;  
       $attachment =~ s~\[oops\]~$oops~g;  
       $message =~ s~<a href=".+?</a>~[oops]~g;  
       $message =~ s~<img src=".+?>~[oops]~g;  
       $message =~ s~\[oops\]~$oops~g;  
   }  
   
   $message = MakeSmileys($message);  
   
   $message =~ s~\s*\[\*\]~</li><li>~isg;  
   $message =~ s~\[olist\]~<ol>~isg;  
   $message =~ s~\s*\[/olist\]~</li></ol>~isg;  
   $message =~ s~</li><ol>~<ol>~isg;  
   $message =~ s~<ol></li>~<ol>~isg;  
   $message =~ s~\[list\]~<ul>~isg;  
   $message =~ s~\[list (.+?)\]~<ul style="list-style-image\: url($defaultimagesdir\/$1\.gif)">~isg;  
   $message =~ s~\s*\[/list\]~</li></ul>~isg;  
   $message =~ s~</li><ul>~<ul>~isg;  
   $message =~ s~<ul></li>~<ul>~isg;  
   $message =~ s~</li><ul (.+?)>~<ul $1>~isg;  
   $message =~ s~<ul (.+?)></li>~<ul $1>~isg;  
   
   $message =~ s~\[pre\](.+?)\[/pre\]~'<pre>' . dopre($1) . '</pre>'~iseg;  
   
   if ($message =~ m~\[table\](?:.*?)\[/table\]~is) {  
       while ($message =~ s~<marquee>(.*?)\[table\](.*?)\[/table\](.*?)</marquee>~<marquee>$1<table>$2</table>$3</marquee>~s)        { }  
       while ($message =~ s~<marquee>(.*?)\[table\](.*?)</marquee>(.*?)\[/table\]~<marquee>$1\[//table\]$2</marquee>$3\[//table\]~s) { }  
       while ($message =~ s~\[table\](.*?)<marquee>(.*?)\[/table\](.*?)</marquee>~\[//table\]$1<marquee>$2\[//table\]$3</marquee>~s) { }  
       $message =~ s~\n{0,1}\[table\]\n*(.+?)\n*\[/table\]\n{0,1}~<table>$1</table>~isg;  
       while ($message =~ s~\<table\>(.*?)\n*\[tr\]\n*(.*?)\n*\[/tr\]\n*(.*?)\</table\>~<table>$1<tr>$2</tr>$3</table>~is) { }  
       while ($message =~ s~\<tr\>(.*?)\n*\[td\]\n{0,1}(.*?)\n{0,1}\[/td\]\n*(.*?)\</tr\>~<tr>$1<td>$2</td>$3</tr>~is) { }  
       $message =~ s~<table>((?:(?!<tr>|</tr>|<td>|</td>|<table>|</table>).)*)<tr>~<table><tr>~isg;  
       $message =~ s~<tr>((?:(?!<tr>|</tr>|<td>|</td>|<table>|</table>).)*)<td>~<tr><td>~isg;  
       $message =~ s~</td>((?:(?!<tr>|</tr>|<td>|</td>|<table>|</table>).)*)<td>~</td><td>~isg;  
       $message =~ s~</td>((?:(?!<tr>|</tr>|<td>|</td>|<table>|</table>).)*)</tr>~</td></tr>~isg;  
       $message =~ s~</td>((?!<tr>|</tr>|<td>|</td>|<table>|</table>).*?)<td>~</td><td>~isg;  
       $message =~ s~</td>((?!<tr>|</tr>|<td>|</td>|<table>|</table>).*?)</tr>~</td></tr>~isg;  
       $message =~ s~</tr>((?:(?!<tr>|</tr>|<td>|</td>|<table>|</table>).)*)<tr>~</tr><tr>~isg;  
       $message =~ s~</tr>((?:(?!<tr>|</tr>|<td>|</td>|<table>|</table>).)*)</table>~</tr></table>~isg;  
   }  
   
   while ($message =~ s~<a([^>]*?)\n([^>]*)>~<a$1$2>~)                  { }  
   while ($message =~ s~<a([^>]*)>([^<]*?)\n([^<]*)</a>~<a$1>$2$3</a>~) { }  
   while ($message =~ s~<a([^>]*?)&amp;([^>]*)>~<a$1&$2>~)              { }  
   
   $message =~ s~\[\&table(.*?)\]~<table$1>~g;  
   $message =~ s~\[/\&table\]~</table>~g;  
   $message =~ s~\n~<br />~ig;  
   $message =~ s~\[code_br\]~\n~ig;  
   
   return $message;     $message =~ 
       s/\[url=\s*(.+?)\s*\]\s*(.+?)\s*\[\/url\]/format_url2($1, $2)/eisgm;
     $message =~ s/\[url\]\s*(\S+?)\s*\[\/url\]/format_url3($1)/eisgm;
     $message =~ s/(dereferer\;url\=http\:\/\/.*?)\x23(\S+?\")/$1;anch=$2/isgm;
   
     if ($autolinkurls) {
         $message =~ s/\[url\]\s*([^\[]+)\s*\[\/url\]/[url]$1\[\/url]/gsm;
         $message =~ s/\[link\]\s*([^\[]+)\s*\[\/link\]/[link]$1\[\/link]/gsm;
         $message =~ s/\[news\](\S+?)\[\/news\]/<a href="$1">$1<\/a>/isgm;
         $message =~ s/\[gopher\](\S+?)\[\/gopher\]/<a href="$1">$1<\/a>/isgm;
         $message =~ s/&quot;&gt;/\x22>/gxsm;
         $message =~ s/(\[\*\])/ $1/gsm;
         $message =~ s/(\[\/list\])/ $1/gsm;
         $message =~ s/(\[\/td\])/ $1/gsm;
         $message =~ s/(\[\/td\])/ $1/gsm;
         $message =~ s/\<span style\=/\<span_style\=/gsm;
         $message =~ s/\<div style\=/\<div_style\=/gsm;
         $message =~
  s/([^\w\"\=\[\]]|[\n\b]|\&quot\;|\[quote.*?\]|\[edit\]|\[highlight\]|\[\*\]|\[td\]|\A)\\*(\w+?\:\/\/(?:[\w\~\;\:\,\$\-\+\!\*\?\/\=\&\@\#\%\(\)\[\](?:\<\S+?\>\S+?\<\/\S+?\>)]+?)\.(?:[\w\~\.\;\:\,\$\-\+\!\*\?\/\=\&\@\#\%\(\)\[\]\x80-\xFF]{1,})+?)/format_url($1,$2)/eisgm;
         $message =~
  s/([^\"\=\[\]\/\:\.\-(\:\/\/\w+)]|[\n\b]|\&quot\;|\[quote.*?\]|\[edit\]|\[highlight\]|\[\*\]|\[td\]|\A|\()\\*(www\.[^\.](?:[\w\~\;\:\,\$\-\+\!\*\?\/\=\&\@\#\%\(\)\[\](?:\<\S+?\>\S+?\<\/\S+?\>)]+?)\.(?:[\w\~\.\;\:\,\$\-\+\!\*\?\/\=\&\@\#\%\(\)\[\]\x80-\xFF]{1,})+?)/format_url($1,$2)/eisgm;
         $message =~ s/\<span_style\=/\<span style\=/gsm;
         $message =~ s/\<div_style\=/\<div style\=/gsm;
     }
   
     if ($stealthurl) {
         $message =~ s/\[url=\s*(\w+\:\/\/.+?)\](.+?)\s*\[\/url\]/<a href="$boardurl\/$yyexec.$yyext?action=dereferer;url=$1" target="_blank">$2<\/a>/isgm;
         $message =~ s/\[url=\s*(.+?)\]\s*(.+?)\s*\[\/url\]/<a href="$boardurl\/$yyexec.$yyext?action=dereferer;url=http:\/\/$1" target="_blank">$2<\/a>/isgm;
         $message =~ s/\[link\]\s*www\.\s*(.+?)\s*\[\/link\]/<a href="$boardurl\/$yyexec.$yyext?action=dereferer;url=http:\/\/www.$1">www.$1<\/a>/isgm;
         $message =~ s/\[link=\s*(\w+\:\/\/.+?)\](.+?)\s*\[\/link\]/<a href="$boardurl\/$yyexec.$yyext?action=dereferer;url=$1">$2<\/a>/isgm;
         $message =~ s/\[link=\s*(.+?)\]\s*(.+?)\s*\[\/link\]/<a href="$boardurl\/$yyexec.$yyext?action=dereferer;url=http:\/\/$1">$2<\/a>/isgm;
         $message =~ s/\[link\]\s*(.+?)\s*\[\/link\]/<a href="$boardurl\/$yyexec.$yyext?action=dereferer;url=$1">$1<\/a>/isgm;
         $message =~ s/\[ftp\]\s*(.+?)\s*\[\/ftp\]/<a href="$boardurl\/$yyexec.$yyext?action=dereferer;url=$1" target="_blank">$1<\/a>/isgm;
     }
     else {
         $message =~ s/\[url=\s*(\S\w+\:\/\/\S+?)\s*\](.+?)\[\/url\]/<a href="$1" target="_blank">$2<\/a>/isgm;
         $message =~ s/\[url=\s*(\S+?)\](.+?)\s*\[\/url\]/<a href="http:\/\/$1" target="_blank">$2<\/a>/isgm;
         $message =~ s/\[link\]\s*www\.(\S+?)\s*\[\/link\]/<a href="http:\/\/www.$1">www.$1<\/a>/isgm;
         $message =~ s/\[link=\s*(\S\w+\:\/\/\S+?)\s*\](.+?)\[\/link\]/<a href="$1">$2<\/a>/isgm;
         $message =~ s/\[link=\s*(\S+?)\](.+?)\s*\[\/link\]/<a href="http:\/\/$1">$2<\/a>/isgm;
         $message =~ s/\[link\]\s*(\S+?)\s*\[\/link\]/<a href="$1">$1<\/a>/isgm;
         $message =~ s/\[ftp\]\s*(ftp:\/\/)?(.+?)\s*\[\/ftp\]/<a href="ftp:\/\/$2">$1$2<\/a>/isgm;
     }
   
  ## code moved ##
     $message =~ s/\[email\]\s*(\S+?\@\S+?)\s*\[\/email\]/<a href="mailto:$1">$1<\/a>/isgm;
     $message =~ s/\[email=\s*(\S+?\@\S+?)\](.*?)\[\/email\]/<a href="mailto:$1">$2<\/a>/isgm;
   
     *editsmsg = sub {
         my ($edittext) = @_;
         $formedit = qq~<b>$post_txt{'603'}: </b><br /><div class="editbg" style="overflow: auto;">$1</div><!--edit-->~;
         return $formedit;
     };
     while ( $message =~ s/\[edit\]\n*(.*?)\n*\[\/edit\]/editsmsg($1)/eisgm ) { }
   
     $message =~ s/\/me\s+(.*)/<span class="my_me">* $displayname<\/span> $1/igxsm;
   
     if ( $message =~ /\[media/sm || $message =~ /\[flash/sm ) {
         require Sources::MediaCenter;
         $message =~ s/\[flash\](.*?)\[\/flash\]/\[media\]$1\[\/media\]/isgm;
   
         # convert old flash tags to media tags
         while ( $message =~ s/\[flash\s*(.*?)\]\n*(.*?)\n*\[\/flash\]/flashconvert($2,$1)/eisgm ) { }
         # convert old flash tags to media tags
         while ( $message =~ s/\[media\]\n*(.*?)\n*\[\/media\]/embed($1)/eisgm ) { }
         while ( $message =~ s/\[media\s*(.*?)\]\n*(.*?)\n*\[\/media\]/embed($2,$1)/eisgm ){ }
         $message =~ s/media:/http:/igxsm;
     }
   
     if ( $guest_media_disallowed && $iamguest ) {
         if   ($action) { $act = qq~;sesredir=action\~$action~; }
         else           { $act = qq~;sesredir=num\~$curnum~; }
         my $oops =
  qq~ <i>$maintxt{'41'} <a href="$scripturl?action=login$act"><b><i>$maintxt{'34'}</i></b></a></i>~;
        if ( $regtype ) {
            $oops .=
  qq~<i> $maintxt{'42'} <a href="$scripturl?action=register"><b><i>$maintxt{'97'}</i></b></a></i>~;
         }
         $oops .= qq~<i> $maintxt{'42a'}</i>~;
   
         $showattach   = q{};
         $showattachhr = q{};
         $attachment =~ s/<a href=".+?<\/a>/[oops]/gsm;
         $attachment =~ s/<img src=".+?>/[oops]/gsm;
         $attachment =~ s/\[oops\]/$oops/gsm;
         if ( !$movedflag ) { $message =~ s/<a href=".+?<\/a>/[oops]/gsm; }
         $message =~ s/<img src=".+?>/[oops]/gsm;
         $message =~ s/\[oops\]/$oops/gsm;
     }
   
     $message = MakeSmileys($message);
   
     $message =~ s/\s*\[\*\]/<\/li><li>/isgm;
     $message =~ s/\[olist\]/<ol>/isgm;
     $message =~ s/\s*\[\/olist\]/<\/li><\/ol>/isgm;
     $message =~ s/<\/li><ol>/<ol>/isgm;
     $message =~ s/<ol><\/li>/<ol>/isgm;
     $message =~ s/\[list\]/<ul>/isgm;
     $message =~
  s/\[list (.+?)\]/<ul style="list-style-image\: url($defaultimagesdir\/$1\.gif)">/isgm;
     $message =~ s/\s*\[\/list\]/<\/li><\/ul>/isgm;
     $message =~ s/<\/li><ul>/<ul>/isgm;
     $message =~ s/<ul><\/li>/<ul>/isgm;
     $message =~ s/<\/li><ul (.+?)>/<ul $1>/isgm;
     $message =~ s/<ul (.+?)><\/li>/<ul $1>/isgm;
   
     $message =~ s/\[pre\](.+?)\[\/pre\]/'<pre>' . dopre($1) . '<\/pre>'/isegm;
   
     if ( $message =~ m/\[table\](?:.*?)\[\/table\]/ism ) {
         while ( $message =~
  s/<marquee>(.*?)\[table\](.*?)\[\/table\](.*?)<\/marquee>/<marquee>$1<table>$2<\/table>$3<\/marquee>/sm ) { }
         while ( $message =~
  s/<marquee>(.*?)\[table\](.*?)<\/marquee>(.*?)\[\/table\]/<marquee>$1\[\/\/table\]$2<\/marquee>$3\[\/\/table\]/sm ) { }
         while ( $message =~
  s/\[table\](.*?)<marquee>(.*?)\[\/table\](.*?)<\/marquee>/\[\/\/table\]$1<marquee>$2\[\/\/table\]$3<\/marquee>/sm ) { }
         $message =~
  s/\n{0,1}\[table\]\n*(.+?)\n*\[\/table\]\n{0,1}/<table>$1<\/table>/isgm;
         while ( $message =~
  s/\<table\>(.*?)\n*\[tr\]\n*(.*?)\n*\[\/tr\]\n*(.*?)\<\/table\>/<table>$1<tr>$2<\/tr>$3<\/table>/ism ) { }
   
         while ( $message =~
  s/\<tr\>(.*?)\n*\[td\]\n{0,1}(.*?)\n{0,1}\[\/td\]\n*(.*?)\<\/tr\>/<tr>$1<td>$2<\/td>$3<\/tr>/ism ) { }
         $message =~
  s/<table>((?:(?!<tr>|<\/tr>|<td>|<\/td>|<table>|<\/table>).)*)<tr>/<table><tr>/isgm;
         $message =~
  s/<tr>((?:(?!<tr>|<\/tr>|<td>|<\/td>|<table>|<\/table>).)*)<td>/<tr><td>/isgm;
         $message =~
  s/<\/td>((?:(?!<tr>|<\/tr>|<td>|<\/td>|<table>|<\/table>).)*)<td>/<\/td><td>/isgm;
         $message =~
  s/<\/td>((?:(?!<tr>|<\/tr>|<td>|<\/td>|<table>|<\/table>).)*)<\/tr>/<\/td><\/tr>/isgm;
         $message =~
  s/<\/td>((?!<tr>|<\/tr>|<td>|<\/td>|<table>|<\/table>).*?)<td>/<\/td><td>/isgm;
         $message =~
  s/<\/td>((?!<tr>|<\/tr>|<td>|<\/td>|<table>|<\/table>).*?)<\/tr>/<\/td><\/tr>/isgm;
         $message =~
  s/<\/tr>((?:(?!<tr>|<\/tr>|<td>|<\/td>|<table>|<\/table>).)*)<tr>/<\/tr><tr>/isgm;
         $message =~
  s/<\/tr>((?:(?!<tr>|<\/tr>|<td>|<\/td>|<table>|<\/table>).)*)<\/table>/<\/tr><\/table>/isgm;
     }
   
     while ( $message =~ s/<a([^>]*?)\n([^>]*)>/<a$1$2>/sm ) { }
     while ( $message =~ s/<a([^>]*)>([^<]*?)\n([^<]*)<\/a>/<a$1>$2$3<\/a>/sm ) { }
     while ( $message =~ s/<a([^>]*?)&amp;([^>]*)>/<a$1&$2>/sm ) { }
   
     $message =~ s/\[\&table(.*?)\]/<table$1>/gsm;
     $message =~ s/\[\/\&table\]/<\/table>/gsm;
     $message =~ s/\n/<br \/>/igsm;
     $message =~ s/\[code_br\]/\n/igsm;
     $message =~ s/\[code_qgt\]/&quot;&gt;/igsm;
   
     return $message;
} }
   
sub DoUBBCTo { sub DoUBBCTo {
   # Does UBBC to $_[0] using &DoUBBC and keeps $message the same  
   my($messagecopy, $returnthis);     # Does UBBC to $_[0] using DoUBBC and keeps $message the same 
   $messagecopy = $message;     ($message) = @_; 
   $message = $_[0];     my $messagecopy = $message; 
   &DoUBBC;     DoUBBC(); 
   $returnthis = $message;    my $returnthis = $message;
   $message = $messagecopy;    $message = $messagecopy;
   $returnthis;    return $returnthis;
} }
   
1; 1;