2 Copyright (C) 2001-2006, William Joseph.
5 This file is part of GtkRadiant.
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23 // writes xml tree format from internal objects
28 #include "xml/xmlwriter.h"
30 #include "entityxml.h"
32 inline XMLExporter *Node_getXMLExporter(scene::Node &node)
34 return NodeTypeCast<XMLExporter>::cast(node);
38 class write_all : public scene::Traversable::Walker {
39 XMLImporter &m_importer;
41 write_all(XMLImporter &importer) : m_importer(importer)
45 bool pre(scene::Node &node) const
47 Entity *entity = Node_getEntity(node);
49 m_importer.write("\n", 1);
50 StaticElement element("entity");
51 m_importer.pushElement(element);
52 entity_export exporter(*entity);
53 exporter.exportXML(m_importer);
55 XMLExporter *exporter = Node_getXMLExporter(node);
57 m_importer.write("\n", 1);
58 exporter->exportXML(m_importer);
59 m_importer.write("\n", 1);
65 void post(scene::Node &node) const
67 if (Node_getEntity(node) != 0) {
68 m_importer.write("\n", 1);
69 m_importer.popElement("entity");
74 void Map_Write(scene::Node &root, GraphTraversalFunc traverse, TextOutputStream &out)
76 XMLStreamWriter writer(out);
77 writer.write("\n", 1);
79 StaticElement element("mapdoom3");
80 writer.pushElement(element);
82 traverse(root, write_all(writer));
84 writer.write("\n", 1);
85 writer.popElement(element.name());