Added ingring national characters in searching
authorMateusz Półrola <mateusz.polrola@comarch.pl>
Tue, 10 Aug 2010 08:02:51 +0000 (10:02 +0200)
committerMateusz Półrola <mateusz.polrola@comarch.pl>
Tue, 10 Aug 2010 08:02:51 +0000 (10:02 +0200)
trunk/src/base/backbone/backbone.cpp
trunk/src/plugins/xdxf/src/xdxfplugin.cpp

index 0278b2e..78e651f 100644 (file)
@@ -25,7 +25,7 @@
 #include <QDebug>
 
 void Backbone::init() {
-   _searchLimit = 10;
+   _searchLimit = 40;
    _interval = 250; //msec
    if(!_pluginPath.size())
        _pluginPath = "/usr/lib/mdictionary/";
index 61a482b..9fe4014 100644 (file)
@@ -42,6 +42,9 @@ XdxfPlugin::XdxfPlugin(QObject *parent) : CommonDictInterface(parent),
 
     setPath("/usr/lib/mdictionary/dict.xdxf");
     stopped = false;
+
+
+    qDebug()<<removeAccents(QString::fromUtf8("Słońce"));
 }
 
 QString XdxfPlugin::langFrom() const {   
@@ -69,6 +72,9 @@ QList<Translation*> XdxfPlugin::searchWordList(QString word, int limit) {
     QSet<Translation*> translations;
     QFile dictionaryFile(path);
 
+    word = removeAccents(word);
+    qDebug()<<word;
+
     stopped = false;
     if(word.indexOf("*")==-1)
         word+="*";
@@ -91,7 +97,7 @@ QList<Translation*> XdxfPlugin::searchWordList(QString word, int limit) {
                 dictionaryReader.readNextStartElement();
             if(!dictionaryReader.atEnd())
                 a = dictionaryReader.readElementText();
-            if(regWord.exactMatch(a) && (i<limit || limit==0)) {
+            if(regWord.exactMatch(removeAccents(a)) && (i<limit || limit==0)) {
                 bool ok=true;
                 Translation *tran;
                 foreach(tran,translations)
@@ -248,9 +254,14 @@ void XdxfPlugin::getDictionaryInfo() {
 }
 
 QString XdxfPlugin::removeAccents(QString string) {
+
+    string = string.replace(QString::fromUtf8("ł"), "l", Qt::CaseInsensitive);
     QString normalized = string.normalized(QString::NormalizationForm_D);
+    normalized = normalized;
     for(int i=0; i<normalized.size(); i++) {
-        if(!normalized[i].isLetterOrNumber() && !normalized[i].isSpace()) {
+        if( !normalized[i].isLetterOrNumber() &&
+            !normalized[i].isSpace() &&
+            !normalized[i].isDigit()) {
             normalized.remove(i,1);
         }
     }