|
|
@@ -51,11 +51,11 @@ public:
|
|
|
class StringPart: public Part
|
|
|
{
|
|
|
public:
|
|
|
- StringPart() : Part()
|
|
|
+ StringPart(): Part()
|
|
|
{
|
|
|
}
|
|
|
|
|
|
- StringPart(const std::string& content) : Part(), _content(content)
|
|
|
+ StringPart(const std::string& content): Part(), _content(content)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
@@ -101,7 +101,7 @@ public:
|
|
|
|
|
|
void render(const Var& data, std::ostream& out) const
|
|
|
{
|
|
|
- for(VectorParts::const_iterator it = _parts.begin(); it != _parts.end(); ++it)
|
|
|
+ for (VectorParts::const_iterator it = _parts.begin(); it != _parts.end(); ++it)
|
|
|
{
|
|
|
(*it)->render(data, out);
|
|
|
}
|
|
|
@@ -115,7 +115,7 @@ protected:
|
|
|
class EchoPart: public Part
|
|
|
{
|
|
|
public:
|
|
|
- EchoPart(const std::string& query) : Part(), _query(query)
|
|
|
+ EchoPart(const std::string& query): Part(), _query(query)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
@@ -128,7 +128,7 @@ public:
|
|
|
Query query(data);
|
|
|
Var value = query.find(_query);
|
|
|
|
|
|
- if ( ! value.isEmpty() )
|
|
|
+ if (!value.isEmpty())
|
|
|
{
|
|
|
out << value.convert<std::string>();
|
|
|
}
|
|
|
@@ -142,7 +142,7 @@ private:
|
|
|
class LogicQuery
|
|
|
{
|
|
|
public:
|
|
|
- LogicQuery(const std::string& query) : _queryString(query)
|
|
|
+ LogicQuery(const std::string& query): _queryString(query)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
@@ -157,14 +157,14 @@ public:
|
|
|
Query query(data);
|
|
|
Var value = query.find(_queryString);
|
|
|
|
|
|
- if ( ! value.isEmpty() ) // When empty, logic will be false
|
|
|
+ if (!value.isEmpty()) // When empty, logic will be false
|
|
|
{
|
|
|
- if ( value.isString() )
|
|
|
+ if (value.isString())
|
|
|
// An empty string must result in false, otherwise true
|
|
|
// Which is not the case when we convert to bool with Var
|
|
|
{
|
|
|
std::string s = value.convert<std::string>();
|
|
|
- logic = ! s.empty();
|
|
|
+ logic = !s.empty();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -183,10 +183,10 @@ protected:
|
|
|
};
|
|
|
|
|
|
|
|
|
-class LogicExistQuery : public LogicQuery
|
|
|
+class LogicExistQuery: public LogicQuery
|
|
|
{
|
|
|
public:
|
|
|
- LogicExistQuery(const std::string& query) : LogicQuery(query)
|
|
|
+ LogicExistQuery(const std::string& query): LogicQuery(query)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
@@ -204,10 +204,10 @@ public:
|
|
|
};
|
|
|
|
|
|
|
|
|
-class LogicElseQuery : public LogicQuery
|
|
|
+class LogicElseQuery: public LogicQuery
|
|
|
{
|
|
|
public:
|
|
|
- LogicElseQuery() : LogicQuery("")
|
|
|
+ LogicElseQuery(): LogicQuery("")
|
|
|
{
|
|
|
}
|
|
|
|
|
|
@@ -222,10 +222,10 @@ public:
|
|
|
};
|
|
|
|
|
|
|
|
|
-class LogicPart : public MultiPart
|
|
|
+class LogicPart: public MultiPart
|
|
|
{
|
|
|
public:
|
|
|
- LogicPart() : MultiPart()
|
|
|
+ LogicPart(): MultiPart()
|
|
|
{
|
|
|
}
|
|
|
|
|
|
@@ -248,9 +248,9 @@ public:
|
|
|
void render(const Var& data, std::ostream& out) const
|
|
|
{
|
|
|
int count = 0;
|
|
|
- for(std::vector<SharedPtr<LogicQuery> >::const_iterator it = _queries.begin(); it != _queries.end(); ++it, ++count)
|
|
|
+ for (std::vector<SharedPtr<LogicQuery> >::const_iterator it = _queries.begin(); it != _queries.end(); ++it, ++count)
|
|
|
{
|
|
|
- if( (*it)->apply(data) && _parts.size() > count )
|
|
|
+ if ((*it)->apply(data) && _parts.size() > count)
|
|
|
{
|
|
|
_parts[count]->render(data, out);
|
|
|
break;
|
|
|
@@ -266,7 +266,7 @@ private:
|
|
|
class LoopPart: public MultiPart
|
|
|
{
|
|
|
public:
|
|
|
- LoopPart(const std::string& name, const std::string& query) : MultiPart(), _name(name), _query(query)
|
|
|
+ LoopPart(const std::string& name, const std::string& query): MultiPart(), _name(name), _query(query)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
@@ -278,13 +278,13 @@ public:
|
|
|
{
|
|
|
Query query(data);
|
|
|
|
|
|
- if ( data.type() == typeid(Object::Ptr) )
|
|
|
+ if (data.type() == typeid(Object::Ptr))
|
|
|
{
|
|
|
Object::Ptr dataObject = data.extract<Object::Ptr>();
|
|
|
Array::Ptr array = query.findArray(_query);
|
|
|
- if ( ! array.isNull() )
|
|
|
+ if (!array.isNull())
|
|
|
{
|
|
|
- for(int i = 0; i < array->size(); i++)
|
|
|
+ for (int i = 0; i < array->size(); i++)
|
|
|
{
|
|
|
Var value = array->get(i);
|
|
|
dataObject->set(_name, value);
|
|
|
@@ -305,19 +305,19 @@ class IncludePart: public Part
|
|
|
{
|
|
|
public:
|
|
|
|
|
|
- IncludePart(const Path& parentPath, const Path& path)
|
|
|
- : Part()
|
|
|
- , _path(path)
|
|
|
+ IncludePart(const Path& parentPath, const Path& path):
|
|
|
+ Part(),
|
|
|
+ _path(path)
|
|
|
{
|
|
|
// When the path is relative, try to make it absolute based
|
|
|
// on the path of the parent template. When the file doesn't
|
|
|
// exist, we keep it relative and hope that the cache can
|
|
|
// resolve it.
|
|
|
- if ( _path.isRelative() )
|
|
|
+ if (_path.isRelative())
|
|
|
{
|
|
|
Path templatePath(parentPath, _path);
|
|
|
File templateFile(templatePath);
|
|
|
- if ( templateFile.exists() )
|
|
|
+ if (templateFile.exists())
|
|
|
{
|
|
|
_path = templatePath;
|
|
|
}
|
|
|
@@ -331,7 +331,7 @@ public:
|
|
|
void render(const Var& data, std::ostream& out) const
|
|
|
{
|
|
|
TemplateCache* cache = TemplateCache::instance();
|
|
|
- if ( cache == NULL )
|
|
|
+ if (cache == 0)
|
|
|
{
|
|
|
Template tpl(_path);
|
|
|
tpl.parse();
|
|
|
@@ -349,17 +349,17 @@ private:
|
|
|
};
|
|
|
|
|
|
|
|
|
-Template::Template(const Path& templatePath)
|
|
|
- : _parts(0)
|
|
|
- , _currentPart(0)
|
|
|
- , _templatePath(templatePath)
|
|
|
+Template::Template(const Path& templatePath):
|
|
|
+ _parts(0),
|
|
|
+ _currentPart(0),
|
|
|
+ _templatePath(templatePath)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
|
|
|
-Template::Template()
|
|
|
- : _parts(0)
|
|
|
- , _currentPart(0)
|
|
|
+Template::Template():
|
|
|
+ _parts(0),
|
|
|
+ _currentPart(0)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
@@ -373,7 +373,7 @@ Template::~Template()
|
|
|
void Template::parse()
|
|
|
{
|
|
|
File file(_templatePath);
|
|
|
- if ( file.exists() )
|
|
|
+ if (file.exists())
|
|
|
{
|
|
|
FileInputStream fis(_templatePath.toString());
|
|
|
parse(fis);
|
|
|
@@ -385,48 +385,48 @@ void Template::parse(std::istream& in)
|
|
|
{
|
|
|
_parseTime.update();
|
|
|
|
|
|
- _parts = new MultiPart();
|
|
|
+ _parts = new MultiPart;
|
|
|
_currentPart = _parts;
|
|
|
|
|
|
- while(in.good())
|
|
|
+ while (in.good())
|
|
|
{
|
|
|
std::string text = readText(in); // Try to read text first
|
|
|
- if ( text.length() > 0 )
|
|
|
+ if (text.length() > 0)
|
|
|
{
|
|
|
_currentPart->addPart(new StringPart(text));
|
|
|
}
|
|
|
|
|
|
- if ( in.bad() )
|
|
|
+ if (in.bad())
|
|
|
break; // Nothing to do anymore
|
|
|
|
|
|
std::string command = readTemplateCommand(in); // Try to read a template command
|
|
|
- if ( command.empty() )
|
|
|
+ if (command.empty())
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
readWhiteSpace(in);
|
|
|
|
|
|
- if ( command.compare("echo") == 0 )
|
|
|
+ if (command.compare("echo") == 0)
|
|
|
{
|
|
|
std::string query = readQuery(in);
|
|
|
- if ( query.empty() )
|
|
|
+ if (query.empty())
|
|
|
{
|
|
|
throw JSONTemplateException("Missing query in <? echo ?>");
|
|
|
}
|
|
|
_currentPart->addPart(new EchoPart(query));
|
|
|
}
|
|
|
- else if ( command.compare("for") == 0 )
|
|
|
+ else if (command.compare("for") == 0)
|
|
|
{
|
|
|
std::string loopVariable = readWord(in);
|
|
|
- if ( loopVariable.empty() )
|
|
|
+ if (loopVariable.empty())
|
|
|
{
|
|
|
throw JSONTemplateException("Missing variable in <? for ?> command");
|
|
|
}
|
|
|
readWhiteSpace(in);
|
|
|
|
|
|
std::string query = readQuery(in);
|
|
|
- if ( query.empty() )
|
|
|
+ if (query.empty())
|
|
|
{
|
|
|
throw JSONTemplateException("Missing query in <? for ?> command");
|
|
|
}
|
|
|
@@ -437,15 +437,15 @@ void Template::parse(std::istream& in)
|
|
|
_currentPart->addPart(part);
|
|
|
_currentPart = part;
|
|
|
}
|
|
|
- else if ( command.compare("else") == 0 )
|
|
|
+ else if (command.compare("else") == 0)
|
|
|
{
|
|
|
- if ( _partStack.size() == 0 )
|
|
|
+ if (_partStack.size() == 0)
|
|
|
{
|
|
|
throw JSONTemplateException("Unexpected <? else ?> found");
|
|
|
}
|
|
|
_currentPart = _partStack.top();
|
|
|
LogicPart* lp = dynamic_cast<LogicPart*>(_currentPart);
|
|
|
- if ( lp == NULL )
|
|
|
+ if (lp == 0)
|
|
|
{
|
|
|
throw JSONTemplateException("Missing <? if ?> or <? ifexist ?> for <? else ?>");
|
|
|
}
|
|
|
@@ -453,23 +453,22 @@ void Template::parse(std::istream& in)
|
|
|
lp->addPart(part);
|
|
|
_currentPart = part;
|
|
|
}
|
|
|
- else if ( command.compare("elsif") == 0
|
|
|
- || command.compare("elif") == 0 )
|
|
|
+ else if (command.compare("elsif") == 0 || command.compare("elif") == 0)
|
|
|
{
|
|
|
std::string query = readQuery(in);
|
|
|
- if ( query.empty() )
|
|
|
+ if (query.empty())
|
|
|
{
|
|
|
throw JSONTemplateException("Missing query in <? " + command + " ?>");
|
|
|
}
|
|
|
|
|
|
- if ( _partStack.size() == 0 )
|
|
|
+ if (_partStack.size() == 0)
|
|
|
{
|
|
|
throw JSONTemplateException("Unexpected <? elsif / elif ?> found");
|
|
|
}
|
|
|
|
|
|
_currentPart = _partStack.top();
|
|
|
LogicPart* lp = dynamic_cast<LogicPart*>(_currentPart);
|
|
|
- if ( lp == NULL )
|
|
|
+ if (lp == 0)
|
|
|
{
|
|
|
throw JSONTemplateException("Missing <? if ?> or <? ifexist ?> for <? elsif / elif ?>");
|
|
|
}
|
|
|
@@ -477,15 +476,15 @@ void Template::parse(std::istream& in)
|
|
|
lp->addPart(new LogicQuery(query), part);
|
|
|
_currentPart = part;
|
|
|
}
|
|
|
- else if ( command.compare("endfor") == 0 )
|
|
|
+ else if (command.compare("endfor") == 0)
|
|
|
{
|
|
|
- if ( _partStack.size() < 2 )
|
|
|
+ if (_partStack.size() < 2)
|
|
|
{
|
|
|
throw JSONTemplateException("Unexpected <? endfor ?> found");
|
|
|
}
|
|
|
MultiPart* loopPart = _partStack.top();
|
|
|
LoopPart* lp = dynamic_cast<LoopPart*>(loopPart);
|
|
|
- if ( lp == NULL )
|
|
|
+ if (lp == 0)
|
|
|
{
|
|
|
throw JSONTemplateException("Missing <? for ?> command");
|
|
|
}
|
|
|
@@ -493,16 +492,16 @@ void Template::parse(std::istream& in)
|
|
|
_currentPart = _partStack.top();
|
|
|
_partStack.pop();
|
|
|
}
|
|
|
- else if ( command.compare("endif") == 0 )
|
|
|
+ else if (command.compare("endif") == 0)
|
|
|
{
|
|
|
- if ( _partStack.size() < 2 )
|
|
|
+ if (_partStack.size() < 2)
|
|
|
{
|
|
|
throw JSONTemplateException("Unexpected <? endif ?> found");
|
|
|
}
|
|
|
|
|
|
_currentPart = _partStack.top();
|
|
|
LogicPart* lp = dynamic_cast<LogicPart*>(_currentPart);
|
|
|
- if ( lp == NULL )
|
|
|
+ if (lp == 0)
|
|
|
{
|
|
|
throw JSONTemplateException("Missing <? if ?> or <? ifexist ?> for <? endif ?>");
|
|
|
}
|
|
|
@@ -511,11 +510,10 @@ void Template::parse(std::istream& in)
|
|
|
_currentPart = _partStack.top();
|
|
|
_partStack.pop();
|
|
|
}
|
|
|
- else if ( command.compare("if") == 0
|
|
|
- || command.compare("ifexist") == 0 )
|
|
|
+ else if (command.compare("if") == 0 || command.compare("ifexist") == 0)
|
|
|
{
|
|
|
std::string query = readQuery(in);
|
|
|
- if ( query.empty() )
|
|
|
+ if (query.empty())
|
|
|
{
|
|
|
throw JSONTemplateException("Missing query in <? " + command + " ?>");
|
|
|
}
|
|
|
@@ -524,7 +522,7 @@ void Template::parse(std::istream& in)
|
|
|
_partStack.push(lp);
|
|
|
_currentPart->addPart(lp);
|
|
|
_currentPart = new MultiPart();
|
|
|
- if ( command.compare("ifexist") == 0 )
|
|
|
+ if (command.compare("ifexist") == 0)
|
|
|
{
|
|
|
lp->addPart(new LogicExistQuery(query), _currentPart);
|
|
|
}
|
|
|
@@ -533,11 +531,11 @@ void Template::parse(std::istream& in)
|
|
|
lp->addPart(new LogicQuery(query), _currentPart);
|
|
|
}
|
|
|
}
|
|
|
- else if ( command.compare("include") == 0 )
|
|
|
+ else if (command.compare("include") == 0)
|
|
|
{
|
|
|
readWhiteSpace(in);
|
|
|
std::string filename = readString(in);
|
|
|
- if ( filename.empty() )
|
|
|
+ if (filename.empty())
|
|
|
{
|
|
|
throw JSONTemplateException("Missing filename in <? include ?>");
|
|
|
}
|
|
|
@@ -556,17 +554,17 @@ void Template::parse(std::istream& in)
|
|
|
readWhiteSpace(in);
|
|
|
|
|
|
int c = in.get();
|
|
|
- if ( c == '?' && in.peek() == '>' )
|
|
|
+ if (c == '?' && in.peek() == '>')
|
|
|
{
|
|
|
in.get(); // forget '>'
|
|
|
|
|
|
- if ( command.compare("echo") != 0 )
|
|
|
+ if (command.compare("echo") != 0)
|
|
|
{
|
|
|
- if ( in.peek() == '\r' )
|
|
|
+ if (in.peek() == '\r')
|
|
|
{
|
|
|
in.get();
|
|
|
}
|
|
|
- if ( in.peek() == '\n' )
|
|
|
+ if (in.peek() == '\n')
|
|
|
{
|
|
|
in.get();
|
|
|
}
|
|
|
@@ -584,11 +582,11 @@ std::string Template::readText(std::istream& in)
|
|
|
{
|
|
|
std::string text;
|
|
|
int c = in.get();
|
|
|
- while(c != -1)
|
|
|
+ while (c != -1)
|
|
|
{
|
|
|
- if ( c == '<' )
|
|
|
+ if (c == '<')
|
|
|
{
|
|
|
- if ( in.peek() == '?' )
|
|
|
+ if (in.peek() == '?')
|
|
|
{
|
|
|
in.get(); // forget '?'
|
|
|
break;
|
|
|
@@ -609,18 +607,18 @@ std::string Template::readTemplateCommand(std::istream& in)
|
|
|
readWhiteSpace(in);
|
|
|
|
|
|
int c = in.get();
|
|
|
- while(c != -1)
|
|
|
+ while (c != -1)
|
|
|
{
|
|
|
- if ( Ascii::isSpace(c) )
|
|
|
+ if (Ascii::isSpace(c))
|
|
|
break;
|
|
|
|
|
|
- if ( c == '?' && in.peek() == '>' )
|
|
|
+ if (c == '?' && in.peek() == '>')
|
|
|
{
|
|
|
in.putback(c);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if ( c == '=' && command.length() == 0 )
|
|
|
+ if (c == '=' && command.length() == 0)
|
|
|
{
|
|
|
command = "echo";
|
|
|
break;
|
|
|
@@ -639,7 +637,7 @@ std::string Template::readWord(std::istream& in)
|
|
|
{
|
|
|
std::string word;
|
|
|
int c;
|
|
|
- while((c = in.peek()) != -1 && ! Ascii::isSpace(c))
|
|
|
+ while ((c = in.peek()) != -1 && !Ascii::isSpace(c))
|
|
|
{
|
|
|
in.get();
|
|
|
word += c;
|
|
|
@@ -652,15 +650,15 @@ std::string Template::readQuery(std::istream& in)
|
|
|
{
|
|
|
std::string word;
|
|
|
int c;
|
|
|
- while((c = in.get()) != -1)
|
|
|
+ while ((c = in.get()) != -1)
|
|
|
{
|
|
|
- if ( c == '?' && in.peek() == '>' )
|
|
|
+ if (c == '?' && in.peek() == '>')
|
|
|
{
|
|
|
in.putback(c);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if ( Ascii::isSpace(c) )
|
|
|
+ if (Ascii::isSpace(c))
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
@@ -673,7 +671,7 @@ std::string Template::readQuery(std::istream& in)
|
|
|
void Template::readWhiteSpace(std::istream& in)
|
|
|
{
|
|
|
int c;
|
|
|
- while((c = in.peek()) != -1 && Ascii::isSpace(c))
|
|
|
+ while ((c = in.peek()) != -1 && Ascii::isSpace(c))
|
|
|
{
|
|
|
in.get();
|
|
|
}
|
|
|
@@ -685,9 +683,9 @@ std::string Template::readString(std::istream& in)
|
|
|
std::string str;
|
|
|
|
|
|
int c = in.get();
|
|
|
- if ( c == '"' )
|
|
|
+ if (c == '"')
|
|
|
{
|
|
|
- while((c = in.get()) != -1 && c != '"')
|
|
|
+ while ((c = in.get()) != -1 && c != '"')
|
|
|
{
|
|
|
str += c;
|
|
|
}
|
|
|
@@ -702,4 +700,4 @@ void Template::render(const Var& data, std::ostream& out) const
|
|
|
}
|
|
|
|
|
|
|
|
|
-} } // Namespace Poco::JSON
|
|
|
+} } // namespace Poco::JSON
|