handlers.hh

00001 // handlers.hh: this file is part of the Vaucanson project.
00002 //
00003 // Vaucanson, a generic library for finite state machines.
00004 //
00005 // Copyright (C) 2007, 2008 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 
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         //TypeHandler<T>        typeh_;
00363     };
00364 
00365   } // !xml
00366 } // !vcsn
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

Generated on Thu Oct 9 20:22:35 2008 for Vaucanson by  doxygen 1.5.1