aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/parsingtoolbox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'parsingtoolbox.cpp')
-rw-r--r--parsingtoolbox.cpp122
1 files changed, 122 insertions, 0 deletions
diff --git a/parsingtoolbox.cpp b/parsingtoolbox.cpp
index e85a855..2b77fe2 100644
--- a/parsingtoolbox.cpp
+++ b/parsingtoolbox.cpp
@@ -794,3 +794,125 @@ bool ParsingToolBox::readComment(QString& str, QString& result, QString& comment
}
return false;
}
+
+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;
+}
+
+void ParsingToolBox::readSubtitutionParameters(SubtituteInfo& info, QString& rest)
+{
+ auto sizeS= rest.size();
+ if(rest.startsWith("{"))
+ {
+ rest= rest.remove(0, 1);
+ qint64 number;
+ if(readNumber(rest, 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))
+ {
+ readSubtitutionParameters(info, rest);
+ 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;
+}