GP-4376 Add setPackedOutput to Emit

This commit is contained in:
caheckman 2024-02-29 01:25:08 +00:00
parent d1dc48547e
commit 49af7f2db5
6 changed files with 36 additions and 10 deletions

View file

@ -964,7 +964,9 @@ void IfcPrintCXml::execute(istream &s)
dcp->conf->print->setOutputStream(status->fileoptr); dcp->conf->print->setOutputStream(status->fileoptr);
dcp->conf->print->setMarkup(true); dcp->conf->print->setMarkup(true);
dcp->conf->print->setPackedOutput(false);
dcp->conf->print->docFunction(dcp->fd); dcp->conf->print->docFunction(dcp->fd);
*status->fileoptr << endl;
dcp->conf->print->setMarkup(false); dcp->conf->print->setMarkup(false);
} }

View file

@ -432,7 +432,7 @@ class XmlEncode : public Encoder {
tag_stop = 2 ///< No tag is currently being written tag_stop = 2 ///< No tag is currently being written
}; };
static const char spaces[]; ///< Array of ' ' characters for emitting indents static const char spaces[]; ///< Array of ' ' characters for emitting indents
static const int4 MAX_SPACES; static const int4 MAX_SPACES; ///< Maximum number of leading spaces when indenting XML
ostream &outStream; ///< The stream receiving the encoded data ostream &outStream; ///< The stream receiving the encoded data
int4 tagStatus; ///< Stage of writing an element tag int4 tagStatus; ///< Stage of writing an element tag
int4 depth; ///< Depth of open elements int4 depth; ///< Depth of open elements

View file

@ -329,6 +329,17 @@ void EmitMarkup::setOutputStream(ostream *t)
encoder = new PackedEncode(*s); encoder = new PackedEncode(*s);
} }
void EmitMarkup::setPackedOutput(bool val)
{
if (encoder == (Encoder *)0) return;
delete encoder;
if (val)
encoder = new PackedEncode(*s);
else
encoder = new XmlEncode(*s);
}
int4 TokenSplit::countbase = 0; int4 TokenSplit::countbase = 0;
/// Emit markup or content corresponding to \b this token on a low-level emitter. /// Emit markup or content corresponding to \b this token on a low-level emitter.
@ -1199,9 +1210,6 @@ void EmitPrettyPrint::flush(void)
lowlevel->flush(); lowlevel->flush();
} }
/// This method toggles the low-level emitter between EmitMarkup and EmitNoMarkup depending
/// on whether markup is desired.
/// \param val is \b true if markup is desired
void EmitPrettyPrint::setMarkup(bool val) void EmitPrettyPrint::setMarkup(bool val)
{ {

View file

@ -349,6 +349,19 @@ public:
virtual void clear(void) { parenlevel = 0; indentlevel=0; pendPrint=(PendPrint *)0; } virtual void clear(void) { parenlevel = 0; indentlevel=0; pendPrint=(PendPrint *)0; }
virtual void setOutputStream(ostream *t)=0; ///< Set the output stream for the emitter virtual void setOutputStream(ostream *t)=0; ///< Set the output stream for the emitter
virtual ostream *getOutputStream(void) const=0; ///< Get the current output stream virtual ostream *getOutputStream(void) const=0; ///< Get the current output stream
/// \brief Toggle whether \b this emits mark-up or not
/// If the emitter supports it, \b true turns on mark-up, \b false turns it off. Otherwise there is no effect.
/// \param val is \b true if markup is desired
virtual void setMarkup(bool val) {}
/// \brief Toggle whether \b this emitter produces packed output
///
/// If the emitter supports it, \b true selects packed output and \b false selects unpacked XML output.
/// Otherwise the method has no effect.
/// \param val is \b true for packed or \b false for unpacked
virtual void setPackedOutput(bool val) {}
virtual void spaces(int4 num,int4 bump=0); virtual void spaces(int4 num,int4 bump=0);
/// \brief Start a new indent level /// \brief Start a new indent level
@ -522,6 +535,7 @@ public:
virtual void closeParen(const string &paren,int4 id); virtual void closeParen(const string &paren,int4 id);
virtual void setOutputStream(ostream *t); virtual void setOutputStream(ostream *t);
virtual ostream *getOutputStream(void) const { return s; } virtual ostream *getOutputStream(void) const { return s; }
virtual void setPackedOutput(bool val);
virtual bool emitsMarkup(void) const { return true; } virtual bool emitsMarkup(void) const { return true; }
}; };
@ -1085,6 +1099,7 @@ public:
virtual void clear(void); virtual void clear(void);
virtual void setOutputStream(ostream *t) { lowlevel->setOutputStream(t); } virtual void setOutputStream(ostream *t) { lowlevel->setOutputStream(t); }
virtual ostream *getOutputStream(void) const { return lowlevel->getOutputStream(); } virtual ostream *getOutputStream(void) const { return lowlevel->getOutputStream(); }
virtual void setPackedOutput(bool val) { lowlevel->setPackedOutput(val); }
virtual void spaces(int4 num,int4 bump=0); virtual void spaces(int4 num,int4 bump=0);
virtual int4 startIndent(void); virtual int4 startIndent(void);
virtual void stopIndent(int4 id); virtual void stopIndent(int4 id);
@ -1096,7 +1111,7 @@ public:
virtual void setCommentFill(const string &fill) { commentfill = fill; } virtual void setCommentFill(const string &fill) { commentfill = fill; }
virtual bool emitsMarkup(void) const { return lowlevel->emitsMarkup(); } virtual bool emitsMarkup(void) const { return lowlevel->emitsMarkup(); }
virtual void resetDefaults(void); virtual void resetDefaults(void);
void setMarkup(bool val); ///< Toggle whether the low-level emitter emits markup or not virtual void setMarkup(bool val);
}; };
/// \brief Helper class for sending cancelable print commands to an ExitXml /// \brief Helper class for sending cancelable print commands to an ExitXml

