30 : mMode(File), pSStream(0), mHasOutBuffer(false), mFileName(rFilename), mColumns(80/
FD_NAMELEN), mColCount(0) {
32 mFStream.exceptions(std::ios::badbit|std::ios::failbit);
34 mFStream.open(rFilename.c_str(), openmode);
36 catch (std::ios::failure&) {
37 std::stringstream errstr;
38 errstr <<
"Exception opening/writing file \""<< rFilename <<
"\"";
39 throw Exception(
"TokenWriter::TokenWriter", errstr.str(), 2);
48 : mMode(XmlFile), pSStream(0), mHasOutBuffer(false), mFileName(rFilename), mColumns(80/
FD_NAMELEN), mColCount(0) {
50 mFStream.exceptions(std::ios::badbit|std::ios::failbit);
52 mFStream.open(rFilename.c_str(), std::ios::out|std::ios::trunc);
53 mFStream <<
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"no\"?>" << std::endl;
56 std::string dtdfile=ftype;
57 std::transform(dtdfile.begin(), dtdfile.end(), dtdfile.begin(), tolower);
58 dtdfile=
"http://www.faudes.org/dtd/1.0/"+dtdfile+
".dtd";
59 mFStream <<
"<!DOCTYPE " << ftype <<
" SYSTEM \"" << dtdfile <<
"\">" << std::endl;
62 catch (std::ios::failure&) {
63 std::stringstream errstr;
64 errstr <<
"Exception opening/writing xml file \""<< rFilename <<
"\"";
65 throw Exception(
"TokenWriter::TokenWriter", errstr.str(), 2);
74 : mMode(mode), pSStream(0), mHasOutBuffer(false), mFileName(
""), mColumns(80/
FD_NAMELEN), mColCount(0) {
110 std::stringstream errstr;
111 errstr <<
"Invalid Mode / Not Implemented";
112 throw Exception(
"TokenWriter::TokenWriter", errstr.str(), 2);
119 : mMode(Stream), pSStream(&stream), mHasOutBuffer(false), mFileName(
"stream"), mColumns(0), mColCount(0) {
124 std::string dtdfile=ftype;
125 std::transform(dtdfile.begin(), dtdfile.end(), dtdfile.begin(), tolower);
126 dtdfile=
"http://www.faudes.org/dtd/1.0/"+dtdfile+
".dtd";
127 *
pSStream <<
"<!DOCTYPE " << ftype <<
" SYSTEM \"" << dtdfile <<
"\">" << std::endl;
130 }
catch (std::ios::failure&) {
131 std::stringstream errstr;
132 errstr <<
"Exception opening/writing xml stream";
133 throw Exception(
"TokenWriter::TokenWriter", errstr.str(), 2);
159 std::stringstream errstr;
160 errstr <<
"Not in String Mode";
161 throw Exception(
"TokenWriter::Str()", errstr.str(), 2);
192 catch (std::ios::failure&) {
193 std::stringstream errstr;
194 errstr <<
"Exception opening/writing file \"" <<
mFileName <<
"\"";
195 throw Exception(
"Generator::write", errstr.str(), 2);
208 FD_DV(
"TokenWriter::DoFlush()");
219 if(c==
'\r')
continue;
234 catch (std::ios::failure&) {
235 std::stringstream errstr;
236 errstr <<
"Exception opening/writing file \"" <<
mFileName <<
"\"";
237 throw Exception(
"TokenWriter::Write(token)", errstr.str(), 2);
244 FD_DV(
"TokenWriter::Write(token)");
298 if((rName ==
"\n") || (rName ==
"\r\n")) {
315 catch (std::ios::failure&) {
316 std::stringstream errstr;
317 errstr <<
"Exception opening/writing file \"" <<
mFileName <<
"\"";
318 throw Exception(
"TokenWriter::WriteText(text)", errstr.str(), 2);
325 std::stringstream errstr;
326 errstr <<
"Invalid begin token while writing file \"" <<
mFileName <<
"\"";
327 throw Exception(
"TokenWriter::WriteText(label,text)", errstr.str(), 2);
336 catch (std::ios::failure&) {
337 std::stringstream errstr;
338 errstr <<
"Exception writing file \"" <<
mFileName <<
"\"";
339 throw Exception(
"TokenWriter::WriteText(label,text)", errstr.str(), 2);
354 FD_DV(
"TokenWriter::Write(token)");
356 std::stringstream errstr;
357 errstr <<
"Invalid begin token while writing file \"" <<
mFileName <<
"\"";
358 throw Exception(
"TokenWriter::WriteVerbatim(tag,text)", errstr.str(), 2);
368 catch (std::ios::failure&) {
369 std::stringstream errstr;
370 errstr <<
"Exception opening/writing file \"" <<
mFileName <<
"\"";
371 throw Exception(
"TokenWriter::WriteVerbatim()", errstr.str(), 2);
387 if(rCharacterData.size()==0)
return;
393 catch (std::ios::failure&) {
394 std::stringstream errstr;
395 errstr <<
"Exception opening/writing file \"" <<
mFileName <<
"\"";
396 throw Exception(
"TokenWriter::WriteCharacterData(text)", errstr.str(), 2);
400 if(rCharacterData.size()>=1)
401 if(rCharacterData.at(rCharacterData.size()-1)==
'\n')
466 if(comment.length()==0)
468 if(comment.length()>0)
469 if(comment.at(0)!=
'%')
472 std::string::const_iterator cit=comment.begin();
473 for(;cit!=comment.end(); cit++) {
490 catch (std::ios::failure&) {
491 std::stringstream errstr;
492 errstr <<
"Exception opening/writing file \"" <<
mFileName <<
"\"";
493 throw Exception(
"TokenWriter::Comment", errstr.str(), 2);
506 static const std::string newline=
"\n\r";
507 if(comment.find_first_of(newline)!=std::string::npos)
510 std::string::const_iterator cit=comment.begin();
511 for(;cit!=comment.end(); cit++) {
522 catch (std::ios::failure&) {
523 std::stringstream errstr;
524 errstr <<
"Exception opening/writing file \"" <<
mFileName <<
"\"";
525 throw Exception(
"TokenWriter::Comment", errstr.str(), 2);
static ConsoleOut * G(void)
virtual void Write(const std::string &message, long int cntnow=0, long int cntdone=0, int verb=1)
void WriteInteger16(long int val)
std::ostringstream mSStream
std::string FileName(void) const
void WriteFloat(const double &val)
void WriteXmlComment(const std::string &rComment)
void WriteText(const std::string &rText)
void WriteEmpty(const std::string &rLabel)
void WriteCharacterData(const std::string &rCharData)
void WriteComment(const std::string &rComment)
void Write(Token &rToken)
std::ostream * Streamp(void)
void WriteString(const std::string &rString)
void WriteEnd(const std::string &rLabel)
void WriteBinary(const char *pData, long int len)
void WriteVerbatim(Token &rBeginTag, const std::string &rText)
void WriteInteger(Idx index)
void WriteBegin(const std::string &rLabel)
void WriteOption(const std::string &rOpt)
const std::string & PreceedingSpace(void) const
void SetInteger16(const Int number)
const std::string & StringValue(void) const
void SetInteger(const Int number)
@ End
<\label> (end of section)
static void WriteVerbatim(std::ostream *pStream, const std::string &rString, bool lfflag=0)
void Write(std::ostream *pStream) const
void SetString(const std::string &rName)
void SetOption(const std::string &rName)
void SetFloat(const faudes::Float number)
void SetEmpty(const std::string &rName)
static void WriteBinary(std::ostream *pStream, const char *pData, std::size_t len)
static int WriteEscapedString(std::ostream *pStream, const std::string &outstr)
void SetBegin(const std::string &rName)
std::string mPreceedingSpace
void SetEnd(const std::string &rName)