From 3675aebdc543e00e5f0043285bdacb264bfdefbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Fri, 17 Jun 2016 19:56:55 +0200 Subject: [PATCH] Updated templateengine base code to 1.6.5 --- .../server/lib/templateengine/template.cpp | 131 ++++++++++++------ .../server/lib/templateengine/template.h | 5 +- .../lib/templateengine/templatecache.cpp | 6 +- .../server/lib/templateengine/templatecache.h | 9 +- .../lib/templateengine/templateengine.pri | 10 +- .../lib/templateengine/templateloader.cpp | 39 ++++-- .../lib/templateengine/templateloader.h | 9 +- 7 files changed, 142 insertions(+), 67 deletions(-) diff --git a/YACReaderLibrary/server/lib/templateengine/template.cpp b/YACReaderLibrary/server/lib/templateengine/template.cpp index 23abac9e..d099668c 100644 --- a/YACReaderLibrary/server/lib/templateengine/template.cpp +++ b/YACReaderLibrary/server/lib/templateengine/template.cpp @@ -7,131 +7,174 @@ #include Template::Template(QString source, QString sourceName) - : QString(source) { + : QString(source) +{ this->sourceName=sourceName; this->warnings=false; } -Template::Template(QFile& file, QTextCodec* textCodec) { +Template::Template(QFile& file, QTextCodec* textCodec) +{ this->warnings=false; sourceName=QFileInfo(file.fileName()).baseName(); - if (!file.isOpen()) { + if (!file.isOpen()) + { file.open(QFile::ReadOnly | QFile::Text); } QByteArray data=file.readAll(); file.close(); - if (data.size()==0 || file.error()) { + if (data.size()==0 || file.error()) + { qCritical("Template: cannot read from %s, %s",qPrintable(sourceName),qPrintable(file.errorString())); + } + else + { append(textCodec->toUnicode(data)); } } -int Template::setVariable(QString name, QString value) { +int Template::setVariable(QString name, QString value) +{ int count=0; QString variable="{"+name+"}"; int start=indexOf(variable); - while (start>=0) { + while (start>=0) + { replace(start, variable.length(), value); count++; start=indexOf(variable,start+value.length()); } - if (count==0 && warnings) { + if (count==0 && warnings) + { qWarning("Template: missing variable %s in %s",qPrintable(variable),qPrintable(sourceName)); } return count; } -int Template::setCondition(QString name, bool value) { +int Template::setCondition(QString name, bool value) +{ int count=0; QString startTag=QString("{if %1}").arg(name); QString elseTag=QString("{else %1}").arg(name); QString endTag=QString("{end %1}").arg(name); // search for if-else-end int start=indexOf(startTag); - while (start>=0) { + while (start>=0) + { int end=indexOf(endTag,start+startTag.length()); - if (end>=0) { + if (end>=0) + { count++; int ellse=indexOf(elseTag,start+startTag.length()); - if (ellse>start && ellsestart && ellse=0) { + while (start>=0) + { int end=indexOf(endTag,start+startTag2.length()); - if (end>=0) { + if (end>=0) + { count++; int ellse=indexOf(elseTag,start+startTag2.length()); - if (ellse>start && ellsestart && ellse=0); +int Template::loop(QString name, int repetitions) +{ + Q_ASSERT(repetitions>=0); int count=0; QString startTag="{loop "+name+"}"; QString elseTag="{else "+name+"}"; QString endTag="{end "+name+"}"; // search for loop-else-end int start=indexOf(startTag); - while (start>=0) { + while (start>=0) + { int end=indexOf(endTag,start+startTag.length()); - if (end>=0) { + if (end>=0) + { count++; int ellse=indexOf(elseTag,start+startTag.length()); - if (ellse>start && ellse0) { + if (ellse>start && ellse0) + { QString loopPart=mid(start+startTag.length(), ellse-start-startTag.length()); QString insertMe; - for (int i=0; i0) { // and no else part + else if (repetitions>0) + { + // and no else part QString loopPart=mid(start+startTag.length(), end-start-startTag.length()); QString insertMe; - for (int i=0; i #include #include +#include "templateglobal.h" /** Enhanced version of QString for template processing. Templates @@ -37,7 +38,7 @@ Example code to fill this template:

  Template t(QFile("test.tpl"),QTextCode::codecForName("UTF-8"));
