aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/parsingtoolbox.cpp
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2020-06-28 15:00:19 +0200
committerRenaud G <renaud@rolisteam.org>2020-06-28 15:00:19 +0200
commitc5ea6210eedf433ec247e0f6b439a58316f1d11a (patch)
treec54d47a58a5aa428e64283f65ad13fcee3554e35 /parsingtoolbox.cpp
parent6ca0d07b82c79eeb6b48463e1576ec4aec41ac31 (diff)
downloadOneRoll-c5ea6210eedf433ec247e0f6b439a58316f1d11a.tar.gz
OneRoll-c5ea6210eedf433ec247e0f6b439a58316f1d11a.zip
Management of string result inside string result.
Diffstat (limited to 'parsingtoolbox.cpp')
-rw-r--r--parsingtoolbox.cpp64
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;
+}