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(transcode("labelType"));
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(transcode("labelType"));
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     template <class S, class T, class M1, class M2>
00148     const char*
00149     xml_chooser<FMPtype>::choose_start_tag()
00150     { return "transducer"; }
00151 
00152 
00153     template <class S, class T, class M1, class M2>
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(transcode("labelType"));
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 #endif // ! VCSN_XML_XML_CHOOSER_HXX