Had to change the #includes of dependend headers from "dir/header.h" to "../dir...
[supertux.git] / lib / utils / lispwriter.cpp
1 //  $Id$
2 //
3 //  SuperTux -  A Jump'n Run
4 //  Copyright (C) 2004 Matthias Braun <matze@braunis.de
5 //
6 //  This program is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU General Public License
8 //  as published by the Free Software Foundation; either version 2
9 //  of the License, or (at your option) any later version.
10 //
11 //  This program 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
14 //  GNU General Public License for more details.
15 //
16 //  You should have received a copy of the GNU General Public License
17 //  along with this program; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19
20 #include <iostream>
21
22 #include "../utils/lispwriter.h"
23
24 using namespace SuperTux;
25
26 LispWriter::LispWriter(std::ostream& newout)
27   : out(newout), indent_depth(0)
28 {
29 }
30
31 LispWriter::~LispWriter()
32 {
33   if(lists.size() > 0) {
34     std::cerr << "Warning: Not all sections closed in lispwriter!\n";
35   }
36 }
37
38 void
39 LispWriter::write_comment(const std::string& comment)
40 {
41   out << "; " << comment << "\n";
42 }
43
44 void
45 LispWriter::start_list(const std::string& listname)
46 {
47   indent();
48   out << '(' << listname << '\n';
49   indent_depth += 2;
50
51   lists.push_back(listname);
52 }
53
54 void
55 LispWriter::end_list(const std::string& listname)
56 {
57   if(lists.size() == 0) {
58     std::cerr << "Trying to close list '" << listname 
59               << "', which is not open.\n";
60     return;
61   }
62   if(lists.back() != listname) {
63     std::cerr << "Warning: trying to close list '" << listname 
64               << "' while list '" << lists.back() << "' is open.\n";
65     return;
66   }
67   lists.pop_back();
68   
69   indent_depth -= 2;
70   indent();
71   out << ")\n";
72 }
73
74 void
75 LispWriter::write_int(const std::string& name, int value)
76 {
77   indent();
78   out << '(' << name << ' ' << value << ")\n";
79 }
80
81 void
82 LispWriter::write_float(const std::string& name, float value)
83 {
84   indent();
85   out << '(' << name << ' ' << value << ")\n";
86 }
87
88 void
89 LispWriter::write_string(const std::string& name, const std::string& value)
90 {
91   indent();
92   out << '(' << name << " \"" << value << "\")\n";
93 }
94
95 void
96 LispWriter::write_bool(const std::string& name, bool value)
97 {
98   indent();
99   out << '(' << name << ' ' << (value ? "#t" : "#f") << ")\n";
100 }
101
102 void
103 LispWriter::write_int_vector(const std::string& name,
104     const std::vector<int>& value)
105 {
106   indent();
107   out << '(' << name;
108   for(std::vector<int>::const_iterator i = value.begin(); i != value.end(); ++i)
109     out << " " << *i;
110   out << ")\n";
111 }
112
113 void
114 LispWriter::write_int_vector(const std::string& name,
115     const std::vector<unsigned int>& value)
116 {
117   indent();
118   out << '(' << name;
119   for(std::vector<unsigned int>::const_iterator i = value.begin(); i != value.end(); ++i)
120     out << " " << *i;
121   out << ")\n";
122 }
123
124 void
125 LispWriter::indent()
126 {
127   for(int i = 0; i<indent_depth; ++i)
128     out << ' ';
129 }
130