~ubuntu-branches/ubuntu/precise/grantlee/precise

« back to all changes in this revision

Viewing changes to defaulttags/ssi.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Harald Sitter
  • Date: 2010-06-11 23:41:45 UTC
  • Revision ID: james.westby@ubuntu.com-20100611234145-oas7rhdrbwy8j55c
Tags: upstream-0.1.1
ImportĀ upstreamĀ versionĀ 0.1.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
  This file is part of the Grantlee template system.
 
3
 
 
4
  Copyright (c) 2009,2010 Stephen Kelly <steveire@gmail.com>
 
5
 
 
6
  This library is free software; you can redistribute it and/or
 
7
  modify it under the terms of the GNU Lesser General Public
 
8
  License as published by the Free Software Foundation; either version
 
9
  2 of the Licence, or (at your option) any later version.
 
10
 
 
11
  This library is distributed in the hope that it will be useful,
 
12
  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
14
  Library General Public License for more details.
 
15
 
 
16
  You should have received a copy of the GNU Lesser General Public
 
17
  License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
18
 
 
19
*/
 
20
 
 
21
#include "ssi.h"
 
22
 
 
23
#include <QtCore/QStringList>
 
24
#include <QtCore/QFile>
 
25
#include <QtCore/QTextStream>
 
26
 
 
27
#include "parser.h"
 
28
#include "template.h"
 
29
#include "engine.h"
 
30
 
 
31
#include "exception.h"
 
32
 
 
33
 
 
34
SsiNodeFactory::SsiNodeFactory()
 
35
{
 
36
 
 
37
}
 
38
 
 
39
Node* SsiNodeFactory::getNode( const QString &tagContent, Parser *p ) const
 
40
{
 
41
  QStringList expr = tagContent.split( ' ', QString::SkipEmptyParts );
 
42
 
 
43
  int exprSize = expr.size();
 
44
 
 
45
  bool parse = false;
 
46
 
 
47
  if ( ( exprSize != 3 ) && ( exprSize != 2 ) ) {
 
48
    throw Grantlee::Exception( TagSyntaxError, "ssi tag takes one argument" );
 
49
  }
 
50
 
 
51
  if ( exprSize == 3 ) {
 
52
    if ( expr.at( 2 ) == "parsed" ) {
 
53
      parse = true;
 
54
    }
 
55
  }
 
56
 
 
57
  QString filename = expr.at( 1 );
 
58
 
 
59
  return new SsiNode( filename, parse, p );
 
60
}
 
61
 
 
62
SsiNode::SsiNode( const QString &filename, bool parse, QObject *parent )
 
63
    : Node( parent ), m_filename( filename ), m_parse( parse )
 
64
{
 
65
}
 
66
 
 
67
void SsiNode::render( OutputStream *stream, Context *c )
 
68
{
 
69
  QFile file( m_filename );
 
70
 
 
71
  if ( !file.exists() || !file.open( QIODevice::ReadOnly | QIODevice::Text ) )
 
72
    return;
 
73
 
 
74
  QTextStream in( &file );
 
75
  if ( m_parse ) {
 
76
    QString content;
 
77
    while ( !in.atEnd() ) {
 
78
      content += in.readLine();
 
79
    }
 
80
    TemplateImpl *ti = containerTemplate();
 
81
    Template t = ti->engine()->newTemplate( content, m_filename );
 
82
    t->render( stream, c );
 
83
  }
 
84
 
 
85
  ( *stream ) << &in;
 
86
}
 
87