2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 #ifndef SpellChecker_h
27 #define SpellChecker_h
29 #include "core/CoreExport.h"
30 #include "core/dom/DocumentMarker.h"
31 #include "core/editing/FrameSelection.h"
32 #include "core/editing/VisibleSelection.h"
33 #include "platform/heap/Handle.h"
34 #include "platform/text/TextChecking.h"
39 class SpellCheckerClient
;
40 class SpellCheckRequest
;
41 class SpellCheckRequester
;
42 class TextCheckerClient
;
43 class TextCheckingParagraph
;
44 struct TextCheckingResult
;
46 class CORE_EXPORT SpellChecker final
: public NoBaseWillBeGarbageCollectedFinalized
<SpellChecker
> {
47 WTF_MAKE_NONCOPYABLE(SpellChecker
);
49 static PassOwnPtrWillBeRawPtr
<SpellChecker
> create(LocalFrame
&);
54 SpellCheckerClient
& spellCheckerClient() const;
55 TextCheckerClient
& textChecker() const;
57 bool isContinuousSpellCheckingEnabled() const;
58 void toggleContinuousSpellChecking();
59 bool isGrammarCheckingEnabled();
60 void ignoreSpelling();
61 bool isSpellCheckingEnabledInFocusedNode() const;
62 bool isSpellCheckingEnabledFor(Node
*) const;
63 void markMisspellingsAfterLineBreak(const VisibleSelection
& wordSelection
);
64 void markMisspellingsAfterTypingToWord(const VisiblePosition
&wordStart
, const VisibleSelection
& selectionAfterTyping
);
65 void markMisspellings(const VisibleSelection
&, RefPtrWillBeRawPtr
<Range
>& firstMisspellingRange
);
66 void markBadGrammar(const VisibleSelection
&);
67 void markMisspellingsAndBadGrammar(const VisibleSelection
& spellingSelection
, bool markGrammar
, const VisibleSelection
& grammarSelection
);
68 void markAndReplaceFor(PassRefPtrWillBeRawPtr
<SpellCheckRequest
>, const Vector
<TextCheckingResult
>&);
69 void markAllMisspellingsAndBadGrammarInRanges(TextCheckingTypeMask
, Range
* spellingRange
, Range
* grammarRange
);
70 void advanceToNextMisspelling(bool startBeforeSelection
= false);
71 void showSpellingGuessPanel();
72 void didBeginEditing(Element
*);
73 void clearMisspellingsAndBadGrammar(const VisibleSelection
&);
74 void markMisspellingsAndBadGrammar(const VisibleSelection
&);
75 void respondToChangedSelection(const VisibleSelection
& oldSelection
, FrameSelection::SetSelectionOptions
);
76 void replaceMisspelledRange(const String
&);
77 void removeSpellingMarkers();
78 void removeSpellingMarkersUnderWords(const Vector
<String
>& words
);
79 void spellCheckAfterBlur();
80 void spellCheckOldSelection(const VisibleSelection
& oldSelection
, const VisibleSelection
& newAdjacentWords
);
82 void didEndEditingOnTextField(Element
*);
83 bool selectionStartHasMarkerFor(DocumentMarker::MarkerType
, int from
, int length
) const;
84 bool selectionStartHasSpellingMarkerFor(int from
, int length
) const;
85 void updateMarkersForWordsAffectedByEditing(bool onlyHandleWordsContainingSelection
);
87 void chunkAndMarkAllMisspellingsAndBadGrammar(Node
*);
88 void requestTextChecking(const Element
&);
90 // Exposed for testing only
91 SpellCheckRequester
& spellCheckRequester() const { return *m_spellCheckRequester
; }
94 explicit SpellChecker(LocalFrame
&);
96 LocalFrame
& frame() const
102 void markMisspellingsOrBadGrammar(const VisibleSelection
&, bool checkSpelling
, RefPtrWillBeRawPtr
<Range
>& firstMisspellingRange
);
103 TextCheckingTypeMask
resolveTextCheckingTypeMask(TextCheckingTypeMask
);
105 void removeMarkers(const VisibleSelection
&, DocumentMarker::MarkerTypes
);
106 bool unifiedTextCheckerEnabled() const;
108 void chunkAndMarkAllMisspellingsAndBadGrammar(TextCheckingTypeMask textCheckingOptions
, const TextCheckingParagraph
& fullParagraphToCheck
, bool asynchronous
);
109 void markAllMisspellingsAndBadGrammarInRanges(TextCheckingTypeMask textCheckingOptions
, Range
* checkingRange
, Range
* paragraphRange
, bool asynchronous
, int requestNumber
, int* checkingLength
= 0);
111 RawPtrWillBeMember
<LocalFrame
> m_frame
;
112 const OwnPtrWillBeMember
<SpellCheckRequester
> m_spellCheckRequester
;
117 #endif // SpellChecker_h