LayoutTests:
[WebKit-https.git] / WebCore / editing / Editor.cpp
index d13a58963cfdb8f139ea10760b41acc3fc7b0a77..d2cbe5803893bd09e0351575db4d04bf595c6e26 100644 (file)
 #include "config.h"
 #include "Editor.h"
 
+#include "ApplyStyleCommand.h"
+#include "CSSComputedStyleDeclaration.h"
 #include "DeleteButtonController.h"
+#include "Document.h"
+#include "DocumentFragment.h"
 #include "EditorClient.h"
+#include "EditCommand.h"
 #include "htmlediting.h"
 #include "HTMLElement.h"
 #include "HTMLNames.h"
+#include "markup.h"
 #include "Range.h"
+#include "ReplaceSelectionCommand.h"
 #include "SelectionController.h"
 #include "Sound.h"
 
@@ -198,6 +205,33 @@ Frame::TriState Editor::selectionOrderedListState() const
     return Frame::falseTriState;
 }
 
+void Editor::removeFormattingAndStyle()
+{
+    Document* document = frame()->document();
+    
+    // Make a plain text string from the selection to remove formatting like tables and lists.
+    RefPtr<DocumentFragment> text = createFragmentFromText(frame()->selectionController()->toRange().get(), frame()->selectionController()->toString());
+    
+    // Put the fragment made from that string into a style span with the document's
+    // default style to make sure that it is unstyled regardless of where it is inserted.
+    Position pos(document->documentElement(), 0);
+    RefPtr<CSSComputedStyleDeclaration> computedStyle = pos.computedStyle();
+    RefPtr<CSSMutableStyleDeclaration> defaultStyle = computedStyle->copyInheritableProperties();
+    
+    RefPtr<Element> span = createStyleSpanElement(document);
+    span->setAttribute(styleAttr, defaultStyle->cssText());
+    
+    ExceptionCode ec;
+    
+    while (text->lastChild())
+        span->appendChild(text->lastChild(), ec);
+    
+    RefPtr<DocumentFragment> fragment = new DocumentFragment(document);
+    fragment->appendChild(span, ec);
+    
+    applyCommand(new ReplaceSelectionCommand(document, fragment, false, false, false, true, EditActionUnspecified));
+}
+
 // =============================================================================
 //
 // public editing commands