- t.setVariable("user", "Stefan");
+ t.setVariable("username", "Stefan");
  t.setCondition("locked",false);
  t.loop("user",2);
  t.setVariable("user0.name,"Markus");
@@ -86,7 +87,7 @@
  @see TemplateCache
 */
 
-class Template : public QString {
+class DECLSPEC Template : public QString {
 public:
 
     /**
diff --git a/YACReaderLibrary/server/lib/templateengine/templatecache.cpp b/YACReaderLibrary/server/lib/templateengine/templatecache.cpp
index 823f4f24..109074f1 100644
--- a/YACReaderLibrary/server/lib/templateengine/templatecache.cpp
+++ b/YACReaderLibrary/server/lib/templateengine/templatecache.cpp
@@ -11,12 +11,14 @@ TemplateCache::TemplateCache(QSettings* settings, QObject* parent)
     qDebug("TemplateCache: timeout=%i, size=%i",cacheTimeout,cache.maxCost());
 }
 
-QString TemplateCache::tryFile(QString localizedName) {
+QString TemplateCache::tryFile(QString localizedName)
+{
     qint64 now=QDateTime::currentMSecsSinceEpoch();
     // search in cache
     qDebug("TemplateCache: trying cached %s",qPrintable(localizedName));
     CacheEntry* entry=cache.object(localizedName);
-    if (entry && (cacheTimeout==0 || entry->created>now-cacheTimeout)) {
+    if (entry && (cacheTimeout==0 || entry->created>now-cacheTimeout))
+    {
         return entry->document;
     }
     // search on filesystem
diff --git a/YACReaderLibrary/server/lib/templateengine/templatecache.h b/YACReaderLibrary/server/lib/templateengine/templatecache.h
index 6e79f119..7b4da072 100644
--- a/YACReaderLibrary/server/lib/templateengine/templatecache.h
+++ b/YACReaderLibrary/server/lib/templateengine/templatecache.h
@@ -1,8 +1,9 @@
 #ifndef TEMPLATECACHE_H
 #define TEMPLATECACHE_H
 
-#include "templateloader.h"
 #include 
+#include "templateglobal.h"
+#include "templateloader.h"
 
 /**
   Caching template loader, reduces the amount of I/O and improves performance
@@ -25,7 +26,7 @@
   

The following settings are required:

-  path=.
+  path=../templates
   suffix=.tpl
   encoding=UTF-8
   cacheSize=1000000
@@ -38,9 +39,9 @@
   @see TemplateLoader
 */
 
-class TemplateCache : public TemplateLoader {
+class DECLSPEC TemplateCache : public TemplateLoader {
     Q_OBJECT
-    Q_DISABLE_COPY(TemplateCache);
+    Q_DISABLE_COPY(TemplateCache)
 public:
 
     /**
diff --git a/YACReaderLibrary/server/lib/templateengine/templateengine.pri b/YACReaderLibrary/server/lib/templateengine/templateengine.pri
index d3eba98b..53608ae4 100644
--- a/YACReaderLibrary/server/lib/templateengine/templateengine.pri
+++ b/YACReaderLibrary/server/lib/templateengine/templateengine.pri
@@ -1,7 +1,11 @@
 INCLUDEPATH += $$PWD
 DEPENDPATH += $$PWD
 
-HEADERS  += $$PWD/template.h $$PWD/templateloader.h $$PWD/templatecache.h
-SOURCES  += $$PWD/template.cpp $$PWD/templateloader.cpp $$PWD/templatecache.cpp
+HEADERS += $$PWD/templateglobal.h
+HEADERS += $$PWD/template.h 
+HEADERS += $$PWD/templateloader.h 
+HEADERS += $$PWD/templatecache.h
 
-OTHER_FILES += $$PWD/../doc/readme.txt
+SOURCES += $$PWD/template.cpp 
+SOURCES += $$PWD/templateloader.cpp 
+SOURCES += $$PWD/templatecache.cpp
diff --git a/YACReaderLibrary/server/lib/templateengine/templateloader.cpp b/YACReaderLibrary/server/lib/templateengine/templateloader.cpp
index 9ed9cf8f..2abcabd1 100644
--- a/YACReaderLibrary/server/lib/templateengine/templateloader.cpp
+++ b/YACReaderLibrary/server/lib/templateengine/templateloader.cpp
@@ -32,18 +32,22 @@ TemplateLoader::TemplateLoader(QSettings* settings, QObject* parent)
     }
     fileNameSuffix=settings->value("suffix",".tpl").toString();
     QString encoding=settings->value("encoding").toString();
-    if (encoding.isEmpty()) {
+    if (encoding.isEmpty())
+    {
         textCodec=QTextCodec::codecForLocale();
     }
-    else {
+    else
+    {
        textCodec=QTextCodec::codecForName(encoding.toLocal8Bit());
    }
    qDebug("TemplateLoader: path=%s, codec=%s",qPrintable(templatePath),textCodec->name().data());
 }
 
-TemplateLoader::~TemplateLoader() {}
+TemplateLoader::~TemplateLoader()
+{}
 
-QString TemplateLoader::tryFile(QString localizedName) {
+QString TemplateLoader::tryFile(QString localizedName)
+{
     QString fileName=templatePath+"/"+localizedName+fileNameSuffix;
     qDebug("TemplateCache: trying file %s",qPrintable(fileName));
     QFile file(fileName);
@@ -51,28 +55,33 @@ QString TemplateLoader::tryFile(QString localizedName) {
         file.open(QIODevice::ReadOnly);
         QString document=textCodec->toUnicode(file.readAll());
         file.close();
-        if (file.error()) {
+        if (file.error())
+        {
             qCritical("TemplateLoader: cannot load file %s, %s",qPrintable(fileName),qPrintable(file.errorString()));
             return "";
         }
-        else {
+        else
+        {
             return document;
         }
     }
     return "";
 }
 
-Template TemplateLoader::getTemplate(QString templateName, QString locales) {
+Template TemplateLoader::getTemplate(QString templateName, QString locales)
+{
     mutex.lock();
     QSet tried; // used to suppress duplicate attempts
     QStringList locs=locales.split(',',QString::SkipEmptyParts);
 
     // Search for exact match
-    foreach (QString loc,locs) {
+    foreach (QString loc,locs)
+    {
         loc.replace(QRegExp(";.*"),"");
         loc.replace('-','_');
         QString localizedName=templateName+"-"+loc.trimmed();
-        if (!tried.contains(localizedName)) {
+        if (!tried.contains(localizedName))
+        {
             QString document=tryFile(localizedName);
             if (!document.isEmpty()) {
                 mutex.unlock();
@@ -83,12 +92,15 @@ Template TemplateLoader::getTemplate(QString templateName, QString locales) {
     }
 
     // Search for correct language but any country
-    foreach (QString loc,locs) {
+    foreach (QString loc,locs)
+    {
         loc.replace(QRegExp("[;_-].*"),"");
         QString localizedName=templateName+"-"+loc.trimmed();
-        if (!tried.contains(localizedName)) {
+        if (!tried.contains(localizedName))
+        {
             QString document=tryFile(localizedName);
-            if (!document.isEmpty()) {
+            if (!document.isEmpty())
+            {
                 mutex.unlock();
                 return Template(document,localizedName);
             }
@@ -98,7 +110,8 @@ Template TemplateLoader::getTemplate(QString templateName, QString locales) {
 
     // Search for default file
     QString document=tryFile(templateName);
-    if (!document.isEmpty()) {
+    if (!document.isEmpty())
+    {
         mutex.unlock();
         return Template(document,templateName);
     }
diff --git a/YACReaderLibrary/server/lib/templateengine/templateloader.h b/YACReaderLibrary/server/lib/templateengine/templateloader.h
index 5635af40..5b06c609 100644
--- a/YACReaderLibrary/server/lib/templateengine/templateloader.h
+++ b/YACReaderLibrary/server/lib/templateengine/templateloader.h
@@ -9,8 +9,9 @@
 #include 
 #include 
 #include 
-#include "template.h"
 #include 
+#include "templateglobal.h"
+#include "template.h"
 
 /**
   Loads localized versions of template files. If the caller requests a file with the
@@ -25,7 +26,7 @@
 
   The following settings are required:
   
-  path=.
+  path=../templates
   suffix=.tpl
   encoding=UTF-8
   
@@ -34,9 +35,9 @@ @see TemplateCache */ -class TemplateLoader : public QObject { +class DECLSPEC TemplateLoader : public QObject { Q_OBJECT - Q_DISABLE_COPY(TemplateLoader); + Q_DISABLE_COPY(TemplateLoader) public: /**