OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. |
3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 820 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
831 | 831 |
832 if (!text.isEmpty()) | 832 if (!text.isEmpty()) |
833 updateMarkersForWordsAffectedByEditing(isSpaceOrNewline(text[0])); | 833 updateMarkersForWordsAffectedByEditing(isSpaceOrNewline(text[0])); |
834 | 834 |
835 // Get the selection to use for the event that triggered this insertText. | 835 // Get the selection to use for the event that triggered this insertText. |
836 // If the event handler changed the selection, we may want to use a differen
t selection | 836 // If the event handler changed the selection, we may want to use a differen
t selection |
837 // that is contained in the event target. | 837 // that is contained in the event target. |
838 selection = selectionForCommand(triggeringEvent); | 838 selection = selectionForCommand(triggeringEvent); |
839 if (selection.isContentEditable()) { | 839 if (selection.isContentEditable()) { |
840 if (Node* selectionStart = selection.start().deprecatedNode()) { | 840 if (Node* selectionStart = selection.start().deprecatedNode()) { |
841 RefPtr<Document> document = selectionStart->document(); | 841 RefPtr<Document> document = &selectionStart->document(); |
842 | 842 |
843 // Insert the text | 843 // Insert the text |
844 TypingCommand::Options options = 0; | 844 TypingCommand::Options options = 0; |
845 if (selectInsertedText) | 845 if (selectInsertedText) |
846 options |= TypingCommand::SelectInsertedText; | 846 options |= TypingCommand::SelectInsertedText; |
847 TypingCommand::insertText(document.get(), text, selection, options,
triggeringEvent && triggeringEvent->isComposition() ? TypingCommand::TextComposi
tionConfirm : TypingCommand::TextCompositionNone); | 847 TypingCommand::insertText(document.get(), text, selection, options,
triggeringEvent && triggeringEvent->isComposition() ? TypingCommand::TextComposi
tionConfirm : TypingCommand::TextCompositionNone); |
848 | 848 |
849 // Reveal the current selection | 849 // Reveal the current selection |
850 if (Frame* editedFrame = document->frame()) { | 850 if (Frame* editedFrame = document->frame()) { |
851 if (Page* page = editedFrame->page()) | 851 if (Page* page = editedFrame->page()) |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
974 // clear the "start new kill ring sequence" setting, because it was set to t
rue | 974 // clear the "start new kill ring sequence" setting, because it was set to t
rue |
975 // when the selection was updated by deleting the range | 975 // when the selection was updated by deleting the range |
976 setStartNewKillRingSequence(false); | 976 setStartNewKillRingSequence(false); |
977 } | 977 } |
978 | 978 |
979 void Editor::simplifyMarkup(Node* startNode, Node* endNode) | 979 void Editor::simplifyMarkup(Node* startNode, Node* endNode) |
980 { | 980 { |
981 if (!startNode) | 981 if (!startNode) |
982 return; | 982 return; |
983 if (endNode) { | 983 if (endNode) { |
984 if (startNode->document() != endNode->document()) | 984 if (&startNode->document() != &endNode->document()) |
985 return; | 985 return; |
986 // check if start node is before endNode | 986 // check if start node is before endNode |
987 Node* node = startNode; | 987 Node* node = startNode; |
988 while (node && node != endNode) | 988 while (node && node != endNode) |
989 node = NodeTraversal::next(node); | 989 node = NodeTraversal::next(node); |
990 if (!node) | 990 if (!node) |
991 return; | 991 return; |
992 } | 992 } |
993 | 993 |
994 applyCommand(SimplifyMarkupCommand::create(m_frame->document(), startNode, (
endNode) ? NodeTraversal::next(endNode) : 0)); | 994 applyCommand(SimplifyMarkupCommand::create(m_frame->document(), startNode, (
endNode) ? NodeTraversal::next(endNode) : 0)); |
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1595 bool resultEndsAtAmbiguousBoundary = ambiguousBoundaryOffset >= 0 && res
ultLocation + resultLength == ambiguousBoundaryOffset; | 1595 bool resultEndsAtAmbiguousBoundary = ambiguousBoundaryOffset >= 0 && res
ultLocation + resultLength == ambiguousBoundaryOffset; |
1596 | 1596 |
1597 // Only mark misspelling if: | 1597 // Only mark misspelling if: |
1598 // 1. Current text checking isn't done for autocorrection, in which case
shouldMarkSpelling is false. | 1598 // 1. Current text checking isn't done for autocorrection, in which case
shouldMarkSpelling is false. |
1599 // 2. Result falls within spellingRange. | 1599 // 2. Result falls within spellingRange. |
1600 // 3. The word in question doesn't end at an ambiguous boundary. For ins
tance, we would not mark | 1600 // 3. The word in question doesn't end at an ambiguous boundary. For ins
tance, we would not mark |
1601 // "wouldn'" as misspelled right after apostrophe is typed. | 1601 // "wouldn'" as misspelled right after apostrophe is typed. |
1602 if (shouldMarkSpelling && result->type == TextCheckingTypeSpelling && re
sultLocation >= paragraph.checkingStart() && resultLocation + resultLength <= sp
ellingRangeEndOffset && !resultEndsAtAmbiguousBoundary) { | 1602 if (shouldMarkSpelling && result->type == TextCheckingTypeSpelling && re
sultLocation >= paragraph.checkingStart() && resultLocation + resultLength <= sp
ellingRangeEndOffset && !resultEndsAtAmbiguousBoundary) { |
1603 ASSERT(resultLength > 0 && resultLocation >= 0); | 1603 ASSERT(resultLength > 0 && resultLocation >= 0); |
1604 RefPtr<Range> misspellingRange = paragraph.subrange(resultLocation,
resultLength); | 1604 RefPtr<Range> misspellingRange = paragraph.subrange(resultLocation,
resultLength); |
1605 misspellingRange->startContainer()->document()->markers()->addMarker
(misspellingRange.get(), DocumentMarker::Spelling, result->replacement, result->
hash); | 1605 misspellingRange->startContainer()->document().markers()->addMarker(
misspellingRange.get(), DocumentMarker::Spelling, result->replacement, result->h
ash); |
1606 } else if (shouldMarkGrammar && result->type == TextCheckingTypeGrammar
&& paragraph.checkingRangeCovers(resultLocation, resultLength)) { | 1606 } else if (shouldMarkGrammar && result->type == TextCheckingTypeGrammar
&& paragraph.checkingRangeCovers(resultLocation, resultLength)) { |
1607 ASSERT(resultLength > 0 && resultLocation >= 0); | 1607 ASSERT(resultLength > 0 && resultLocation >= 0); |
1608 for (unsigned j = 0; j < result->details.size(); j++) { | 1608 for (unsigned j = 0; j < result->details.size(); j++) { |
1609 const GrammarDetail* detail = &result->details[j]; | 1609 const GrammarDetail* detail = &result->details[j]; |
1610 ASSERT(detail->length > 0 && detail->location >= 0); | 1610 ASSERT(detail->length > 0 && detail->location >= 0); |
1611 if (paragraph.checkingRangeCovers(resultLocation + detail->locat
ion, detail->length)) { | 1611 if (paragraph.checkingRangeCovers(resultLocation + detail->locat
ion, detail->length)) { |
1612 RefPtr<Range> badGrammarRange = paragraph.subrange(resultLoc
ation + detail->location, detail->length); | 1612 RefPtr<Range> badGrammarRange = paragraph.subrange(resultLoc
ation + detail->location, detail->length); |
1613 badGrammarRange->startContainer()->document()->markers()->ad
dMarker(badGrammarRange.get(), DocumentMarker::Grammar, detail->userDescription,
result->hash); | 1613 badGrammarRange->startContainer()->document().markers()->add
Marker(badGrammarRange.get(), DocumentMarker::Grammar, detail->userDescription,
result->hash); |
1614 } | 1614 } |
1615 } | 1615 } |
1616 } | 1616 } |
1617 } | 1617 } |
1618 | 1618 |
1619 if (selectionChanged) { | 1619 if (selectionChanged) { |
1620 TextCheckingParagraph extendedParagraph(paragraph); | 1620 TextCheckingParagraph extendedParagraph(paragraph); |
1621 // Restore the caret position if we have made any replacements | 1621 // Restore the caret position if we have made any replacements |
1622 extendedParagraph.expandRangeToNextEnd(); | 1622 extendedParagraph.expandRangeToNextEnd(); |
1623 if (restoreSelectionAfterChange && selectionOffset >= 0 && selectionOffs
et <= extendedParagraph.rangeLength()) { | 1623 if (restoreSelectionAfterChange && selectionOffset >= 0 && selectionOffs
et <= extendedParagraph.rangeLength()) { |
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2202 return WebCore::unifiedTextCheckerEnabled(m_frame); | 2202 return WebCore::unifiedTextCheckerEnabled(m_frame); |
2203 } | 2203 } |
2204 | 2204 |
2205 void Editor::toggleOverwriteModeEnabled() | 2205 void Editor::toggleOverwriteModeEnabled() |
2206 { | 2206 { |
2207 m_overwriteModeEnabled = !m_overwriteModeEnabled; | 2207 m_overwriteModeEnabled = !m_overwriteModeEnabled; |
2208 frame().selection()->setShouldShowBlockCursor(m_overwriteModeEnabled); | 2208 frame().selection()->setShouldShowBlockCursor(m_overwriteModeEnabled); |
2209 }; | 2209 }; |
2210 | 2210 |
2211 } // namespace WebCore | 2211 } // namespace WebCore |
OLD | NEW |