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 "WebPageProxy.h" 34 #include <wtf/text/WTFString.h> 35 36 namespace WebKit { 37 38 bool WebTextCheckerClient::continuousSpellCheckingAllowed() 39 { 40 if (!m_client.continuousSpellCheckingAllowed) 41 return false; 42 43 return m_client.continuousSpellCheckingAllowed(m_client.clientInfo); 44 } 45 46 bool WebTextCheckerClient::continuousSpellCheckingEnabled() 47 { 48 if (!m_client.continuousSpellCheckingEnabled) 49 return false; 50 51 return m_client.continuousSpellCheckingEnabled(m_client.clientInfo); 52 } 53 54 void WebTextCheckerClient::setContinuousSpellCheckingEnabled(bool enabled) 55 { 56 if (!m_client.setContinuousSpellCheckingEnabled) 57 return; 58 59 m_client.setContinuousSpellCheckingEnabled(enabled, m_client.clientInfo); 60 } 61 62 bool WebTextCheckerClient::grammarCheckingEnabled() 63 { 64 if (!m_client.grammarCheckingEnabled) 65 return false; 66 67 return m_client.grammarCheckingEnabled(m_client.clientInfo); 68 } 69 70 void WebTextCheckerClient::setGrammarCheckingEnabled(bool enabled) 71 { 72 if (!m_client.setGrammarCheckingEnabled) 73 return; 74 75 m_client.setGrammarCheckingEnabled(enabled, m_client.clientInfo); 76 } 77 78 uint64_t WebTextCheckerClient::uniqueSpellDocumentTag(WebPageProxy* page) 79 { 80 if (!m_client.uniqueSpellDocumentTag) 81 return 0; 82 83 return m_client.uniqueSpellDocumentTag(toAPI(page), m_client.clientInfo); 84 } 85 86 void WebTextCheckerClient::closeSpellDocumentWithTag(uint64_t tag) 87 { 88 if (!m_client.closeSpellDocumentWithTag) 89 return; 90 91 m_client.closeSpellDocumentWithTag(tag, m_client.clientInfo); 92 } 93 94 void WebTextCheckerClient::checkSpellingOfString(uint64_t tag, const String& text, int32_t& misspellingLocation, int32_t& misspellingLength) 95 { 96 if (!m_client.checkSpellingOfString) 97 return; 98 99 m_client.checkSpellingOfString(tag, toAPI(text.impl()), &misspellingLocation, &misspellingLength, m_client.clientInfo); 100 } 101 102 void WebTextCheckerClient::checkGrammarOfString(uint64_t tag, const String& text, Vector<WebCore::GrammarDetail>& grammarDetails, int32_t& badGrammarLocation, int32_t& badGrammarLength) 103 { 104 if (!m_client.checkGrammarOfString) 105 return; 106 107 WKArrayRef wkGrammarDetailsRef = 0; 108 m_client.checkGrammarOfString(tag, toAPI(text.impl()), &wkGrammarDetailsRef, &badGrammarLocation, &badGrammarLength, m_client.clientInfo); 109 110 RefPtr<ImmutableArray> wkGrammarDetails = adoptRef(toImpl(wkGrammarDetailsRef)); 111 size_t numGrammarDetails = wkGrammarDetails->size(); 112 for (size_t i = 0; i < numGrammarDetails; ++i) 113 grammarDetails.append(wkGrammarDetails->at<WebGrammarDetail>(i)->grammarDetail()); 114 } 115 116 bool WebTextCheckerClient::spellingUIIsShowing() 117 { 118 if (!m_client.spellingUIIsShowing) 119 return false; 120 121 return m_client.spellingUIIsShowing(m_client.clientInfo); 122 } 123 124 void WebTextCheckerClient::toggleSpellingUIIsShowing() 125 { 126 if (!m_client.toggleSpellingUIIsShowing) 127 return; 128 129 return m_client.toggleSpellingUIIsShowing(m_client.clientInfo); 130 } 131 132 void WebTextCheckerClient::updateSpellingUIWithMisspelledWord(uint64_t tag, const String& misspelledWord) 133 { 134 if (!m_client.updateSpellingUIWithMisspelledWord) 135 return; 136 137 m_client.updateSpellingUIWithMisspelledWord(tag, toAPI(misspelledWord.impl()), m_client.clientInfo); 138 } 139 140 void WebTextCheckerClient::updateSpellingUIWithGrammarString(uint64_t tag, const String& badGrammarPhrase, const WebCore::GrammarDetail& grammarDetail) 141 { 142 if (!m_client.updateSpellingUIWithGrammarString) 143 return; 144 145 m_client.updateSpellingUIWithGrammarString(tag, toAPI(badGrammarPhrase.impl()), toAPI(grammarDetail), m_client.clientInfo); 146 } 147 148 void WebTextCheckerClient::guessesForWord(uint64_t tag, const String& word, Vector<String>& guesses) 149 { 150 if (!m_client.guessesForWord) 151 return; 152 153 RefPtr<ImmutableArray> wkGuesses = adoptRef(toImpl(m_client.guessesForWord(tag, toAPI(word.impl()), m_client.clientInfo))); 154 size_t numGuesses = wkGuesses->size(); 155 for (size_t i = 0; i < numGuesses; ++i) 156 guesses.append(wkGuesses->at<WebString>(i)->string()); 157 } 158 159 void WebTextCheckerClient::learnWord(uint64_t tag, const String& word) 160 { 161 if (!m_client.learnWord) 162 return; 163 164 m_client.learnWord(tag, toAPI(word.impl()), m_client.clientInfo); 165 } 166 167 void WebTextCheckerClient::ignoreWord(uint64_t tag, const String& word) 168 { 169 if (!m_client.ignoreWord) 170 return; 171 172 m_client.ignoreWord(tag, toAPI(word.impl()), m_client.clientInfo); 173 } 174 175 } // namespace WebKit 176