00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef VCSN_XML_XML_CHOOSER_HH
00019 # define VCSN_XML_XML_CHOOSER_HH
00020
00031 # include <string>
00032 # include <sstream>
00033 # include <xercesc/dom/DOM.hpp>
00034
00035 # include <vaucanson/design_pattern/element.hh>
00036 # include <vaucanson/boolean_automaton_structures.hh>
00037 # include <vaucanson/z_automaton_structures.hh>
00038 # include <vaucanson/z_max_plus_automaton_structures.hh>
00039 # include <vaucanson/z_min_plus_automaton_structures.hh>
00040 # include <vaucanson/r_automaton_structures.hh>
00041 # include <vaucanson/fmp_transducer_structures.hh>
00042 # include <vaucanson/boolean_transducer_structures.hh>
00043 # include <vaucanson/misc/usual_macros.hh>
00044 # include <vaucanson/xml/tools.hh>
00045
00046
00047 namespace vcsn
00048 {
00049 namespace xml
00050 {
00058 template <class S, class T>
00059 struct xml_chooser_base
00060 {
00061 void create_type_tag(const Element<S, T>& aut,
00062 xercesc::DOMDocument* doc,
00063 xercesc::DOMElement* root);
00064
00065 void create_label(xercesc::DOMDocument* doc,
00066 htransition_t e, const Element<S, T>&aut,
00067 xercesc::DOMElement* elt, bool use_label_node);
00068
00069 void create_initial_label(xercesc::DOMDocument* doc,
00070 hstate_t s, const Element<S, T>& aut,
00071 xercesc::DOMElement* elt,
00072 bool use_label_node);
00073 void create_final_label(xercesc::DOMDocument* doc,
00074 hstate_t s, const Element<S, T>& aut,
00075 xercesc::DOMElement* elt,
00076 bool use_label_node);
00077 };
00078
00086 template <class S, class T>
00087 struct xml_chooser : xml_chooser_base<S, T>
00088 {};
00089
00097 template <class S, class T>
00098 struct xml_chooser<Automata<S>, T> : xml_chooser_base<Automata<S>, T>
00099 {};
00100
00108 template <class S, class T>
00109 struct xml_chooser<Transducer<S>, T> : xml_chooser_base<Transducer<S>, T>
00110 {
00111 void create_type_tag(const Element<Transducer<S>, T>& aut,
00112 xercesc::DOMDocument* doc,
00113 xercesc::DOMElement* root);
00114 };
00115
00125 # define FMPtype \
00126 Automata< \
00127 vcsn::algebra::Series<S, vcsn::algebra::FreeMonoidProduct<M1, M2> > \
00128 >, T
00129
00130 template <class S, class T, class M1, class M2>
00131 struct xml_chooser<FMPtype> : xml_chooser_base<FMPtype>
00132 {
00133 void create_type_tag(const Element<FMPtype>& aut,
00134 xercesc::DOMDocument* doc,
00135 xercesc::DOMElement* root);
00136 };
00137
00138
00139 }
00140
00141 }
00142
00143 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00144 # include <vaucanson/xml/xml_chooser.hxx>
00145 # endif // VCSN_USE_INTERFACE_ONLY
00146
00147 # undef FMPtype
00148
00149 #endif // ! VCSN_XML_XML_CHOOSER_HH