diff options
| -rw-r--r-- | CMakeLists.txt | 10 | ||||
| -rw-r--r-- | cli/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | dicealias.cpp | 19 | ||||
| -rw-r--r-- | diceroller.cpp | 202 | ||||
| -rw-r--r-- | diceroller.h | 33 | ||||
| -rw-r--r-- | die.h | 15 | ||||
| -rw-r--r-- | irc/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | mobile/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | tests/dice/tst_dice.cpp | 4 | ||||
| -rw-r--r-- | tests/fuzzer/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | webserver/CMakeLists.txt | 2 |
11 files changed, 165 insertions, 128 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 5795e12..a22c910 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,10 @@ -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.16) project(diceparser VERSION 1.9.0 DESCRIPTION "Parser of dice command") set(QT_REQUIRED_VERSION "5.12.0") find_package(Qt5 ${QT_REQUIRED_VERSION} CONFIG REQUIRED COMPONENTS Core Test Gui Svg) -find_package(Qt5 ${QT_REQUIRED_VERSION} CONFIG COMPONENTS Qml) +find_package(Qt5 ${QT_REQUIRED_VERSION} CONFIG COMPONENTS Qml Concurrent) enable_testing(true) include_directories(${CMAKE_CURRENT_SOURCE_DIR} result node) @@ -12,6 +12,10 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} result node) option(BUILD_CLI OFF) option(BUILD_IRC OFF) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + + SET( dice_sources ${CMAKE_CURRENT_SOURCE_DIR}/diceparser.cpp ${CMAKE_CURRENT_SOURCE_DIR}/range.cpp @@ -112,7 +116,7 @@ set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) add_library(diceparser_qobject SHARED ${dice_header_qobject} ${dice_source_qobject}) -target_link_libraries(diceparser_qobject PUBLIC Qt5::Core Qt5::Gui Qt5::Svg Qt5::Qml PRIVATE diceparser_shared) +target_link_libraries(diceparser_qobject PUBLIC Qt5::Core Qt5::Gui Qt5::Svg Qt5::Qml Qt5::Concurrent PRIVATE diceparser_shared) message("Messages diceparser ${CMAKE_CURRENT_SOURCE_DIR}/include") target_include_directories(diceparser_qobject PRIVATE include ./ ${CMAKE_CURRENT_SOURCE_DIR}/include) endif() diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 756e15a..5c666bc 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.16) option(UPDATE_TRANSLATIONS "update Translation" OFF) option(NO_PAINTER_OPERATOR "No PAINTING" OFF) diff --git a/dicealias.cpp b/dicealias.cpp index b0402a3..2bc07be 100644 --- a/dicealias.cpp +++ b/dicealias.cpp @@ -128,21 +128,17 @@ QString makeReplament(const QString& pattern, const QString& command, QString cm } DiceAlias::DiceAlias(QString pattern, QString command, QString comment, bool isReplace, bool isEnable) - : m_pattern(pattern), m_command(command), m_comment(comment), m_isEnable(isEnable) + : m_pattern(pattern) + , m_command(command) + , m_comment(comment) + , m_type(isReplace ? REPLACE : REGEXP) + , m_isEnable(isEnable) { - if(isReplace) - { - m_type= REPLACE; - } - else - { - m_type= REGEXP; - } } DiceAlias::~DiceAlias() { - qDebug() << "destructeur of alias!" << this; + // qDebug() << "destructeur of alias!" << this; } DiceAlias::DiceAlias(const DiceAlias& alias) @@ -159,10 +155,9 @@ bool DiceAlias::resolved(QString& str) if(!m_isEnable) return false; - if((m_type == REPLACE) && (str.contains(m_command))) + if((m_type == REPLACE) && (str.contains(m_pattern))) { str= makeReplament(m_pattern, m_command, str); - // str.replace(m_command,m_value); return true; } else if(m_type == REGEXP) diff --git a/diceroller.cpp b/diceroller.cpp index e970a7c..af6921c 100644 --- a/diceroller.cpp +++ b/diceroller.cpp @@ -19,24 +19,27 @@ ***************************************************************************/ #include "diceroller.h" -DiceRoller::DiceRoller() {} +#include <QJsonObject> +#include <QtConcurrent> -QString DiceRoller::getDiceList() const +DiceRoller::DiceRoller(QObject* parent) : QObject(parent) {} + +QString DiceRoller::diceList() const { return m_diceList; } -QString DiceRoller::getResultStr() const +QString DiceRoller::resultStr() const { return m_resultStr; } -QString DiceRoller::getCommand() const +QString DiceRoller::command() const { return m_command; } -qreal DiceRoller::getResult() const +qreal DiceRoller::result() const { return m_result; } @@ -50,7 +53,53 @@ void DiceRoller::setCommand(const QString& cmd) } } -QString DiceRoller::diceToText(QList<ExportedDiceResult>& diceList) +void DiceRoller::readErrorAndWarning() +{ + setError( + tr("Error:\n%1\nWarnings:\n%2").arg(m_diceparser.humanReadableError(), m_diceparser.humanReadableWarning())); +} + +void DiceRoller::start() +{ + auto future= QtConcurrent::run([this]() { + if(m_diceparser.parseLine(m_command)) + { + m_diceparser.start(); + readErrorAndWarning(); + auto jsonstr= m_diceparser.resultAsJSon([](const QString& value, const QString&, bool) { return value; }); + QJsonDocument doc= QJsonDocument::fromJson(jsonstr.toLocal8Bit()); + auto json= doc.object(); + m_result= json["scalar"].toString().toDouble(); + emit resultChanged(); + } + }); +} + +QString DiceRoller::error() const +{ + return m_error; +} + +QList<DiceAlias*>* DiceRoller::aliases() const +{ + return m_diceparser.aliases(); +} + +DiceParser* DiceRoller::parser() +{ + return &m_diceparser; +} + +void DiceRoller::setError(const QString& error) +{ + if(m_error == error) + return; + + m_error= error; + emit errorOccurs(); +} + +/*QString DiceRoller::diceToText(QList<ExportedDiceResult>& diceList) { QStringList global; for(auto& dice : diceList) @@ -88,23 +137,22 @@ QString DiceRoller::diceToText(QList<ExportedDiceResult>& diceList) result << diceListStr.join(' '); } - if(keys.size() > 1) - { - resultGlobal << QString(" d%2:(%1)").arg(result.join(',')).arg(face); - } - else - { - resultGlobal << result; - } - } - } - global << resultGlobal.join(' '); - } - return global.join(" ; "); +if(keys.size() > 1) +{ + resultGlobal << QString(" d%2:(%1)").arg(result.join(',')).arg(face); } -void DiceRoller::start() +else { - /*if(m_diceparser.parseLine(m_command)) + resultGlobal << result; +} +} +} +global << resultGlobal.join(' '); +} +return global.join(" ; "); +}*/ + +/*if(m_diceparser.parseLine(m_command)) { m_diceparser.start(); if(m_diceparser.errorMap().isEmpty()) @@ -116,75 +164,61 @@ void DiceRoller::start() QString scalarText; QString str; - qreal result= 0; - QString resultStr; - if(m_diceparser.hasIntegerResultNotInFirst()) - { - auto values= m_diceparser.lastIntegerResults(); - QStringList strLst; - for(auto& val : values) - { - result+= val; - strLst << QString::number(val); - } - scalarText= QString("%1").arg(strLst.join(',')); - } - else if(!list.isEmpty()) - { - auto values= m_diceparser.getSumOfDiceResult(); - QStringList strLst; - for(auto val : values) - { - result+= val; - strLst << QString::number(val); - } - scalarText= QString("%1").arg(strLst.join(',')); - } - - if(m_diceparser.hasStringResult()) - { - bool ok; - QStringList allStringlist= m_diceparser.getAllStringResult(ok); - QString stringResult= allStringlist.join(" ; "); - stringResult.replace("%1", scalarText); - stringResult.replace("%2", diceText.trimmed()); - str= stringResult; - } - else - { - resultStr= scalarText; - } - if(!m_diceparser.getComment().isEmpty()) - { - resultStr+= m_diceparser.getComment() + "\n"; - } - resultStr+= str + "\n"; - m_resultStr= resultStr; - m_result= result; - m_diceList= diceText.trimmed(); - emit resultStrChanged(); - emit resultChanged(); - emit diceListChanged(); - } +qreal result= 0; +QString resultStr; +if(m_diceparser.hasIntegerResultNotInFirst()) +{ + auto values= m_diceparser.lastIntegerResults(); + QStringList strLst; + for(auto& val : values) + { + result+= val; + strLst << QString::number(val); } - - if(!m_diceparser.getErrorMap().isEmpty()) + scalarText= QString("%1").arg(strLst.join(',')); +} +else if(!list.isEmpty()) +{ + auto values= m_diceparser.getSumOfDiceResult(); + QStringList strLst; + for(auto val : values) { - auto errors= m_diceparser.getErrorMap(); - setError(errors.first()); - }*/ + result+= val; + strLst << QString::number(val); + } + scalarText= QString("%1").arg(strLst.join(',')); } -QString DiceRoller::getError() const +if(m_diceparser.hasStringResult()) { - return m_error; + bool ok; + QStringList allStringlist= m_diceparser.getAllStringResult(ok); + QString stringResult= allStringlist.join(" ; "); + stringResult.replace("%1", scalarText); + stringResult.replace("%2", diceText.trimmed()); + str= stringResult; } - -void DiceRoller::setError(const QString& error) +else { - if(m_error == error) - return; + resultStr= scalarText; +} +if(!m_diceparser.getComment().isEmpty()) +{ + resultStr+= m_diceparser.getComment() + "\n"; +} +resultStr+= str + "\n"; +m_resultStr= resultStr; +m_result= result; +m_diceList= diceText.trimmed(); +emit resultStrChanged(); +emit resultChanged(); +emit diceListChanged(); +} +} - m_error= error; - emit errorOccurs(); +if(!m_diceparser.getErrorMap().isEmpty()) +{ + auto errors= m_diceparser.getErrorMap(); + setError(errors.first()); } +*/ diff --git a/diceroller.h b/diceroller.h index 4b13c3d..02d8e3e 100644 --- a/diceroller.h +++ b/diceroller.h @@ -26,23 +26,23 @@ class DiceRoller : public QObject { Q_OBJECT - Q_PROPERTY(qreal result READ getResult NOTIFY resultChanged) - Q_PROPERTY(QString dicelist READ getDiceList NOTIFY diceListChanged) - Q_PROPERTY(QString resultStr READ getResultStr NOTIFY resultStrChanged) - Q_PROPERTY(QString command READ getCommand WRITE setCommand NOTIFY commandChanged) - Q_PROPERTY(QString error READ getError WRITE setError NOTIFY errorOccurs) + Q_PROPERTY(qreal result READ result NOTIFY resultChanged) + Q_PROPERTY(QString dicelist READ diceList NOTIFY diceListChanged) + Q_PROPERTY(QString resultStr READ resultStr NOTIFY resultStrChanged) + Q_PROPERTY(QString command READ command WRITE setCommand NOTIFY commandChanged) + Q_PROPERTY(QString error READ error WRITE setError NOTIFY errorOccurs) public: - DiceRoller(); + DiceRoller(QObject* parent= nullptr); - QString getDiceList() const; - QString getResultStr() const; - QString getCommand() const; - qreal getResult() const; - void setCommand(const QString& cmd); + QString diceList() const; + QString resultStr() const; + QString command() const; + qreal result() const; + QString error() const; + QList<DiceAlias*>* aliases() const; - QString getError() const; - void setError(const QString& error); + DiceParser* parser(); signals: void resultChanged(); @@ -53,9 +53,12 @@ signals: public slots: void start(); + void readErrorAndWarning(); + void setCommand(const QString& cmd); + void setError(const QString& error); -protected: - QString diceToText(QList<ExportedDiceResult>& diceList); + /*protected: + QString diceToText(QList<ExportedDiceResult>& diceList);*/ private: DiceParser m_diceparser; @@ -151,14 +151,15 @@ public: private: QString m_uuid; - qint64 m_value= 0; + qint64 m_value{0}; QList<qint64> m_rollResult; - bool m_selected= false; - bool m_hasValue= false; - bool m_displayStatus= false; - bool m_highlighted= true; - qint64 m_maxValue= 0; - qint64 m_base= 0; + bool m_selected{false}; + bool m_hasValue{false}; + bool m_displayStatus{false}; + bool m_highlighted{true}; + qint64 m_maxValue{0}; + qint64 m_base{0}; + qint64 m_occurence{1}; QString m_color; Die::ArithmeticOperator m_op; diff --git a/irc/CMakeLists.txt b/irc/CMakeLists.txt index 2019224..fc6dc6d 100644 --- a/irc/CMakeLists.txt +++ b/irc/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.16) project(irc) diff --git a/mobile/CMakeLists.txt b/mobile/CMakeLists.txt index 95153cc..9d07f9a 100644 --- a/mobile/CMakeLists.txt +++ b/mobile/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.16) option(UPDATE_TRANSLATIONS "update Translation" OFF) MESSAGE(STATUS "UPDATE TRANSLATIONS: ${UPDATE_TRANSLATIONS}") diff --git a/tests/dice/tst_dice.cpp b/tests/dice/tst_dice.cpp index c3168f4..9c9085a 100644 --- a/tests/dice/tst_dice.cpp +++ b/tests/dice/tst_dice.cpp @@ -492,7 +492,7 @@ void TestDice::scopeDF() m_diceParser->start(); auto results= m_diceParser->scalarResultsFromEachInstruction(); - for(auto result : results) + for(auto const& result : qAsConst(results)) QVERIFY(result >= min && result <= max); } @@ -556,7 +556,7 @@ void TestDice::severalInstruction() results << 3; int i= 0; - for(auto cmd : commands) + for(auto const& cmd : qAsConst(commands)) { auto test= m_diceParser->parseLine(cmd); QVERIFY2(test, cmd.toStdString().c_str()); diff --git a/tests/fuzzer/CMakeLists.txt b/tests/fuzzer/CMakeLists.txt index c6d94ca..a3d4e7c 100644 --- a/tests/fuzzer/CMakeLists.txt +++ b/tests/fuzzer/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.16) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-permissive -pedantic -Wall -Wextra") set(CMAKE_AUTOMOC ON) diff --git a/webserver/CMakeLists.txt b/webserver/CMakeLists.txt index 73aaf9b..d1b4e8f 100644 --- a/webserver/CMakeLists.txt +++ b/webserver/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.16) option(UPDATE_TRANSLATIONS "update Translation" OFF) MESSAGE(STATUS "UPDATE TRANSLATIONS: ${UPDATE_TRANSLATIONS}") |