+++ /dev/null
-/****************************************************************************
-**
-** Copyright (C) Qxt Foundation. Some rights reserved.
-**
-** This file is part of the QxtWeb module of the Qt eXTension library
-**
-** This library is free software; you can redistribute it and/or modify it
-** under the terms of th Common Public License, version 1.0, as published by
-** IBM.
-**
-** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY
-** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
-** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR
-** FITNESS FOR A PARTICULAR PURPOSE.
-**
-** You should have received a copy of the CPL along with this file.
-** See the LICENSE file and the cpl1.0.txt file included with the source
-** distribution for more information. If you did not receive a copy of the
-** license, contact the Qxt Foundation.
-**
-** <http://libqxt.org> <foundation@libqxt.org>
-**
-****************************************************************************/
-
-/*!
- \class QxtHtmlTemplate QxtHtmlTemplate
- \ingroup QxtWeb
- \brief Basic Html Template Engine
-
- open a file containing html code and php style variables.
- use the square bracket operators to assign content for a variable
-
- \code
- QxtHtmlTemplate index;
- if(!index.open)
- return 404;
- index["content"]="hello world";
- echo()<<index.render();
- \endcode
- the realatet html code would look like:
- \code
- <html>
- <head>
- <title>Test Page</title>
- </head>
- <?=content?>
- </html>
- \endcode
-
- funny storry: whe are using this class to make our documentation (eat your own dogfood, you know ;).
- 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
- So be warned: when you assign content to a variable that contains the variable name itself, render() will never return.
-
-
-*/
-
-/*!
- \fn QxtHtmlTemplate::open(const QString& filename)
- Returns true on sucess and false on failure.
- note that it will also return false for an empty html file.
-
- \fn QString QxtHtmlTemplate::render() const
- Uses the variables you set and renders the opened file.
- returns an empty string on failure.
- Does NOT take care of not assigned variables, they will remain in the returned string
- */
-
-#include "qxthtmltemplate.h"
-#include <QFile>
-#include <QStringList>
-
-QxtHtmlTemplate::QxtHtmlTemplate() : QMap<QString,QString>()
-{}
-
-void QxtHtmlTemplate::load(const QString& d)
-{
- data=d;
-}
-
-bool QxtHtmlTemplate::open(const QString& filename)
-{
- QFile f(filename);
- f.open(QIODevice::ReadOnly);
- data = QString::fromLocal8Bit(f.readAll());
- f.close();
- if (data.isEmpty())
- {
- qWarning("QxtHtmlTemplate::open(\"%s\") empty or non existant",qPrintable(filename));
- return false;
- }
- return true;
-}
-
-QString QxtHtmlTemplate::render() const
-{
- ///try to preserve indention by parsing char by char and saving the last non-space character
-
-
- QString output = data;
- int lastnewline=0;
-
-
- for (int i=0;i<output.count();i++)
- {
- if (output.at(i)=='\n')
- {
- lastnewline=i;
- }
-
- if (output.at(i)=='<' && output.at(i+1)=='?' && output.at(i+2)=='=')
- {
- int j=i+3;
- QString var;
-
- for (int jj=j;jj<output.count();jj++)
- {
- if (output.at(jj)=='?' && output.at(jj+1)=='>')
- {
- j=jj;
- break;
- }
- var+=output.at(jj);
- }
-
-
- if (j==i)
- {
- qWarning("QxtHtmlTemplate::render() unterminated <?= ");
- continue;
- }
-
-
- if(!contains(var))
- {
- qWarning("QxtHtmlTemplate::render() unused variable \"%s\"",qPrintable(var));
- continue;
- }
- output.replace(i,j-i+2,QString(value(var)).replace("\n","\n"+QString(i-lastnewline-1,QChar(' '))));
-
- }
-
-
- }
-
- return output;
-}
-