diff options
| -rw-r--r-- | include/parsingtoolbox.h | 7 | ||||
| -rw-r--r-- | node/listsetrollnode.cpp | 7 | ||||
| -rw-r--r-- | node/listsetrollnode.h | 1 | ||||
| -rw-r--r-- | parsingtoolbox.cpp | 49 | ||||
| -rw-r--r-- | result/stringresult.cpp | 9 | ||||
| -rw-r--r-- | result/stringresult.h | 4 |
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 |