aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--diceparser.cpp29
-rw-r--r--diceparser.h17
-rw-r--r--main.cpp14
-rw-r--r--node/helpnode.cpp1
-rw-r--r--node/listaliasnode.cpp46
-rw-r--r--node/listaliasnode.h33
-rw-r--r--node/node.pri2
7 files changed, 112 insertions, 30 deletions
diff --git a/diceparser.cpp b/diceparser.cpp
index b056be3..9404f08 100644
--- a/diceparser.cpp
+++ b/diceparser.cpp
@@ -37,6 +37,7 @@
#include "node/helpnode.h"
#include "node/jumpbackwardnode.h"
#include "node/listsetrollnode.h"
+#include "node/listaliasnode.h"
#define DEFAULT_FACES_NUMBER 10
@@ -62,7 +63,7 @@ DiceParser::DiceParser()
m_aliasMap = new QMap<QString,QString>;
m_aliasMap->insert("l5r","D10k");
- m_aliasMap->insert("l5R","D10e10k");
+ m_aliasMap->insert("l5R","D10K");
m_aliasMap->insert("nwod","D10e10c[>7]");
m_aliasMap->insert("nwod","D10e10c[>7]");
@@ -70,8 +71,9 @@ DiceParser::DiceParser()
m_nodeActionMap->insert("@",JumpBackward);
- m_commandList = new QList<QString>();
- m_commandList->append("help");
+ m_commandList = new QStringList();
+ m_commandList->append(QObject::tr("help"));
+ m_commandList->append(QObject::tr("la"));
}
@@ -126,8 +128,6 @@ bool DiceParser::parseLine(QString str)
bool DiceParser::readExpression(QString& str,ExecutionNode* & node)
{
- // int myNumber = 1;
- // bool hasReadNumber=false;
ExecutionNode* operandNode=NULL;
if(m_parsingToolbox->readOpenParentheses(str))
{
@@ -196,13 +196,6 @@ bool DiceParser::readExpression(QString& str,ExecutionNode* & node)
}
bool DiceParser::readNode(QString& str,ExecutionNode* & node)
{
- /*k case JumpBackward:
- {
- JumpBackwardNode* jumpNode = new JumpBackwardNode();
- previous->setNextNode(jumpNode);
- node = jumpNode;
- isFine=true;
- }*/
QString key= str.left(1);
if(m_nodeActionMap->contains(key))
{
@@ -231,7 +224,6 @@ QString DiceParser::displayResult()
next = next->getNextNode();
++nodeCount;
}
-// qDebug() << "node count"<< nodeCount;
//////////////////////////////////
//
// Display
@@ -277,7 +269,6 @@ QString DiceParser::displayResult()
resulStr+=" [";
foreach(qint64 i, die->getListValue())
{
-
resulStr+=QString("%1 ").arg(i);
}
resulStr.remove(resulStr.size()-1,1);
@@ -501,7 +492,6 @@ bool DiceParser::readDice(QString& str,ExecutionNode* & node)
QStringList list;
if(m_parsingToolbox->readList(str,list))
{
- qDebug() << list;
ListSetRollNode* lsrNode = new ListSetRollNode();
lsrNode->setListValue(list);
node = lsrNode;
@@ -532,7 +522,14 @@ bool DiceParser::readCommand(QString& str,ExecutionNode* & node)
{
if(m_commandList->contains(str))
{
- node = new HelpNode();
+ if(str=="help")
+ {
+ node = new HelpNode();
+ }
+ else if(str=="la")
+ {
+ node = new ListAliasNode(m_aliasMap);
+ }
return true;
}
return false;
diff --git a/diceparser.h b/diceparser.h
index 21a71a6..6dd2a10 100644
--- a/diceparser.h
+++ b/diceparser.h
@@ -39,12 +39,16 @@ class ExploseDiceNode;
*
* The grammar is something like this:
*
- * Command =: Expression | ScalarOperator Expression
+ * Line =: Command | Command;Command
+ * Command =: Expression | ScalarOperator Expression | ScalarOperator NodeAction Expression
* Expression =: number | number Dice | Command
- * Dice =: DiceOperator Number(faces)
- * DiceOperator =: D
+ * Dice =: DiceOperator Number(faces) | DiceOperator List
+ * List =: [Word,Number,',']+
+ * NodeAction =: @
+ * DiceOperator =: [D,L]
* ScalarOperator =: [x,-,*,x,/]
* number =: [0-9]+
+ * Word =: [A-z]+
*
*/
@@ -65,14 +69,13 @@ public:
* @brief The DiceSymbol enum
*/
enum NodeAction {JumpBackward};
-
-
-
/**
* @brief The OptionOperator enum gathering all options availables for result.
*/
enum OptionOperator {KeepAndExplose,Keep,Reroll,Explosing,Sort,Count,RerollAndAdd};
+ enum CommandOperator {};
+
/**
* @brief DiceParser default constructor
*/
@@ -211,7 +214,7 @@ private:
QMap<QString,OptionOperator>* m_OptionOp;
QMap<QString,NodeAction>* m_nodeActionMap;
QMap<QString,QString>* m_aliasMap;
- QList<QString>* m_commandList;
+ QStringList* m_commandList;
QMap<ExecutionNode::ERROR_CODE,QString> m_errorMap;
diff --git a/main.cpp b/main.cpp
index 986bc2c..926e3d4 100644
--- a/main.cpp
+++ b/main.cpp
@@ -39,8 +39,8 @@ int main(int argc, char *argv[])
QStringList commands;
- commands << "1L[cheminée,chocolat,épée,arc,chute de pierre]" ;
- /*<< "10d10c[>=6]-@c[=1]"
+ commands << "1L[cheminée,chocolat,épée,arc,chute de pierre]"
+ << "10d10c[>=6]-@c[=1]"
<< "10d10c[>=6]-@c[=1]-@c[=1]"
<< "10d10c[>6]+@c[=10]"
<< "1+1D10"
@@ -59,9 +59,11 @@ int main(int argc, char *argv[])
<< "10D10e10s"
<< "10D10s"
<< "15D10e10c[8-10]"
- << "x"
+ << "10d10e11"
<< "1D8+2D6+7"
<< "D25"
+ << "D25+D10"
+ << "D25;D10"
<< "8+8+8"
<< "1D20-88"
<< "100*1D20*2D6"
@@ -69,7 +71,9 @@ int main(int argc, char *argv[])
<< "100/8"
<< "100*3*8"
<< "help"
- << "100*3*8";*/
+ << "la"
+ << "400000D20/400000"
+ << "100*3*8";
if(argc>1)
{
@@ -79,8 +83,6 @@ int main(int argc, char *argv[])
commands << QString::fromLatin1(argv[i]);
}
}
-
-
foreach(QString cmd, commands)
{
if(myParser->parseLine(cmd))
diff --git a/node/helpnode.cpp b/node/helpnode.cpp
index 6135f6c..f31fac1 100644
--- a/node/helpnode.cpp
+++ b/node/helpnode.cpp
@@ -9,7 +9,6 @@ void HelpNode::run(ExecutionNode* previous)
m_previousNode = previous;
StringResult* txtResult = dynamic_cast<StringResult*>(m_result);
- qDebug() << m_result->hasResultOfType(Result::SCALAR) << m_result->hasResultOfType(Result::STRING);
if(NULL != previous)
{
if(previous->getResult() == NULL)
diff --git a/node/listaliasnode.cpp b/node/listaliasnode.cpp
new file mode 100644
index 0000000..1d50c80
--- /dev/null
+++ b/node/listaliasnode.cpp
@@ -0,0 +1,46 @@
+#include "listaliasnode.h"
+
+ListAliasNode::ListAliasNode(QMap<QString,QString>* apAlias)
+ : m_mapAlias(apAlias)
+{
+ m_result = new StringResult();
+}
+void ListAliasNode::run(ExecutionNode* previous )
+{
+ m_previousNode = previous;
+ StringResult* txtResult = dynamic_cast<StringResult*>(m_result);
+
+ if(NULL != previous)
+ {
+ if(previous->getResult() == NULL)
+ {
+ txtResult->setText(toString());
+
+ }
+ else
+ {
+ txtResult->setText(previous->getHelp());
+ }
+ m_result->setPrevious(previous->getResult());
+ }
+
+ if(NULL!=m_nextNode)
+ {
+ m_nextNode->run(this);
+ }
+}
+QString ListAliasNode::toString()const
+{
+ QString result(QObject::tr("List of Alias:\n"));
+ foreach(QString key, m_mapAlias->keys())
+ {
+ result+=QString("%1 : %2\n").arg(key).arg(m_mapAlias->value(key));
+ }
+
+ return result;
+}
+
+qint64 ListAliasNode::getPriority() const
+{
+ return 0;
+}
diff --git a/node/listaliasnode.h b/node/listaliasnode.h
new file mode 100644
index 0000000..d01d17a
--- /dev/null
+++ b/node/listaliasnode.h
@@ -0,0 +1,33 @@
+#ifndef LISTALIASNODE_H
+#define LISTALIASNODE_H
+
+#include "executionnode.h"
+#include "result/stringresult.h"
+
+
+class ListAliasNode : public ExecutionNode
+{
+public:
+ ListAliasNode(QMap<QString,QString>* mapAlias);
+ /**
+ * @brief run
+ * @param previous
+ */
+ virtual void run(ExecutionNode* previous = NULL);
+
+ /**
+ * @brief toString
+ * @return
+ */
+ virtual QString toString()const;
+ /**
+ * @brief getPriority
+ * @return
+ */
+ virtual qint64 getPriority() const;
+
+private:
+ QMap<QString,QString>* m_mapAlias;
+};
+
+#endif // LISTALIASNODE_H
diff --git a/node/node.pri b/node/node.pri
index 79c1623..d7f5c7c 100644
--- a/node/node.pri
+++ b/node/node.pri
@@ -13,6 +13,7 @@ HEADERS += \
$$PWD/helpnode.h \
$$PWD/jumpbackwardnode.h \
$$PWD/listsetrollnode.h
+ $$PWD/listaliasnode.h
SOURCES += \
$$PWD/dicerollernode.cpp \
@@ -29,3 +30,4 @@ SOURCES += \
$$PWD/helpnode.cpp \
$$PWD/jumpbackwardnode.cpp \
$$PWD/listsetrollnode.cpp
+ $$PWD/listaliasnode.cpp