Added removing accents
authorBartosz Szatkowski <bulislaw@linux.com>
Wed, 25 Aug 2010 09:59:33 +0000 (11:59 +0200)
committerBartosz Szatkowski <bulislaw@linux.com>
Wed, 25 Aug 2010 09:59:33 +0000 (11:59 +0200)
trunk/src/plugins/xdxf/src/xdxfplugin.cpp
trunk/src/plugins/xdxf/src/xdxfplugin.h

index 518031c..1b90a31 100644 (file)
@@ -45,8 +45,11 @@ XdxfPlugin::XdxfPlugin(QObject *parent) : CommonDictInterface(parent),
     stopped = false;
 
     _icon = QIcon(":/icons/xdxf.png");
+    initAccents();
 }
 
+
+
 XdxfPlugin::~XdxfPlugin()
 {
 //  QString connection(db.connectionName());
@@ -56,6 +59,30 @@ XdxfPlugin::~XdxfPlugin()
     delete _settings;
 }
 
+void XdxfPlugin::initAccents() {
+    letters['a'] = QRegExp("[ÀàÁáÂÂâÃãÄäÅåæÆĀāĂ㥹]", Qt::CaseInsensitive);
+    letters['c'] = QRegExp("[ÇçÈçŒĆćĈĉĊċČč]", Qt::CaseInsensitive);
+    letters['d'] = QRegExp("[ÐĐđĎď]", Qt::CaseInsensitive);
+    letters['e'] = QRegExp("[ÈéèÉÊêËëĒēĔĕĖėĘęĚěē]", Qt::CaseInsensitive);
+    letters['f'] = QRegExp("[ſ]", Qt::CaseInsensitive);
+    letters['g'] = QRegExp("[ĠġĢģĜĝĞğ]", Qt::CaseInsensitive);
+    letters['h'] = QRegExp("[ħĤĥĦ]", Qt::CaseInsensitive);
+    letters['i'] = QRegExp("[ÌìÍíÎîÏïİijĨĩĪīĬĭĮį]", Qt::CaseInsensitive);
+    letters['j'] = QRegExp("[Ĵĵ]", Qt::CaseInsensitive);
+    letters['k'] = QRegExp("[Ķķĸ]", Qt::CaseInsensitive);
+    letters['l'] = QRegExp("[ŀŁłĹĺĻļĽľĿ]", Qt::CaseInsensitive);
+    letters['n'] = QRegExp("[ÑñŃńŅņŇňʼnŊŋ]", Qt::CaseInsensitive);
+    letters['o'] = QRegExp("[ÒòÓóÔÕõÖöØøŐőœŌōŎŏ]", Qt::CaseInsensitive);
+    letters['r'] = QRegExp("[ŕŖŖŗŘř]", Qt::CaseInsensitive);
+    letters['s'] = QRegExp("[ߊšŚśŜŝŞş]", Qt::CaseInsensitive);
+    letters['t'] = QRegExp("[ŢţŤťŦŧ]", Qt::CaseInsensitive);
+    letters['u'] = QRegExp("[ÙùÚúÛûÜüŰűŲųŨũŪūŬŮů]", Qt::CaseInsensitive);
+    letters['w'] = QRegExp("[Ŵŵ]", Qt::CaseInsensitive);
+    letters['y'] = QRegExp("[ÿÝýŶŷŸ]", Qt::CaseInsensitive);
+    letters['z'] = QRegExp("[ŹźŻżŽž]", Qt::CaseInsensitive);
+    noLetter = QRegExp("[^a-z ]", Qt::CaseInsensitive);
+}
+
 QString XdxfPlugin::langFrom() const {   
     return _langFrom;
 }
