00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 #ifndef VCSN_XML_INTERNAL_IOS_HXX
00018 # define VCSN_XML_INTERNAL_IOS_HXX
00019 
00020 # include <vaucanson/xml/internal/ios.hh>
00021 
00022 XERCES_CPP_NAMESPACE_BEGIN
00023 
00024 template<class Ostream>
00025 void
00026 XMLPARSER_EXPORT
00027 XMLXercesStream<Ostream>::writeChars(const XMLByte* const toWrite,
00028                                      const XMLSize_t,
00029                                      XMLFormatter* const)
00030 {
00031   os_ << toWrite;
00032 }
00033 
00034 XERCES_CPP_NAMESPACE_END
00035 
00036 namespace vcsn
00037 {
00038   namespace xml
00039   {
00040     inline
00041     XMLSize_t
00042     BinCxxInputStream::readBytes(XMLByte *const toFill,
00043                                  const XMLSize_t maxToRead)
00044     {
00045       
00046       unsigned s = _in->rdbuf()->sgetn((char *)toFill, maxToRead);
00047       _pos += s;
00048       return s;
00049     }
00050 
00051     inline
00052     XERCES_FILEPOS
00053     BinCxxInputStream::curPos() const
00054     {
00055       return _pos;
00056     }
00057 
00058     inline
00059     BinCxxInputStream*
00060     CxxInputSource::makeStream() const
00061     {
00062       return new BinCxxInputStream(_in);
00063     }
00064 
00065     void
00066     print_xml(std::ostream& out,
00067               xercesc::DOMImplementation* impl,
00068               xercesc::DOMElement* root)
00069     {
00070       using namespace xercesc;
00071 
00072       XMLXercesStream<std::ostream>* outstream = new XMLXercesStream<std::ostream>(out);
00073 
00074 # if XERCES_VERSION_MAJOR == 2
00075       DOMWriter* writer = impl->createDOMWriter();
00076 
00077       if (writer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true))
00078         writer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true);
00079 
00080       writer->writeNode(outstream, *root);
00081 # elif XERCES_VERSION_MAJOR > 2
00082       DOMLSSerializer* writer = impl->createLSSerializer();
00083       DOMLSOutput *target = impl->createLSOutput();
00084       target->setByteStream(outstream);
00085       DOMConfiguration *config = writer->getDomConfig();
00086 
00087       if (config->canSetParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true))
00088         config->setParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true);
00089 
00090       writer->write(root, target);
00091 # else
00092 #  error "Unsupported Xerces-C++ major version (too old)."
00093 # endif
00094 
00095       writer->release();
00096 
00097       delete outstream;
00098     }
00099 
00100   } 
00101 
00102 } 
00103 
00104 #endif // ! VCSN_XML_INTERNAL_IOS_HXX