00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef VCSN_XML_BUILDERS_HH
00019 # define VCSN_XML_BUILDERS_HH
00020
00031 # include <string>
00032
00033
00034
00035
00036
00037 # include <vaucanson/algebra/implementation/monoid/free_monoid.hh>
00038 # include <vaucanson/algebra/implementation/series/series.hh>
00039
00040 # include <xercesc/sax2/Attributes.hpp>
00041 # include <xercesc/util/XMLString.hpp>
00042 # include <xercesc/dom/DOM.hpp>
00043
00044 # include <vaucanson/xml/handlers_base.hh>
00045
00046 namespace vcsn
00047 {
00048 namespace xml
00049 {
00053 template <typename T>
00054 class monGenAction
00055 {
00056 public:
00057 monGenAction(const T&);
00058 };
00059
00060
00061 template <typename T>
00062 class monGenAction<vcsn::algebra::FreeMonoid<T> >
00063 {
00064 public:
00065 typedef vcsn::algebra::FreeMonoid<T> monoid_t;
00066 typedef typename monoid_t::alphabet_t alphabet_t;
00067
00068 monGenAction(monoid_t&);
00069 void operator () (const std::string&);
00070 private:
00071 alphabet_t& alphabet_;
00072 };
00073
00074
00075 template <typename T, typename U, typename V>
00076 class monGenAction<vcsn::Element<vcsn::algebra::Series<T, U>, V> >
00077 {
00078 public:
00079 typedef vcsn::Element<vcsn::algebra::Series<T, U>, V> series_t;
00080 typedef typename series_t::set_t::monoid_t monoid_t;
00081 typedef typename monoid_t::alphabet_t alphabet_t;
00082 typedef typename alphabet_t::letter_t letter_t;
00083
00084 monGenAction(series_t&);
00085 void operator () (const std::string&);
00086 private:
00087 series_t& s_;
00088 };
00089
00096 template <typename T, typename U>
00097 class monGenHandler : public Handler
00098 {
00099 public:
00100 monGenHandler (xercesc::SAX2XMLReader* parser,
00101 Handler& root,
00102 const monGenAction<U>& action,
00103 const XMLCh* value = 0);
00104
00105 void
00106 start (const XMLCh* const uri,
00107 const XMLCh* const localname,
00108 const XMLCh* const qname,
00109 const xercesc::Attributes& attrs);
00110 void
00111 end (const XMLCh* const uri,
00112 const XMLCh* const localname,
00113 const XMLCh* const qname);
00114 private:
00115 const XMLCh* value_;
00116
00117
00118 monGenAction<U> action_;
00119 };
00120
00127 template <typename T, typename U>
00128 class monGenTupleHandler : public Handler
00129 {
00130 public:
00131 monGenTupleHandler (xercesc::SAX2XMLReader* parser,
00132 Handler& root,
00133 const monGenAction<U>& action);
00134
00135 void
00136 start (const XMLCh* const uri,
00137 const XMLCh* const localname,
00138 const XMLCh* const qname,
00139 const xercesc::Attributes& attrs);
00140 void
00141 end (const XMLCh* const uri,
00142 const XMLCh* const localname,
00143 const XMLCh* const qname);
00144 private:
00145 std::string value_;
00146 bool wait_begin_;
00147 int count_;
00148
00149
00150 monGenAction<U> action_;
00151 };
00152
00156 template <typename T>
00157 class FreeMonoidHandler : public Handler
00158 {
00159 public:
00160 FreeMonoidHandler (xercesc::SAX2XMLReader* parser,
00161 Handler& root,
00162 T& monoid);
00163
00164 void
00165 start (const XMLCh* const uri,
00166 const XMLCh* const localname,
00167 const XMLCh* const qname,
00168 const xercesc::Attributes& attrs);
00169 void
00170 end (const XMLCh* const uri,
00171 const XMLCh* const localname,
00172 const XMLCh* const qname);
00173 private:
00174 T& monoid_;
00175 bool user_rep_;
00176
00177 Handler* mongenh_;
00178 UnsupHandler unsuph_;
00179 };
00180
00184 template <typename T>
00185 class SeriesRepresentationHandler : public Handler
00186 {
00187 public:
00188 SeriesRepresentationHandler(xercesc::SAX2XMLReader* parser,
00189 Handler& root,
00190 T& srep);
00191
00192 void start(const XMLCh* const uri,
00193 const XMLCh* const localname,
00194 const XMLCh* const qname,
00195 const xercesc::Attributes& attrs);
00196
00197 void end(const XMLCh* const uri,
00198 const XMLCh* const localname,
00199 const XMLCh* const qname);
00200
00201 private:
00202 T& rep_;
00203
00204 UnsupHandler unsuph_;
00205 };
00206
00207 namespace builders
00208 {
00209 template <typename T>
00210 typename T::monoid_t*
00211 create_monoid (T&,
00212 const XMLCh* const localname,
00213 const xercesc::Attributes& attrs,
00214 XMLEq&);
00215
00216 template <typename T>
00217 Handler*
00218 create_monoidh (T& monoid,
00219 const xercesc::Attributes& attrs,
00220 xercesc::SAX2XMLReader* parser,
00221 Handler& root);
00222
00223 template <typename T>
00224 typename T::series_set_t::series_rep_t*
00225 create_series_representation(T&,
00226 const XMLCh* const localname,
00227 const xercesc::Attributes& attrs,
00228 XMLEq&);
00229
00230 template <typename T>
00231 Handler*
00232 create_series_representationh(T& srep,
00233 const xercesc::Attributes& attrs,
00234 xercesc::SAX2XMLReader* parser,
00235 Handler& root,
00236 XMLEq&);
00237
00238 }
00239
00243 template <typename T>
00244 class NumSemiringHandler : public Handler
00245 {
00246 public:
00247 NumSemiringHandler (xercesc::SAX2XMLReader* parser,
00248 Handler& root,
00249 T& semiring);
00250
00251 void
00252 start (const XMLCh* const uri,
00253 const XMLCh* const localname,
00254 const XMLCh* const qname,
00255 const xercesc::Attributes& attrs);
00256 void
00257 end (const XMLCh* const uri,
00258 const XMLCh* const localname,
00259 const XMLCh* const qname);
00260 private:
00261 T& semiring_;
00262
00263 UnsupHandler unsuph_;
00264 };
00265
00266 namespace builders
00267 {
00268 template <typename T>
00269 typename T::semiring_t*
00270 create_semiring (T&,
00271 const XMLCh* const localname,
00272 const xercesc::Attributes& attrs);
00273
00274 template <typename T>
00275 Handler*
00276 create_semiringh (T& semiring,
00277 const xercesc::Attributes& attrs,
00278 xercesc::SAX2XMLReader* parser,
00279 Handler& root);
00280
00281 }
00282
00286 template <typename T>
00287 class RegexpHandler;
00288
00289 namespace builders
00290 {
00291
00292 template <typename S, typename T>
00293 RegexpHandler<S>*
00294 create_monElmth(xercesc::SAX2XMLReader* parser,
00295 RegexpHandler<T>& root,
00296 S param);
00297
00298 template <typename T>
00299 RegexpHandler<T>*
00300 create_weight(xercesc::SAX2XMLReader* parser,
00301 RegexpHandler<T>& root,
00302 T param,
00303 const xercesc::Attributes& attrs);
00304 }
00305
00309 namespace builders
00310 {
00311 template <typename T>
00312 void
00313 check_monoid_consistency (T& param,
00314 const XMLCh* const localname,
00315 const xercesc::Attributes& attrs,
00316 XMLEq&);
00317
00318 template <typename T>
00319 void
00320 check_semiring_consistency (T& param,
00321 const XMLCh* const localname,
00322 const xercesc::Attributes& attrs);
00323 }
00324
00328 namespace builders
00329 {
00330 template <typename T>
00331 void
00332 create_semiring_node(const T& semiring,
00333 xercesc::DOMDocument* doc,
00334 xercesc::DOMElement* root);
00335
00336 template <typename T>
00337 void
00338 create_monoid_node(const T& monoid,
00339 xercesc::DOMDocument* doc,
00340 xercesc::DOMElement* root);
00341
00342 template <typename T>
00343 void
00344 create_regexp_node(const T&,
00345 xercesc::DOMDocument* doc,
00346 xercesc::DOMElement* root,
00347 const char* root_name = "label");
00348
00349 template <typename T>
00350 void
00351 create_monElmt_node(const T&,
00352 xercesc::DOMDocument* doc,
00353 xercesc::DOMElement* root);
00354
00355 template <typename T>
00356 void
00357 create_type_writingData_node(const T&,
00358 xercesc::DOMDocument* doc,
00359 xercesc::DOMElement* root);
00360
00361
00362 template <typename T>
00363 struct
00364 create_monGen_node;
00365
00366 }
00367
00368 }
00369
00370 }
00371
00372 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00373 # include <vaucanson/xml/builders.hxx>
00374 # endif // VCSN_USE_INTERFACE_ONLY || !VCSN_USE_LIB
00375
00376 #endif // !VCSN_XML_BUILDERS_HH