aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/diceparser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'diceparser.cpp')
-rw-r--r--diceparser.cpp92
1 files changed, 51 insertions, 41 deletions
diff --git a/diceparser.cpp b/diceparser.cpp
index 802b5f2..53dc305 100644
--- a/diceparser.cpp
+++ b/diceparser.cpp
@@ -48,17 +48,17 @@ DiceParser::DiceParser()
m_parsingToolbox = new ParsingToolBox();
m_mapDiceOp = new QMap<QString,DiceOperator>();
- m_mapDiceOp->insert("D",D);
- m_mapDiceOp->insert("L",L);
+ m_mapDiceOp->insert(QStringLiteral("D"),D);
+ m_mapDiceOp->insert(QStringLiteral("L"),L);
m_OptionOp = new QMap<QString,OptionOperator>();
- m_OptionOp->insert(QObject::tr("k"),Keep);
- m_OptionOp->insert(QObject::tr("K"),KeepAndExplose);
- m_OptionOp->insert(QObject::tr("s"),Sort);
- m_OptionOp->insert(QObject::tr("c"),Count);
- m_OptionOp->insert(QObject::tr("r"),Reroll);
- m_OptionOp->insert(QObject::tr("e"),Explosing);
- m_OptionOp->insert(QObject::tr("a"),RerollAndAdd);
+ m_OptionOp->insert(QStringLiteral("k"),Keep);
+ m_OptionOp->insert(QStringLiteral("K"),KeepAndExplose);
+ m_OptionOp->insert(QStringLiteral("s"),Sort);
+ m_OptionOp->insert(QStringLiteral("c"),Count);
+ m_OptionOp->insert(QStringLiteral("r"),Reroll);
+ m_OptionOp->insert(QStringLiteral("e"),Explosing);
+ m_OptionOp->insert(QStringLiteral("a"),RerollAndAdd);
//m_OptionOp->insert(QObject::tr("@"),JumpBackward);
@@ -69,11 +69,11 @@ DiceParser::DiceParser()
m_aliasList->append(new DiceAlias("(.*)wod(.*)","\\1d10e[=10]c[>=\\2]-@c[=1]",false));*/
m_nodeActionMap = new QMap<QString,NodeAction>();
- m_nodeActionMap->insert("@",JumpBackward);
+ m_nodeActionMap->insert(QStringLiteral("@"),JumpBackward);
m_commandList = new QStringList();
- m_commandList->append("help");
- m_commandList->append("la");
+ m_commandList->append(QStringLiteral("help"));
+ m_commandList->append(QStringLiteral("la"));
}
DiceParser::~DiceParser()
@@ -128,7 +128,10 @@ QString DiceParser::convertAlias(QString str)
{
foreach(DiceAlias* cmd, *m_aliasList)
{
- cmd->resolved(str);
+ if(cmd->isEnable())
+ {
+ cmd->resolved(str);
+ }
}
return str;
}
@@ -146,7 +149,6 @@ void DiceParser::insertAlias(DiceAlias* dice, int i)
bool DiceParser::parseLine(QString str)
{
- m_currentTreeHasSeparator = false;
m_errorMap.clear();
if(NULL!=m_start)
{
@@ -288,8 +290,8 @@ QString DiceParser::displayResult()
QTextStream stream(&str);
Result* result=next->getResult();
- QString totalValue("you got %1 ;");
- QString dieValue("D%1 : {%2} ");
+ QString totalValue("you got %1 ;");
+ QString dieValue("D%1 : {%2} ");
bool scalarDone=false;
while(NULL!=result)
@@ -313,22 +315,22 @@ QString DiceParser::displayResult()
{
if(!die->hasBeenDisplayed())
{
- resulStr+=QString("%1").arg(die->getValue());
+ resulStr+=QStringLiteral("%1").arg(die->getValue());
die->displayed();
face = die->getFaces();
if(die->hasChildrenValue())
{
- resulStr+=" [";
+ resulStr+=QStringLiteral(" [");
foreach(qint64 i, die->getListValue())
{
- resulStr+=QString("%1 ").arg(i);
+ resulStr+=QStringLiteral("%1 ").arg(i);
}
resulStr.remove(resulStr.size()-1,1);
- resulStr+="]";
+ resulStr+=QStringLiteral("]");
}
- resulStr+=", ";
+ resulStr+=QStringLiteral(", ");
}
}
resulStr.remove(resulStr.size()-2,2);
@@ -353,7 +355,7 @@ QString DiceParser::displayResult()
out << endl;
- return QString("%1, you rolled:%3").arg(str.simplified()).arg(m_command) ;
+ return QStringLiteral("%1, you rolled:%3").arg(str.simplified()).arg(m_command) ;
// qDebug() << "result count:" << resulCount;
}
@@ -573,8 +575,8 @@ bool DiceParser::readDice(QString& str,ExecutionNode* & node)
{
if(currentOperator==D)
{
- int num;
- int end;
+ qint64 num;
+ qint64 end;
if(m_parsingToolbox->readNumber(str,num))
{
if(num<1)
@@ -594,7 +596,7 @@ bool DiceParser::readDice(QString& str,ExecutionNode* & node)
else if(m_parsingToolbox->readDiceRange(str,num,end))
{
- int face = abs(num - end)+1;
+ qint64 face = abs(num - end)+1;
DiceRollerNode* drNode = new DiceRollerNode(face,num);
node = drNode;
ExecutionNode* current = drNode;
@@ -608,9 +610,16 @@ bool DiceParser::readDice(QString& str,ExecutionNode* & node)
else if(currentOperator ==L)
{
QStringList list;
- if(m_parsingToolbox->readList(str,list))
+ QList<Range> listRange;
+ ParsingToolBox::LIST_OPERATOR op = m_parsingToolbox->readListOperator(str);
+ if(m_parsingToolbox->readList(str,list,listRange))
{
ListSetRollNode* lsrNode = new ListSetRollNode();
+ lsrNode->setRangeList(listRange);
+ if(op == ParsingToolBox::UNIQUE)
+ {
+ lsrNode->setUnique(true);
+ }
lsrNode->setListValue(list);
node = lsrNode;
return true;
@@ -644,14 +653,14 @@ bool DiceParser::readCommand(QString& str,ExecutionNode* & node)
{
if(m_commandList->contains(str))
{
- if(str=="help")
+ if(str== QLatin1String("help"))
{
HelpNode* help = new HelpNode();
help->setHelpPath(m_helpPath);
node = help;
}
- else if(str=="la")
+ else if(str== QLatin1String("la"))
{
node = new ListAliasNode(m_aliasList);
}
@@ -744,7 +753,6 @@ bool DiceParser::readOperator(QString& str,ExecutionNode* previous)
previous->setNextNode(nodeExec);
m_currentTreeHasSeparator = true;
return true;
-
}
}
else
@@ -801,7 +809,7 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous, bool hasDice)/
{
case Keep:
{
- int myNumber=0;
+ qint64 myNumber=0;
bool ascending = m_parsingToolbox->readAscending(str);
if(m_parsingToolbox->readNumber(str,myNumber))
{
@@ -822,7 +830,7 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous, bool hasDice)/
break;
case KeepAndExplose:
{
- int myNumber=0;
+ qint64 myNumber=0;
bool ascending = m_parsingToolbox->readAscending(str);
if(m_parsingToolbox->readNumber(str,myNumber))
{
@@ -861,7 +869,8 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous, bool hasDice)/
break;
case Count:
{
- Validator* validator = m_parsingToolbox->readValidator(str);
+ //Validator* validator = m_parsingToolbox->readValidator(str);
+ Validator* validator = m_parsingToolbox->readCompositeValidator(str);
if(NULL!=validator)
{
/// @todo display warning here.
@@ -884,7 +893,8 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous, bool hasDice)/
case Reroll:
case RerollAndAdd:
{
- Validator* validator = m_parsingToolbox->readValidator(str);
+ //Validator* validator = m_parsingToolbox->readValidator(str);
+ Validator* validator = m_parsingToolbox->readCompositeValidator(str);
if(NULL!=validator)
{
/// @todo display warning here.
@@ -902,14 +912,14 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous, bool hasDice)/
}
else
{
- m_errorMap.insert(ExecutionNode::BAD_SYNTAXE,QObject::tr("Validator is missing after the %1 operator. Please, change it").arg(m_OptionOp->value(tmp)==Reroll?"r":"a"));
+ m_errorMap.insert(ExecutionNode::BAD_SYNTAXE,QObject::tr("Validator is missing after the %1 operator. Please, change it").arg(m_OptionOp->value(tmp)==Reroll?QStringLiteral("r"):QStringLiteral("a")));
}
}
break;
case Explosing:
{
- Validator* validator = m_parsingToolbox->readValidator(str);
+ Validator* validator = m_parsingToolbox->readCompositeValidator(str);
if(NULL!=validator)
{
if(!m_parsingToolbox->isValidValidator(previous,validator))
@@ -943,12 +953,12 @@ QMap<ExecutionNode::ERROR_CODE,QString> DiceParser::getErrorMap()
QString DiceParser::humanReadableError()
{
QMapIterator<ExecutionNode::ERROR_CODE,QString> i(m_errorMap);
- QString str="";
+ QString str("");
while (i.hasNext())
{
i.next();
str.append(i.value());
- str.append("\n");
+ str.append(QStringLiteral("\n"));
}
///list
@@ -957,14 +967,14 @@ QString DiceParser::humanReadableError()
{
j.next();
str.append(j.value());
- str.append("\n");
+ str.append(QStringLiteral("\n"));
}
return str;
}
bool DiceParser::readOperand(QString& str,ExecutionNode* & node)
{
- int myNumber=1;
+ qint64 myNumber=1;
if(m_parsingToolbox->readNumber(str,myNumber))
{
@@ -978,9 +988,9 @@ bool DiceParser::readOperand(QString& str,ExecutionNode* & node)
}
void DiceParser::writeDownDotTree(QString filepath)
{
- QString str("digraph ExecutionTree {\n");
+ QString str(QStringLiteral("digraph ExecutionTree {\n"));
m_start->generateDotTree(str);
- str.append("}");
+ str.append(QStringLiteral("}\n"));
QFile file(filepath);