@@ -178,8 +205,6 @@ QList<Translation*> XdxfPlugin::searchWordListFile(QString word, int limit) {
     QXmlStreamReader reader(&dictionaryFile);
     /*search words list*/
     QString a;
-    QRegExp regexp(removeAccents(a), Qt::CaseInsensitive, QRegExp::Wildcard);
-    regexp.setMinimal(true);
 
     int i=0;
     while(!reader.atEnd() && !stopped){
@@ -189,9 +214,7 @@ QList<Translation*> XdxfPlugin::searchWordListFile(QString word, int limit) {
                 reader.readNextStartElement();
             if(!reader.atEnd())
                 a = reader.readElementText();
-            regexp.setPattern(a);
-            if((regWord.exactMatch(a) || regexp.exactMatch(
-                    word.left(word.size()-1))) &&
+            if((regWord.exactMatch(a) || regWord.exactMatch(removeAccents(a))) &&
                     (i<limit || limit==0)) {
                 bool ok=true;
                 Translation *tran;
@@ -282,11 +305,14 @@ QString XdxfPlugin::searchFile(QString key) {
                     if(reader.tokenType()==QXmlStreamReader::StartElement)
                         temp+=tr("<");
                     temp+=reader.name().toString();
-                    if(reader.name().toString()=="c" && reader.tokenType()==QXmlStreamReader::StartElement)
-                       temp= temp + tr(" c=\"") + reader.attributes().value(tr("c")).toString() + tr("\"");
+                    if(reader.name().toString()=="c" &&
+                            reader.tokenType()==QXmlStreamReader::StartElement)
+                       temp= temp + tr(" c=\"") + reader.attributes().
+                               value(tr("c")).toString() + tr("\"");
                     temp+=tr(">");
                 }
-                temp+= reader.text().toString().replace("<","&lt;").replace(">","&gt;");
+                temp+= reader.text().toString().replace("<","&lt;").
+                        replace(">","&gt;");
                 reader.readNext();
             }
             if(temp.at(0)==QChar('\n'))
@@ -410,21 +436,28 @@ void XdxfPlugin::getDictionaryInfo() {
     QString format = "png";
     QString initialPath = QDir::currentPath() + tr("/xdxf.") + format;
 
-    _infoNote="path=\""+initialPath+"\">"+"\n" + _name + " [" + _langFrom + "-" + _langTo + "] "+ "(" + _type + ")";
+    _infoNote="path=\""+initialPath+"\">"+"\n" + _name + " [" + _langFrom +
+            "-" + _langTo + "] "+ "(" + _type + ")";
 
     dictionaryFile.close();
 }
 
-QString XdxfPlugin::removeAccents(QString string, QChar wildcard) {
-    QString normalized = string.toLower();
-    for(int i=0; i<normalized.size(); i++) {
-        if(normalized[i].isLetterOrNumber() && ((normalized.at(1) < QChar('a'))
-                || (normalized.at(i) > QChar('z'))))
-            normalized[i] = wildcard;
-    }
+
+
+QString XdxfPlugin::removeAccents(QString string) {
+    string = string.toLower();
+    QString normalized = string.normalized(QString::NormalizationForm_KD);
+    foreach(QChar let, letters.keys())
+        normalized.replace(letters[let], QString(let));
+
+    normalized.replace(noLetter, "");
+    //qDebug() << "NORMALIZED: " << normalized;
     return normalized;
+    return string;
 }
 
+
+
 QIcon* XdxfPlugin::icon() {
     return &_icon;
 }
@@ -540,7 +573,7 @@ bool XdxfPlugin::makeCache(QString dir) {
             match=false;
             cur.prepare("insert into dict values(?,?,?)");
             cur.addBindValue(a);
-            cur.addBindValue(removeAccents(a,'_'));
+            cur.addBindValue(removeAccents(a));
             cur.addBindValue(temp);
             cur.exec();
             counter++;
index e7f3ff4..ca94f55 100644 (file)
@@ -120,7 +120,7 @@ Q_SIGNALS:
 
 
 protected:
-    QString removeAccents(QString, QChar wildcard= '?');
+    QString removeAccents(QString);
 
 private:
 /*! returns true or false depending on whether the dictionary is cached
@@ -140,6 +140,7 @@ private:
 
     int countWords();
     bool makeCache(QString dir);
+    void initAccents();
 
     //! language from which we translate
     QString _langFrom;
@@ -166,6 +167,10 @@ private:
     Settings *_settings;
     XdxfDictDialog* _dictDialog;
     XdxfCachingDialog* cachingDialog;
+
+    QMap<QChar, QRegExp> letters;
+    QRegExp noLetter;
+
 };
 
 #endif // XDXFPLUGIN_H