181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch/*
281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Copyright (C) 2010 Google Inc. All rights reserved.
581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *
681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Redistribution and use in source and binary forms, with or without
781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * modification, are permitted provided that the following conditions
881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * are met:
981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 1. Redistributions of source code must retain the above copyright
1081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *    notice, this list of conditions and the following disclaimer.
1181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 2. Redistributions in binary form must reproduce the above copyright
1281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *    notice, this list of conditions and the following disclaimer in the
1381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *    documentation and/or other materials provided with the distribution.
1481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *
1581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch */
2781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#ifndef TextCheckerClient_h
2981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#define TextCheckerClient_h
3081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
312bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "TextChecking.h"
322bde8e466a4451c7319e3a072d118917957d6554Steve Block
3381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <wtf/Forward.h>
3481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <wtf/Vector.h>
3581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <wtf/text/WTFString.h>
3681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
3781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochnamespace WebCore {
3881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
3981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass SpellChecker;
4081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
4181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochstruct GrammarDetail {
4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    int location;
4381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    int length;
4481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    Vector<String> guesses;
4581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    String userDescription;
4681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch};
4781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
4881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochstruct TextCheckingResult {
4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    TextCheckingType type;
5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    int location;
5181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    int length;
5281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    Vector<GrammarDetail> details;
5381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    String replacement;
5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch};
5581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
5681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass TextCheckerClient {
5781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochpublic:
5881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual ~TextCheckerClient() {}
5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void ignoreWordInSpellDocument(const String&) = 0;
6181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void learnWord(const String&) = 0;
6281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void checkSpellingOfString(const UChar*, int length, int* misspellingLocation, int* misspellingLength) = 0;
6381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual String getAutoCorrectSuggestionForMisspelledWord(const String& misspelledWord) = 0;
6481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void checkGrammarOfString(const UChar*, int length, Vector<GrammarDetail>&, int* badGrammarLocation, int* badGrammarLength) = 0;
652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
662bde8e466a4451c7319e3a072d118917957d6554Steve Block#if USE(UNIFIED_TEXT_CHECKING)
672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void checkTextOfParagraph(const UChar* text, int length, TextCheckingTypeMask checkingTypes, Vector<TextCheckingResult>& results) = 0;
6881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif
6981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
7081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // For spellcheckers that support multiple languages, it's often important to be able to identify the language in order to
7181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // provide more accurate correction suggestions. Caller can pass in more text in "context" to aid such spellcheckers on language
7281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // identification. Noramlly it's the text surrounding the "word" for which we are getting correction suggestions.
7381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    virtual void getGuessesForWord(const String& word, const String& context, Vector<String>& guesses) = 0;
742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual void requestCheckingOfString(SpellChecker*, int, TextCheckingTypeMask, const String&) = 0;
7581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch};
7681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
7781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
7881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
7981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif // TextCheckerClient_h
80