aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/libparser/include/diceparser/parsingtoolbox.h1
-rw-r--r--src/libparser/parsingtoolbox.cpp26
-rw-r--r--src/tests/dice/tst_dice.cpp1
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()