From 42adcb9116ed72a28cdc7d726f6ed32e182881c3 Mon Sep 17 00:00:00 2001
From: Jarek Kobus <jkobus@trolltech.com>
Date: Tue, 7 Jul 2009 13:13:12 +0200
Subject: [PATCH] Add a public method which reads the content of pro file from
 string

Rev-by: Oswald Buddenhagen <oswald.buddenhagen@trolltech.com>
---
 src/shared/proparser/profileevaluator.cpp | 25 ++++++++++++++++++++---
 src/shared/proparser/profileevaluator.h   |  1 +
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/src/shared/proparser/profileevaluator.cpp b/src/shared/proparser/profileevaluator.cpp
index 5183a9edb43..295e094a9ce 100644
--- a/src/shared/proparser/profileevaluator.cpp
+++ b/src/shared/proparser/profileevaluator.cpp
@@ -134,6 +134,8 @@ public:
     /////////////// Reading pro file
 
     bool read(ProFile *pro);
+    bool read(ProFile *pro, const QString &content);
+    bool read(ProFile *pro, QTextStream *ts);
 
     ProBlock *currentBlock();
     void updateItem();
@@ -284,6 +286,19 @@ bool ProFileEvaluator::Private::read(ProFile *pro)
         return false;
     }
 
+    QTextStream ts(&file);
+    return read(pro, &ts);
+}
+
+bool ProFileEvaluator::Private::read(ProFile *pro, const QString &content)
+{
+    QString str(content);
+    QTextStream ts(&str, QIODevice::ReadOnly | QIODevice::Text);
+    return read(pro, &ts);
+}
+
+bool ProFileEvaluator::Private::read(ProFile *pro, QTextStream *ts)
+{
     // Parser state
     m_block = 0;
     m_commentItem = 0;
@@ -295,9 +310,8 @@ bool ProFileEvaluator::Private::read(ProFile *pro)
     m_blockstack.clear();
     m_blockstack.push(pro);
 
-    QTextStream ts(&file);
-    while (!ts.atEnd()) {
-        QString line = ts.readLine();
+    while (!ts->atEnd()) {
+        QString line = ts->readLine();
         if (!parseLine(line)) {
             q->errorMessage(format(".pro parse failure."));
             return false;
@@ -2629,6 +2643,11 @@ bool ProFileEvaluator::queryProFile(ProFile *pro)
     return d->read(pro);
 }
 
+bool ProFileEvaluator::queryProFile(ProFile *pro, const QString &content)
+{
+    return d->read(pro, content);
+}
+
 bool ProFileEvaluator::accept(ProFile *pro)
 {
     return pro->Accept(d);
diff --git a/src/shared/proparser/profileevaluator.h b/src/shared/proparser/profileevaluator.h
index 5fe787953c9..9bd88c0c03d 100644
--- a/src/shared/proparser/profileevaluator.h
+++ b/src/shared/proparser/profileevaluator.h
@@ -69,6 +69,7 @@ public:
     void setParsePreAndPostFiles(bool on); // Default is true
 
     bool queryProFile(ProFile *pro);
+    bool queryProFile(ProFile *pro, const QString &content); // the same as above but the content is read from "content" string, not from filesystem
     bool accept(ProFile *pro);
 
     void addVariables(const QHash<QString, QStringList> &variables);
-- 
GitLab