diff options
| author | 2020-06-28 15:00:19 +0200 | |
|---|---|---|
| committer | 2020-06-28 15:00:19 +0200 | |
| commit | c5ea6210eedf433ec247e0f6b439a58316f1d11a (patch) | |
| tree | c54d47a58a5aa428e64283f65ad13fcee3554e35 /parsingtoolbox.cpp | |
| parent | 6ca0d07b82c79eeb6b48463e1576ec4aec41ac31 (diff) | |
| download | OneRoll-c5ea6210eedf433ec247e0f6b439a58316f1d11a.tar.gz OneRoll-c5ea6210eedf433ec247e0f6b439a58316f1d11a.zip | |
Management of string result inside string result.
Diffstat (limited to 'parsingtoolbox.cpp')
| -rw-r--r-- | parsingtoolbox.cpp | 64 |
1 files changed, 50 insertions, 14 deletions
diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp index e0b1df0..ffa5699 100644 --- a/parsingtoolbox.cpp +++ b/parsingtoolbox.cpp @@ -870,7 +870,8 @@ bool ParsingToolBox::readComment(QString& str, QString& result, QString& comment return false; } -QString ParsingToolBox::replaceVariableToValue(const QString& source, QStringList values) +QString ParsingToolBox::replaceVariableToValue(const QString& source, QStringList values, + QMap<Dice::ERROR_CODE, QString>& errorMap) { QString result= source; @@ -879,23 +880,35 @@ QString ParsingToolBox::replaceVariableToValue(const QString& source, QStringLis do { auto ref= readVariableFromString(source, start); - if(ref.isValid()) + if(ref.resultIndex() >= values.size()) { - result.remove(ref.position(), ref.length()); - auto val= values[ref.resultIndex() - 1]; - if(ref.digitNumber() != 0) - { - auto realVal= QString("%1").arg(val, ref.digitNumber(), QChar('0')); - result.insert(ref.position(), realVal); - } - else - { - result.insert(ref.position(), val); - } + auto error= QString("No valid value at index: $%1").arg(ref.resultIndex()); + errorMap.insert(Dice::ERROR_CODE::INVALID_INDEX, error); + return error; + } + + valid= ref.isValid(); + if(!valid) + continue; + + result.remove(ref.position(), ref.length()); + auto val= values[ref.resultIndex() - 1]; + + if(ref.subIndex() >= 0) + { + auto valSplit= val.split(","); + if(ref.subIndex() < valSplit.size()) + val= valSplit[ref.subIndex()]; + } + + if(ref.digitNumber() != 0) + { + auto realVal= QString("%1").arg(val, ref.digitNumber(), QChar('0')); + result.insert(ref.position(), realVal); } else { - valid= false; + result.insert(ref.position(), val); } } while(valid); @@ -979,6 +992,19 @@ void ParsingToolBox::readSubtitutionParameters(SubtituteInfo& info, QString& res } } } + if(rest.startsWith("[")) + { + rest= rest.remove(0, 1); + qint64 number; + if(readNumber(rest, number)) + { + if(rest.startsWith("]")) + { + rest= rest.remove(0, 1); + info.setSubIndex(static_cast<int>(number)); + } + } + } info.setLength(info.length() + sizeS - rest.size()); } @@ -2030,3 +2056,13 @@ void SubtituteInfo::setDigitNumber(int digitNumber) { m_digitNumber= digitNumber; } + +int SubtituteInfo::subIndex() const +{ + return m_subIndex; +} + +void SubtituteInfo::setSubIndex(int subindex) +{ + m_subIndex= subindex; +} |