KDECore
speller.cpp
Go to the documentation of this file.00001 // -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; -*- 00021 #include "speller.h" 00022 00023 #include "loader_p.h" 00024 #include "settings_p.h" 00025 #include "spellerplugin_p.h" 00026 00027 #include <kconfig.h> 00028 00029 namespace Sonnet 00030 { 00031 00032 class Speller::Private 00033 { 00034 public: 00035 ~Private() 00036 { 00037 delete dict; 00038 dict = 0; 00039 } 00040 void init(const QString &lang) 00041 { 00042 Loader *loader = Loader::openLoader(); 00043 settings = loader->settings(); 00044 00045 language = lang; 00046 00047 if (language.isEmpty()) 00048 language = settings->defaultLanguage(); 00049 00050 dict = loader->createSpeller(language); 00051 } 00052 bool isValid() 00053 { 00054 if (settings->modified()) { 00055 recreateDict(); 00056 settings->setModified(false); 00057 } 00058 return dict; 00059 } 00060 void recreateDict() 00061 { 00062 delete dict; 00063 dict = Loader::openLoader()->createSpeller(language); 00064 } 00065 00066 SpellerPlugin *dict; 00067 Settings *settings; 00068 00069 QString language; 00070 }; 00071 00072 Speller::Speller(const QString &lang) 00073 : d(new Private) 00074 { 00075 d->init(lang); 00076 } 00077 00078 00079 Speller::~Speller() 00080 { 00081 //qDebug()<<"deleting "<<this; 00082 delete d; 00083 } 00084 00085 00086 Speller::Speller(const Speller &speller) 00087 : d(new Private) 00088 { 00089 d->language = speller.language(); 00090 d->init(d->language); 00091 } 00092 00093 00094 Speller & Speller::operator=(const Speller &speller) 00095 { 00096 d->language = speller.language(); 00097 d->recreateDict(); 00098 return *this; 00099 } 00100 00101 00102 bool Speller::isCorrect(const QString &word) const 00103 { 00104 if (!d->isValid()) 00105 return true; 00106 return d->dict->isCorrect(word); 00107 } 00108 00109 00110 bool Speller::isMisspelled(const QString &word) const 00111 { 00112 if (!d->isValid()) 00113 return false; 00114 return d->dict->isMisspelled(word); 00115 } 00116 00117 QStringList Speller::suggest(const QString &word) const 00118 { 00119 if (!d->isValid()) 00120 return QStringList(); 00121 return d->dict->suggest(word); 00122 } 00123 00124 bool Speller::checkAndSuggest(const QString &word, 00125 QStringList &suggestions) const 00126 { 00127 if (!d->isValid()) 00128 return true; 00129 return d->dict->checkAndSuggest(word, suggestions); 00130 } 00131 00132 00133 bool Speller::storeReplacement(const QString &bad, 00134 const QString &good) 00135 { 00136 if (!d->isValid()) 00137 return false; 00138 return d->dict->storeReplacement(bad, good); 00139 } 00140 00141 00142 bool Speller::addToPersonal(const QString &word) 00143 { 00144 if (!d->isValid()) 00145 return false; 00146 return d->dict->addToPersonal(word); 00147 } 00148 00149 00150 bool Speller::addToSession(const QString &word) 00151 { 00152 if (!d->isValid()) 00153 return false; 00154 return d->dict->addToSession(word); 00155 } 00156 00157 00158 QString Speller::language() const 00159 { 00160 if (!d->isValid()) 00161 return QString(); 00162 return d->dict->language(); 00163 } 00164 00165 00166 void Speller::save(KConfig *config) 00167 { 00168 if (d->settings) { 00169 d->settings->save(config); 00170 } 00171 } 00172 00173 00174 void Speller::restore(KConfig *config) 00175 { 00176 if (d->settings) { 00177 d->settings->restore(config); 00178 d->recreateDict(); 00179 } 00180 } 00181 00182 00183 QStringList Speller::availableBackends() const 00184 { 00185 Loader *l = Loader::openLoader(); 00186 return l->clients(); 00187 } 00188 00189 00190 QStringList Speller::availableLanguages() const 00191 { 00192 Loader *l = Loader::openLoader(); 00193 return l->languages(); 00194 } 00195 00196 00197 QStringList Speller::availableLanguageNames() const 00198 { 00199 Loader *l = Loader::openLoader(); 00200 return l->languageNames(); 00201 } 00202 00203 00204 void Speller::setDefaultLanguage(const QString &lang) 00205 { 00206 d->settings->setDefaultLanguage(lang); 00207 } 00208 00209 00210 QString Speller::defaultLanguage() const 00211 { 00212 return d->settings->defaultLanguage(); 00213 } 00214 00215 00216 void Speller::setDefaultClient(const QString &client) 00217 { 00218 d->settings->setDefaultClient(client); 00219 } 00220 00221 00222 QString Speller::defaultClient() const 00223 { 00224 return d->settings->defaultClient(); 00225 } 00226 00227 00228 void Speller::setAttribute(Attribute attr, bool b) 00229 { 00230 switch (attr) { 00231 case CheckUppercase: 00232 d->settings->setCheckUppercase(b); 00233 break; 00234 case SkipRunTogether: 00235 d->settings->setSkipRunTogether(b); 00236 break; 00237 } 00238 } 00239 00240 00241 bool Speller::testAttribute(Attribute attr) const 00242 { 00243 switch (attr) { 00244 case CheckUppercase: 00245 return d->settings->checkUppercase(); 00246 break; 00247 case SkipRunTogether: 00248 return d->settings->skipRunTogether(); 00249 break; 00250 } 00251 return false; 00252 } 00253 00254 bool Speller::isValid() const 00255 { 00256 return d->dict; 00257 } 00258 00259 void Speller::setLanguage(const QString &lang) 00260 { 00261 d->language = lang; 00262 d->recreateDict(); 00263 } 00264 00265 } 00266 00267 00268