Example #1
0
        public static string FormatMessage( yaf.pages.ForumPage basePage, string Message, MessageFlags mFlags )
        {
            // do html damage control
            Message = RepairHtml( basePage, Message, mFlags.IsHTML );

            // convert spaces if bbcode (causes too many problems)
            /*if (mFlags.IsBBCode)
            {
                Message = Message.Replace(" "," ");
            }*/

            // do BBCode and Smilies...
            Message = BBCode.MakeHtml( basePage, Message, mFlags.IsBBCode );

            RegexOptions options = RegexOptions.IgnoreCase /*| RegexOptions.Singleline | RegexOptions.Multiline*/;

            //Email -- RegEx VS.NET
            Message = Regex.Replace( Message, @"(?<before>^|[ ]|<br/>)(?<email>\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*)", "${before}<a href=\"mailto:${email}\">${email}</a>", options );

            //URL (http://) -- RegEx http://www.dotnet247.com/247reference/msgs/2/10022.aspx
            Message = Regex.Replace( Message, "(?<before>^|[ ]|<br/>)(?<!href=\")(?<!src=\")(?<url>(http://|https://|ftp://)(?:[\\w-]+\\.)+[\\w-]+(?:/[\\w-./?%&=;,]*)?)", "${before}<a rel=\"nofollow\" href=\"${url}\">${url}</a>", options );

            //URL (www) -- RegEx http://www.dotnet247.com/247reference/msgs/2/10022.aspx
            Message = Regex.Replace( Message, @"(?<before>^|[ ]|<br/>)(?<!http://)(?<url>www\.(?:[\w-]+\.)+[\w-]+(?:/[\w-./?%&=;,]*)?)", "${before}<a rel=\"nofollow\" href=\"http://${url}\">${url}</a>", options );

            // jaben : moved word replace to reusable function in class utils
            Message = Utils.BadWordReplace( Message );

            return Message;
        }
Example #2
0
        /// <summary>
        /// Formats a message to HTML by:
        /// 1. Converting "Forum Code" to HTML
        /// 2. Converting carriage returns to &lt;br/&gt;
        /// 3. Converting smiles code to img tags 
        /// </summary>
        /// <param name="basePage">Forum Page</param>
        /// <param name="Message">Message to Format</param>
        /// <returns>Formatted Message</returns>
        public static string ForumCodeToHtml( yaf.pages.ForumPage basePage, string Message )
        {
            #if true
            return Message;
            #else
            string strReturn = iConvertForumCode(basePage,Message);

            strReturn = strReturn.Replace("\n","<br />");
            strReturn = strReturn.Replace("\r","");

            strReturn = iAddSmiles(basePage,strReturn);

            return strReturn;
            #endif
        }
