aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--diceparser.cpp4
-rw-r--r--diceparser.h5
-rw-r--r--parsingtoolbox.cpp50
-rw-r--r--parsingtoolbox.h20
4 files changed, 75 insertions, 4 deletions
diff --git a/diceparser.cpp b/diceparser.cpp
index 3369f7d..f88cfc3 100644
--- a/diceparser.cpp
+++ b/diceparser.cpp
@@ -1086,3 +1086,7 @@ void DiceParser::setPathToHelp(QString l)
{
m_helpPath = l;
}
+void DiceParser::setVariableDictionary(QHash<QString,QString>* variables)
+{
+ ParsingToolBox::setVariableHash(variables);
+}
diff --git a/diceparser.h b/diceparser.h
index 871a0d3..b532b3e 100644
--- a/diceparser.h
+++ b/diceparser.h
@@ -204,6 +204,11 @@ public:
bool hasSeparator()const;
bool readIfInstruction(QString &str, ExecutionNode* &trueNode, ExecutionNode* &falseNode);
+ /**
+ * @brief setVariableDictionary
+ * @param variables
+ */
+ void setVariableDictionary(QHash<QString,QString>* variables);
private:
/**
diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp
index 7a52c65..7950e4d 100644
--- a/parsingtoolbox.cpp
+++ b/parsingtoolbox.cpp
@@ -24,6 +24,7 @@
#include "parsingtoolbox.h"
#include "node/sortresult.h"
+QHash<QString,QString>* ParsingToolBox::m_variableHash = NULL;
ParsingToolBox::ParsingToolBox()
{
@@ -279,7 +280,9 @@ bool ParsingToolBox::readNumber(QString& str, qint64& myNumber)
}
if(number.isEmpty())
- return false;
+ {
+ return readVariable(str,myNumber);
+ }
bool ok;
myNumber = number.toLongLong(&ok);
@@ -288,8 +291,43 @@ bool ParsingToolBox::readNumber(QString& str, qint64& myNumber)
str=str.remove(0,number.size());
return true;
}
+
return false;
}
+
+bool ParsingToolBox::readVariable(QString &str, qint64 &myNumber)
+{
+ if(str.isEmpty())
+ return false;
+ if(str.startsWith("${"))
+ {
+ str=str.remove(0,2);
+ }
+ QString key;
+ int post = str.indexOf('}');
+ key = str.left(post);
+
+ if(NULL!=m_variableHash)
+ {
+ if(m_variableHash->contains(key))
+ {
+ QString value = m_variableHash->value(key);
+ bool ok;
+ int valueInt = value.toInt(&ok);
+ if(ok)
+ {
+ myNumber = valueInt;
+ str=str.remove(0,post+1);
+ return true;
+ }
+
+ }
+ }
+
+
+ return false;
+
+}
bool ParsingToolBox::readOpenParentheses(QString& str)
{
if(str.startsWith("("))
@@ -436,6 +474,16 @@ void ParsingToolBox::readPainterParameter(PainterNode* painter,QString& str)
}
}
+QHash<QString, QString> *ParsingToolBox::getVariableHash()
+{
+ return m_variableHash;
+}
+
+void ParsingToolBox::setVariableHash(QHash<QString, QString> *variableHash)
+{
+ m_variableHash = variableHash;
+}
+
void ParsingToolBox::readProbability(QStringList& str,QList<Range>& ranges)
{
quint64 totalDistance=0;
diff --git a/parsingtoolbox.h b/parsingtoolbox.h
index 09ab592..3046570 100644
--- a/parsingtoolbox.h
+++ b/parsingtoolbox.h
@@ -95,7 +95,13 @@ public:
*/
static bool readNumber(QString& str, qint64& myNumber);
-
+ /**
+ * @brief readVariable
+ * @param str
+ * @param myNumber
+ * @return
+ */
+ static bool readVariable(QString& str,qint64& myNumber);
/**
* @brief readOpenParentheses
* @param str
@@ -154,11 +160,19 @@ public:
bool readArithmeticOperator(QString& str, ScalarOperatorNode::ArithmeticOperator& op);
static void readPainterParameter(PainterNode *painter, QString &str);
+
+ static QHash<QString, QString> *getVariableHash();
+ static void setVariableHash(QHash<QString, QString> *variableHash);
+
private:
- QMap<QString,BooleanCondition::LogicOperator>* m_logicOp;
- QMap<QString,CompositeValidator::LogicOperation>* m_logicOperation;
+
+ QMap<QString,BooleanCondition::LogicOperator>* m_logicOp;
+ QMap<QString,CompositeValidator::LogicOperation>* m_logicOperation;
QMap<QString,OperationCondition::ConditionOperator>* m_conditionOperation;
QHash<QString,ScalarOperatorNode::ArithmeticOperator>* m_arithmeticOperation;
+
+
+ static QHash<QString,QString>* m_variableHash;
};
#endif // PARSINGTOOLBOX_H