aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--cli/main.cpp32
-rw-r--r--diceparser.cpp37
-rw-r--r--diceparser.h1
-rw-r--r--node/executionnode.h2
4 files changed, 52 insertions, 20 deletions
diff --git a/cli/main.cpp b/cli/main.cpp
index 1324a3d..0f984c1 100644
--- a/cli/main.cpp
+++ b/cli/main.cpp
@@ -53,6 +53,7 @@
*/
QTextStream out(stdout, QIODevice::WriteOnly);
+QTextStream err(stderr, QIODevice::WriteOnly);
bool markdown = false;
#ifdef PAINTER_OP
enum EXPORTFORMAT {TERMINAL, SVG, IMAGE, MARKDOWN, JSON, BOT};
@@ -104,7 +105,7 @@ void displayImage(QString scalarText, QString resultStr,QJsonArray array, bool w
out << DisplayToolBox::makeImage( scalarText, resultStr, array, withColor, cmd, comment, allSameFaceCount, allSameColor);
}
#endif
-void displayJSon(QString scalarText, QString resultStr,QJsonArray array, bool withColor, QString cmd, QString error, QString comment, bool allSameFaceCount,bool allSameColor)
+void displayJSon(QString scalarText, QString resultStr,QJsonArray array, bool withColor, QString cmd, QString error, QString warning, QString comment, bool allSameFaceCount,bool allSameColor)
{
Q_UNUSED(withColor);
QJsonDocument doc;
@@ -116,11 +117,12 @@ void displayJSon(QString scalarText, QString resultStr,QJsonArray array, bool wi
obj["string"]=resultStr;
obj["allSameFace"]=allSameFaceCount;
obj["allSameColor"]=allSameColor;
+ obj["warning"]=warning;
obj["command"]=cmd;
doc.setObject(obj);
out << doc.toJson() << "\n";
}
-void displayMarkdown(QString scalarText, QString resultStr,QJsonArray array, bool withColor, QString cmd, QString error, QString comment, bool allSameFaceCount,bool allSameColor)
+void displayMarkdown(QString scalarText, QString resultStr,QJsonArray array, bool withColor, QString cmd, QString error, QString warning, QString comment, bool allSameFaceCount,bool allSameColor)
{
Q_UNUSED(withColor);
QString str("```Markdown\n");
@@ -130,6 +132,9 @@ void displayMarkdown(QString scalarText, QString resultStr,QJsonArray array, boo
}
else
{
+ if(!warning.isEmpty())
+ str.append(QStringLiteral("Warning: %1\n").arg(warning));
+
if(!comment.isEmpty())
{
str.prepend(QStringLiteral("%1\n").arg(comment));
@@ -148,7 +153,7 @@ void displayMarkdown(QString scalarText, QString resultStr,QJsonArray array, boo
str.append(QStringLiteral("```"));
out << str;
}
-void displaySVG(QString scalarText, QString resultStr,QJsonArray array, bool withColor, QString cmd, QString error, QString comment, bool allSameFaceCount,bool allSameColor)
+void displaySVG(QString scalarText, QString resultStr,QJsonArray array, bool withColor, QString cmd, QString error, QString warning, QString comment, bool allSameFaceCount,bool allSameColor)
{
QString str("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" "
"xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n");
@@ -158,6 +163,9 @@ void displaySVG(QString scalarText, QString resultStr,QJsonArray array, bool wit
}
else
{
+ if(!warning.isEmpty())
+ str.append(QStringLiteral("<text font-size=\"16\" x=\"0\" y=\"20\"><tspan fill=\"orange\">%1</tspan></text>").arg(warning));
+
int y = 20;
if(!comment.isEmpty())
{
@@ -182,13 +190,18 @@ void displaySVG(QString scalarText, QString resultStr,QJsonArray array, bool wit
out << str << "\n";
}
-void displayCommandResult(QString scalarText, QString resultStr,QJsonArray array, bool withColor, QString cmd, QString error, QString comment, bool allSameFaceCount,bool allSameColor)
+void displayCommandResult(QString scalarText, QString resultStr,QJsonArray array, bool withColor, QString cmd, QString error, QString warning, QString comment, bool allSameFaceCount,bool allSameColor)
{
+ // TODO display warning
if(!error.isEmpty())
{
- out << "Error" << error << "\n";
+ err << "Error" << error << "\n";
return;
}
+
+ if(!warning.isEmpty())
+ err << "Warning: "<< warning << "\n";
+
QString str;
auto diceList = DisplayToolBox::diceToText(array,withColor,allSameFaceCount,allSameColor);
@@ -243,6 +256,7 @@ int startDiceParsing(QStringList& cmds,QString& treeFile,bool withColor, EXPORTF
QString lastScalarText;
QString comment = parser.getComment();
QString error = parser.humanReadableError();
+ QString warnings = parser.humanReadableWarning();
QStringList strLst;
QStringList listOfDiceResult;
@@ -343,17 +357,17 @@ int startDiceParsing(QStringList& cmds,QString& treeFile,bool withColor, EXPORTF
switch(format)
{
case TERMINAL:
- displayCommandResult(scalarText, resultStr, array, withColor, cmd, error, comment, allSameFaceCount, allSameColor);
+ displayCommandResult(scalarText, resultStr, array, withColor, cmd, error,warnings, comment, allSameFaceCount, allSameColor);
break;
case SVG:
- displaySVG(scalarText, resultStr, array, withColor, cmd, error, comment, allSameFaceCount, allSameColor);
+ displaySVG(scalarText, resultStr, array, withColor, cmd, error,warnings, comment, allSameFaceCount, allSameColor);
break;
case BOT:
case MARKDOWN:
- displayMarkdown(scalarText, resultStr, array, withColor, cmd, error, comment, allSameFaceCount, allSameColor);
+ displayMarkdown(scalarText, resultStr, array, withColor, cmd, error,warnings, comment, allSameFaceCount, allSameColor);
break;
case JSON:
- displayJSon(scalarText, resultStr, array, withColor, cmd, error, comment, allSameFaceCount, allSameColor);
+ displayJSon(scalarText, resultStr, array, withColor, cmd, error,warnings, comment, allSameFaceCount, allSameColor);
break;
#ifdef PAINTER_OP
case IMAGE:
diff --git a/diceparser.cpp b/diceparser.cpp
index 2508f41..337efd0 100644
--- a/diceparser.cpp
+++ b/diceparser.cpp
@@ -169,16 +169,19 @@ bool DiceParser::parseLine(QString str, bool allowAlias)
m_command = str;
bool hasInstruction = readInstructionList(str);
- if((m_errorMap.isEmpty())&&(hasInstruction))
+ bool value = hasInstruction;
+ if(!hasInstruction)
{
- return true;
+ m_errorMap.insert(ExecutionNode::NOTHING_UNDERSTOOD,QObject::tr("Nothing was understood. To roll dice: !1d6 - full documation: "
+ "<a href=\"https://github.com/Rolisteam/DiceParser/blob/master/HelpMe.md\">https://github.com/Rolisteam/DiceParser/blob/master/HelpMe.md</a>"));
}
- else
+ else if(hasInstruction && !str.isEmpty())
{
- m_errorMap.insert(ExecutionNode::NOTHING_UNDERSTOOD,QObject::tr("Nothing was understood. To roll dice: !1d6 - full documation: "
- "<a href=\"https://github.com/Rolisteam/DiceParser/blob/master/HelpMe.md\">https://github.com/Rolisteam/DiceParser/blob/master/HelpMe.md</a>"));
+ auto i = m_command.size()-str.size();
+ m_warningMap.insert(ExecutionNode::UNEXPECTED_CHARACTER,QObject::tr("Unexpected character at %1 - end of command was ignored \"%2\"").arg(i).arg(str));
}
- return false;
+
+ return value;
}
bool DiceParser::readExpression(QString& str,ExecutionNode* & node)
@@ -253,8 +256,6 @@ bool DiceParser::readExpression(QString& str,ExecutionNode* & node)
{
NumberNode* numberNode=new NumberNode();
numberNode->setNumber(1);
- ExecutionNode* previous = diceNode->getPreviousNode();
- numberNode->setPreviousNode(previous);
numberNode->setNextNode(diceNode);
node = numberNode;
return true;
@@ -860,12 +861,16 @@ bool DiceParser::readInstructionList(QString& str)
{
latest = ParsingToolBox::getLatestNode(latest);
keepParsing =!str.isEmpty();
- if(keepParsing)
+ while(keepParsing)
{
+ auto before = str;
ExecutionNode* operatorNode = nullptr;
if(readOperator(str,operatorNode))
+ {
latest->setNextNode(operatorNode);
- latest = ParsingToolBox::getLatestNode(latest);
+ latest = ParsingToolBox::getLatestNode(latest);
+ }
+ keepParsing = (!str.isEmpty() & (before!=str));
}
}
if( !str.isEmpty() && readInstructionOperator(str[0]))
@@ -1348,6 +1353,18 @@ QString DiceParser::humanReadableError()
return str;
}
+QString DiceParser::humanReadableWarning()
+{
+ QMapIterator<ExecutionNode::DICE_ERROR_CODE,QString> i(m_warningMap);
+ QString str("");
+ while (i.hasNext())
+ {
+ i.next();
+ str.append(i.value());
+ str.append(QStringLiteral("\n"));
+ }
+ return str;
+}
void DiceParser::writeDownDotTree(QString filepath)
{
diff --git a/diceparser.h b/diceparser.h
index be0dacd..6197e6b 100644
--- a/diceparser.h
+++ b/diceparser.h
@@ -220,6 +220,7 @@ public:
bool readOptionFromNull(QString &str, ExecutionNode *&node);
bool readInstructionList(QString &str);
void getDiceResultFromAllInstruction(QList<ExportedDiceResult> &resultList);
+ QString humanReadableWarning();
protected:
bool readParameterNode(QString &str, ExecutionNode *&node);
private:
diff --git a/node/executionnode.h b/node/executionnode.h
index 796831d..53ea83b 100644
--- a/node/executionnode.h
+++ b/node/executionnode.h
@@ -18,7 +18,7 @@ public:
NOTHING_UNDERSTOOD,
NO_DICE_TO_ROLL,
TOO_MANY_DICE,NO_VARIBALE,
- INVALID_INDEX};
+ INVALID_INDEX,UNEXPECTED_CHARACTER};
/**
* @brief ExecutionNode
*/