xml_chooser.hxx

Go to the documentation of this file.
00001 // xml_chooser.hxx: this file is part of the Vaucanson project.
00002 //
00003 // Vaucanson, a generic library for finite state machines.
00004 //
00005 // Copyright (C) 2005, 2006 The Vaucanson Group.
00006 //
00007 // This program is free software; you can redistribute it and/or
00008 // modify it under the terms of the GNU General Public License
00009 // as published by the Free Software Foundation; either version 2
00010 // of the License, or (at your option) any later version.
00011 //
00012 // The complete GNU General Public Licence Notice can be found as the
00013 // `COPYING' file in the root directory.
00014 //
00015 // The Vaucanson Group consists of people listed in the `AUTHORS' file.
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     | Base chooser |
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     | Transducers on P(B*) |
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     | FMP Transducers |
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   } // !xml
00185 
00186 } // !vcsn
00187 
00188 
00189 # undef TParmFMP
00190 # undef FMPtype
00191 
00192 #endif // ! VCSN_XML_XML_CHOOSER_HXX

Generated on Fri Jul 28 12:18:56 2006 for Vaucanson by  doxygen 1.4.6