diff --git a/cockatrice/src/game/filters/filter_string.cpp b/cockatrice/src/game/filters/filter_string.cpp index 3d168d64c..1cc6fa889 100644 --- a/cockatrice/src/game/filters/filter_string.cpp +++ b/cockatrice/src/game/filters/filter_string.cpp @@ -389,6 +389,15 @@ FilterString::FilterString() _error = "Not initialized"; } +void FilterString::logger(size_t ln, size_t col, const std::string &msg) { + if(ln == 0) { + _error = tr("Error at position %1: %2").arg(col).arg(QString::fromStdString(msg)); + }else{ + _error = tr("Error at line %1, position %2: %3").arg(ln).arg(col).arg(QString::fromStdString(msg)); + } + } + + FilterString::FilterString(const QString &expr) { QByteArray ba = expr.simplified().toUtf8(); @@ -402,9 +411,7 @@ FilterString::FilterString(const QString &expr) return; } - search.set_logger([&](size_t /*ln*/, size_t col, const std::string &msg) { - _error = QString("Error at position %1: %2").arg(col).arg(QString::fromStdString(msg)); - }); + search.set_logger([this](size_t ln, size_t col, const std::string &msg){logger(ln, col, msg);}); if (!search.parse(ba.data(), result)) { qCInfo(FilterStringLog).nospace() << "FilterString error for " << expr << "; " << qPrintable(_error); diff --git a/cockatrice/src/game/filters/filter_string.h b/cockatrice/src/game/filters/filter_string.h index 131c9f7bf..7f9c1c270 100644 --- a/cockatrice/src/game/filters/filter_string.h +++ b/cockatrice/src/game/filters/filter_string.h @@ -24,8 +24,10 @@ struct EmptyType; typedef AstBase Ast; } // namespace peg -class FilterString +class FilterString : QObject { + Q_OBJECT + public: FilterString(); explicit FilterString(const QString &exp); @@ -49,6 +51,8 @@ public: } private: + void logger(size_t ln, size_t col, const std::string &msg); + QString _error; Filter result; };