From c529f20a9232fb47f8af325f33959428a3a0de37 Mon Sep 17 00:00:00 2001 From: ebbit1q Date: Sat, 21 Dec 2024 14:48:58 +0100 Subject: [PATCH] allow filter string error to be translated --- cockatrice/src/game/filters/filter_string.cpp | 13 ++++++++++--- cockatrice/src/game/filters/filter_string.h | 6 +++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/cockatrice/src/game/filters/filter_string.cpp b/cockatrice/src/game/filters/filter_string.cpp index 32a448977..0e984dc62 100644 --- a/cockatrice/src/game/filters/filter_string.cpp +++ b/cockatrice/src/game/filters/filter_string.cpp @@ -364,6 +364,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(); @@ -377,9 +386,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)) { qDebug().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 aabeb015d..655a76214 100644 --- a/cockatrice/src/game/filters/filter_string.h +++ b/cockatrice/src/game/filters/filter_string.h @@ -21,8 +21,10 @@ struct EmptyType; typedef AstBase Ast; } // namespace peg -class FilterString +class FilterString : QObject { + Q_OBJECT + public: FilterString(); explicit FilterString(const QString &exp); @@ -42,6 +44,8 @@ public: } private: + void logger(size_t ln, size_t col, const std::string &msg); + QString _error; Filter result; };