diff options
| -rw-r--r-- | src/libparser/include/diceparser/parsingtoolbox.h | 1 | ||||
| -rw-r--r-- | src/libparser/parsingtoolbox.cpp | 26 | ||||
| -rw-r--r-- | src/tests/dice/tst_dice.cpp | 1 |
3 files changed, 24 insertions, 4 deletions
diff --git a/src/libparser/include/diceparser/parsingtoolbox.h b/src/libparser/include/diceparser/parsingtoolbox.h index f34b4ac..1ea988b 100644 --- a/src/libparser/include/diceparser/parsingtoolbox.h +++ b/src/libparser/include/diceparser/parsingtoolbox.h @@ -233,6 +233,7 @@ public: std::function<QString(const QString&, const QString&, bool)> colorize); static SubtituteInfo readVariableFromString(const QString& source, int& start); static SubtituteInfo readPlaceHolderFromString(const QString& source, int& start); + // static QList<SubtituteInfo> findAllPlaceHolder(const QString& source, int instructionCount); static ExportedDiceResult finalDiceResultFromInstruction(ExecutionNode* start); static ExportedDiceResult allDiceResultFromInstruction(ExecutionNode* start); void addResultInJson(QJsonObject& obj, Dice::RESULT_TYPE type, const QString& key, ExecutionNode* start, bool b); diff --git a/src/libparser/parsingtoolbox.cpp b/src/libparser/parsingtoolbox.cpp index 2d9c08d..ec4693c 100644 --- a/src/libparser/parsingtoolbox.cpp +++ b/src/libparser/parsingtoolbox.cpp @@ -945,6 +945,10 @@ Dice::CONDITION_STATE ParsingToolBox::isValidValidator(ExecutionNode* previous, if(result) res= Dice::CONDITION_STATE::REACHABLE; + auto node= getNode<DiceRollerNode>(previous); + if(node) + res= val->isValidRangeSize(node->getRange()); + return res; } template <typename T> @@ -1367,10 +1371,12 @@ QString ParsingToolBox::replacePlaceHolderToValue(const QString& source, const Q for(auto const& pair : inst2Result) { + // auto placeHolders= findAllPlaceHolder(pair.second.join(","), resultList.size()); auto instId= pair.first; auto list= pair.second.join(","); int start= list.size() - 1; bool valid= true; + bool validResult= false; do { auto ref= readPlaceHolderFromString(list, start); @@ -1379,16 +1385,20 @@ QString ParsingToolBox::replacePlaceHolderToValue(const QString& source, const Q break; list.remove(ref.position(), ref.length()); - auto index= ref.resultIndex() < 0 ? instId + ref.resultIndex() : ref.resultIndex() - 1; - qDebug() << "index: " << index << instId; + auto index= ref.resultIndex() < 0 ? instId + ref.resultIndex() : ref.resultIndex(); + // qDebug() << "index: " << index << instId << result << ref.position() << ref.resultIndex(); auto val= resultList[index - 1]; list.insert(ref.position(), val); + validResult= true; + } while(valid); + + if(validResult) + { if(result.isEmpty()) result= list; else result= QStringList{result, list}.join(" ,"); - - } while(valid); + } } if(result.isEmpty()) @@ -2578,6 +2588,14 @@ SubtituteInfo ParsingToolBox::readVariableFromString(const QString& source, int& return info; } +/*QList<SubtituteInfo> ParsingToolBox::findAllPlaceHolder(const QString& source, int instructionCount) +{ + for(int i = instructionCount - 1; i>= 0; --i) + { + + } +}*/ + SubtituteInfo ParsingToolBox::readPlaceHolderFromString(const QString& source, int& start) { bool found= false; diff --git a/src/tests/dice/tst_dice.cpp b/src/tests/dice/tst_dice.cpp index 308a029..7b9e527 100644 --- a/src/tests/dice/tst_dice.cpp +++ b/src/tests/dice/tst_dice.cpp @@ -401,6 +401,7 @@ void TestDice::commandsTest_data() QTest::addRow("cmd93") << "4d10e(10)10"; QTest::addRow("cmd94") << "15/7;floor($1);ceil($1);round($1)"; QTest::addRow("cmd94") << "15/7;floor(15/7);ceil(15/7);round(15/7)"; + QTest::addRow("cmd95") << "10d5;3d6;\"@1\\n@2\""; } void TestDice::rangedCommandsTest() |