Index: Source/core/editing/Editor.cpp |
diff --git a/Source/core/editing/Editor.cpp b/Source/core/editing/Editor.cpp |
index b287f8108e69d9454ecc7dd356ee4ff4fc14457a..9bbc1f14ce565e3967f4f96271cb57016a02d0d6 100644 |
--- a/Source/core/editing/Editor.cpp |
+++ b/Source/core/editing/Editor.cpp |
@@ -21,7 +21,7 @@ |
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include "config.h" |
@@ -145,7 +145,7 @@ bool Editor::handleTextEvent(TextEvent* event) |
if (event->isPaste()) { |
if (event->pastingFragment()) |
replaceSelectionWithFragment(event->pastingFragment(), false, event->shouldSmartReplace(), event->shouldMatchStyle()); |
- else |
+ else |
replaceSelectionWithText(event->data(), false, event->shouldSmartReplace()); |
return true; |
} |
@@ -201,14 +201,14 @@ static HTMLImageElement* imageElementFromImageDocument(Document* document) |
return 0; |
if (!document->isImageDocument()) |
return 0; |
- |
+ |
HTMLElement* body = document->body(); |
if (!body) |
return 0; |
- |
+ |
Node* node = body->firstChild(); |
if (!node) |
- return 0; |
+ return 0; |
if (!node->hasTagName(imgTag)) |
return 0; |
return toHTMLImageElement(node); |
@@ -239,7 +239,7 @@ bool Editor::canDeleteRange(Range* range) const |
Node* endContainer = range->endContainer(); |
if (!startContainer || !endContainer) |
return false; |
- |
+ |
if (!startContainer->rendererIsEditable() || !endContainer->rendererIsEditable()) |
return false; |
@@ -254,10 +254,10 @@ bool Editor::canDeleteRange(Range* range) const |
} |
bool Editor::smartInsertDeleteEnabled() |
-{ |
+{ |
return client() && client()->smartInsertDeleteEnabled(); |
} |
- |
+ |
bool Editor::canSmartCopyOrDelete() |
{ |
return client() && client()->smartInsertDeleteEnabled() && m_frame->selection()->granularity() == WordGranularity; |
@@ -315,7 +315,7 @@ void Editor::deleteSelectionWithSmartDelete(bool smartDelete) |
{ |
if (m_frame->selection()->isNone()) |
return; |
- |
+ |
applyCommand(DeleteSelectionCommand::create(m_frame->document(), smartDelete)); |
} |
@@ -365,11 +365,11 @@ bool Editor::shouldInsertFragment(PassRefPtr<DocumentFragment> fragment, PassRef |
{ |
if (!client()) |
return false; |
- |
+ |
if (fragment) { |
Node* child = fragment->firstChild(); |
if (child && fragment->lastChild() == child && child->isCharacterDataNode()) |
- return client()->shouldInsertText(static_cast<CharacterData*>(child)->data(), replacingDOMRange.get(), givenAction); |
+ return client()->shouldInsertText(static_cast<CharacterData*>(child)->data(), replacingDOMRange.get(), givenAction); |
} |
return client()->shouldInsertNode(fragment.get(), replacingDOMRange.get(), givenAction); |
@@ -402,7 +402,7 @@ void Editor::replaceSelectionWithFragment(PassRefPtr<DocumentFragment> fragment, |
void Editor::replaceSelectionWithText(const String& text, bool selectReplacement, bool smartReplace) |
{ |
- replaceSelectionWithFragment(createFragmentFromText(selectedRange().get(), text), selectReplacement, smartReplace, true); |
+ replaceSelectionWithFragment(createFragmentFromText(selectedRange().get(), text), selectReplacement, smartReplace, true); |
} |
PassRefPtr<Range> Editor::selectedRange() |
@@ -416,7 +416,7 @@ bool Editor::shouldDeleteRange(Range* range) const |
{ |
if (!range || range->collapsed(IGNORE_EXCEPTION)) |
return false; |
- |
+ |
if (!canDeleteRange(range)) |
return false; |
@@ -424,7 +424,7 @@ bool Editor::shouldDeleteRange(Range* range) const |
} |
bool Editor::tryDHTMLCopy() |
-{ |
+{ |
if (m_frame->selection()->isInPasswordField()) |
return false; |
@@ -435,7 +435,7 @@ bool Editor::tryDHTMLCut() |
{ |
if (m_frame->selection()->isInPasswordField()) |
return false; |
- |
+ |
return !dispatchCPPEvent(eventNames().cutEvent, ClipboardWritable); |
} |
@@ -504,7 +504,7 @@ PassRefPtr<Node> Editor::insertOrderedList() |
{ |
if (!canEditRichly()) |
return 0; |
- |
+ |
RefPtr<Node> newList = InsertListCommand::insertList(m_frame->document(), InsertListCommand::OrderedList); |
revealSelectionAfterEditingOperation(); |
return newList; |
@@ -514,7 +514,7 @@ PassRefPtr<Node> Editor::insertUnorderedList() |
{ |
if (!canEditRichly()) |
return 0; |
- |
+ |
RefPtr<Node> newList = InsertListCommand::insertList(m_frame->document(), InsertListCommand::UnorderedList); |
revealSelectionAfterEditingOperation(); |
return newList; |
@@ -534,7 +534,7 @@ PassRefPtr<Node> Editor::increaseSelectionListLevel() |
{ |
if (!canEditRichly() || m_frame->selection()->isNone()) |
return 0; |
- |
+ |
RefPtr<Node> newList = IncreaseSelectionListLevelCommand::increaseSelectionListLevel(m_frame->document()); |
revealSelectionAfterEditingOperation(); |
return newList; |
@@ -544,7 +544,7 @@ PassRefPtr<Node> Editor::increaseSelectionListLevelOrdered() |
{ |
if (!canEditRichly() || m_frame->selection()->isNone()) |
return 0; |
- |
+ |
RefPtr<Node> newList = IncreaseSelectionListLevelCommand::increaseSelectionListLevelOrdered(m_frame->document()); |
revealSelectionAfterEditingOperation(); |
return newList.release(); |
@@ -554,7 +554,7 @@ PassRefPtr<Node> Editor::increaseSelectionListLevelUnordered() |
{ |
if (!canEditRichly() || m_frame->selection()->isNone()) |
return 0; |
- |
+ |
RefPtr<Node> newList = IncreaseSelectionListLevelCommand::increaseSelectionListLevelUnordered(m_frame->document()); |
revealSelectionAfterEditingOperation(); |
return newList.release(); |
@@ -564,7 +564,7 @@ void Editor::decreaseSelectionListLevel() |
{ |
if (!canEditRichly() || m_frame->selection()->isNone()) |
return; |
- |
+ |
DecreaseSelectionListLevelCommand::decreaseSelectionListLevel(m_frame->document()); |
revealSelectionAfterEditingOperation(); |
} |
@@ -574,19 +574,19 @@ void Editor::removeFormattingAndStyle() |
applyCommand(RemoveFormatCommand::create(m_frame->document())); |
} |
-void Editor::clearLastEditCommand() |
+void Editor::clearLastEditCommand() |
{ |
m_lastEditCommand.clear(); |
} |
-// Returns whether caller should continue with "the default processing", which is the same as |
+// Returns whether caller should continue with "the default processing", which is the same as |
// the event handler NOT setting the return value to false |
bool Editor::dispatchCPPEvent(const AtomicString &eventType, ClipboardAccessPolicy policy) |
{ |
Node* target = findEventTargetFromSelection(); |
if (!target) |
return true; |
- |
+ |
RefPtr<Clipboard> clipboard = newGeneralClipboard(policy, m_frame); |
RefPtr<Event> evt = ClipboardEvent::create(eventType, true, true, clipboard); |
@@ -600,7 +600,7 @@ bool Editor::dispatchCPPEvent(const AtomicString &eventType, ClipboardAccessPoli |
// invalidate clipboard here for security |
clipboard->setAccessPolicy(ClipboardNumb); |
- |
+ |
return !noDefaultProcessing; |
} |
@@ -635,12 +635,12 @@ void Editor::applyStyle(StylePropertySet* style, EditAction editingAction) |
break; |
} |
} |
- |
+ |
bool Editor::shouldApplyStyle(StylePropertySet* style, Range* range) |
-{ |
+{ |
return client()->shouldApplyStyle(style, range); |
} |
- |
+ |
void Editor::applyParagraphStyle(StylePropertySet* style, EditAction editingAction) |
{ |
switch (m_frame->selection()->selectionType()) { |
@@ -668,7 +668,7 @@ void Editor::applyParagraphStyleToSelection(StylePropertySet* style, EditAction |
{ |
if (!style || style->isEmpty() || !canEditRichly()) |
return; |
- |
+ |
if (client() && client()->shouldApplyStyle(style, m_frame->selection()->toNormalizedRange().get())) |
applyParagraphStyle(style, editingAction); |
} |
@@ -978,7 +978,7 @@ void Editor::simplifyMarkup(Node* startNode, Node* endNode) |
if (!node) |
return; |
} |
- |
+ |
applyCommand(SimplifyMarkupCommand::create(m_frame->document(), startNode, (endNode) ? NodeTraversal::next(endNode) : 0)); |
} |
@@ -1108,7 +1108,7 @@ WritingDirection Editor::baseWritingDirectionForSelectionStart() const |
case RTL: |
return RightToLeftWritingDirection; |
} |
- |
+ |
return result; |
} |
@@ -1117,7 +1117,7 @@ void Editor::selectComposition() |
RefPtr<Range> range = compositionRange(); |
if (!range) |
return; |
- |
+ |
// The composition can start inside a composed character sequence, so we have to override checks. |
// See <http://bugs.webkit.org/show_bug.cgi?id=15781> |
VisibleSelection selection; |
@@ -1179,7 +1179,7 @@ void Editor::finishComposition(const String& text, FinishCompositionMode mode) |
setIgnoreCompositionSelectionChange(false); |
return; |
} |
- |
+ |
// Dispatch a compositionend event to the focused node. |
// We should send this event before sending a TextEvent as written in Section 6.2.2 and 6.2.3 of |
// the DOM Event specification. |
@@ -1292,7 +1292,7 @@ void Editor::setComposition(const String& text, const Vector<CompositionUnderlin |
unsigned start = min(baseOffset + selectionStart, extentOffset); |
unsigned end = min(max(start, baseOffset + selectionEnd), extentOffset); |
- RefPtr<Range> selectedRange = Range::create(baseNode->document(), baseNode, start, baseNode, end); |
+ RefPtr<Range> selectedRange = Range::create(baseNode->document(), baseNode, start, baseNode, end); |
m_frame->selection()->setSelectedRange(selectedRange.get(), DOWNSTREAM, false); |
} |
} |
@@ -1304,7 +1304,7 @@ void Editor::ignoreSpelling() |
{ |
if (!client()) |
return; |
- |
+ |
RefPtr<Range> selectedRange = frame()->selection()->toNormalizedRange(); |
if (selectedRange) |
frame()->document()->markers()->removeMarkers(selectedRange.get(), DocumentMarker::Spelling); |
@@ -1314,7 +1314,7 @@ void Editor::advanceToNextMisspelling(bool startBeforeSelection) |
{ |
// The basic approach is to search in two phases - from the selection end to the end of the doc, and |
// then we wrap and search from the doc start to (approximately) where we started. |
- |
+ |
// Start at the end of the selection, search to edge of document. Starting at the selection end makes |
// repeated "check spelling" commands work. |
VisibleSelection selection(frame()->selection()->selection()); |
@@ -1336,20 +1336,20 @@ void Editor::advanceToNextMisspelling(bool startBeforeSelection) |
if (!isEditablePosition(position)) { |
// This shouldn't happen in very often because the Spelling menu items aren't enabled unless the |
// selection is editable. |
- // This can happen in Mail for a mix of non-editable and editable content (like Stationary), |
+ // This can happen in Mail for a mix of non-editable and editable content (like Stationary), |
// when spell checking the whole document before sending the message. |
// In that case the document might not be editable, but there are editable pockets that need to be spell checked. |
position = firstEditablePositionAfterPositionInRoot(position, frame()->document()->documentElement()).deepEquivalent(); |
if (position.isNull()) |
return; |
- |
+ |
Position rangeCompliantPosition = position.parentAnchoredEquivalent(); |
spellingSearchRange->setStart(rangeCompliantPosition.deprecatedNode(), rangeCompliantPosition.deprecatedEditingOffset(), IGNORE_EXCEPTION); |
startedWithSelection = false; // won't need to wrap |
} |
- |
- // topNode defines the whole range we want to operate on |
+ |
+ // topNode defines the whole range we want to operate on |
Node* topNode = highestEditableRoot(position); |
// FIXME: lastOffsetForEditing() is wrong here if editingIgnoresContent(highestEditableRoot()) returns true (e.g. a <table>) |
spellingSearchRange->setEnd(topNode, lastOffsetForEditing(topNode), IGNORE_EXCEPTION); |
@@ -1365,17 +1365,17 @@ void Editor::advanceToNextMisspelling(bool startBeforeSelection) |
if (spellingSearchRange->collapsed(IGNORE_EXCEPTION)) |
return; // nothing to search in |
- |
+ |
// Get the spell checker if it is available |
if (!client()) |
return; |
- |
+ |
// We go to the end of our first range instead of the start of it, just to be sure |
// we don't get foiled by any word boundary problems at the start. It means we might |
// do a tiny bit more searching. |
Node* searchEndNodeAfterWrap = spellingSearchRange->endContainer(); |
int searchEndOffsetAfterWrap = spellingSearchRange->endOffset(); |
- |
+ |
int misspellingOffset = 0; |
GrammarDetail grammarDetail; |
int grammarPhraseOffset = 0; |
@@ -1406,18 +1406,18 @@ void Editor::advanceToNextMisspelling(bool startBeforeSelection) |
chars.advance(misspellingOffset); |
grammarSearchRange->setEnd(chars.range()->startContainer(), chars.range()->startOffset(), IGNORE_EXCEPTION); |
} |
- |
+ |
if (isGrammarCheckingEnabled()) |
badGrammarPhrase = TextCheckingHelper(client(), grammarSearchRange).findFirstBadGrammar(grammarDetail, grammarPhraseOffset, false); |
} |
- |
+ |
// If we found neither bad grammar nor a misspelled word, wrap and try again (but don't bother if we started at the beginning of the |
// block rather than at a selection). |
if (startedWithSelection && !misspelledWord && !badGrammarPhrase) { |
spellingSearchRange->setStart(topNode, 0, IGNORE_EXCEPTION); |
// going until the end of the very first chunk we tested is far enough |
spellingSearchRange->setEnd(searchEndNodeAfterWrap, searchEndOffsetAfterWrap, IGNORE_EXCEPTION); |
- |
+ |
if (unifiedTextCheckerEnabled()) { |
grammarSearchRange = spellingSearchRange->cloneRange(IGNORE_EXCEPTION); |
foundItem = TextCheckingHelper(client(), spellingSearchRange).findFirstMisspellingOrBadGrammar(isGrammarCheckingEnabled(), isSpelling, foundOffset, grammarDetail); |
@@ -1442,29 +1442,29 @@ void Editor::advanceToNextMisspelling(bool startBeforeSelection) |
badGrammarPhrase = TextCheckingHelper(client(), grammarSearchRange).findFirstBadGrammar(grammarDetail, grammarPhraseOffset, false); |
} |
} |
- |
+ |
if (!badGrammarPhrase.isEmpty()) { |
// We found bad grammar. Since we only searched for bad grammar up to the first misspelled word, the bad grammar |
// takes precedence and we ignore any potential misspelled word. Select the grammar detail, update the spelling |
// panel, and store a marker so we draw the green squiggle later. |
- |
+ |
ASSERT(badGrammarPhrase.length() > 0); |
ASSERT(grammarDetail.location != -1 && grammarDetail.length > 0); |
- |
+ |
// FIXME 4859190: This gets confused with doubled punctuation at the end of a paragraph |
RefPtr<Range> badGrammarRange = TextIterator::subrange(grammarSearchRange.get(), grammarPhraseOffset + grammarDetail.location, grammarDetail.length); |
frame()->selection()->setSelection(VisibleSelection(badGrammarRange.get(), SEL_DEFAULT_AFFINITY)); |
frame()->selection()->revealSelection(); |
- |
+ |
frame()->document()->markers()->addMarker(badGrammarRange.get(), DocumentMarker::Grammar, grammarDetail.userDescription); |
} else if (!misspelledWord.isEmpty()) { |
// We found a misspelling, but not any earlier bad grammar. Select the misspelling, update the spelling panel, and store |
// a marker so we draw the red squiggle later. |
- |
+ |
RefPtr<Range> misspellingRange = TextIterator::subrange(spellingSearchRange.get(), misspellingOffset, misspelledWord.length()); |
frame()->selection()->setSelection(VisibleSelection(misspellingRange.get(), DOWNSTREAM)); |
frame()->selection()->revealSelection(); |
- |
+ |
client()->updateSpellingUIWithMisspelledWord(misspelledWord); |
frame()->document()->markers()->addMarker(misspellingRange.get(), DocumentMarker::Spelling); |
} |
@@ -1511,7 +1511,7 @@ void Editor::showSpellingGuessPanel() |
client()->showSpellingUI(false); |
return; |
} |
- |
+ |
advanceToNextMisspelling(true); |
client()->showSpellingUI(true); |
} |
@@ -1563,7 +1563,7 @@ void Editor::markMisspellingsAfterTypingToWord(const VisiblePosition &wordStart, |
// Autocorrect the misspelled word. |
if (!misspellingRange) |
return; |
- |
+ |
// Get the misspelled word. |
const String misspelledWord = plainText(misspellingRange.get()); |
String autocorrectedString = textChecker()->getAutoCorrectSuggestionForMisspelledWord(misspelledWord); |
@@ -1588,25 +1588,25 @@ void Editor::markMisspellingsAfterTypingToWord(const VisiblePosition &wordStart, |
if (!isGrammarCheckingEnabled()) |
return; |
- |
+ |
// Check grammar of entire sentence |
markBadGrammar(VisibleSelection(startOfSentence(wordStart), endOfSentence(wordStart))); |
} |
- |
+ |
void Editor::markMisspellingsOrBadGrammar(const VisibleSelection& selection, bool checkSpelling, RefPtr<Range>& firstMisspellingRange) |
{ |
// This function is called with a selection already expanded to word boundaries. |
// Might be nice to assert that here. |
- |
+ |
// This function is used only for as-you-type checking, so if that's off we do nothing. Note that |
// grammar checking can only be on if spell checking is also on. |
if (!isContinuousSpellCheckingEnabled()) |
return; |
- |
+ |
RefPtr<Range> searchRange(selection.toNormalizedRange()); |
if (!searchRange) |
return; |
- |
+ |
// If we're not in an editable node, bail. |
Node* editableNode = searchRange->startContainer(); |
if (!editableNode || !editableNode->rendererIsEditable()) |
@@ -1618,7 +1618,7 @@ void Editor::markMisspellingsOrBadGrammar(const VisibleSelection& selection, boo |
// Get the spell checker if it is available |
if (!client()) |
return; |
- |
+ |
TextCheckingHelper checker(client(), searchRange); |
if (checkSpelling) |
checker.markAllMisspellings(firstMisspellingRange); |
@@ -1645,7 +1645,7 @@ void Editor::markMisspellings(const VisibleSelection& selection, RefPtr<Range>& |
{ |
markMisspellingsOrBadGrammar(selection, true, firstMisspellingRange); |
} |
- |
+ |
void Editor::markBadGrammar(const VisibleSelection& selection) |
{ |
RefPtr<Range> firstMisspellingRange; |
@@ -1818,7 +1818,7 @@ void Editor::updateMarkersForWordsAffectedByEditing(bool doNotRemoveIfSelectionA |
startOfFirstWord = startOfWord(startOfSelection, RightWordIfOnBoundary); |
endOfFirstWord = endOfWord(startOfSelection, RightWordIfOnBoundary); |
} |
- |
+ |
if (endOfLastWord.isNull()) { |
startOfLastWord = startOfWord(endOfSelection, LeftWordIfOnBoundary); |
endOfLastWord = endOfWord(endOfSelection, LeftWordIfOnBoundary); |
@@ -1862,7 +1862,7 @@ PassRefPtr<Range> Editor::rangeForPoint(const IntPoint& windowPoint) |
Document* document = m_frame->documentAtPoint(windowPoint); |
if (!document) |
return 0; |
- |
+ |
Frame* frame = document->frame(); |
ASSERT(frame); |
FrameView* frameView = frame->view(); |
@@ -2319,7 +2319,7 @@ bool Editor::selectionStartHasMarkerFor(DocumentMarker::MarkerType markerType, i |
} |
return false; |
-} |
+} |
TextCheckingTypeMask Editor::resolveTextCheckingTypeMask(TextCheckingTypeMask textCheckingOptions) |
{ |