• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • kdelibs
  • Sitemap
  • Contact Us
 

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 #include <kglobal.h>
00029 #include <klocale.h>
00030 #include <QLocale>
00031 #include <QSet>
00032 #include <QDebug>
00033 
00034 namespace Sonnet
00035 {
00036 
00037 class Speller::Private
00038 {
00039 public:
00040     ~Private()
00041     {
00042         delete dict;
00043         dict = 0;
00044     }
00045     void init(const QString &lang)
00046     {
00047         Loader *loader = Loader::openLoader();
00048         settings = loader->settings();
00049 
00050         language = lang;
00051 
00052         if (language.isEmpty())
00053             language = settings->defaultLanguage();
00054 
00055         dict = loader->createSpeller(language);
00056     }
00057     bool isValid()
00058     {
00059         if (settings->modified()) {
00060             recreateDict();
00061             settings->setModified(false);
00062         }
00063         return dict;
00064     }
00065     void recreateDict()
00066     {
00067         delete dict;
00068         dict = Loader::openLoader()->createSpeller(language);
00069     }
00070 
00071     SpellerPlugin *dict;
00072     Settings      *settings;
00073 
00074     QString        language;
00075 };
00076 
00077 Speller::Speller(const QString &lang)
00078     : d(new Private)
00079 {
00080     d->init(lang);
00081 }
00082 
00083 
00084 Speller::~Speller()
00085 {
00086     //qDebug()<<"deleting "<<this;
00087     delete d;
00088 }
00089 
00090 
00091 Speller::Speller(const Speller &speller)
00092     : d(new Private)
00093 {
00094     d->language = speller.language();
00095     d->init(d->language);
00096 }
00097 
00098 
00099 Speller & Speller::operator=(const Speller &speller)
00100 {
00101     d->language = speller.language();
00102     d->recreateDict();
00103     return *this;
00104 }
00105 
00106 
00107 bool Speller::isCorrect(const QString &word) const
00108 {
00109     if (!d->isValid())
00110         return true;
00111     return d->dict->isCorrect(word);
00112 }
00113 
00114 
00115 bool Speller::isMisspelled(const QString &word) const
00116 {
00117     if (!d->isValid())
00118         return false;
00119     return d->dict->isMisspelled(word);
00120 }
00121 
00122 QStringList Speller::suggest(const QString &word) const
00123 {
00124     if (!d->isValid())
00125         return QStringList();
00126     return d->dict->suggest(word);
00127 }
00128 
00129 bool Speller::checkAndSuggest(const QString &word,
00130                               QStringList &suggestions) const
00131 {
00132     if (!d->isValid())
00133         return true;
00134     return d->dict->checkAndSuggest(word, suggestions);
00135 }
00136 
00137 
00138 bool Speller::storeReplacement(const QString &bad,
00139                                const QString &good)
00140 {
00141     if (!d->isValid())
00142         return false;
00143     return d->dict->storeReplacement(bad, good);
00144 }
00145 
00146 
00147 bool Speller::addToPersonal(const QString &word)
00148 {
00149     if (!d->isValid())
00150         return false;
00151     return d->dict->addToPersonal(word);
00152 }
00153 
00154 
00155 bool Speller::addToSession(const QString &word)
00156 {
00157     if (!d->isValid())
00158         return false;
00159     return d->dict->addToSession(word);
00160 }
00161 
00162 
00163 QString Speller::language() const
00164 {
00165     if (!d->isValid())
00166         return QString();
00167     return d->dict->language();
00168 }
00169 
00170 
00171 void Speller::save(KConfig *config)
00172 {
00173     if (d->settings) {
00174         d->settings->save(config);
00175     }
00176 }
00177 
00178 
00179 void Speller::restore(KConfig *config)
00180 {
00181     if (d->settings) {
00182         d->settings->restore(config);
00183         d->recreateDict();
00184     }
00185 }
00186 
00187 
00188 QStringList Speller::availableBackends() const
00189 {
00190     Loader *l = Loader::openLoader();
00191     return l->clients();
00192 }
00193 
00194 
00195 QStringList Speller::availableLanguages() const
00196 {
00197     Loader *l = Loader::openLoader();
00198     return l->languages();
00199 }
00200 
00201 
00202 QStringList Speller::availableLanguageNames() const
00203 {
00204     Loader *l = Loader::openLoader();
00205     return l->languageNames();
00206 }
00207 
00208 
00209 void Speller::setDefaultLanguage(const QString &lang)
00210 {
00211     d->settings->setDefaultLanguage(lang);
00212 }
00213 
00214 
00215 QString Speller::defaultLanguage() const
00216 {
00217     return d->settings->defaultLanguage();
00218 }
00219 
00220 
00221 void Speller::setDefaultClient(const QString &client)
00222 {
00223     d->settings->setDefaultClient(client);
00224 }
00225 
00226 
00227 QString Speller::defaultClient() const
00228 {
00229     return d->settings->defaultClient();
00230 }
00231 
00232 
00233 void Speller::setAttribute(Attribute attr, bool b)
00234 {
00235     switch (attr) {
00236     case CheckUppercase:
00237         d->settings->setCheckUppercase(b);
00238         break;
00239     case SkipRunTogether:
00240         d->settings->setSkipRunTogether(b);
00241         break;
00242     }
00243 }
00244 
00245 
00246 bool Speller::testAttribute(Attribute attr) const
00247 {
00248     switch (attr) {
00249     case CheckUppercase:
00250         return d->settings->checkUppercase();
00251         break;
00252     case SkipRunTogether:
00253         return d->settings->skipRunTogether();
00254         break;
00255     }
00256     return false;
00257 }
00258 
00259 bool Speller::isValid() const
00260 {
00261     return d->dict;
00262 }
00263 
00264 void Speller::setLanguage(const QString &lang)
00265 {
00266     d->language = lang;
00267     d->recreateDict();
00268 }
00269 
00270 QMap<QString, QString> Sonnet::Speller::availableDictionaries() const
00271 {
00272     Loader *l = Loader::openLoader();
00273     QStringList lst = l->languages();
00274     QMap<QString, QString> langs;
00275 
00276     foreach(QString tag, lst) {
00277         tag = tag.mid(0, tag.indexOf('-'));
00278         int underscorePos = tag.indexOf('_');
00279         QString cIsoName, lIsoName;
00280     if (underscorePos != -1 && underscorePos <= 3) {
00281             cIsoName = tag.mid(underscorePos + 1, 2);
00282             lIsoName = tag.left(underscorePos);
00283     }  else {
00284             lIsoName = tag;
00285         }
00286         QLocale loc(tag);
00287         QString description;
00288 
00289         if (!cIsoName.isEmpty())
00290             description= QString("%1 (%2)")
00291                          .arg(KGlobal::locale()->languageCodeToName(lIsoName))
00292                          .arg(KGlobal::locale()->countryCodeToName(cIsoName));
00293         else
00294             description= QString("%1")
00295                          .arg(KGlobal::locale()->languageCodeToName(lIsoName));
00296         //qDebug()<<"Dict is "<<tag<<" ( "<<loc.name()<<")"<<", descr = "<<description;
00297         langs.insert(description, tag);
00298     }
00299 
00300     return langs;
00301 }
00302 
00303 }

KDECore

Skip menu "KDECore"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

kdelibs

Skip menu "kdelibs"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • Kate
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • Kross
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.5.7
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal