aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--include/parsingtoolbox.h7
-rw-r--r--node/listsetrollnode.cpp7
-rw-r--r--node/listsetrollnode.h1
-rw-r--r--parsingtoolbox.cpp49
-rw-r--r--result/stringresult.cpp9
-rw-r--r--result/stringresult.h4
6 files changed, 58 insertions, 19 deletions
diff --git a/include/parsingtoolbox.h b/include/parsingtoolbox.h
index 595e5e1..89081ed 100644
--- a/include/parsingtoolbox.h
+++ b/include/parsingtoolbox.h
@@ -82,9 +82,12 @@ class ParsingToolBox
public:
enum LIST_OPERATOR
{
- NONE,
- UNIQUE
+ NONE= 0x00,
+ UNIQUE= 0x01,
+ NOCOMMA= 0x02,
+ UniqueAndNoComma= 0x03
};
+
enum Function
{
REPEAT
diff --git a/node/listsetrollnode.cpp b/node/listsetrollnode.cpp
index 2dea211..2cee645 100644
--- a/node/listsetrollnode.cpp
+++ b/node/listsetrollnode.cpp
@@ -81,7 +81,7 @@ void ListSetRollNode::run(ExecutionNode* previous)
die->roll();
m_diceResult->insertResult(die);
getValueFromDie(die, rollResult);
- for(auto str : rollResult)
+ for(auto const& str : qAsConst(rollResult))
{
m_stringResult->addText(str);
}
@@ -103,6 +103,11 @@ void ListSetRollNode::setUnique(bool u)
{
m_unique= u;
}
+void ListSetRollNode::setNoComma(bool b)
+{
+ if(m_stringResult)
+ m_stringResult->setNoComma(b);
+}
void ListSetRollNode::setRangeList(QList<Range>& ranges)
{
m_rangeList= ranges;
diff --git a/node/listsetrollnode.h b/node/listsetrollnode.h
index b147419..a6c5e1a 100644
--- a/node/listsetrollnode.h
+++ b/node/listsetrollnode.h
@@ -42,6 +42,7 @@ public:
void setListValue(QStringList);
void setUnique(bool);
+ void setNoComma(bool);
void setRangeList(QList<Range>&);
virtual ExecutionNode* getCopy() const;
diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp
index 11f2cba..83c703c 100644
--- a/parsingtoolbox.cpp
+++ b/parsingtoolbox.cpp
@@ -140,7 +140,8 @@ ExecutionNode* ParsingToolBox::addSort(ExecutionNode* e, bool b)
{
SortResultNode* nodeSort= new SortResultNode();
nodeSort->setSortAscending(b);
- e->setNextNode(nodeSort);
+ if(nullptr != e)
+ e->setNextNode(nodeSort);
return nodeSort;
}
@@ -970,12 +971,29 @@ bool ParsingToolBox::readDiceRange(QString& str, qint64& start, qint64& end)
}
ParsingToolBox::LIST_OPERATOR ParsingToolBox::readListOperator(QString& str)
{
- if(str.startsWith('u'))
+ QHash<QChar, ParsingToolBox::LIST_OPERATOR> hash;
+ hash.insert('u', UNIQUE);
+ hash.insert('n', NOCOMMA);
+ bool findOne= false;
+ ParsingToolBox::LIST_OPERATOR op= NONE;
+ int i= 0;
+ do
{
- str= str.remove(0, 1);
- return UNIQUE;
- }
- return NONE;
+ auto keys= hash.keys();
+ findOne= false;
+ for(auto const& key : qAsConst(keys))
+ {
+ if(str.startsWith(key))
+ {
+ str= str.remove(0, 1);
+ op= hash[key];
+ findOne= true;
+ ++i;
+ }
+ }
+ } while(findOne);
+
+ return i > 1 ? UniqueAndNoComma : op;
}
bool ParsingToolBox::readPainterParameter(PainterNode* painter, QString& str)
@@ -1179,7 +1197,7 @@ QString ParsingToolBox::replacePlaceHolderFromJson(const QString& source, const
QStringList resultList;
auto instructions= obj["instructions"].toArray();
std::vector<std::vector<std::pair<int, QList<QStringList>>>> instructionResult;
- for(auto inst : instructions)
+ for(auto inst : qAsConst(instructions))
{
std::vector<std::pair<int, QList<QStringList>>> map;
auto obj= inst.toObject();
@@ -1573,10 +1591,10 @@ bool ParsingToolBox::readOption(QString& str, ExecutionNode* previous) //,
{
case Keep:
{
- ExecutionNode* value=nullptr;
+ ExecutionNode* value= nullptr;
bool ascending= readAscending(str);
- if(readOperand(str,value))
+ if(readOperand(str, value))
{
auto node= addSort(previous, ascending);
KeepDiceExecNode* nodeK= new KeepDiceExecNode();
@@ -1589,8 +1607,8 @@ bool ParsingToolBox::readOption(QString& str, ExecutionNode* previous) //,
case KeepAndExplode:
{
bool ascending= readAscending(str);
- ExecutionNode* value=nullptr;
- if(readOperand(str,value))
+ ExecutionNode* value= nullptr;
+ if(readOperand(str, value))
{
DiceRollerNode* nodeTmp= dynamic_cast<DiceRollerNode*>(previous);
if(nullptr != nodeTmp)
@@ -1761,7 +1779,6 @@ bool ParsingToolBox::readOption(QString& str, ExecutionNode* previous) //,
auto scNode= new ReplaceValueNode();
found= readReplaceValueNode(str, scNode);
previous->setNextNode(scNode);
-
}
break;
case Bind:
@@ -2069,10 +2086,14 @@ bool ParsingToolBox::readDice(QString& str, ExecutionNode*& node)
{
ListSetRollNode* lsrNode= new ListSetRollNode();
lsrNode->setRangeList(listRange);
- if(op == ParsingToolBox::UNIQUE)
+ if(op == ParsingToolBox::UNIQUE || op == ParsingToolBox::UniqueAndNoComma)
{
lsrNode->setUnique(true);
}
+ if(op == ParsingToolBox::NOCOMMA || op == ParsingToolBox::UniqueAndNoComma)
+ {
+ lsrNode->setNoComma(true);
+ }
lsrNode->setListValue(list);
node= lsrNode;
return true;
@@ -2092,7 +2113,7 @@ bool ParsingToolBox::readDice(QString& str, ExecutionNode*& node)
bool ParsingToolBox::readDiceOperator(QString& str, DiceOperator& op)
{
QStringList listKey= m_mapDiceOp.keys();
- for(const QString& key : listKey)
+ for(const QString& key : qAsConst(listKey))
{
if(str.startsWith(key, Qt::CaseInsensitive))
{
diff --git a/result/stringresult.cpp b/result/stringresult.cpp
index d36dfc7..113c22c 100644
--- a/result/stringresult.cpp
+++ b/result/stringresult.cpp
@@ -31,10 +31,17 @@ bool StringResult::hasResultOfType(Dice::RESULT_TYPE resultType) const
}
return val;
}
+
+void StringResult::setNoComma(bool b)
+{
+ m_commaSeparator= !b;
+}
+
QString StringResult::getText() const
{
- return m_value.join(",");
+ return m_commaSeparator ? m_value.join(",") : m_value.join(QString());
}
+
QVariant StringResult::getResult(Dice::RESULT_TYPE type)
{
switch(type)
diff --git a/result/stringresult.h b/result/stringresult.h
index 522dafc..b0ca539 100644
--- a/result/stringresult.h
+++ b/result/stringresult.h
@@ -33,11 +33,13 @@ public:
void setStringCount(int count);
QString getStringResult() const override;
+ void setNoComma(bool b);
private:
QStringList m_value;
- bool m_highlight;
+ bool m_highlight= true;
int m_stringCount= 0;
+ bool m_commaSeparator= true;
};
#endif // STRINGRESULT_H