aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt10
-rw-r--r--cli/CMakeLists.txt2
-rw-r--r--dicealias.cpp19
-rw-r--r--diceroller.cpp202
-rw-r--r--diceroller.h33
-rw-r--r--die.h15
-rw-r--r--irc/CMakeLists.txt2
-rw-r--r--mobile/CMakeLists.txt2
-rw-r--r--tests/dice/tst_dice.cpp4
-rw-r--r--tests/fuzzer/CMakeLists.txt2
-rw-r--r--webserver/CMakeLists.txt2
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;
diff --git a/die.h b/die.h
index 140098b..ff4ccf5 100644
--- a/die.h
+++ b/die.h
@@ -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}")