Example #3
0
        public static string MakeHtml( yaf.pages.ForumPage basePage, string bbcode, bool DoFormatting )
        {
            System.Collections.ArrayList codes = new System.Collections.ArrayList();
            const string codeFormat = ".code@{0}.";

            string localQuoteStr = basePage.GetText( "COMMON", "BBCODE_QUOTE" );
            string localCodeStr = basePage.GetText( "COMMON", "BBCODE_CODE" );
            string localQuoteWroteStr = basePage.GetText( "COMMON", "BBCODE_QUOTEWROTE" );

            Match m = r_code2.Match( bbcode );
            int nCodes = 0;

            while ( m.Success )
            {
                string before_replace = m.Groups [0].Value;
                string after_replace = m.Groups ["inner"].Value;

                try
                {
                    HighLighter hl = new HighLighter();
                    hl.ReplaceEnter = true;
                    after_replace = hl.colorText( after_replace, System.Web.HttpContext.Current.Server.MapPath( Data.ForumRoot + "defs/" ), m.Groups ["language"].Value );
                }
                catch ( Exception x )
                {
                    if ( basePage.IsAdmin )
                        basePage.AddLoadMessage( x.Message );
                    after_replace = FixCode( after_replace );
                }

                bbcode = bbcode.Replace( before_replace, string.Format( codeFormat, nCodes++ ) );
                codes.Add( string.Format( @"<div class=""code""><b>{1}</b><div class=""innercode"">{0}</div></div>", after_replace, localCodeStr ) );
                m = r_code2.Match( bbcode );

            }

            m = r_code1.Match( bbcode );
            while ( m.Success )
            {
                string before_replace = m.Groups [0].Value;
                string after_replace = FixCode( m.Groups ["inner"].Value );
                bbcode = bbcode.Replace( before_replace, string.Format( codeFormat, nCodes++ ) );
                codes.Add( string.Format( @"<div class=""code""><b>{1}</b><div class=""innercode"">{0}</div></div>", after_replace, localCodeStr ) );
                m = r_code1.Match( bbcode );
            }

            m = r_size.Match( bbcode );

            while ( m.Success )
            {
                ///Console.WriteLine("{0}",m.Groups["size"]);
                int i = GetNumber( m.Groups ["size"].Value );
                string tmp;
                if ( i < 1 )
                    tmp = m.Groups ["inner"].Value;
                else if ( i > 9 )
                    tmp = string.Format( "<span style=\"font-size:{1}\">{0}</span>", m.Groups ["inner"].Value, GetFontSize( 9 ) );
                else
                    tmp = string.Format( "<span style=\"font-size:{1}\">{0}</span>", m.Groups ["inner"].Value, GetFontSize( i ) );
                bbcode = bbcode.Substring( 0, m.Groups [0].Index ) + tmp + bbcode.Substring( m.Groups [0].Index + m.Groups [0].Length );
                m = r_size.Match( bbcode );
            }

            if ( DoFormatting )
            {
                NestedReplace( ref bbcode, r_bold, "<b>${inner}</b>" );
                NestedReplace( ref bbcode, r_strike, "<s>${inner}</s>" );
                NestedReplace( ref bbcode, r_italic, "<i>${inner}</i>" );
                NestedReplace( ref bbcode, r_underline, "<u>${inner}</u>" );
                // e-mails
                NestedReplace( ref bbcode, r_email2, "<a href=\"mailto:${email}\">${inner}</a>", new string [] { "email" } );
                NestedReplace( ref bbcode, r_email1, "<a href=\"mailto:${inner}\">${inner}</a>" );
                // urls
                if ( basePage.BoardSettings.BlankLinks )
                {
                    NestedReplace( ref bbcode, r_url2, "<a target=\"_blank\" rel=\"nofollow\" href=\"${http}${url}\">${inner}</a>", new string [] { "url", "http" }, new string [] { "", "http://" } );
                    NestedReplace( ref bbcode, r_url1, "<a target=\"_blank\" rel=\"nofollow\" href=\"${http}${inner}\">${http}${inner}</a>", new string [] { "http" }, new string [] { "http://" } );
                }
                else
                {
                    NestedReplace( ref bbcode, r_url2, "<a rel=\"nofollow\" href=\"${http}${url}\">${inner}</a>", new string [] { "url", "http" }, new string [] { "", "http://" } );
                    NestedReplace( ref bbcode, r_url1, "<a rel=\"nofollow\" href=\"${http}${inner}\">${http}${inner}</a>", new string [] { "http" }, new string [] { "http://" } );
                }
                // font
                NestedReplace( ref bbcode, r_font, "<span style=\"font-family:${font}\">${inner}</span>", new string [] { "font" } );
                NestedReplace( ref bbcode, r_color, "<span style=\"color:${color}\">${inner}</span>", new string [] { "color" } );
                // bullets
                bbcode = r_bullet.Replace( bbcode, "<li>" );
                NestedReplace( ref bbcode, r_list4, "<ol type=\"i\">${inner}</ol>" );
                NestedReplace( ref bbcode, r_list3, "<ol type=\"a\">${inner}</ol>" );
                NestedReplace( ref bbcode, r_list2, "<ol>${inner}</ol>" );
                NestedReplace( ref bbcode, r_list2, "<ul>${inner}</ul>" );
                // alignment
                NestedReplace( ref bbcode, r_center, "<div align=\"center\">${inner}</div>" );
                NestedReplace( ref bbcode, r_left, "<div align=\"left\">${inner}</div>" );
                NestedReplace( ref bbcode, r_right, "<div align=\"right\">${inner}</div>" );
                // image
                NestedReplace( ref bbcode, r_img, "<img src=\"${http}${inner}\"/>", new string [] { "http" }, new string [] { "http://" } );
                // youtube
                NestedReplace( ref bbcode, r_youtube, @"<!-- BEGIN youtube --><object width=""425"" height=""350""><param name=""movie"" value=""http://www.youtube.com/v/${id}""></param><embed src=""http://www.youtube.com/v/${id}"" type=""application/x-shockwave-flash"" width=""425"" height=""350""></embed></object><br /><a href=""http://youtube.com/watch?v=${id}"" target=""_blank"">${inner}</a><br /><!-- END youtube -->", new string [] { "id" } );

                bbcode = r_hr.Replace( bbcode, "<hr noshade/>" );
                bbcode = r_br.Replace( bbcode, "<br/>" );
            }

                bbcode = FormatMsg.iAddSmiles(basePage, bbcode);

            string tmpReplaceStr;

            tmpReplaceStr = string.Format( @"<div class=""quote""><b>{0}</b><div class=""innerquote"">{1}</div></div>", localQuoteWroteStr.Replace( "{0}", "${quote}" ), "${inner}" );

            while ( r_quote2.IsMatch( bbcode ) )
                bbcode = r_quote2.Replace( bbcode, tmpReplaceStr );

            tmpReplaceStr = string.Format( @"<div class=""quote""><b>{0}</b><div class=""innerquote"">{1}</div></div>", localQuoteStr, "${inner}" );

            while ( r_quote1.IsMatch( bbcode ) )
                bbcode = r_quote1.Replace( bbcode, tmpReplaceStr );

            m = r_post.Match( bbcode );
            while ( m.Success )
            {
                string link = Forum.GetLink( Pages.posts, "m={0}#{0}", m.Groups ["post"] );
                if ( basePage.BoardSettings.BlankLinks )
                    bbcode = bbcode.Replace( m.Groups [0].ToString(), string.Format( "<a target=\"_blank\" href=\"{0}\">{1}</a>", link, m.Groups ["inner"] ) );
                else
                    bbcode = bbcode.Replace( m.Groups [0].ToString(), string.Format( "<a href=\"{0}\">{1}</a>", link, m.Groups ["inner"] ) );
                m = r_post.Match( bbcode );
            }

            m = r_topic.Match( bbcode );
            while ( m.Success )
            {
                string link = Forum.GetLink( Pages.posts, "t={0}", m.Groups ["topic"] );
                if ( basePage.BoardSettings.BlankLinks )
                    bbcode = bbcode.Replace( m.Groups [0].ToString(), string.Format( "<a target=\"_blank\" href=\"{0}\">{1}</a>", link, m.Groups ["inner"] ) );
                else
                    bbcode = bbcode.Replace( m.Groups [0].ToString(), string.Format( "<a href=\"{0}\">{1}</a>", link, m.Groups ["inner"] ) );
                m = r_topic.Match( bbcode );
            }

            while ( nCodes > 0 )
            {
                bbcode = bbcode.Replace( string.Format( codeFormat, --nCodes ), codes [nCodes].ToString() );
            }

            return bbcode;
        }
