diff --git a/src/model/UserphraseModel.cpp b/src/model/UserphraseModel.cpp index 995abeb..9187d5c 100644 --- a/src/model/UserphraseModel.cpp +++ b/src/model/UserphraseModel.cpp @@ -1,4 +1,5 @@ /* + * chewing-editor: Chewing userphrase editor * Copyright (C) 2014 Chewing Development Team @@ -18,7 +19,7 @@ */ #include "UserphraseModel.h" - +#include #include static void logger(void *data, int level, const char *fmt, ...) @@ -194,35 +195,47 @@ void UserphraseModel::exportUserphrase(std::shared_ptr expor QString UserphraseModel::checkBopomofo(const QString &bopomofo) const { QString replaceBopomofo = bopomofo; + replaceBopomofo.replace(QString::fromUtf8("一"),QString::fromUtf8("ㄧ")); replaceBopomofo.replace(QString::fromUtf8("丫"),QString::fromUtf8("ㄚ")); + replaceBopomofo= replaceBopomofo.simplified(); return replaceBopomofo; } -void UserphraseModel::add(const QString &phrase, const QString &bopomofo) + +QStringList UserphraseModel::splitPhrases(const QString &phrases) { - QString replaceBopomofo = checkBopomofo(bopomofo); - auto ret = chewing_userphrase_add( - ctx_.get(), - phrase.toUtf8().constData(), - replaceBopomofo.toUtf8().constData()); - - addresult_ = ret; - - if (ret > 0) { - emit beginResetModel(); - userphrase_.insert(Userphrase{ - phrase, - bopomofo - }); - emit endResetModel(); - emit addNewPhraseCompleted(userphrase_[userphrase_.size()-1]); - } else { - qWarning() << "chewing_userphrase_add() returns" << ret; - refresh(); - emit addNewPhraseFailed(); - } + QStringList sections = phrases.split(QRegExp("[,/^]")); + return sections; +} + +void UserphraseModel::add(const QString &phrases, const QString &bopomofo) +{ + QStringList phraseList = splitPhrases(phrases); + for(int i = 0 ; i < phraseList.size() ; i++) + { + QString phrase = QString(phraseList.at(i).toLocal8Bit().constData()); + QString replaceBopomofo = checkBopomofo(bopomofo); + auto ret = chewing_userphrase_add( + ctx_.get(), + phrase.toUtf8().constData(), + replaceBopomofo.toUtf8().constData()); + addresult_ = ret; + if (ret > 0) { + emit beginResetModel(); + userphrase_.insert(Userphrase{ + phrase, + bopomofo + }); + emit endResetModel(); + emit addNewPhraseCompleted(userphrase_[userphrase_.size()-1]); + } else { + qWarning() << "chewing_userphrase_add() returns" << ret; + refresh(); + emit addNewPhraseFailed(); + } + } } const Userphrase *UserphraseModel::getUserphrase(const QModelIndex& idx) diff --git a/src/model/UserphraseModel.h b/src/model/UserphraseModel.h index 92140bf..9c80ac7 100644 --- a/src/model/UserphraseModel.h +++ b/src/model/UserphraseModel.h @@ -39,7 +39,7 @@ class UserphraseModel final: public QAbstractListModel { UserphraseModel(const UserphraseModel& x) = delete; UserphraseModel& operator=(const UserphraseModel& x) = delete; virtual ~UserphraseModel() = default; - + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; @@ -65,6 +65,7 @@ class UserphraseModel final: public QAbstractListModel { public slots: void refresh(); void add(const QString &phrase, const QString &bopomofo); + QStringList splitPhrases(const QString &phrases); void importUserphrase(std::shared_ptr importer); void exportUserphrase(std::shared_ptr exporter); void remove(QModelIndexList indexList);