this->dbName = QDir::homePath() + "/.mdictionary/"
+ "bookmarks.db";
checkAndCreateDb();
+ initAccents();
}
return db;
}
+
+
+void Bookmarks::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);
+}
+
+
+
+
bool Bookmarks::checkAndCreateDb() {
QSqlDatabase db = getDbCnx(dbName);
if(!db.isOpen() && !db.open()) {
return false;
}
QSqlQuery cur(db);
- cur.exec("create table bookmarks(key text ,translation text)");
+ cur.exec("create table bookmarks(key text, normalized text, translation text)");
db.close();
return true;
}
QSqlQuery cur(db);
cur.exec("drop table bookmarks");
- cur.exec("create table bookmarks(key text ,translation text)");
+ cur.exec("create table bookmarks(key text, normalized text,translation text)");
db.close();
}
}
translation->setBookmark(true);
QSqlQuery cur(db);
- cur.prepare("insert into bookmarks values (?,?)");
+ cur.prepare("insert into bookmarks values (?,?,?)");
cur.addBindValue(translation->key());
+ cur.addBindValue(removeAccents(translation->key()));
cur.addBindValue(translation->toHtml());
cur.exec();
db.close();
return tr;
}
QSqlQuery cur(db);
- cur.prepare("select key from bookmarks where key like ?");
+ cur.prepare("select key from bookmarks where key like ? or normalized like ?");
+ cur.addBindValue(word);
cur.addBindValue(word);
cur.exec();
QSet<QString> res;
QString Bookmarks::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() &&
- !normalized[i].isDigit() &&
- normalized[i] != '*' &&
- normalized[i] != '%') {
- normalized.remove(i,1);
- }
- }
- return normalized;
+ 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;
}