Example #4
0
 public static DataTable GetSmilies( yaf.pages.ForumPage basePage )
 {
     DataTable dt = ( DataTable ) System.Web.HttpContext.Current.Cache ["Smilies"];
     if ( dt == null )
     {
         dt = DB.smiley_list( basePage.PageBoardID, null );
         System.Web.HttpContext.Current.Cache.Insert( "Smilies", dt, null, DateTime.Now.AddMinutes( 60 ), TimeSpan.Zero );
     }
     return dt;
 }
Example #5
0
        public static string RepairHtml( yaf.pages.ForumPage basePage, string html, bool bAllowHtml )
        {
            if ( !bAllowHtml )
            {
                html = BBCode.EncodeHTML( html );
            }
            else
            {
                // get allowable html tags
                string tStr = basePage.BoardSettings.AcceptedHTML;
                string [] AllowedTags = tStr.Split( ',' );

                RegexOptions options = RegexOptions.IgnoreCase;

                MatchCollection m = Regex.Matches( html, "<.*?>", options );

                for ( int i = m.Count - 1; i >= 0; i-- )
                {
                    string tag = html.Substring( m [i].Index + 1, m [i].Length - 1 ).Trim().ToLower();

                    if ( !IsValidTag( tag, AllowedTags ) )
                    {
                        html = html.Remove( m [i].Index, m [i].Length );
                        // just don't show this tag for now

                        //string tmp = System.Web.HttpContext.Current.Server.HtmlEncode(html.Substring(m[i].Index,m[i].Length));
                        //html = html.Insert(m[i].Index,tmp);
                    }
                }
            }
            return html;
        }
