[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdeplasma-addons/runners/spellchecker
From:       Matthias Fuchs <mat69 () gmx ! net>
Date:       2010-11-15 18:49:58
Message-ID: 20101115184958.A1ECFAC8A0 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1197421 by mfuchs:

Makes it possible to specify the language spell checker should use, e.g. "spell \
$LANG_CODE $TERM" or "spell $LANG_NAME $TERM". $LANG_CODE could be "de", "de_AT" etc. \
and $LANG_NAME is the localized language name like "german" on a english locale or \
"allemand" on a french one. Also language names like "american english" are possible. \
$LANG_NAME is case insensitive.

 M  +44 -2     spellcheck.cpp  
 M  +4 -0      spellcheck.h  


--- trunk/KDE/kdeplasma-addons/runners/spellchecker/spellcheck.cpp #1197420:1197421
@@ -22,6 +22,7 @@
 
 #include <KApplication>
 // #include <KDebug>
+#include <KGlobal>
 #include <KIcon>
 
 SpellCheckRunner::SpellCheckRunner(QObject* parent, const QVariantList &args)
@@ -32,14 +33,25 @@
     setObjectName(QLatin1String( "Spell Checker" ));
     setIgnoredTypes(Plasma::RunnerContext::FileSystem | \
Plasma::RunnerContext::NetworkLocation);  setSpeed(AbstractRunner::SlowSpeed);
-
-    reloadConfiguration();
 }
 
 SpellCheckRunner::~SpellCheckRunner()
 {
 }
 
+void SpellCheckRunner::init()
+{
+    Plasma::AbstractRunner::init();
+
+    //store all language names, makes it posible to type "spell german TERM" if \
english locale is set +    KLocale *locale = KGlobal::locale();
+    QStringList codes = locale->allLanguagesList();
+    foreach (const QString &code, codes) {
+        const QString name = locale->languageCodeToName(code);
+        m_languages[name.toLower()] = code;
+    }
+}
+
 void SpellCheckRunner::reloadConfiguration()
 {
     m_triggerWord = config().readEntry("trigger", i18n("spell"));
@@ -77,9 +89,39 @@
             return;
         }
 
+        QString language = m_speller.defaultLanguage();
         query = query.mid(len).trimmed();
+        QStringList terms = query.split(' ');
+
+        //two terms specified, check if first is a language
+        QString customLanguage;
+        if (terms.count() == 2) {
+            customLanguage = terms[0];
+            query = terms[1];
     }
+        //three terms specified, check if first two are a language, e.g. "american \
english" +        if (terms.count() == 3) {
+            customLanguage = terms[0] + ' ' + terms[1];
+            query = terms[2];
+        }
 
+        if (!customLanguage.isEmpty()) {
+            language = customLanguage;
+            m_speller.setLanguage(language);
+
+            //not valid, maybe it is a language name, not a code
+            if (!m_speller.isValid()) {
+                QHash<QString, QString>::const_iterator it = \
m_languages.find(language.toLower()); +                //is a valid language name
+                if (it != m_languages.constEnd()) {
+                    language = *it;
+                }
+            }
+        }
+
+        m_speller.setLanguage(language);
+    }
+
     if (query.size() < 3) {
         return;
     }
--- trunk/KDE/kdeplasma-addons/runners/spellchecker/spellcheck.h #1197420:1197421
@@ -39,8 +39,12 @@
 
     void reloadConfiguration();
 
+protected slots:
+    void init();
+
 private:
     QString m_triggerWord;
+    QHash<QString, QString> m_languages;//key=language name, value=language code
     bool m_requireTriggerWord;
     Sonnet::Speller m_speller;
 };


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic