00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef VCSN_XML_HANDLERS_HH
00019 # define VCSN_XML_HANDLERS_HH
00020
00031 # include <map>
00032 # include <string>
00033
00034 # include <xercesc/sax2/SAX2XMLReader.hpp>
00035 # include <xercesc/sax2/XMLReaderFactory.hpp>
00036 # include <xercesc/sax2/DefaultHandler.hpp>
00037 # include <xercesc/sax2/Attributes.hpp>
00038
00039 # include <xercesc/sax/SAXException.hpp>
00040 # include <xercesc/util/XMLString.hpp>
00041
00042 # include <vaucanson/xml/xmleq.hh>
00043 # include <vaucanson/xml/strings.hh>
00044 # include <vaucanson/xml/handlers_base.hh>
00045 # include <vaucanson/xml/builders.hh>
00046 # include <vaucanson/xml/regexp.hh>
00047
00048 namespace vcsn
00049 {
00050 namespace xml
00051 {
00055 template <typename T>
00056 class GeometryHandler : public Handler
00057 {
00058 public:
00059 typedef typename T::hstate_t hstate_t;
00060
00061 GeometryHandler (xercesc::SAX2XMLReader* parser,
00062 Handler& root,
00063 T& aut,
00064 hstate_t state);
00065
00066 void
00067 start (const XMLCh* const uri,
00068 const XMLCh* const localname,
00069 const XMLCh* const qname,
00070 const xercesc::Attributes& attrs);
00071 void
00072 end (const XMLCh* const uri,
00073 const XMLCh* const localname,
00074 const XMLCh* const qname);
00075 private:
00076 T& aut_;
00077 hstate_t state_;
00078 };
00082 template <typename T>
00083 class StateHandler : public Handler
00084 {
00085 public:
00086 typedef typename T::hstate_t hstate_t;
00087
00088 StateHandler (xercesc::SAX2XMLReader* parser,
00089 Handler& root,
00090 T& aut,
00091 hstate_t state);
00092
00093 void
00094 start (const XMLCh* const uri,
00095 const XMLCh* const localname,
00096 const XMLCh* const qname,
00097 const xercesc::Attributes& attrs);
00098 void
00099 end (const XMLCh* const uri,
00100 const XMLCh* const localname,
00101 const XMLCh* const qname);
00102 private:
00103 T& aut_;
00104 hstate_t state_;
00105
00106 GeometryHandler<T> geometryh_;
00107 UnsupHandler unsuph_;
00108 };
00109
00113 template <typename T>
00114 class StatesHandler : public Handler
00115 {
00116 public:
00117 typedef typename T::hstate_t hstate_t;
00118 typedef std::map<std::string, hstate_t> map_t;
00119
00120 StatesHandler (xercesc::SAX2XMLReader* parser,
00121 Handler& root,
00122 T& aut,
00123 map_t& map);
00124
00125 void
00126 start (const XMLCh* const uri,
00127 const XMLCh* const localname,
00128 const XMLCh* const qname,
00129 const xercesc::Attributes& attrs);
00130 void
00131 end (const XMLCh* const uri,
00132 const XMLCh* const localname,
00133 const XMLCh* const qname);
00134 private:
00135 T& aut_;
00136 map_t& map_;
00137
00138 StateHandler<T>* stateh_;
00139 };
00140
00144 template <typename T>
00145 class TransitionHandler : public Handler
00146 {
00147 public:
00148 typedef typename T::hstate_t hstate_t;
00149 TransitionHandler (xercesc::SAX2XMLReader* parser,
00150 Handler& root,
00151 T& aut,
00152 hstate_t src,
00153 hstate_t dst);
00154
00155 void
00156 start (const XMLCh* const uri,
00157 const XMLCh* const localname,
00158 const XMLCh* const qname,
00159 const xercesc::Attributes& attrs);
00160 void
00161 end (const XMLCh* const uri,
00162 const XMLCh* const localname,
00163 const XMLCh* const qname);
00164
00165 private:
00166 typedef typename T::series_set_elt_t series_set_elt_t;
00167 T& aut_;
00168 hstate_t src_;
00169 hstate_t dst_;
00170
00171 series_set_elt_t s_;
00172
00173 RegexpHandler<series_set_elt_t> labelh_;
00174 UnsupHandler unsuph_;
00175 };
00176
00180 template <typename T>
00181 class InitFinalHandler : public Handler
00182 {
00183 public:
00184 typedef typename T::hstate_t hstate_t;
00185 InitFinalHandler (xercesc::SAX2XMLReader* parser,
00186 Handler& root,
00187 T& aut,
00188 hstate_t state,
00189 bool initial = true);
00190
00191 void
00192 start (const XMLCh* const uri,
00193 const XMLCh* const localname,
00194 const XMLCh* const qname,
00195 const xercesc::Attributes& attrs);
00196 void
00197 end (const XMLCh* const uri,
00198 const XMLCh* const localname,
00199 const XMLCh* const qname);
00200
00201 private:
00202 typedef typename T::series_set_elt_t series_set_elt_t;
00203 T& aut_;
00204 hstate_t state_;
00205
00206 bool initial_;
00207 series_set_elt_t s_;
00208
00209 RegexpHandler<series_set_elt_t> labelh_;
00210 UnsupHandler unsuph_;
00211 };
00212
00216 template <typename T>
00217 class TransitionsHandler : public Handler
00218 {
00219 public:
00220 typedef typename T::hstate_t hstate_t;
00221 typedef std::map<std::string, hstate_t> map_t;
00222
00223 TransitionsHandler (xercesc::SAX2XMLReader* parser,
00224 Handler& root,
00225 T& aut,
00226 map_t& map);
00227
00228 void
00229 start (const XMLCh* const uri,
00230 const XMLCh* const localname,
00231 const XMLCh* const qname,
00232 const xercesc::Attributes& attrs);
00233 void
00234 end (const XMLCh* const uri,
00235 const XMLCh* const localname,
00236 const XMLCh* const qname);
00237 private:
00238 T& aut_;
00239 map_t& map_;
00240
00241 Handler* transitionh_;
00242 };
00243
00247 template <typename T>
00248 class ContHandler : public Handler
00249 {
00250 public:
00251 ContHandler (xercesc::SAX2XMLReader* parser,
00252 Handler& root,
00253 T& aut);
00254
00255 void
00256 start (const XMLCh* const uri,
00257 const XMLCh* const localname,
00258 const XMLCh* const qname,
00259 const xercesc::Attributes& attrs);
00260 void
00261 end (const XMLCh* const uri,
00262 const XMLCh* const localname,
00263 const XMLCh* const qname);
00264 private:
00265 typedef typename T::hstate_t hstate_t;
00266 typedef std::map<std::string, hstate_t> map_t;
00267
00268 T& aut_;
00269 map_t map_;
00270
00271
00272 StatesHandler<T> statesh_;
00273 TransitionsHandler<T> transitionsh_;
00274 };
00275
00279 template <typename T>
00280 class TypeHandler : public Handler
00281 {
00282 public:
00283 TypeHandler (xercesc::SAX2XMLReader* parser,
00284 Handler& root,
00285 T& param);
00286
00287 void
00288 start (const XMLCh* const uri,
00289 const XMLCh* const localname,
00290 const XMLCh* const qname,
00291 const xercesc::Attributes& attrs);
00292 void
00293 end (const XMLCh* const uri,
00294 const XMLCh* const localname,
00295 const XMLCh* const qname);
00296 private:
00297 typedef typename T::monoid_t monoid_t;
00298 typedef typename T::semiring_t semiring_t;
00299 typedef typename T::series_set_t series_set_t;
00300
00301 monoid_t* monoid_;
00302 semiring_t* semiring_;
00303
00304 T& param_;
00305 Handler* monoidh_;
00306 Handler* semiringh_;
00307 };
00308
00312 template <typename T>
00313 class AutHandler : public Handler
00314 {
00315 public:
00316 AutHandler (xercesc::SAX2XMLReader* parser,
00317 Handler& root,
00318 T& aut);
00319
00320 void
00321 start (const XMLCh* const uri,
00322 const XMLCh* const localname,
00323 const XMLCh* const qname,
00324 const xercesc::Attributes& attrs);
00325 void
00326 end (const XMLCh* const uri,
00327 const XMLCh* const localname,
00328 const XMLCh* const qname);
00329 private:
00330 T& aut_;
00331
00332 TypeHandler<T> typeh_;
00333 ContHandler<T> contenth_;
00334 UnsupHandler unsuph_;
00335 };
00336
00341 template <typename T>
00342 class DocHandler : public Handler
00343 {
00344 public:
00345 DocHandler (xercesc::SAX2XMLReader* parser,
00346 xercesc::DefaultHandler& root,
00347 T& aut,
00348 XMLEq& eq);
00349 void
00350 start (const XMLCh* const uri,
00351 const XMLCh* const localname,
00352 const XMLCh* const qname,
00353 const xercesc::Attributes& attrs);
00354 void
00355 end (const XMLCh* const uri,
00356 const XMLCh* const localname,
00357 const XMLCh* const qname);
00358 private:
00359 T& aut_;
00360
00361 AutHandler<T> auth_;
00362
00363 };
00364
00365 }
00366 }
00367
00368 # if ! defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00369 # include <vaucanson/xml/handlers.hxx>
00370 # endif // !VCSN_USE_INTERFACE_ONLY || VCSN_USE_LIB
00371
00372 #endif // !VCSN_XML_HANDLERS_HH