/// <summary>
 /// Handles the filters for closing html tags
 /// </summary>
 private void CloseTag(FilterBuffer b, int i, FilterTags Filters)
 {
     i = b.SkipWhiteSpace(i, true);
     b.Write(i);
     b.Write(Filters.Content.HTML);
     b.Seek(i);
 }
        /// <summary>
        /// This is the actual Response filter.
        /// </summary>
        /// <param name="b"></param>
        public void DoFilter(FilterBuffer b)
        {
            int j;

            foreach (object o in BkupList)
            {
                FwdList.Add(o);
            }
            if (FwdList.Count > 0)
            {
                int i = b.IndexOf('<');
                //TODO: Add backup.
                //TODO: handle multiple calls.
                while (i < b.Last)
                {
                    j = b.IndexOf('>', i);
                    while (InComment(b, i, j))
                    {
                        j = b.IndexOf('>', j + 1);
                    }
                    if (i < j)
                    {
                        i = b.IndexOf('<', HandleTag(b, i, j, b.ToString(i, j), FwdList));
                    }
                }
            }
            b.Write();
        }
 /// <summary>
 /// Handles the filters for opening html tags
 /// </summary>
 private void OpenTag(FilterBuffer b, int i, int j, string tag, FilterTags Filters)
 {
     b.Write(i);
     if (Filters.Replace != null)
     {
         tag = Filters.Replace.HTML;
     }
     foreach (FilterTag F in Filters.Attributes)
     {
         F.Substitute(ref tag);
     }
     b.Write(tag);
     if (Filters.Content != null)
     {
         b.Write(Filters.Content.HTML);
     }
     b.Seek(j + 1);
 }