Example #6
0
        /// <summary>
        /// Formats message by converting "Forum Code" to HTML.
        /// </summary>
        /// <param name="basePage">Forum Page</param>
        /// <param name="Message">Message to Convert</param>
        /// <returns>Converted Message Text</returns>
        protected static string iConvertForumCode( yaf.pages.ForumPage basePage, string Message )
        {
            string tmp = "";
            bool bInCode = false;
            for ( int i = 0; i < Message.Length; i++ )
            {
                if ( Message [i] == '[' )
                {
                    int e1 = Message.IndexOf( ']', i );
                    int e2 = Message.IndexOf( '=', i );
                    if ( e1 > 0 )
                    {
                        bool bNone = false;
                        string cmd, arg = null;
                        if ( e2 < 0 || e2 > e1 )
                        {
                            cmd = Message.Substring( i + 1, e1 - i - 1 );
                            arg = null;
                        }
                        else
                        {
                            cmd = Message.Substring( i + 1, e2 - i - 1 );
                            arg = Message.Substring( e2 + 1, e1 - e2 - 1 );

                            arg = arg.Trim();
                            arg = basePage.Server.HtmlDecode( arg );
                            if ( arg.Length > 2 && arg [0] == '"' && arg [arg.Length - 1] == '"' )
                                arg = arg.Substring( 1, arg.Length - 2 );
                        }

                        cmd = cmd.ToLower();
                        if ( !bInCode || cmd == "/code" )
                        {
                            switch ( cmd )
                            {
                                case "b":
                                    tmp += "<b>";
                                    break;
                                case "/b":
                                    tmp += "</b>";
                                    break;
                                case "i":
                                    tmp += "<em>";
                                    break;
                                case "/i":
                                    tmp += "</em>";
                                    break;
                                case "u":
                                    tmp += "<u>";
                                    break;
                                case "/u":
                                    tmp += "</u>";
                                    break;
                                case "url":
                                    if ( arg != null )
                                    {
                                        if ( basePage.BoardSettings.BlankLinks )
                                            tmp += String.Format( "<a target=\"_blank\" href=\"{0}\">", arg );
                                        else
                                            tmp += String.Format( "<a target=\"_top\" href=\"{0}\">", arg );
                                    }
                                    else
                                        tmp += "<a>";
                                    break;
                                case "/url":
                                    tmp += "</a>";
                                    break;
                                case "img":
                                    tmp += "<img src=\"";
                                    break;
                                case "/img":
                                    tmp += "\"/>";
                                    break;
                                case "color":
                                    if ( arg != null )
                                        tmp += String.Format( "<span style=\"color:{0}\">", arg );
                                    else
                                        tmp += "<span>";
                                    break;
                                case "/color":
                                    tmp += "</span>";
                                    break;
                                case "code":
                                    tmp += "<pre>";
                                    bInCode = true;
                                    break;
                                case "/code":
                                    tmp += "</pre>";
                                    bInCode = false;
                                    break;
                                default:
                                    bNone = true;
                                    break;
                            }
                        }
                        else
                        {
                            bNone = true;
                        }
                        if ( !bNone )
                        {
                            i = e1;
                            continue;
                        }
                    }
                }
                tmp += Message [i];
            }

            return tmp;
        }
