aee57e116bcd8965d13de99a7cec6b250acae0f1
[WebKit-https.git] / Source / WebKit2 / UIProcess / win / WebTextCheckerClient.cpp
1 /*
2  * Copyright (C) 2011 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
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.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "WebTextCheckerClient.h"
28
29 #include "ImmutableArray.h"
30 #include "WKAPICast.h"
31 #include "WKSharedAPICast.h"
32 #include "WebGrammarDetail.h"
33 #include <wtf/text/WTFString.h>
34
35 namespace WebKit {
36
37 bool WebTextCheckerClient::continuousSpellCheckingAllowed()
38 {
39     if (!m_client.continuousSpellCheckingAllowed)
40         return false;
41
42     return m_client.continuousSpellCheckingAllowed(m_client.clientInfo);
43 }
44
45 bool WebTextCheckerClient::continuousSpellCheckingEnabled()
46 {
47     if (!m_client.continuousSpellCheckingEnabled)
48         return false;
49
50     return m_client.continuousSpellCheckingEnabled(m_client.clientInfo);
51 }
52
53 void WebTextCheckerClient::setContinuousSpellCheckingEnabled(bool enabled)
54 {
55     if (!m_client.setContinuousSpellCheckingEnabled)
56         return;
57
58     m_client.setContinuousSpellCheckingEnabled(enabled, m_client.clientInfo);
59 }
60
61 bool WebTextCheckerClient::grammarCheckingEnabled()
62 {
63     if (!m_client.grammarCheckingEnabled)
64         return false;
65
66     return m_client.grammarCheckingEnabled(m_client.clientInfo);
67 }
68
69 void WebTextCheckerClient::setGrammarCheckingEnabled(bool enabled)
70 {
71     if (!m_client.setGrammarCheckingEnabled)
72         return;
73
74     m_client.setGrammarCheckingEnabled(enabled, m_client.clientInfo);
75 }
76
77 uint64_t WebTextCheckerClient::uniqueSpellDocumentTag()
78 {
79     if (!m_client.uniqueSpellDocumentTag)
80         return 0;
81
82     return m_client.uniqueSpellDocumentTag(m_client.clientInfo);
83 }
84
85 void WebTextCheckerClient::closeSpellDocumentWithTag(uint64_t tag)
86 {
87     if (!m_client.closeSpellDocumentWithTag)
88         return;
89
90     m_client.closeSpellDocumentWithTag(tag, m_client.clientInfo);
91 }
92
93 void WebTextCheckerClient::checkSpellingOfString(uint64_t tag, const String& text, int32_t& misspellingLocation, int32_t& misspellingLength)
94 {
95     if (!m_client.checkSpellingOfString)
96         return;
97
98     m_client.checkSpellingOfString(tag, toAPI(text.impl()), &misspellingLocation, &misspellingLength, m_client.clientInfo);
99 }
100
101 void WebTextCheckerClient::checkGrammarOfString(uint64_t tag, const String& text, Vector<WebCore::GrammarDetail>& grammarDetails, int32_t& badGrammarLocation, int32_t& badGrammarLength)
102 {
103     if (!m_client.checkGrammarOfString)
104         return;
105
106     WKArrayRef wkGrammarDetailsRef = 0;
107     m_client.checkGrammarOfString(tag, toAPI(text.impl()), &wkGrammarDetailsRef, &badGrammarLocation, &badGrammarLength, m_client.clientInfo);
108
109     RefPtr<ImmutableArray> wkGrammarDetails = adoptRef(toImpl(wkGrammarDetailsRef));
110     size_t numGrammarDetails = wkGrammarDetails->size();
111     for (size_t i = 0; i < numGrammarDetails; ++i)
112         grammarDetails.append(wkGrammarDetails->at<WebGrammarDetail>(i)->grammarDetail());
113 }
114
115 } // namespace WebKit