printf("Don't know how to set selection back past frame boundary\n");
PRINTF("Don't know how to set selection back past frame boundary\n");
nsSelection::DeleteFromDocument(){  nsresult res;  // If we're already collapsed, then set ourselves to include the  // last item BEFORE the current range, rather than the range itself,  // before we do the delete.  PRBool isCollapsed;  PRInt8 index = GetIndexFromSelectionType(nsISelectionController::SELECTION_NORMAL);  mDomSelections[index]->GetIsCollapsed( &isCollapsed);  if (isCollapsed)  {    // If the offset is positive, then it's easy:    if (mDomSelections[index]->FetchFocusOffset() > 0)    {      mDomSelections[index]->Extend(mDomSelections[index]->FetchFocusNode(), mDomSelections[index]->FetchFocusOffset() - 1);    }    else    {      // Otherwise it's harder, have to find the previous node      printf("Sorry, don't know how to delete across frame boundaries yet\n");      return NS_ERROR_NOT_IMPLEMENTED;    }  }  // Get an iterator  nsSelectionIterator iter(mDomSelections[index]);  res = iter.First();  if (!NS_SUCCEEDED(res))    return res;  nsCOMPtr<nsIDOMRange> range;  while (iter.IsDone())  {    res = iter.CurrentItem(NS_STATIC_CAST(nsIDOMRange**, getter_AddRefs(range)));    if (!NS_SUCCEEDED(res))      return res;    res = range->DeleteContents();    if (!NS_SUCCEEDED(res))      return res;    iter.Next();  }  // Collapse to the new location.  // If we deleted one character, then we move back one element.  // FIXME  We don't know how to do this past frame boundaries yet.  if (isCollapsed)    mDomSelections[index]->Collapse(mDomSelections[index]->FetchAnchorNode(), mDomSelections[index]->FetchAnchorOffset()-1);  else if (mDomSelections[index]->FetchAnchorOffset() > 0)    mDomSelections[index]->Collapse(mDomSelections[index]->FetchAnchorNode(), mDomSelections[index]->FetchAnchorOffset());#ifdef DEBUG  else    printf("Don't know how to set selection back past frame boundary\n");#endif  return NS_OK;}