Example #7
0
 private void ViewMenu_ItemClick( object sender, yaf.controls.PopEventArgs e )
 {
     switch ( e.Item )
     {
         case "normal":
             IsThreaded = false;
             BindData();
             break;
         case "threaded":
             IsThreaded = true;
             BindData();
             break;
         default:
             throw new ApplicationException( e.Item );
     }
 }
Example #8
0
        /// <summary>
        /// Adds smiles into the code.
        /// </summary>
        /// <param name="basePagee">Forum base page</param>
        /// <param name="Message">Text to add smiles to.</param>
        /// <returns>Processed text with smiles added.</returns>
        public static string iAddSmiles( yaf.pages.ForumPage basePage, string Message )
        {
            DataTable dtSmileys = GetSmilies( basePage );
            string strTemp = Message;

            foreach ( DataRow row in dtSmileys.Rows )
            {
                string code = row ["Code"].ToString();

                code = code.Replace( "&", "&amp;" );
                code = code.Replace( "\"", "&quot;" );

                strTemp = strTemp.Replace( code.ToLower(), String.Format( "<img src=\"{0}\" alt=\"{1}\">", basePage.Smiley( Convert.ToString( row ["Icon"] ) ), basePage.Server.HtmlEncode( row ["Emoticon"].ToString() ) ) );
                strTemp = strTemp.Replace( code.ToUpper(), String.Format( "<img src=\"{0}\" alt=\"{1}\">", basePage.Smiley( Convert.ToString( row ["Icon"] ) ), basePage.Server.HtmlEncode( row ["Emoticon"].ToString() ) ) );
            }

            return strTemp;
        }
Example #9
0
 private void MyTestMenu_ItemClick( object sender, yaf.controls.PopEventArgs e )
 {
     switch ( e.Item )
     {
         case "print":
             Forum.Redirect( Pages.printtopic, "t={0}", PageTopicID );
             break;
         case "watch":
             TrackTopic_Click( sender, e );
             break;
         case "email":
             EmailTopic_Click( sender, e );
             break;
         case "rssfeed":
             Forum.Redirect( Pages.rsstopic, "pg={0}&t={1}", Request.QueryString ["g"], PageTopicID );
             break;
         default:
             throw new ApplicationException( e.Item );
     }
 }
Example #10
0
        public static DataTable TopicTimes( yaf.pages.ForumPage basePage )
        {
            using ( DataTable dt = new DataTable( "TopicTimes" ) )
            {
                dt.Columns.Add( "TopicText", typeof( string ) );
                dt.Columns.Add( "TopicValue", typeof( int ) );

                string [] tTextArray = { "all", "last_day", "last_two_days", "last_week", "last_two_weeks", "last_month", "last_two_months", "last_six_months", "last_year" };
                string [] tTextArrayProp = { "All", "Last Day", "Last Two Days", "Last Week", "Last Two Weeks", "Last Month", "Last Two Months", "Last Six Months", "Last Year" };

                for ( int i = 0; i < 8; i++ )
                {
                    DataRow dr = dt.NewRow();
                    dr ["TopicText"] = ( basePage == null ) ? tTextArrayProp [i] : basePage.GetText( tTextArray [i] );
                    dr ["TopicValue"] = i;
                    dt.Rows.Add( dr );
                }
                return dt;
            }
        }
