00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef VCSN_XML_CONTEXTS_RW_HH
00019 # define VCSN_XML_CONTEXTS_RW_HH
00020
00031 # include <string>
00032
00033 # include <xercesc/sax2/Attributes.hpp>
00034 # include <xercesc/util/XMLString.hpp>
00035
00036 # include <vaucanson/xml/handlers_base.hh>
00037 # include <vaucanson/xml/builders.hh>
00038 # include <vaucanson/xml/regexp.hh>
00039 # include <vaucanson/xml/xml_exp_visitor.hh>
00040
00041 # include <vaucanson/automata/concept/transducer.hh>
00042 # include <vaucanson/algebra/implementation/series/series.hh>
00043
00044 # define TRANStype \
00045 Element<Transducer<S, K>, T>
00046
00047 # define TRANSseries \
00048 Element<vcsn::algebra::Series<vcsn::algebra::Series<R, S>, T>, U>
00049
00050 # define SParamTRANS \
00051 template <typename R, typename S, typename T, typename U>
00052
00053 # define TRANSsemiring \
00054 vcsn::algebra::Series<S, T>
00055
00056 namespace vcsn
00057 {
00058 namespace xml
00059 {
00063 template <typename T>
00064 class SeriesSemiringHandler : public Handler
00065 {
00066 public:
00067 SeriesSemiringHandler (xercesc::SAX2XMLReader* parser,
00068 Handler& root,
00069 T& semiring);
00070
00071 void
00072 start (const XMLCh* const uri,
00073 const XMLCh* const localname,
00074 const XMLCh* const qname,
00075 const xercesc::Attributes& attrs);
00076 void
00077 end (const XMLCh* const uri,
00078 const XMLCh* const localname,
00079 const XMLCh* const qname);
00080 private:
00081 T& semiring_;
00082 Handler* ssemiringh_;
00083 Handler* monoidh_;
00084 UnsupHandler unsuph_;
00085 };
00086
00087 SParamTRANS
00088 class WeightHandler<TRANSseries > : public RegexpHandler<TRANSseries >
00089 {
00090
00091 using RegexpHandler<TRANSseries >::eq_;
00092 using RegexpHandler<TRANSseries >::parser_;
00093 using RegexpHandler<TRANSseries >::param_;
00094 using RegexpHandler<TRANSseries >::root_;
00095 using RegexpHandler<TRANSseries >::end_;
00096
00097 public:
00098 WeightHandler (xercesc::SAX2XMLReader* parser,
00099 Handler& root,
00100 TRANSseries param);
00101
00102 void
00103 start (const XMLCh* const uri,
00104 const XMLCh* const localname,
00105 const XMLCh* const qname,
00106 const xercesc::Attributes& attrs);
00107 void
00108 end (const XMLCh* const uri,
00109 const XMLCh* const localname,
00110 const XMLCh* const qname);
00111
00112 protected:
00113 typedef typename TRANSseries::set_t::semiring_t series_set_t;
00114 typedef typename TRANSseries::value_t::semiring_elt_value_t series_set_elt_value_t;
00115 typedef vcsn::Element<series_set_t, series_set_elt_value_t> series_set_elt_t;
00116
00117 RegexpHandler<series_set_elt_t>*
00118 create_weighth(const XMLCh* const localname);
00119
00120 RegexpHandler<series_set_elt_t>* weighth_;
00121 };
00122
00123 namespace builders
00124 {
00125 template <typename S, typename K, typename T>
00126 typename TRANStype::semiring_t*
00127 create_semiring (TRANStype&,
00128 const XMLCh* const localname,
00129 const xercesc::Attributes& attrs);
00130
00131 template <typename S, typename T>
00132 Handler*
00133 create_semiringh(TRANSsemiring& semiring,
00134 const xercesc::Attributes& attrs,
00135 xercesc::SAX2XMLReader* parser,
00136 Handler& root);
00137
00138 }
00139
00140 namespace builders
00141 {
00142 SParamTRANS
00143 RegexpHandler<TRANSseries >*
00144 create_weighth(xercesc::SAX2XMLReader* parser,
00145 RegexpHandler<TRANSseries >& root,
00146 TRANSseries param,
00147 const xercesc::Attributes& attrs);
00148 }
00152 namespace builders
00153 {
00154 template <typename S, typename T>
00155 const char* get_semiring_operations(const vcsn::algebra::Series<S, T>&);
00156 }
00157
00158 namespace builders
00159 {
00160 template <typename S, typename K, typename T>
00161 void
00162 create_semiring_node(const TRANStype&,
00163 xercesc::DOMDocument* doc,
00164 xercesc::DOMElement* root);
00165 }
00166 }
00167 }
00168
00169 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00170 # include <vaucanson/xml/contexts/rw.hxx>
00171 # endif // VCSN_USE_INTERFACE_ONLY || !VCSN_USE_LIB
00172
00173 # undef TRANStype
00174 # undef TRANSseries
00175 # undef SParamTRANS
00176 # undef TRANSsemiring
00177
00178 #endif // !VCSN_XML_CONTEXTS_RW_HH