Optimized gradient when top color is the same as the bottom one.
[supertux.git] / src / 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 "lispwriter.h"
23
24 LispWriter::LispWriter(std::ostream& newout)
25   : out(newout), indent_depth(0)
26 {
27 }
28
29 LispWriter::~LispWriter()
30 {
31   if(lists.size() > 0) {
32     std::cerr << "Warning: Not all sections closed in lispwriter!\n";
33   }
34 }
35
36 void
37 LispWriter::write_comment(const std::string& comment)
38 {
39   out << "; " << comment << "\n";
40 }
41
42 void
43 LispWriter::start_list(const std::string& listname)
44 {
45   indent();
46   out << '(' << listname << '\n';
47   indent_depth += 2;
48
49   lists.push_back(listname);
50 }
51
52 void
53 LispWriter::end_list(const std::string& listname)
54 {
55   if(lists.size() == 0) {
56     std::cerr << "Trying to close list '" << listname 
57               << "', which is not open.\n";
58     return;
59   }
60   if(lists.back() != listname) {
61     std::cerr << "Warning: trying to close list '" << listname 
62               << "' while list '" << lists.back() << "' is open.\n";
63     return;
64   }
65   lists.pop_back();
66   
67   indent_depth -= 2;
68   indent();
69   out << ")\n";
70 }
71
72 void
73 LispWriter::write_int(const std::string& name, int value)
74 {
75   indent();
76   out << '(' << name << ' ' << value << ")\n";
77 }
78
79 void
80 LispWriter::write_float(const std::string& name, float value)
81 {
82   indent();
83   out << '(' << name << ' ' << value << ")\n";
84 }
85
86 void
87 LispWriter::write_string(const std::string& name, const std::string& value)
88 {
89   indent();
90   out << '(' << name << " \"" << value << "\")\n";
91 }
92
93 void
94 LispWriter::write_bool(const std::string& name, bool value)
95 {
96   indent();
97   out << '(' << name << ' ' << (value ? "#t" : "#f") << ")\n";
98 }
99
100 void
101 LispWriter::write_int_vector(const std::string& name,
102     const std::vector<int>& value)
103 {
104   indent();
105   out << '(' << name;
106   for(std::vector<int>::const_iterator i = value.begin(); i != value.end(); ++i)
107     out << " " << *i;
108   out << ")\n";
109 }
110
111 void
112 LispWriter::write_int_vector(const std::string& name,
113     const std::vector<unsigned int>& value)
114 {
115   indent();
116   out << '(' << name;
117   for(std::vector<unsigned int>::const_iterator i = value.begin(); i != value.end(); ++i)
118     out << " " << *i;
119   out << ")\n";
120 }
121
122 void
123 LispWriter::indent()
124 {
125   for(int i = 0; i<indent_depth; ++i)
126     out << ' ';
127 }
128