diff options
Diffstat (limited to 'src')
25 files changed, 114 insertions, 102 deletions
diff --git a/src/bin/cli/main.cpp b/src/bin/cli/main.cpp index 91fa1ef..a63f0ab 100644 --- a/src/bin/cli/main.cpp +++ b/src/bin/cli/main.cpp @@ -304,6 +304,7 @@ int startDiceParsing(QStringList& cmds, bool withColor, QString baseColor, EXPOR DiceParser parser; parser.insertAlias(new DiceAlias("L5R5R", QStringLiteral("L[-,⨀,⨀⬢,❂⬢,❁,❁⬢]")), 0); parser.insertAlias(new DiceAlias("L5R5S", QStringLiteral("L[-,-,⨀,⨀,⨀❁,⨀⬢,⨀⬢,❂,❂⬢,❁,❁,❁]")), 1); + // parser.setVariableDictionary({{"air", "3"}}); int i= 2; for(auto alias : array) { @@ -467,7 +468,7 @@ int main(int argc, char* argv[]) #endif QStringList commands; - QString cmd; + QString cmd, charactersheet; QString dotFileStr; bool colorb= true; QSettings settings("rolisteam", "diceparser"); @@ -564,6 +565,10 @@ int main(int argc, char* argv[]) { dotFileStr= optionParser.value(dotFile); } + else if(optionParser.isSet(character)) + { + charactersheet= optionParser.value(character); + } if(optionParser.isSet(markdown)) { format= MARKDOWN; diff --git a/src/bin/gui/mainwindow.h b/src/bin/gui/mainwindow.h index bd19b34..081d085 100644 --- a/src/bin/gui/mainwindow.h +++ b/src/bin/gui/mainwindow.h @@ -6,7 +6,7 @@ class DiceParser; namespace Ui { - class MainWindow; +class MainWindow; } class MainWindow : public QMainWindow diff --git a/src/bin/mobile/maincontroller.cpp b/src/bin/mobile/maincontroller.cpp index 6f301ff..c131436 100644 --- a/src/bin/mobile/maincontroller.cpp +++ b/src/bin/mobile/maincontroller.cpp @@ -7,17 +7,19 @@ MainControler::MainControler(QObject* parent) : QObject(parent) { m_diceParser= new DiceParser(); - qmlRegisterSingletonType("DiceParser", 1, 0, "Model", [](QQmlEngine* engine, QJSEngine* scriptEngine) -> QObject* { - Q_UNUSED(engine) - static CommandModel model; - static bool initialized= false; - if(!initialized) - { - model.insertCmd("L5R", "8D10e10k4"); - initialized= true; - } - return &model; - }); + qmlRegisterSingletonType("DiceParser", 1, 0, "Model", + [](QQmlEngine* engine, QJSEngine* scriptEngine) -> QObject* + { + Q_UNUSED(engine) + static CommandModel model; + static bool initialized= false; + if(!initialized) + { + model.insertCmd("L5R", "8D10e10k4"); + initialized= true; + } + return &model; + }); } void MainControler::initEngine(QQmlApplicationEngine* engine) { diff --git a/src/bin/webserver/diceserver.cpp b/src/bin/webserver/diceserver.cpp index a3f094d..1871927 100644 --- a/src/bin/webserver/diceserver.cpp +++ b/src/bin/webserver/diceserver.cpp @@ -13,7 +13,9 @@ DiceServer::DiceServer(int port) : QObject(), m_diceParser(new DiceParser()) // using namespace ; m_server= new qhttp::server::QHttpServer(this); m_server->listen( // listening on 0.0.0.0:8080 - QHostAddress::Any, port, [=](qhttp::server::QHttpRequest* req, qhttp::server::QHttpResponse* res) { + QHostAddress::Any, port, + [=](qhttp::server::QHttpRequest* req, qhttp::server::QHttpResponse* res) + { req->collectData(1024); // qhttp::THeaderHash hash = req->headers(); diff --git a/src/libparser/compositevalidator.cpp b/src/libparser/compositevalidator.cpp index b0f127d..3b8cdd4 100644 --- a/src/libparser/compositevalidator.cpp +++ b/src/libparser/compositevalidator.cpp @@ -81,7 +81,9 @@ QString CompositeValidator::toString() [](Validator* validator) { return validator->toString(); }); QStringList operatorTextList; std::transform( - m_operators.begin(), m_operators.end(), std::back_inserter(operatorTextList), [](LogicOperation validator) { + m_operators.begin(), m_operators.end(), std::back_inserter(operatorTextList), + [](LogicOperation validator) + { static std::map<LogicOperation, QString> map({{OR, "|"}, {EXCLUSIVE_OR, "^"}, {AND, "&"}, {NONE, ""}}); return map[validator]; }); @@ -136,9 +138,9 @@ Dice::CONDITION_STATE testXOR(Dice::CONDITION_STATE before, Dice::CONDITION_STAT Dice::CONDITION_STATE CompositeValidator::isValidRangeSize(const std::pair<qint64, qint64>& range) const { std::vector<Dice::CONDITION_STATE> vec; - std::transform( - m_validatorList.begin(), m_validatorList.end(), std::back_inserter(vec), - [range](Validator* validator) -> Dice::CONDITION_STATE { return validator->isValidRangeSize(range); }); + std::transform(m_validatorList.begin(), m_validatorList.end(), std::back_inserter(vec), + [range](Validator* validator) -> Dice::CONDITION_STATE + { return validator->isValidRangeSize(range); }); auto itError= std::find(vec.begin(), vec.end(), Dice::CONDITION_STATE::ERROR_STATE); diff --git a/src/libparser/dicealias.cpp b/src/libparser/dicealias.cpp index 67e3046..736f2ec 100644 --- a/src/libparser/dicealias.cpp +++ b/src/libparser/dicealias.cpp @@ -131,7 +131,7 @@ DiceAlias::DiceAlias(QString pattern, QString command, QString comment, bool isR , m_command(command) , m_comment(comment) , m_type(isReplace ? REPLACE : REGEXP) - , m_isEnable(isEnable) + , m_disable(isEnable) { } @@ -145,13 +145,13 @@ DiceAlias::DiceAlias(const DiceAlias& alias) m_command= alias.command(); m_comment= alias.comment(); m_pattern= alias.pattern(); - m_isEnable= alias.isEnable(); + m_disable= alias.isDisable(); m_type= alias.isReplace() ? REPLACE : REGEXP; } bool DiceAlias::resolved(QString& str) { - if(!m_isEnable) + if(m_disable) return false; if((m_type == REPLACE) && (str.contains(m_pattern))) @@ -209,14 +209,14 @@ void DiceAlias::setReplace(bool b) } } -bool DiceAlias::isEnable() const +bool DiceAlias::isDisable() const { - return m_isEnable; + return m_disable; } -void DiceAlias::setEnable(bool b) +void DiceAlias::setDisable(bool b) { - m_isEnable= b; + m_disable= b; } QString DiceAlias::comment() const diff --git a/src/libparser/diceroller.cpp b/src/libparser/diceroller.cpp index 3c315f6..5396ef8 100644 --- a/src/libparser/diceroller.cpp +++ b/src/libparser/diceroller.cpp @@ -63,18 +63,21 @@ void DiceRoller::readErrorAndWarning() void DiceRoller::start() { - auto future= QtConcurrent::run([this]() { - if(m_diceparser.parseLine(m_command)) + auto future= QtConcurrent::run( + [this]() { - 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(); - } - }); + 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 diff --git a/src/libparser/die.h b/src/libparser/die.h index 0fe36fd..ea6712e 100644 --- a/src/libparser/die.h +++ b/src/libparser/die.h @@ -150,7 +150,6 @@ private: bool m_highlighted{true}; qint64 m_maxValue{0}; qint64 m_base{0}; - qint64 m_occurence{1}; QString m_color; Dice::ArithmeticOperator m_op; diff --git a/src/libparser/include/diceparser/dicealias.h b/src/libparser/include/diceparser/dicealias.h index 05d5a0b..cd8763e 100644 --- a/src/libparser/include/diceparser/dicealias.h +++ b/src/libparser/include/diceparser/dicealias.h @@ -43,7 +43,8 @@ public: * @param key * @param isReplace */ - DiceAlias(QString pattern, QString command, QString comment= QString{}, bool isReplace= true, bool isEnable= true); + DiceAlias(QString pattern, QString command, QString comment= QString{}, bool isReplace= true, + bool isDisable= false); DiceAlias(const DiceAlias& alias); /** * @brief ~DiceAlias @@ -94,12 +95,12 @@ public: * @brief isEnable * @return */ - bool isEnable() const; + bool isDisable() const; /** * @brief setEnable * @param b */ - void setEnable(bool b); + void setDisable(bool b); /** * @brief getComment * @return @@ -116,7 +117,7 @@ private: QString m_command; QString m_comment; RESOLUTION_TYPE m_type; - bool m_isEnable; + bool m_disable{false}; }; #endif // DICEALIAS_H diff --git a/src/libparser/node/allsamenode.h b/src/libparser/node/allsamenode.h index e5c1dc2..ea67c14 100644 --- a/src/libparser/node/allsamenode.h +++ b/src/libparser/node/allsamenode.h @@ -10,7 +10,7 @@ class AllSameNode : public ExecutionNode { public: AllSameNode(); -// virtual ~AllSameNode(); + // virtual ~AllSameNode(); virtual void run(ExecutionNode* previous); /** diff --git a/src/libparser/node/executionnode.h b/src/libparser/node/executionnode.h index 6dba052..cacd307 100644 --- a/src/libparser/node/executionnode.h +++ b/src/libparser/node/executionnode.h @@ -84,7 +84,7 @@ public: virtual qint64 getScalarResult(); - bool isValid(bool condition, Dice::ERROR_CODE code , const QString& errorTxt, bool error = true); + bool isValid(bool condition, Dice::ERROR_CODE code, const QString& errorTxt, bool error= true); protected: /** diff --git a/src/libparser/node/filternode.cpp b/src/libparser/node/filternode.cpp index af3d166..3274e15 100644 --- a/src/libparser/node/filternode.cpp +++ b/src/libparser/node/filternode.cpp @@ -1,7 +1,7 @@ #include "filternode.h" #include "validatorlist.h" -FilterNode::FilterNode() : m_diceResult(new DiceResult()), m_eachValue(false) +FilterNode::FilterNode() : m_diceResult(new DiceResult()) { m_result= m_diceResult; } diff --git a/src/libparser/node/filternode.h b/src/libparser/node/filternode.h index 7af6fe2..4022aa3 100644 --- a/src/libparser/node/filternode.h +++ b/src/libparser/node/filternode.h @@ -34,7 +34,6 @@ public: private: DiceResult* m_diceResult; ValidatorList* m_validatorList; - bool m_eachValue; }; #endif // FILTERNODE_H diff --git a/src/libparser/node/groupnode.h b/src/libparser/node/groupnode.h index 72e795c..982eb6d 100644 --- a/src/libparser/node/groupnode.h +++ b/src/libparser/node/groupnode.h @@ -39,6 +39,7 @@ public: void setExceptedValue(qint64 exceptedValue); void sort(); + private: qint64 m_exceptedValue= 0; }; diff --git a/src/libparser/node/jumpbackwardnode.h b/src/libparser/node/jumpbackwardnode.h index 2e14a00..4de2a05 100644 --- a/src/libparser/node/jumpbackwardnode.h +++ b/src/libparser/node/jumpbackwardnode.h @@ -61,6 +61,7 @@ public: */ virtual ExecutionNode* getCopy() const override; virtual void execute(ExecutionNode* previous= nullptr) override; + private: DiceResult* m_diceResult; ExecutionNode* m_backwardNode; diff --git a/src/libparser/node/keepdiceexecnode.h b/src/libparser/node/keepdiceexecnode.h index 0dd6616..e6bd998 100644 --- a/src/libparser/node/keepdiceexecnode.h +++ b/src/libparser/node/keepdiceexecnode.h @@ -34,13 +34,13 @@ public: virtual ~KeepDiceExecNode(); virtual void run(ExecutionNode* previous); - virtual void setDiceKeepNumber(ExecutionNode* valueNode ); + virtual void setDiceKeepNumber(ExecutionNode* valueNode); virtual QString toString(bool) const; virtual qint64 getPriority() const; virtual ExecutionNode* getCopy() const; private: - ExecutionNode* m_numberOfDiceNode = nullptr; + ExecutionNode* m_numberOfDiceNode= nullptr; DiceResult* m_diceResult; }; diff --git a/src/libparser/node/roundnode.h b/src/libparser/node/roundnode.h index 0bf49b7..a16e886 100644 --- a/src/libparser/node/roundnode.h +++ b/src/libparser/node/roundnode.h @@ -7,7 +7,8 @@ class RoundNode : public ExecutionNode { public: - enum Mode { + enum Mode + { FLOOR, CEIL, ROUND @@ -16,10 +17,10 @@ public: // ExecutionNode interface public: - void run(ExecutionNode *previous); + void run(ExecutionNode* previous); QString toString(bool withLabel) const; qint64 getPriority() const; - ExecutionNode *getCopy() const; + ExecutionNode* getCopy() const; void setCommand(ExecutionNode* cmd); private: diff --git a/src/libparser/node/scalaroperatornode.h b/src/libparser/node/scalaroperatornode.h index 73e0bef..fbb30a8 100644 --- a/src/libparser/node/scalaroperatornode.h +++ b/src/libparser/node/scalaroperatornode.h @@ -94,7 +94,6 @@ public: */ virtual ExecutionNode* getCopy() const override; - void setNextNode(ExecutionNode* node) override; private: diff --git a/src/libparser/node/uniquenode.h b/src/libparser/node/uniquenode.h index 039ba11..adab4fc 100644 --- a/src/libparser/node/uniquenode.h +++ b/src/libparser/node/uniquenode.h @@ -26,7 +26,8 @@ #include "result/diceresult.h" /** - * @brief The UniqueNode class is an ExecutionNode. It is dedicated to unique result of one dice into one dimension array. + * @brief The UniqueNode class is an ExecutionNode. It is dedicated to unique result of one dice into one dimension + * array. */ class UniqueNode : public ExecutionNode { diff --git a/src/libparser/node/valueslistnode.h b/src/libparser/node/valueslistnode.h index 100f275..e37babd 100644 --- a/src/libparser/node/valueslistnode.h +++ b/src/libparser/node/valueslistnode.h @@ -18,7 +18,7 @@ public: private: std::vector<ExecutionNode*> m_data; - DiceResult* m_diceResult = nullptr; + DiceResult* m_diceResult= nullptr; }; #endif // VALUESLISTNODE_H diff --git a/src/libparser/parsingtoolbox.cpp b/src/libparser/parsingtoolbox.cpp index 23e0cbb..2d9c08d 100644 --- a/src/libparser/parsingtoolbox.cpp +++ b/src/libparser/parsingtoolbox.cpp @@ -763,7 +763,6 @@ bool ParsingToolBox::readString(QString& str, QString& strResult) str= str.remove(0, 1); int i= 0; - int j= 0; bool previousEscape= false; QString result; /*&& @@ -780,7 +779,6 @@ bool ParsingToolBox::readString(QString& str, QString& strResult) if(previousEscape && str[i] != '\"') { result+= '\\'; - ++j; } result+= str[i]; previousEscape= false; @@ -942,20 +940,12 @@ bool ParsingToolBox::readStopAtFirst(QString& str) Dice::CONDITION_STATE ParsingToolBox::isValidValidator(ExecutionNode* previous, ValidatorList* val) { - auto node= getNode<DiceRollerNode>(previous); - if(node) - return val->isValidRangeSize(node->getRange()); + auto res= Dice::CONDITION_STATE::ERROR_STATE; + DiceResult* result= dynamic_cast<DiceResult*>(previous->getResult()); + if(result) + res= Dice::CONDITION_STATE::REACHABLE; - auto listNode= getNode<ValuesListNode>(previous); - - if(!listNode) - return Dice::CONDITION_STATE::ERROR_STATE; - - auto dice= dynamic_cast<DiceResult*>(listNode->getResult()); - if(!dice) - return Dice::CONDITION_STATE::ERROR_STATE; - - return Dice::CONDITION_STATE::REACHABLE; + return res; } template <typename T> T* ParsingToolBox::getNode(ExecutionNode* previous) @@ -1081,9 +1071,7 @@ void ParsingToolBox::setStartNodes(std::vector<ExecutionNode*> nodes) void ParsingToolBox::readProbability(QStringList& str, QList<Range>& ranges) { - quint64 totalDistance= 0; quint64 undefDistance= 0; - int undefCount= 0; int maxValue= 0; int i= 0; int j= 0; @@ -1103,7 +1091,7 @@ void ParsingToolBox::readProbability(QStringList& str, QList<Range>& ranges) Range range; range.setValue(start, end); ranges.append(range); - totalDistance+= static_cast<quint64>(end - start + 1); + // totalDistance+= static_cast<quint64>(end - start + 1); ++i; } else // percentage @@ -1112,7 +1100,7 @@ void ParsingToolBox::readProbability(QStringList& str, QList<Range>& ranges) Range range; range.setStart(start); ranges.append(range); - ++undefCount; + //++undefCount; undefDistance+= static_cast<quint64>(start); } if((end > maxValue) || (i == 1)) @@ -1771,12 +1759,14 @@ bool ParsingToolBox::readOption(QString& str, ExecutionNode* previous) //, if(nullptr != validatorList) { auto validity= isValidValidator(previous, validatorList); + if(validity != Dice::CONDITION_STATE::ERROR_STATE) + { + CountExecuteNode* countNode= new CountExecuteNode(); + countNode->setValidatorList(validatorList); - CountExecuteNode* countNode= new CountExecuteNode(); - countNode->setValidatorList(validatorList); - - previous->setNextNode(countNode); - found= true; + previous->setNextNode(countNode); + found= true; + } } else { @@ -2048,6 +2038,8 @@ ExplodeDiceNode* ParsingToolBox::addExplodeDiceNode(qint64 value, ExecutionNode* auto valList= new ValidatorList(); valList->setValidators(QList<Validator*>() << condition); auto validity= isValidValidator(previous, valList); + Q_ASSERT(validity != Dice::CONDITION_STATE::ERROR_STATE); + explodeDiceNode->setValidatorList(valList); previous->setNextNode(explodeDiceNode); return explodeDiceNode; @@ -2276,10 +2268,10 @@ QString ParsingToolBox::convertAlias(QString str) { for(auto& cmd : m_aliasList) { - if(cmd->isEnable()) - { - cmd->resolved(str); - } + if(cmd->isDisable()) + continue; + + cmd->resolved(str); } return str; } diff --git a/src/libparser/result/diceresult.cpp b/src/libparser/result/diceresult.cpp index d25c93b..8a66986 100644 --- a/src/libparser/result/diceresult.cpp +++ b/src/libparser/result/diceresult.cpp @@ -51,8 +51,8 @@ void DiceResult::setResultList(QList<Die*> list) m_diceValues.removeAll(it); /*m_diceValues.erase( - std::remove_if(m_diceValues.begin(), m_diceValues.end(), [list](Die* die) { return list.contains(die); }), - m_diceValues.end());*/ + std::remove_if(m_diceValues.begin(), m_diceValues.end(), [list](Die* die) { return + list.contains(die); }), m_diceValues.end());*/ qDeleteAll(m_diceValues.begin(), m_diceValues.end()); m_diceValues.clear(); diff --git a/src/libparser/validator.cpp b/src/libparser/validator.cpp index 201574b..a001b9e 100644 --- a/src/libparser/validator.cpp +++ b/src/libparser/validator.cpp @@ -28,13 +28,15 @@ template <typename Functor> qint64 Validator::onEach(const std::vector<Die*>& b, bool recursive, bool unlight, Functor functor) const { qint64 result= 0; - std::for_each(b.begin(), b.end(), [this, recursive, unlight, functor, &result](Die* die) { - if(hasValid(die, recursive, unlight)) - { - ++result; - functor(die, recursive, unlight); - } - }); + std::for_each(b.begin(), b.end(), + [this, recursive, unlight, functor, &result](Die* die) + { + if(hasValid(die, recursive, unlight)) + { + ++result; + functor(die, recursive, unlight); + } + }); return result; } @@ -42,13 +44,15 @@ template <typename Functor> qint64 Validator::onEachValue(const std::vector<Die*>& b, bool recursive, bool unlight, Functor functor) const { qint64 result= 0; - std::for_each(b.begin(), b.end(), [this, recursive, unlight, functor, &result](Die* die) { - if(hasValid(die, recursive, unlight)) - { - ++result; - functor(die, recursive, unlight); - } - }); + std::for_each(b.begin(), b.end(), + [this, recursive, unlight, functor, &result](Die* die) + { + if(hasValid(die, recursive, unlight)) + { + ++result; + functor(die, recursive, unlight); + } + }); return result; } diff --git a/src/libparser/validatorlist.cpp b/src/libparser/validatorlist.cpp index 41bc24f..bc8ed21 100644 --- a/src/libparser/validatorlist.cpp +++ b/src/libparser/validatorlist.cpp @@ -39,7 +39,7 @@ void mergeResultsAsAND(const ValidatorResult& diceList, ValidatorResult& result) val.appendValidDice(dice.first, dice.second); } result= val; - result.setAllTrue(diceList.allTrue() & result.allTrue()); + result.setAllTrue(diceList.allTrue() && result.allTrue()); } void mergeResultsAsExeclusiveOR(const ValidatorResult& diceList, ValidatorResult& result) diff --git a/src/tests/dice/tst_dice.cpp b/src/tests/dice/tst_dice.cpp index eb07e57..308a029 100644 --- a/src/tests/dice/tst_dice.cpp +++ b/src/tests/dice/tst_dice.cpp @@ -30,13 +30,13 @@ // node #include "booleancondition.h" #include "diceparser/parsingtoolbox.h" -#include "node/bind.h" +//#include "node/bind.h" #include "node/countexecutenode.h" #include "node/explodedicenode.h" #include "node/filternode.h" -#include "node/groupnode.h" +//#include "node/groupnode.h" #include "node/ifnode.h" -#include "node/jumpbackwardnode.h" +//#include "node/jumpbackwardnode.h" #include "node/keepdiceexecnode.h" #include "node/numbernode.h" #include "node/occurencecountnode.h" @@ -999,7 +999,7 @@ void TestDice::ifTest_data() QTest::addColumn<QString>("expectedResult"); int onEach= 0; - int onEachValue= 1; + // int onEachValue= 1; int oneOfThem= 2; int allOfThem= 3; int onScalar= 4; |