1 /****************************************************************************
3 ** Copyright (C) Qxt Foundation. Some rights reserved.
5 ** This file is part of the QxtWeb module of the Qt eXTension library
7 ** This library is free software; you can redistribute it and/or modify it
8 ** under the terms of th Common Public License, version 1.0, as published by
11 ** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY
12 ** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
13 ** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR
14 ** FITNESS FOR A PARTICULAR PURPOSE.
16 ** You should have received a copy of the CPL along with this file.
17 ** See the LICENSE file and the cpl1.0.txt file included with the source
18 ** distribution for more information. If you did not receive a copy of the
19 ** license, contact the Qxt Foundation.
21 ** <http://libqxt.org> <foundation@libqxt.org>
23 ****************************************************************************/
26 \class QxtHtmlTemplate QxtHtmlTemplate
28 \brief Basic Html Template Engine
30 open a file containing html code and php style variables.
31 use the square bracket operators to assign content for a variable
34 QxtHtmlTemplate index;
37 index["content"]="hello world";
38 echo()<<index.render();
40 the realatet html code would look like:
44 <title>Test Page</title>
50 funny storry: whe are using this class to make our documentation (eat your own dogfood, you know ;).
51 but when we where parsing exactly this file you read right now the first time, QxtHtmlTemplate got stuck in an infinite loop. guess why. becouse of that example above :D
52 So be warned: when you assign content to a variable that contains the variable name itself, render() will never return.
58 \fn QxtHtmlTemplate::open(const QString& filename)
59 Returns true on sucess and false on failure.
60 note that it will also return false for an empty html file.
62 \fn QString QxtHtmlTemplate::render() const
63 Uses the variables you set and renders the opened file.
64 returns an empty string on failure.
65 Does NOT take care of not assigned variables, they will remain in the returned string
68 #include "qxthtmltemplate.h"
70 #include <QStringList>
72 QxtHtmlTemplate::QxtHtmlTemplate() : QMap<QString,QString>()
75 void QxtHtmlTemplate::load(const QString& d)
80 bool QxtHtmlTemplate::open(const QString& filename)
83 f.open(QIODevice::ReadOnly);
84 data = QString::fromLocal8Bit(f.readAll());
88 qWarning("QxtHtmlTemplate::open(\"%s\") empty or non existant",qPrintable(filename));
94 QString QxtHtmlTemplate::render() const
96 ///try to preserve indention by parsing char by char and saving the last non-space character
99 QString output = data;
103 for (int i=0;i<output.count();i++)
105 if (output.at(i)=='\n')
110 if (output.at(i)=='<' && output.at(i+1)=='?' && output.at(i+2)=='=')
115 for (int jj=j;jj<output.count();jj++)
117 if (output.at(jj)=='?' && output.at(jj+1)=='>')
128 qWarning("QxtHtmlTemplate::render() unterminated <?= ");
135 qWarning("QxtHtmlTemplate::render() unused variable \"%s\"",qPrintable(var));
138 output.replace(i,j-i+2,QString(value(var)).replace("\n","\n"+QString(i-lastnewline-1,QChar(' '))));