00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_XML_XML_CHOOSER_HXX
00018 # define VCSN_XML_XML_CHOOSER_HXX
00019
00032 namespace vcsn
00033 {
00034 namespace xml
00035 {
00036
00037
00038
00039
00040 template <class S, class T>
00041 const char*
00042 xml_chooser_base<S, T>::choose_start_tag()
00043 { return "automaton"; }
00044
00045 template <class S, class T>
00046 void
00047 xml_chooser_base<S, T>::create_type_tag(const Element<S, T>& aut,
00048 xercesc::DOMDocument* doc,
00049 xercesc::DOMElement* root)
00050 {
00051 xercesc::DOMElement* type = doc->createElement(STR2XML("label_type"));
00052 xercesc::DOMElement* monoid =
00053 tools::create_monoid(aut.structure().series().monoid(), doc, type);
00054 tools::create_alphabet(aut.structure().series().monoid().alphabet(),
00055 doc, monoid);
00056 tools::create_semiring(aut, aut.structure().series().semiring(),
00057 doc, type);
00058 root->appendChild(type);
00059 }
00060
00061
00062 template <class S, class T>
00063 void
00064 xml_chooser_base<S, T>::create_label(xercesc::DOMDocument* doc,
00065 htransition_t e,
00066 const Element<S, T>& aut,
00067 xercesc::DOMElement* elt,
00068 bool use_label_node)
00069
00070 {
00071 if (use_label_node)
00072 tools::add_xml_label(doc, elt, aut, aut.series_of(e));
00073 else
00074 tools::add_label(elt, aut, aut.series_of(e));
00075 }
00076
00077
00078 template <class S, class T>
00079 void
00080 xml_chooser_base<S, T>::create_initial_label(xercesc::DOMDocument* doc,
00081 hstate_t s,
00082 const Element<S, T>& aut,
00083 xercesc::DOMElement* elt,
00084 bool use_label_node)
00085 {
00086 if (use_label_node)
00087 tools::add_xml_label(doc, elt, aut, aut.get_initial(s));
00088 else
00089 tools::add_label(elt, aut, aut.get_initial(s));
00090 }
00091
00092 template <class S, class T>
00093 void
00094 xml_chooser_base<S, T>::create_final_label(xercesc::DOMDocument* doc,
00095 hstate_t s,
00096 const Element<S, T>& aut,
00097 xercesc::DOMElement* elt,
00098 bool use_label_node)
00099 {
00100 if (use_label_node)
00101 tools::add_xml_label(doc, elt, aut, aut.get_final(s));
00102 else
00103 tools::add_label(elt, aut, aut.get_final(s));
00104 }
00105
00106
00107
00108
00109
00110
00111 template <class S, class T>
00112 const char*
00113 xml_chooser<Transducer<S>, T>::choose_start_tag()
00114 { return "transducer"; }
00115
00116 template <class S, class T>
00117 void
00118 xml_chooser<Transducer<S>, T>
00119 ::create_type_tag(const Element<Transducer<S>, T>& aut,
00120 xercesc::DOMDocument* doc,
00121 xercesc::DOMElement* root)
00122 {
00123 xercesc::DOMElement* type = doc->createElement(STR2XML("label_type"));
00124 xercesc::DOMElement* in_monoid =
00125 tools::create_monoid(aut.structure().series().monoid(), doc, type);
00126 tools::create_alphabet(aut.structure().series().monoid().alphabet(),
00127 doc, in_monoid);
00128 xercesc::DOMElement* semiring =
00129 tools::create_semiring(aut, aut.structure().series().semiring(),
00130 doc, type);
00131 xercesc::DOMElement* out_monoid =
00132 tools::create_monoid(aut.structure().series().semiring().monoid(),
00133 doc, semiring);
00134 tools::create_alphabet(aut.structure().series().semiring()
00135 .monoid().alphabet(), doc, out_monoid);
00136 tools::create_semiring(aut,
00137 aut.structure().series().semiring().semiring(),
00138 doc, semiring);
00139 root->appendChild(type);
00140 }
00141
00142
00143
00144
00145
00146
00147 TParmFMP
00148 const char*
00149 xml_chooser<FMPtype>::choose_start_tag()
00150 { return "transducer"; }
00151
00152
00153 TParmFMP
00154 void
00155 xml_chooser<FMPtype>
00156 ::create_type_tag(const Element<FMPtype>& aut,
00157 xercesc::DOMDocument* doc,
00158 xercesc::DOMElement* root)
00159 {
00160 xercesc::DOMElement* type = doc->createElement(STR2XML("label_type"));
00161 xercesc::DOMElement* monoid =
00162 tools::create_monoid(aut.structure().series().monoid(), doc, type);
00163
00164 xercesc::DOMElement* first_monoid =
00165 tools::create_monoid(aut.structure().series().monoid().first_monoid(),
00166 doc, monoid);
00167 tools::create_alphabet(aut.structure().series().monoid()
00168 .first_monoid().alphabet(),
00169 doc, first_monoid);
00170
00171 xercesc::DOMElement* second_monoid =
00172 tools::create_monoid(aut.structure().series().monoid().second_monoid(),
00173 doc, monoid);
00174 tools::create_alphabet(aut.structure().series().monoid()
00175 .second_monoid().alphabet(),
00176 doc, second_monoid);
00177
00178 tools::create_semiring(aut, aut.structure().series().semiring(),
00179 doc, type);
00180 root->appendChild(type);
00181 }
00182
00183
00184 }
00185
00186 }
00187
00188
00189 # undef TParmFMP
00190 # undef FMPtype
00191
00192 #endif // ! VCSN_XML_XML_CHOOSER_HXX