Example #11
0
 void forumControl_PageTitleSet( object sender, yaf.pages.ForumPageArgs e )
 {
     if ( PageTitleSet != null ) PageTitleSet( this, e );
 }
Example #12
0
 public static DataTable GetSmilies(yaf.pages.ForumPage basePage)
 {
     DataTable dt = (DataTable)System.Web.HttpContext.Current.Cache["Smilies"];
     if(dt==null)
     {
         dt = DB.smiley_list(basePage.PageBoardID,null);
         System.Web.HttpContext.Current.Cache["Smilies"] = dt;
     }
     return dt;
 }
Example #13
0
        public static string MakeHtml(yaf.pages.ForumPage basePage,string bbcode,bool DoFormatting)
        {
            System.Collections.ArrayList codes = new System.Collections.ArrayList();
            const string codeFormat = ".code@{0}.";

            Match m = r_code2.Match(bbcode);
            int nCodes = 0;
            while(m.Success)
            {
                string before_replace = m.Groups[0].Value;
                string after_replace = m.Groups["inner"].Value;

                try
                {
                    HighLighter hl = new HighLighter();
                    hl.ReplaceEnter = true;
                    after_replace = hl.colorText(after_replace,System.Web.HttpContext.Current.Server.MapPath(Data.ForumRoot + "defs/"),m.Groups["language"].Value);
                }
                catch(Exception x)
                {
                    if(basePage.IsAdmin)
                        basePage.AddLoadMessage(x.Message);
                    after_replace = FixCode(after_replace);
                }

                bbcode = bbcode.Replace(before_replace,string.Format(codeFormat,nCodes++));
                codes.Add(string.Format("<div class='code'><b>Code:</b><div class='innercode'>{0}</div></div>",after_replace));
                m = r_code2.Match(bbcode);
            }

            m = r_code1.Match(bbcode);
            while(m.Success)
            {
                string before_replace = m.Groups[0].Value;
                string after_replace = FixCode(m.Groups["inner"].Value);
                bbcode = bbcode.Replace(before_replace,string.Format(codeFormat,nCodes++));
                codes.Add(string.Format("<div class='code'><b>Code:</b><div class='innercode'>{0}</div></div>",after_replace));
                m = r_code1.Match(bbcode);
            }

            m = r_size.Match(bbcode);

            while(m.Success)
            {
                ///Console.WriteLine("{0}",m.Groups["size"]);
                int i = GetNumber(m.Groups["size"].Value);
                string tmp;
                if(i<1)
                    tmp = m.Groups["inner"].Value;
                else if(i>9)
                    tmp = string.Format("<span style=\"font-size:{1}\">{0}</span>",m.Groups["inner"].Value,GetFontSize(9));
                else
                    tmp = string.Format("<span style=\"font-size:{1}\">{0}</span>",m.Groups["inner"].Value,GetFontSize(i));
                bbcode = bbcode.Substring(0,m.Groups[0].Index) + tmp + bbcode.Substring(m.Groups[0].Index + m.Groups[0].Length);
                m = r_size.Match(bbcode);
            }

            bbcode = FormatMsg.iAddSmiles(basePage,bbcode);

            if (DoFormatting)
            {
                NestedReplace(ref bbcode,r_bold,"<b>${inner}</b>");
                NestedReplace(ref bbcode,r_strike,"<s>${inner}</s>");
                NestedReplace(ref bbcode,r_italic,"<i>${inner}</i>");
                NestedReplace(ref bbcode,r_underline,"<u>${inner}</u>");
                // e-mails
                NestedReplace(ref bbcode,r_email2,"<a href=\"mailto:${email}\">${inner}</a>",new string[]{"email"});
                NestedReplace(ref bbcode,r_email1,"<a href=\"mailto:${inner}\">${inner}</a>");
                // urls
                if(basePage.BoardSettings.BlankLinks)
                {
                    NestedReplace(ref bbcode,r_url2,"<a target=\"_blank\" href=\"${http}${url}\">${inner}</a>",new string[]{"url","http"},new string[]{"","http://"});
                    NestedReplace(ref bbcode,r_url1,"<a target=\"_blank\" href=\"${http}${inner}\">${http}${inner}</a>",new string[]{"http"},new string[]{"http://"});
                }
                else
                {
                    NestedReplace(ref bbcode,r_url2,"<a href=\"${http}${url}\">${inner}</a>",new string[]{"url","http"},new string[]{"","http://"});
                    NestedReplace(ref bbcode,r_url1,"<a href=\"${http}${inner}\">${http}${inner}</a>",new string[]{"http"},new string[]{"http://"});
                }
                // font
                NestedReplace(ref bbcode,r_font,"<span style=\"font-family:${font}\">${inner}</span>",new string[]{"font"});
                NestedReplace(ref bbcode,r_color,"<span style=\"color:${color}\">${inner}</span>",new string[]{"color"});
                // bullets
                bbcode = r_bullet.Replace(bbcode,"<li>");
                NestedReplace(ref bbcode,r_list4,"<ol type=\"i\">${inner}</ol>");
                NestedReplace(ref bbcode,r_list3,"<ol type=\"a\">${inner}</ol>");
                NestedReplace(ref bbcode,r_list2,"<ol>${inner}</ol>");
                NestedReplace(ref bbcode,r_list2,"<ul>${inner}</ul>");
                // alignment
                NestedReplace(ref bbcode,r_center,"<div align=\"center\">${inner}</div>");
                NestedReplace(ref bbcode,r_left,"<div align=\"left\">${inner}</div>");
                NestedReplace(ref bbcode,r_right,"<div align=\"right\">${inner}</div>");
                // image
                NestedReplace(ref bbcode,r_img,"<img src=\"${inner}\"/>");

                bbcode = r_hr.Replace(bbcode,"<hr noshade/>");
                bbcode = r_br.Replace(bbcode,"<br/>");
            }

            while(r_quote2.IsMatch(bbcode))
                bbcode = r_quote2.Replace(bbcode,"<div class='quote'><b>${quote} wrote:</b><div class='innerquote'>${inner}</div></div>");
            while(r_quote1.IsMatch(bbcode))
                bbcode = r_quote1.Replace(bbcode,"<div class='quote'><b>Quote:</b><div class='innerquote'>${inner}</div></div>");

            m = r_post.Match(bbcode);
            while(m.Success)
            {
                string link = Forum.GetLink(Pages.posts,"m={0}#{0}",m.Groups["post"]);
                if(basePage.BoardSettings.BlankLinks)
                    bbcode = bbcode.Replace(m.Groups[0].ToString(),string.Format("<a target=\"_blank\" href=\"{0}\">{1}</a>",link,m.Groups["inner"]));
                else
                    bbcode = bbcode.Replace(m.Groups[0].ToString(),string.Format("<a href=\"{0}\">{1}</a>",link,m.Groups["inner"]));
                m = r_post.Match(bbcode);
            }

            m = r_topic.Match(bbcode);
            while(m.Success)
            {
                string link = Forum.GetLink(Pages.posts,"t={0}",m.Groups["topic"]);
                if(basePage.BoardSettings.BlankLinks)
                    bbcode = bbcode.Replace(m.Groups[0].ToString(),string.Format("<a target=\"_blank\" href=\"{0}\">{1}</a>",link,m.Groups["inner"]));
                else
                    bbcode = bbcode.Replace(m.Groups[0].ToString(),string.Format("<a href=\"{0}\">{1}</a>",link,m.Groups["inner"]));
                m = r_topic.Match(bbcode);
            }

            while(nCodes>0)
            {
                bbcode = bbcode.Replace(string.Format(codeFormat,--nCodes),codes[nCodes].ToString());
            }

            return bbcode;
        }