aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/parsingtoolbox.cpp
diff options
context:
space:
mode:
authorRenaud G <renaud@rolisteam.org>2019-03-23 11:28:22 +0100
committerRenaud G <renaud@rolisteam.org>2019-03-23 11:28:22 +0100
commit10d0da1c22c94b5361c0a6c76e008c328671ad81 (patch)
treede786f9b2abf5c206146c9ae2eeca1e8ddcc964a /parsingtoolbox.cpp
parent9d8bb500131d3db603bacbdb91440c62f54f72de (diff)
downloadOneRoll-10d0da1c22c94b5361c0a6c76e008c328671ad81.tar.gz
OneRoll-10d0da1c22c94b5361c0a6c76e008c328671ad81.zip
Add new way to replace pattern in string result.
Diffstat (limited to 'parsingtoolbox.cpp')
-rw-r--r--parsingtoolbox.cpp132
1 files changed, 107 insertions, 25 deletions
diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp
index a88b97b..2b77fe2 100644
--- a/parsingtoolbox.cpp
+++ b/parsingtoolbox.cpp
@@ -795,42 +795,124 @@ bool ParsingToolBox::readComment(QString& str, QString& result, QString& comment
return false;
}
-QString ParsingToolBox::replaceVariableToValue(const QString& source, QVector<int> values)
-{
- QString result = source;
-
- int start = source.size();
- do {
- auto ref = readVariableFromString(source, start);
- if(ref.isValid())
- {
- result.remove(ref.index(), ref.length());
- result.insert(ref.index(), values[ref.valueIndex()]);
- }
- }while(start >= 0)
-
+QString ParsingToolBox::replaceVariableToValue(const QString& source, QStringList values)
+{
+ QString result= source;
+
+ int start= source.size() - 1;
+ bool valid= true;
+ do
+ {
+ auto ref= readVariableFromString(source, start);
+ if(ref.isValid())
+ {
+ 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);
+ }
+ }
+ else
+ {
+ valid= false;
+ }
+ } while(valid);
+
return result;
}
-SubtituteInfo ParsingToolBox::readVariableFromString(const QString& source, int start)
+void ParsingToolBox::readSubtitutionParameters(SubtituteInfo& info, QString& rest)
{
- bool found = false;
- for(int i = start; i >= 0 && !found; --i)
+ auto sizeS= rest.size();
+ if(rest.startsWith("{"))
{
- if(source.at(i) == "%")
+ rest= rest.remove(0, 1);
+ qint64 number;
+ if(readNumber(rest, number))
{
- auto rest = source.mid(i, start-i);
- int number;
+ if(rest.startsWith("}"))
+ {
+ rest= rest.remove(0, 1);
+ info.setDigitNumber(static_cast<int>(number));
+ }
+ }
+ }
+ info.setLength(info.length() + sizeS - rest.size());
+}
+
+SubtituteInfo ParsingToolBox::readVariableFromString(const QString& source, int& start)
+{
+ bool found= false;
+ SubtituteInfo info;
+ int i= start;
+ for(; i >= 0 && !found; --i)
+ {
+ if(source.at(i) == "$")
+ {
+ auto rest= source.mid(i + 1, 1 + start - i);
+ qint64 number;
if(readNumber(rest, number))
{
- SubtituteInfo info;
readSubtitutionParameters(info, rest);
- info.setIndex(number);
+ info.setResultIndex(static_cast<int>(number));
info.setPosition(i);
-
+ found= true;
}
-
}
-
}
+ start= i;
+ return info;
+}
+
+SubtituteInfo::SubtituteInfo() {}
+
+bool SubtituteInfo::isValid() const
+{
+ return !(m_position + m_resultIndex < 2);
+}
+
+int SubtituteInfo::length() const
+{
+ return m_length;
+}
+
+void SubtituteInfo::setLength(int length)
+{
+ m_length= length;
+}
+
+int SubtituteInfo::resultIndex() const
+{
+ return m_resultIndex;
+}
+
+void SubtituteInfo::setResultIndex(int valueIndex)
+{
+ m_resultIndex= valueIndex;
+}
+
+int SubtituteInfo::position() const
+{
+ return m_position;
+}
+
+void SubtituteInfo::setPosition(int position)
+{
+ m_position= position;
+}
+
+int SubtituteInfo::digitNumber() const
+{
+ return m_digitNumber;
+}
+
+void SubtituteInfo::setDigitNumber(int digitNumber)
+{
+ m_digitNumber= digitNumber;
}