00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef BUILDERS_HH
00019 # define BUILDERS_HH
00020
00031 # include <string>
00032 # include <xercesc/sax2/Attributes.hpp>
00033 # include <xercesc/sax2/SAX2XMLReader.hpp>
00034 # include <xercesc/sax2/DefaultHandler.hpp>
00035
00036 # include <xercesc/sax/SAXException.hpp>
00037 # include <xercesc/util/XMLString.hpp>
00038
00039
00040 # include <vaucanson/design_pattern/element.hh>
00041 # include <vaucanson/automata/concept/automata.hh>
00042 # include <vaucanson/automata/concept/transducer.hh>
00043 # include <vaucanson/algebra/implementation/series/series.hh>
00044 # include <vaucanson/algebra/concept/freemonoid_product.hh>
00045 # include <vaucanson/xml/tools.hh>
00046 # include <vaucanson/xml/xmleq.hh>
00047
00048 # define TParm \
00049 template <class S, class T>
00050 # define TParmFMP \
00051 template <class S, class T, class M1, class M2>
00052 # define AUTtype \
00053 Element<Automata<S>, T>
00054 # define TRANStype \
00055 Element<Transducer<S>, T>
00056
00057 # define FMPtype \
00058 Element< \
00059 Automata< \
00060 vcsn::algebra::Series<S, vcsn::algebra::FreeMonoidProduct<M1, M2> > \
00061 >, \
00062 T>
00063
00064 namespace vcsn
00065 {
00066 namespace xml
00067 {
00068 class MonoidHandler;
00069 class SemiringHandler;
00070 template <typename T>
00071 class RegExpHandler;
00072 template <typename T>
00073 class LabelHandler;
00074
00075 namespace builders
00076 {
00077
00078
00079 template <typename T>
00080 typename T::monoid_t*
00081 create_monoid (T&,
00082 const xercesc::Attributes& attrs);
00083
00084 TParmFMP
00085 typename FMPtype::monoid_t*
00086 create_monoid (FMPtype&,
00087 const xercesc::Attributes& attrs);
00088
00089 template <typename T>
00090 MonoidHandler*
00091 monoidh_factory(T& monoid,
00092 const xercesc::Attributes& attrs,
00093 xercesc::DefaultHandler& root,
00094 xercesc::SAX2XMLReader* parser,
00095 XMLEq& eq);
00096
00097 template <typename T>
00098 void
00099 insert_letter (T& monoid,
00100 std::string letter);
00101
00102
00103
00104 template <typename T>
00105 typename T::semiring_t*
00106 create_semiring (T&,
00107 const xercesc::Attributes& attrs);
00108
00109 TParm
00110 typename TRANStype::semiring_t*
00111 create_semiring (TRANStype&,
00112 const xercesc::Attributes& attrs);
00113
00114 template <typename V, typename T>
00115 SemiringHandler*
00116 semiringh_factory(V& param,
00117 const xercesc::Attributes& attrs,
00118 T& semiring,
00119 xercesc::DefaultHandler& root,
00120 xercesc::SAX2XMLReader* parser,
00121 XMLEq& eq);
00122
00123 TParm
00124 SemiringHandler*
00125 semiringh_factory(TRANStype& param,
00126 const xercesc::Attributes& attrs,
00127 typename TRANStype::semiring_t& semiring,
00128 xercesc::DefaultHandler& root,
00129 xercesc::SAX2XMLReader* parser,
00130 XMLEq& eq);
00131
00132
00133
00134 template <typename T>
00135 typename T::series_set_elt_t
00136 get_series (T& aut,
00137 std::map<std::string, std::string>& attrs,
00138 const char * token);
00139
00140
00141
00142 void
00143 check_consistency (const xercesc::Attributes& attrs,
00144 const std::string& kind,
00145 const char* key,
00146 const std::string& expected);
00147
00148
00149
00150 bool
00151 has_attribute (const xercesc::Attributes& attrs,
00152 const char* key,
00153 const XMLCh* const uri = 0);
00154
00155 const XMLCh*
00156 get_attribute (const xercesc::Attributes& attrs,
00157 const char* key,
00158 const XMLCh* uri = 0);
00159
00160 template <typename T>
00161 RegExpHandler<T>*
00162 labelh_factory(xercesc::DefaultHandler& root,
00163 T& aut,
00164 xercesc::SAX2XMLReader* parser,
00165 XMLEq& eq,
00166 const XMLCh* const localname,
00167 const xercesc::Attributes& attrs);
00168
00169 template <typename T>
00170 typename T::series_set_elt_t
00171 get_series_transition(T& aut,
00172 std::map<std::string, std::string>& attrs,
00173 LabelHandler<T>& labelh);
00174 }
00175 }
00176 }
00177
00178 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00179 # include <vaucanson/xml/builders.hxx>
00180 # endif // VCSN_USE_INTERFACE_ONLY || !VCSN_USE_LIB
00181
00182 # undef AUTtype
00183 # undef FMPtype
00184 # undef TParm
00185 # undef TParmFMP
00186 # undef TRANStype
00187
00188 #endif // !BUILDERS_HH