aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2015-04-29 07:44:25 +0200
committerRenaud G <renaud@rolisteam.org>2015-04-29 07:44:25 +0200
commit590fc6528b09bf1abbd90caf31053cd5ef6b439b (patch)
treed2dcbb2c751d9edf9b736a2fa5488fbcf41247dc
parent942cf3f75f49d83c4e512d5350f7de69f0ec8aa7 (diff)
parent5c73a6cb13b8c301d0e60f916998c3e683a2b043 (diff)
downloadOneRoll-590fc6528b09bf1abbd90caf31053cd5ef6b439b.tar.gz
OneRoll-590fc6528b09bf1abbd90caf31053cd5ef6b439b.zip
Merge branch 'master' of github.com:obiwankennedy/DiceParser
-rw-r--r--.gitignore2
-rw-r--r--cli/main.cpp6
-rw-r--r--diceparser.cpp15
-rw-r--r--diceparser.h10
-rw-r--r--node/executionnode.cpp9
-rw-r--r--node/executionnode.h4
-rw-r--r--node/scalaroperatornode.cpp41
-rw-r--r--node/scalaroperatornode.h30
8 files changed, 105 insertions, 12 deletions
diff --git a/.gitignore b/.gitignore
index 16b4ee5..15390da 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,9 +12,11 @@
# Qt-es
+*.txt.user
*.pro.user
*.pro.user.*
moc_*.cpp
qrc_*.cpp
Makefile
*-build-*
+
diff --git a/cli/main.cpp b/cli/main.cpp
index 0812059..94fcc00 100644
--- a/cli/main.cpp
+++ b/cli/main.cpp
@@ -91,6 +91,12 @@ void startDiceParsing(QString& cmd,QString& treeFile,bool highlight)
if(treeFile.isEmpty())
{
parser->Start();
+ if(!parser->getErrorMap().isEmpty())
+ {
+ qDebug() << "Error" << parser->humanReadableError();
+ return;
+ }
+
ExportedDiceResult list;
parser->getLastDiceResult(list);
QString diceText = diceToText(list);
diff --git a/diceparser.cpp b/diceparser.cpp
index a946b86..ebe2e0e 100644
--- a/diceparser.cpp
+++ b/diceparser.cpp
@@ -179,7 +179,7 @@ bool DiceParser::parseLine(QString str)
}
else
{
- return false;
+ return false;
}
}
@@ -862,9 +862,9 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous, bool hasDice)/
return isFine;
}
-QList<ExecutionNode::ERROR_CODE> DiceParser::getErrorList()
+QMap<ExecutionNode::ERROR_CODE,QString> DiceParser::getErrorMap()
{
- return m_start->getErrorList();
+ return m_start->getExecutionErrorMap();
}
QString DiceParser::humanReadableError()
{
@@ -876,6 +876,15 @@ QString DiceParser::humanReadableError()
str.append(i.value());
str.append("\n");
}
+
+ ///list
+ QMapIterator<ExecutionNode::ERROR_CODE,QString> j(getErrorMap());
+ while(j.hasNext())
+ {
+ j.next();
+ str.append(j.value());
+ str.append("\n");
+ }
return str;
}
diff --git a/diceparser.h b/diceparser.h
index 7cf72de..84c815b 100644
--- a/diceparser.h
+++ b/diceparser.h
@@ -182,6 +182,11 @@ public:
* @return
*/
QString convertAlias(QString str);
+ /**
+ * @brief getErrorList
+ * @return
+ */
+ QMap<ExecutionNode::ERROR_CODE,QString> getErrorMap();
private:
/**
@@ -244,11 +249,6 @@ private:
*/
bool readOperand(QString&,ExecutionNode* & node);
- /**
- * @brief getErrorList
- * @return
- */
- QList<ExecutionNode::ERROR_CODE> getErrorList();
/**
* @brief readInstructionOperator
* @param c
diff --git a/node/executionnode.cpp b/node/executionnode.cpp
index 0cb9c0b..dba56fc 100644
--- a/node/executionnode.cpp
+++ b/node/executionnode.cpp
@@ -32,8 +32,15 @@ ExecutionNode* ExecutionNode::getNextNode()
{
return m_nextNode;
}
-QList<ExecutionNode::ERROR_CODE> ExecutionNode::getErrorList()
+QMap<ExecutionNode::ERROR_CODE,QString> ExecutionNode::getExecutionErrorMap()
{
+ if(NULL!=m_nextNode)
+ {
+ foreach (ExecutionNode::ERROR_CODE key, m_nextNode->getExecutionErrorMap().keys())
+ {
+ m_errors.insert(key,m_nextNode->getExecutionErrorMap().value(key));
+ }
+ }
return m_errors;
}
QString ExecutionNode::getHelp()
diff --git a/node/executionnode.h b/node/executionnode.h
index cc40867..834b062 100644
--- a/node/executionnode.h
+++ b/node/executionnode.h
@@ -56,7 +56,7 @@ public:
* @brief getErrorList
* @return
*/
- virtual QList<ExecutionNode::ERROR_CODE> getErrorList();
+ virtual QMap<ExecutionNode::ERROR_CODE,QString> getExecutionErrorMap();
/**
* @brief generateDotTree
@@ -84,7 +84,7 @@ protected:
/**
* @brief m_errors
*/
- QList<ExecutionNode::ERROR_CODE> m_errors;
+ QMap<ExecutionNode::ERROR_CODE,QString> m_errors;
};
#endif // EXECUTIONNODE_H
diff --git a/node/scalaroperatornode.cpp b/node/scalaroperatornode.cpp
index 8dfbc20..b7c183f 100644
--- a/node/scalaroperatornode.cpp
+++ b/node/scalaroperatornode.cpp
@@ -1,3 +1,24 @@
+/***************************************************************************
+* Copyright (C) 2014 by Renaud Guezennec *
+* http://renaudguezennec.homelinux.org/accueil,3.html *
+* *
+* This file is part of DiceParser *
+* *
+* DiceParser is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+* This program is distributed in the hope that it will be useful, *
+* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+* GNU General Public License for more details. *
+* *
+* You should have received a copy of the GNU General Public License *
+* along with this program; if not, write to the *
+* Free Software Foundation, Inc., *
+* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+***************************************************************************/
#include "scalaroperatornode.h"
#include <QDebug>
@@ -107,7 +128,7 @@ qreal ScalarOperatorNode::divide(qint64 a,qint64 b)
{
if(b==0)
{
- m_errors.append(DIVIDE_BY_ZERO);
+ m_errors.insert(DIVIDE_BY_ZERO,QObject::tr("Division by zero"));
return 0;
}
return (qreal)a/b;
@@ -160,3 +181,21 @@ void ScalarOperatorNode::generateDotTree(QString& s)
}
s.append(str);
}
+QMap<ExecutionNode::ERROR_CODE,QString> ScalarOperatorNode::getExecutionErrorMap()
+{
+ if(NULL!=m_internalNode)
+ {
+ foreach (ExecutionNode::ERROR_CODE key, m_internalNode->getExecutionErrorMap().keys())
+ {
+ m_errors.insert(key,m_internalNode->getExecutionErrorMap().value(key));
+ }
+ }
+ if(NULL!=m_nextNode)
+ {
+ foreach (ExecutionNode::ERROR_CODE key, m_nextNode->getExecutionErrorMap().keys())
+ {
+ m_errors.insert(key,m_nextNode->getExecutionErrorMap().value(key));
+ }
+ }
+ return m_errors;
+}
diff --git a/node/scalaroperatornode.h b/node/scalaroperatornode.h
index 7193118..e43f6f8 100644
--- a/node/scalaroperatornode.h
+++ b/node/scalaroperatornode.h
@@ -1,3 +1,24 @@
+/***************************************************************************
+* Copyright (C) 2014 by Renaud Guezennec *
+* http://renaudguezennec.homelinux.org/accueil,3.html *
+* *
+* This file is part of DiceParser *
+* *
+* DiceParser is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+* This program is distributed in the hope that it will be useful, *
+* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+* GNU General Public License for more details. *
+* *
+* You should have received a copy of the GNU General Public License *
+* along with this program; if not, write to the *
+* Free Software Foundation, Inc., *
+* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+***************************************************************************/
#ifndef SCALAROPERATORNODE_H
#define SCALAROPERATORNODE_H
@@ -7,6 +28,10 @@
#include "executionnode.h"
#include "result/scalarresult.h"
+
+/**
+ * @brief The ScalarOperatorNode class
+ */
class ScalarOperatorNode : public ExecutionNode
{
public:
@@ -21,6 +46,11 @@ public:
virtual qint64 getPriority() const;
void generateDotTree(QString& s);
+ /**
+ * @brief getErrorList
+ * @return
+ */
+ virtual QMap<ExecutionNode::ERROR_CODE,QString> getExecutionErrorMap();
private:
qint64 add(qint64,qint64);