diff options
| author | 2016-09-25 04:20:56 +0200 | |
|---|---|---|
| committer | 2016-09-25 04:20:56 +0200 | |
| commit | e6a161356be7c5fc306fccce7056670cd75a0966 (patch) | |
| tree | a826c86bb3a7e6d5df004bf115a21eec0548f940 /parsingtoolbox.cpp | |
| parent | d70776644de9e2774483000327f4e229bd8ab50b (diff) | |
| download | OneRoll-e6a161356be7c5fc306fccce7056670cd75a0966.tar.gz OneRoll-e6a161356be7c5fc306fccce7056670cd75a0966.zip | |
-fix reading partially defined range.
Diffstat (limited to 'parsingtoolbox.cpp')
| -rw-r--r-- | parsingtoolbox.cpp | 51 |
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; + } + + } } |