/// <summary>
 /// If this element is a table, and there's nothing else before or after it and it's aligned left or right
 /// then removes the alignment.
 /// </summary>
 /// <param name="range">The original source range.</param>
 private void RemoveAlignmentIfSingleTable(MarkupRange range)
 {
     // WinLive 273280: Alignment on a table acts like a float, which can throw off the layout of the rest of
     // the document. If there is nothing before or after the table, then we can safely remove the alignment.
     IHTMLElement[] topLevelElements = range.GetTopLevelElements(e => !(e is IHTMLCommentElement));
     if (topLevelElements.Length == 1 &&
         topLevelElements[0] is IHTMLTable &&
         (String.Compare(topLevelElements[0].getAttribute("align", 2) as string, "left", StringComparison.OrdinalIgnoreCase) == 0 ||
          String.Compare(topLevelElements[0].getAttribute("align", 2) as string, "right", StringComparison.OrdinalIgnoreCase) == 0))
     {
         topLevelElements[0].removeAttribute("align", 0);
     }
 }
 public static IHTMLElement GetContainingSmartContentElement(MarkupRange range)
 {
     IHTMLElement containingSmartContent = range.ParentElement(IsSmartContentContainer);
     if (containingSmartContent != null)
     {
         return containingSmartContent;
     }
     else
     {
         IHTMLElement[] elements = range.GetTopLevelElements(MarkupRange.FilterNone);
         if (elements.Length == 1 && IsSmartContent(elements[0]))
         {
             return elements[0];
         }
     }
     return null;
 }