Warning, /frameworks/sonnet/src/plugins/nsspellchecker/nsspellcheckerdict.mm is written in an unsupported language. File is not indexed.
0001 /* 0002 * nsspellcheckerdict.mm 0003 * 0004 * SPDX-FileCopyrightText: 2015 Nick Shaforostoff <shaforostoff@gmail.com> 0005 * 0006 * SPDX-License-Identifier: LGPL-2.1-or-later 0007 */ 0008 #include "nsspellcheckerdict.h" 0009 #include "nsspellcheckerdebug.h" 0010 0011 #import <AppKit/AppKit.h> 0012 0013 using namespace Sonnet; 0014 0015 NSSpellCheckerDict::NSSpellCheckerDict(const QString &lang) 0016 : SpellerPlugin(lang) 0017 , m_langCode([lang.toNSString() retain]) 0018 { 0019 NSSpellChecker *checker = [NSSpellChecker sharedSpellChecker]; 0020 if ([checker setLanguage:m_langCode]) { 0021 qCDebug(SONNET_NSSPELLCHECKER) << "Loading dictionary for" << lang; 0022 [checker updatePanels]; 0023 } else { 0024 qCWarning(SONNET_NSSPELLCHECKER) << "Loading dictionary for unsupported language" << lang; 0025 } 0026 } 0027 0028 NSSpellCheckerDict::~NSSpellCheckerDict() 0029 { 0030 [m_langCode release]; 0031 } 0032 0033 bool NSSpellCheckerDict::isCorrect(const QString &word) const 0034 { 0035 NSString *nsWord = word.toNSString(); 0036 NSSpellChecker *checker = [NSSpellChecker sharedSpellChecker]; 0037 NSRange range = [checker checkSpellingOfString:nsWord 0038 startingAt:0 language:m_langCode 0039 wrap:NO inSpellDocumentWithTag:0 wordCount:nullptr]; 0040 if (range.length == 0) { 0041 // Check if the user configured a replacement text for this string. Sadly 0042 // we can only signal an error if that's the case, Sonnet has no other way 0043 // to take such substitutions into account. 0044 if (NSDictionary *replacements = [checker userReplacementsDictionary]) { 0045 return [replacements objectForKey:nsWord] == nil; 0046 } else { 0047 return true; 0048 } 0049 } 0050 return false; 0051 } 0052 0053 QStringList NSSpellCheckerDict::suggest(const QString &word) const 0054 { 0055 NSString *nsWord = word.toNSString(); 0056 NSSpellChecker *checker = [NSSpellChecker sharedSpellChecker]; 0057 NSArray *suggestions = [checker guessesForWordRange:NSMakeRange(0, word.length()) 0058 inString:nsWord language:m_langCode inSpellDocumentWithTag:0]; 0059 QStringList lst; 0060 NSDictionary *replacements = [checker userReplacementsDictionary]; 0061 QString replacement; 0062 if ([replacements objectForKey:nsWord]) { 0063 // return the replacement text from the userReplacementsDictionary first. 0064 replacement = QString::fromNSString([replacements valueForKey:nsWord]); 0065 lst << replacement; 0066 } 0067 for (NSString *suggestion in suggestions) { 0068 // the replacement text from the userReplacementsDictionary will be in 0069 // the suggestions list; don't add it again. 0070 QString str = QString::fromNSString(suggestion); 0071 if (str != replacement) { 0072 lst << str; 0073 } 0074 } 0075 return lst; 0076 } 0077 0078 bool NSSpellCheckerDict::storeReplacement(const QString &bad, 0079 const QString &good) 0080 { 0081 qCDebug(SONNET_NSSPELLCHECKER) << "Not storing replacement" << good << "for" << bad; 0082 return false; 0083 } 0084 0085 bool NSSpellCheckerDict::addToPersonal(const QString &word) 0086 { 0087 NSString *nsWord = word.toNSString(); 0088 NSSpellChecker *checker = [NSSpellChecker sharedSpellChecker]; 0089 if (![checker hasLearnedWord:nsWord]) { 0090 [checker learnWord:nsWord]; 0091 [checker updatePanels]; 0092 } 0093 return true; 0094 } 0095 0096 bool NSSpellCheckerDict::addToSession(const QString &word) 0097 { 0098 qCDebug(SONNET_NSSPELLCHECKER) << "Not storing" << word << "in the session dictionary"; 0099 return false; 0100 }