View file

@ -648,12 +648,12 @@ void PrintLanguage::emitLineComment(int4 indent,const Comment *comm)
comm->setEmitted(true); comm->setEmitted(true);
} }
/// Tell the emitter whether to emit just the raw tokens or if additional mark-up should be provided. /// Select packed or unpacked (XML) output, if the emitter supports it.
/// \param val is \b true for additional mark-up /// \param val is \b true for packed or \b false for unpacked
void PrintLanguage::setMarkup(bool val) void PrintLanguage::setPackedOutput(bool val)
{ {
((EmitPrettyPrint *)emit)->setMarkup(val); emit->setPackedOutput(val);
} }
/// Emitting formal code structuring can be turned off, causing all control-flow /// Emitting formal code structuring can be turned off, causing all control-flow

View file

@ -454,7 +454,8 @@ public:
uint4 getHeaderComment(void) const { return head_comment_type; } ///< Get the type of comments suitable for a function header uint4 getHeaderComment(void) const { return head_comment_type; } ///< Get the type of comments suitable for a function header
void setHeaderComment(uint4 val) { head_comment_type = val; } ///< Set the type of comments suitable for a function header void setHeaderComment(uint4 val) { head_comment_type = val; } ///< Set the type of comments suitable for a function header
bool emitsMarkup(void) const { return emit->emitsMarkup(); } ///< Does the low-level emitter, emit markup bool emitsMarkup(void) const { return emit->emitsMarkup(); } ///< Does the low-level emitter, emit markup
void setMarkup(bool val); ///< Set whether the low-level emitter, emits markup void setMarkup(bool val) { emit->setMarkup(val); } ///< Turn on/off mark-up in emitted output
void setPackedOutput(bool val); ///< Turn on/off packed output
void setFlat(bool val); ///< Set whether nesting code structure should be emitted void setFlat(bool val); ///< Set whether nesting code structure should be emitted
virtual void initializeFromArchitecture(void)=0; ///< Initialize architecture specific aspects of printer virtual void initializeFromArchitecture(void)=0; ///< Initialize architecture specific aspects of printer