From d233ef4092fa77d47930c99674a0a1618962eab6 Mon Sep 17 00:00:00 2001 From: Bartosz Szatkowski Date: Wed, 25 Aug 2010 15:43:31 +0200 Subject: [PATCH] Added strip accent search for bookmarks --- trunk/src/base/backbone/Bookmarks.cpp | 61 ++++++++++++++++++++++++--------- trunk/src/base/backbone/Bookmarks.h | 8 +++-- trunk/src/base/backbone/backbone.h | 2 +- 3 files changed, 51 insertions(+), 20 deletions(-) diff --git a/trunk/src/base/backbone/Bookmarks.cpp b/trunk/src/base/backbone/Bookmarks.cpp index dfee9c8..5bdcc24 100644 --- a/trunk/src/base/backbone/Bookmarks.cpp +++ b/trunk/src/base/backbone/Bookmarks.cpp @@ -6,6 +6,7 @@ Bookmarks::Bookmarks() { this->dbName = QDir::homePath() + "/.mdictionary/" + "bookmarks.db"; checkAndCreateDb(); + initAccents(); } @@ -16,6 +17,35 @@ QSqlDatabase Bookmarks::getDbCnx(QString dbName) { 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()) { @@ -23,7 +53,7 @@ bool Bookmarks::checkAndCreateDb() { 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; @@ -39,7 +69,7 @@ void Bookmarks::clear() { } 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(); } @@ -53,8 +83,9 @@ void Bookmarks::add(Translation* translation) { } 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(); @@ -108,7 +139,8 @@ QList Bookmarks::searchWordList(QString word) { 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 res; @@ -143,19 +175,14 @@ QStringList Bookmarks::search(QString word, QString dbName) { 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 letters; + QRegExp noLetter; }; diff --git a/trunk/src/base/backbone/backbone.h b/trunk/src/base/backbone/backbone.h index 6ca7ff2..9d50aa0 100644 --- a/trunk/src/base/backbone/backbone.h +++ b/trunk/src/base/backbone/backbone.h @@ -228,7 +228,7 @@ public Q_SLOTS: if(_searchBookmarks) { _innerBookmarks = QtConcurrent::run(_bookmarks, - &Bookmarks::searchWordList, QString("*")); + &Bookmarks::list); _bookmarkSearchWatcher.setFuture(_innerBookmarks); } } -- 1.7.9.5