aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/parsingtoolbox.cpp
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2016-09-25 04:20:56 +0200
committerRenaud G <renaud@rolisteam.org>2016-09-25 04:20:56 +0200
commite6a161356be7c5fc306fccce7056670cd75a0966 (patch)
treea826c86bb3a7e6d5df004bf115a21eec0548f940 /parsingtoolbox.cpp
parentd70776644de9e2774483000327f4e229bd8ab50b (diff)
downloadOneRoll-e6a161356be7c5fc306fccce7056670cd75a0966.tar.gz
OneRoll-e6a161356be7c5fc306fccce7056670cd75a0966.zip
-fix reading partially defined range.
Diffstat (limited to 'parsingtoolbox.cpp')
-rw-r--r--parsingtoolbox.cpp51
1 files changed, 46 insertions, 5 deletions
diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp
index 38221f9..212c006 100644
--- a/parsingtoolbox.cpp
+++ b/parsingtoolbox.cpp
@@ -144,7 +144,7 @@ Validator* ParsingToolBox::readValidator(QString& str)
{
Validator* returnVal=NULL;
BooleanCondition::LogicOperator myLogicOp = BooleanCondition::Equal;
- /*bool hasReadLogicOperator = */readLogicOperator(str,myLogicOp);
+ readLogicOperator(str,myLogicOp);
OperationCondition::ConditionOperator condiOp = OperationCondition::Modulo;
@@ -169,6 +169,7 @@ Validator* ParsingToolBox::readValidator(QString& str)
}
else if(readNumber(str,value))
{
+ bool isRange = false;
if(str.startsWith("-"))
{
str=str.remove(0,1);
@@ -179,9 +180,15 @@ Validator* ParsingToolBox::readValidator(QString& str)
Range* range = new Range();
range->setValue(value,end);
returnVal = range;
+ isRange = true;
+ }
+ else
+ {
+ str.prepend("-");
}
}
- else
+
+ if(!isRange)
{
BooleanCondition* condition = new BooleanCondition();
condition->setValue(value);
@@ -489,18 +496,20 @@ void ParsingToolBox::readProbability(QStringList& str,QList<Range>& ranges)
int maxValue = 0;
int i=0;
int j=0;
+ bool hasPercentage=false;
+ //QList<Range> rangesTemp;
//range
for(QString line:str)
{
int pos = line.indexOf('[');
if(-1!=pos)
{
- QString range = line.right(line.length()-pos);
+ QString rangeStr = line.right(line.length()-pos);
line = line.left(pos);
str[j]=line;
qint64 start;
qint64 end;
- if(readDiceRange(range,start,end))
+ if(readDiceRange(rangeStr,start,end))
{
Range range;
range.setValue(start,end);
@@ -510,6 +519,7 @@ void ParsingToolBox::readProbability(QStringList& str,QList<Range>& ranges)
}
else//pourcentage
{
+ hasPercentage = true;
Range range;
range.setStart(start);
ranges.append(range);
@@ -521,11 +531,17 @@ void ParsingToolBox::readProbability(QStringList& str,QList<Range>& ranges)
maxValue = end;
}
}
+ else
+ {
+ Range range;
+ range.setEmptyRange(true);
+ ranges.append(range);
+ }
++j;
}
- if(undefDistance!=0)
+ if((hasPercentage)&&(undefDistance!=0))
{
qreal ratio = (qreal)100.0 / (qreal)undefDistance;
qint64 realStart=0;
@@ -545,5 +561,30 @@ void ParsingToolBox::readProbability(QStringList& str,QList<Range>& ranges)
}
}
}
+ else
+ {
+ int limitUp = 1;
+ for(int i = 0; i< ranges.size(); ++i)
+ {
+ Range range = ranges.at(i);
+ if(range.isEmptyRange())
+ {
+ range.setStart(limitUp);
+ range.setEnd(limitUp);
+ range.setEmptyRange(false);
+
+ }
+ else
+ {
+ qint64 sizeRange = range.getEnd()-range.getStart();
+ range.setStart(limitUp);
+ limitUp+=sizeRange+1;
+ range.setEnd(limitUp);
+ }
+ ++limitUp;
+ ranges[i]=range;
+ }
+
+ }
}