* Translate curly apostrophe to ASCII apostrophe (#3395) Treats the curly apostrophe as a straight apostrophe when searching in the deck editor search bar. * Moved logic for handeling translation to CardDatabaseDisplayModel. This implementation was done with strings instead of characters because the curly apostrophes and quotes are considered multi-characters. Thus, the method of iterating through the string and replacing the characters with the proper translations was difficult to cleanly implement. * clang-tidy modifications * Implemented faster algorithm for string translation. Optimized the algorithm for string translation, before it would compute in O(N*M) time where N is the size of the string and M is the size of the translation table. Now it will compute in O(N) time where N is the length of the string. * Renaming variables and methods. * Fixed character literal type, was unicode, is now wide.
This commit is contained in:
parent
eb4b1e74f1
commit
cf9fdcd09e
2 changed files with 22 additions and 1 deletions
|
@ -1,5 +1,6 @@
|
||||||
#include "carddatabasemodel.h"
|
#include "carddatabasemodel.h"
|
||||||
#include "filtertree.h"
|
#include "filtertree.h"
|
||||||
|
#include <QMap>
|
||||||
|
|
||||||
#define CARDDBMODEL_COLUMNS 6
|
#define CARDDBMODEL_COLUMNS 6
|
||||||
|
|
||||||
|
@ -17,6 +18,11 @@ CardDatabaseModel::~CardDatabaseModel()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QMap<wchar_t, wchar_t> CardDatabaseDisplayModel::characterTranslation = {{L'“', L'\"'},
|
||||||
|
{L'”', L'\"'},
|
||||||
|
{L'‘', L'\''},
|
||||||
|
{L'’', L'\''}};
|
||||||
|
|
||||||
int CardDatabaseModel::rowCount(const QModelIndex & /*parent*/) const
|
int CardDatabaseModel::rowCount(const QModelIndex & /*parent*/) const
|
||||||
{
|
{
|
||||||
return cardList.size();
|
return cardList.size();
|
||||||
|
@ -324,6 +330,16 @@ void CardDatabaseDisplayModel::filterTreeChanged()
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QString CardDatabaseDisplayModel::sanitizeCardName(const QString &dirtyName, const QMap<wchar_t, wchar_t> &table)
|
||||||
|
{
|
||||||
|
std::wstring toReturn = dirtyName.toStdWString();
|
||||||
|
for (wchar_t &ch : toReturn) {
|
||||||
|
if (table.contains(ch)) {
|
||||||
|
ch = table.value(ch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QString::fromStdWString(toReturn);
|
||||||
|
}
|
||||||
TokenDisplayModel::TokenDisplayModel(QObject *parent) : CardDatabaseDisplayModel(parent)
|
TokenDisplayModel::TokenDisplayModel(QObject *parent) : CardDatabaseDisplayModel(parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,6 +73,9 @@ private:
|
||||||
FilterTree *filterTree;
|
FilterTree *filterTree;
|
||||||
int loadedRowCount;
|
int loadedRowCount;
|
||||||
|
|
||||||
|
/** The translation table that will be used for sanitizeCardName. */
|
||||||
|
static QMap<wchar_t, wchar_t> characterTranslation;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CardDatabaseDisplayModel(QObject *parent = 0);
|
CardDatabaseDisplayModel(QObject *parent = 0);
|
||||||
void setFilterTree(FilterTree *filterTree);
|
void setFilterTree(FilterTree *filterTree);
|
||||||
|
@ -88,7 +91,7 @@ public:
|
||||||
}
|
}
|
||||||
void setCardName(const QString &_cardName)
|
void setCardName(const QString &_cardName)
|
||||||
{
|
{
|
||||||
cardName = _cardName;
|
cardName = sanitizeCardName(_cardName, characterTranslation);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
void setCardNameSet(const QSet<QString> &_cardNameSet)
|
void setCardNameSet(const QSet<QString> &_cardNameSet)
|
||||||
|
@ -127,6 +130,8 @@ protected:
|
||||||
void fetchMore(const QModelIndex &parent);
|
void fetchMore(const QModelIndex &parent);
|
||||||
private slots:
|
private slots:
|
||||||
void filterTreeChanged();
|
void filterTreeChanged();
|
||||||
|
/** Will translate all undesirable characters in DIRTYNAME according to the TABLE. */
|
||||||
|
const QString sanitizeCardName(const QString &dirtyName, const QMap<wchar_t, wchar_t> &table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class TokenDisplayModel : public CardDatabaseDisplayModel
|
class TokenDisplayModel : public CardDatabaseDisplayModel
|
||||||
|
|
Loading…
Reference in a new issue