00001
00002
00003 return rootScene->dump();
00004
00005
00006 #include <archon/x3d/server/export.H>
00007
00008 namespace Archon
00009 {
00010 namespace X3D
00011 {
00012 struct VrmlExporter: Exporter
00013 {
00014 string escape(string s)
00015 {
00016 return s;
00017 }
00018
00019 string indent = "";
00020
00021 void stepIn()
00022 {
00023 indent += " ";
00024 }
00025
00026 void stepOut()
00027 {
00028 indent.erase(indent.size()-2);
00029 }
00030
00031
00032 void noNode()
00033 {
00034 out << " NULL\n";
00035 }
00036
00037 void emptyNode(NodeBase *, string name)
00038 {
00039 out << indent;
00040 if(!name.empty()) out << "DEF " << escape(name) << "\" ";
00041 out << n->getTypeName() << " {}\n";
00042 }
00043
00044 void resuseNode(NodeBase *, string name)
00045 {
00046 out << indent << "USE \"" << escape(name) << "\"\n";
00047 }
00048
00049 void nodeBegin(NodeBase *n, string name)
00050 {
00051 out << indent;
00052 if(!name.empty()) out << "DEF " << escape(name) << "\" ";
00053 out << n->getTypeName() << "\n" << indent << "{\n";
00054 stepIn();
00055 }
00056
00057 void nodeEnd(NodeBase *)
00058 {
00059 stepOut();
00060 out << indent << "}\n";
00061 }
00062
00063
00064 void simpleFieldBegin(NodeBase *, const FieldBase *f)
00065 {
00066 out << indent << f->getName();
00067 }
00068
00069 void simpleFieldEnd()
00070 {
00071 out << "\n";
00072 }
00073
00074 void emptySimpleSequence()
00075 {
00076 out << " []";
00077 }
00078
00079 void simpleSequenceBegin()
00080 {
00081 out << " [";
00082 }
00083
00084 void simpleSequenceEnd()
00085 {
00086 out << " ]";
00087 }
00088
00089
00090 void nodeFieldBegin(NodeBase *, const FieldBase *f)
00091 {
00092 out << indent << f->getName();
00093 }
00094
00095 void nodeFieldEnd()
00096 {
00097 }
00098
00099 void emptyNodeSequence()
00100 {
00101 out << " []";
00102 }
00103
00104 void nodeSequenceBegin()
00105 {
00106 out << indent << "[\n";
00107 }
00108
00109 void simpleSequenceEnd()
00110 {
00111 out << " ]\n";
00112 }
00113
00114 void Exporter::valueSFString(SFString::ArgType v)
00115 {
00116 out << "\"" << escape(v) << "\"\n";
00117 }
00118
00119 void Exporter::valueMFString(SFString::ArgType v)
00120 {
00121 out << "\"" << escape(v) << "\"\n";
00122 }
00123 }
00124
00125
00126 struct XMLExporter: Exporter
00127 {
00128 string escape(string s)
00129 {
00130 return s;
00131 }
00132
00133 string containerField = "";
00134
00135 string indent = "";
00136
00137 void stepIn()
00138 {
00139 indent += " ";
00140 }
00141
00142 void stepOut()
00143 {
00144 indent.erase(indent.size()-2);
00145 }
00146
00147
00148 void noNode()
00149 {
00150 }
00151
00152 void resuseNode(NodeBase *n, string name)
00153 {
00154 out << indent << "<" << n->getTypeName() << " USE=\"" << escape(name) << "\"";
00155 if(!containerField.empty()) out << " containerField=\"" << containerField << "\"";
00156 out << "/>\n";
00157 }
00158
00159 void nodeBegin(NodeBase *n, string name, bool empty)
00160 {
00161 out << indent << "<" << n->getTypeName();
00162 if(!name.empty()) out << "DEF " << escape(name) << "\" ";
00163 out << n->getTypeName() << "\n" << indent << "{\n";
00164 out << ">\n";
00165 stepIn();
00166 }
00167
00168 void nodeEnd(NodeBase *n)
00169 {
00170 stepOut();
00171 out << indent << "}\n";
00172 }
00173
00174
00175 void simpleFieldBegin(NodeBase *n, const FieldBase *f)
00176 {
00177 out << indent << f->getName();
00178 }
00179
00180 void simpleFieldEnd()
00181 {
00182 out << "\n";
00183 }
00184
00185 void emptySimpleSequence()
00186 {
00187 out << " []";
00188 }
00189
00190 void simpleSequenceBegin()
00191 {
00192 out << " [";
00193 }
00194
00195 void simpleSequenceEnd()
00196 {
00197 out << " ]";
00198 }
00199
00200
00201 void nodeFieldBegin(NodeBase *n, const FieldBase *f)
00202 {
00203 containerField = f->isUnique() ? "" : f->getName();
00204 }
00205
00206 void nodeFieldEnd()
00207 {
00208 }
00209
00210 void emptyNodeSequence()
00211 {
00212 out << " []";
00213 }
00214
00215 void nodeSequenceBegin()
00216 {
00217 out << indent << "[\n";
00218 }
00219
00220 void simpleSequenceEnd()
00221 {
00222 out << " ]\n";
00223 }
00224
00225 void Exporter::valueSFString(SFString::ArgType v)
00226 {
00227 out << "\"" << escape(v) << "\"\n";
00228 }
00229
00230 void Exporter::valueMFString(SFString::ArgType v)
00231 {
00232 out << "\"" << escape(v) << "\"\n";
00233 }
00234 }
00235 }
00236 }