1/* 2 * Copyright (C) 2012-2013 Samsung Electronics 3 * Copyright (C) 2012 Intel Corporation 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 15 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 16 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 23 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#include "config.h" 28#include "ewk_text_checker.h" 29 30#if ENABLE(SPELLCHECK) 31#include "TextCheckerClientEfl.h" 32 33using namespace WebKit; 34 35static Eina_List* convertLanguagesToEinaList(const Vector<String>& languages) 36{ 37 Eina_List* listOflanguages = 0; 38 size_t numberOfLanguages = languages.size(); 39 40 for (size_t i = 0; i < numberOfLanguages; ++i) 41 listOflanguages = eina_list_append(listOflanguages, eina_stringshare_add(languages[i].utf8().data())); 42 43 return listOflanguages; 44} 45 46#define EWK_TEXT_CHECKER_CALLBACK_SET(TYPE_NAME, NAME) \ 47void ewk_text_checker_##NAME##_cb_set(TYPE_NAME cb) \ 48{ \ 49 TextCheckerClientEfl::instance().clientCallbacks().NAME = cb; \ 50} 51 52#else 53 54// Defines an empty API to do not break build. 55#define EWK_TEXT_CHECKER_CALLBACK_SET(TYPE_NAME, NAME) \ 56void ewk_text_checker_##NAME##_cb_set(TYPE_NAME) \ 57{ \ 58} 59#endif // ENABLE(SPELLCHECK) 60 61Eina_Bool ewk_text_checker_continuous_spell_checking_enabled_get() 62{ 63#if ENABLE(SPELLCHECK) 64 return TextCheckerClientEfl::instance().isContinuousSpellCheckingEnabled(); 65#else 66 return false; 67#endif 68} 69 70void ewk_text_checker_continuous_spell_checking_enabled_set(Eina_Bool enable) 71{ 72#if ENABLE(SPELLCHECK) 73 WKTextCheckerContinuousSpellCheckingEnabledStateChanged(!!enable); 74#else 75 UNUSED_PARAM(enable); 76#endif 77} 78 79Eina_List* ewk_text_checker_spell_checking_available_languages_get() 80{ 81 Eina_List* listOflanguages = 0; 82#if ENABLE(SPELLCHECK) 83 // FIXME: Expose WK2 C API to get available spell checking languages. 84 listOflanguages = convertLanguagesToEinaList(TextCheckerClientEfl::instance().availableSpellCheckingLanguages()); 85#endif 86 return listOflanguages; 87} 88 89void ewk_text_checker_spell_checking_languages_set(const char* languages) 90{ 91#if ENABLE(SPELLCHECK) 92 Vector<String> newLanguages; 93 String::fromUTF8(languages).split(',', newLanguages); 94 95 // FIXME: Expose WK2 C API to set spell checking languages. 96 TextCheckerClientEfl::instance().updateSpellCheckingLanguages(newLanguages); 97#else 98 UNUSED_PARAM(languages); 99#endif 100} 101 102Eina_List* ewk_text_checker_spell_checking_languages_get() 103{ 104 Eina_List* listOflanguages = 0; 105#if ENABLE(SPELLCHECK) 106 // FIXME: Expose WK2 C API to get loaded spell checking languages. 107 listOflanguages = convertLanguagesToEinaList(TextCheckerClientEfl::instance().loadedSpellCheckingLanguages()); 108#endif 109 return listOflanguages; 110} 111 112EWK_TEXT_CHECKER_CALLBACK_SET(Ewk_Text_Checker_Continuous_Spell_Checking_Change_Cb, continuous_spell_checking_change) 113EWK_TEXT_CHECKER_CALLBACK_SET(Ewk_Text_Checker_Unique_Spell_Document_Tag_Get_Cb, unique_spell_document_tag_get) 114EWK_TEXT_CHECKER_CALLBACK_SET(Ewk_Text_Checker_Unique_Spell_Document_Tag_Close_Cb, unique_spell_document_tag_close) 115EWK_TEXT_CHECKER_CALLBACK_SET(Ewk_Text_Checker_String_Spelling_Check_Cb, string_spelling_check) 116EWK_TEXT_CHECKER_CALLBACK_SET(Ewk_Text_Checker_Word_Guesses_Get_Cb, word_guesses_get) 117EWK_TEXT_CHECKER_CALLBACK_SET(Ewk_Text_Checker_Word_Learn_Cb, word_learn) 118EWK_TEXT_CHECKER_CALLBACK_SET(Ewk_Text_Checker_Word_Ignore_Cb, word_ignore) 119