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