author | Michael Krelin <hacker@klever.net> | 2005-03-30 21:58:44 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2005-03-30 21:58:44 (UTC) |
commit | 5c757590c7561f6d85b3f9011aa0695c4111b379 (patch) (side-by-side diff) | |
tree | e0bf20ca58b3e7bd9cc4eda54db5674ba1d71db0 /include | |
parent | 3ddbfeafde93d1aab16a710498d86eef4e787406 (diff) | |
download | sitecing-5c757590c7561f6d85b3f9011aa0695c4111b379.zip sitecing-5c757590c7561f6d85b3f9011aa0695c4111b379.tar.gz sitecing-5c757590c7561f6d85b3f9011aa0695c4111b379.tar.bz2 |
1. fixed a bug just introduced, preventing the last skeleton-generated file
from being written.
2. introduced pragma directive and pragma main=class
3. minor changes of no importance
-rw-r--r-- | include/sitecing/sitecing_enflesher.h | 9 | ||||
-rw-r--r-- | include/sitecing/sitecing_parser.h | 8 |
2 files changed, 17 insertions, 0 deletions
diff --git a/include/sitecing/sitecing_enflesher.h b/include/sitecing/sitecing_enflesher.h index 8bc43a0..db15bc3 100644 --- a/include/sitecing/sitecing_enflesher.h +++ b/include/sitecing/sitecing_enflesher.h @@ -11,69 +11,78 @@ using namespace std; */ #ifndef sitecing_enflesher_flexlexer_once #define sitecing_enflesher_flexlexer_once #undef yyFlexLexer #define yyFlexLexer sitecing_enflesherFlexLexer #include <FlexLexer.h> #undef yyFlexLexerOnce #endif class sitecing_parser; /** * The enfleshing of the skeleton file according to the in-memory parsed * component source. */ class sitecing_enflesher : public sitecing_enflesherFlexLexer { public: /** * It is time to anchor output with the #line directive. */ bool anchor_time; /** * The file currently being written is supposed to have #line * directives all around the place. */ bool anchoraged; /** * The reference to the parser object containg the parsed source. */ sitecing_parser& parser; /** * The output stream. */ ofstream outs; /** * the outs stream destination file. * @see outs */ string outs_filename; /** * @param p The parser object containing preparsed data. */ sitecing_enflesher(sitecing_parser& p) : parser(p), anchor_time(true) { } /** * Do the job. */ void enflesh(); virtual void LexerOutput(const char *buf,int size); virtual int yylex(); /** * Put a #line anchor into output. */ void anchor(); /** * Close previously opened output stream, rename to the 'correct' * destination filename, if needed, and open new file. * @see outs * @see outs_filename + * @see outs_close */ void outs_open(const string& nfile); + /** + * Close previously opened output stream, and rename to the 'correct' + * destination filename, if needed. + * @see outs_open + * @see outs + * @see outs_filename + */ + void outs_close(); }; #endif /* __SITECING_SITECING_ENFLESHER_H */ diff --git a/include/sitecing/sitecing_parser.h b/include/sitecing/sitecing_parser.h index 22d716f..a8474f3 100644 --- a/include/sitecing/sitecing_parser.h +++ b/include/sitecing/sitecing_parser.h @@ -230,97 +230,105 @@ class sitecing_parser : public sitecing_parserFlexLexer { /** * Change the processing mode. */ void modify(modus_t m); /** * See if we're eating up whitespaces. */ bool devour_whitespace() { return flags&flag_devour_whitespace; } /** * See if we're eating up the comments. */ bool devour_comments() { return flags&flag_devour_comments; } }; /** * The modes stack type. */ typedef list<modus_operandi> modi_operandi; /** * The modes stack. */ modi_operandi modi; /** * Input file name. */ string input_file; /** * Base class name. */ string base_class; /** * Base class header. */ string base_header; /** * Component's basename. * @todo TODO: wish I could remember the details -- document me. */ string component_basename; /** * The skeleton file name. */ string skeleton; /** * The component class name. */ string class_name; /** * Output basename. * @todo TODO: wish I could remember the details -- document me. */ string output_basename; /** * Verbatim declaration part. */ string decl; /** * Verbatim implementation part. */ string impl; /** * The reference to the component factory object. */ component_factory& factory; + /** + * Pragma map type. + */ + typedef map<string,string> pragmas_t; + /** + * Pragma's found in the component. + */ + pragmas_t pragmas; /** * @param f the component factory. */ sitecing_parser(component_factory& f); /** * Preprocess file. * @param in input file name. */ void preprocess(const string& in); virtual void LexerOutput(const char *buf,int size); virtual int yylex(); /** * Retrieve reference to the to of the modes stack. * @return the reference in question. */ modus_operandi& M() { return modi.front(); } /** * Anchor the output with the #line, if we're not in the text output mode. */ void soft_anchor(); /** * Anchor the output with the #line directive, changing to the appropriate output mode if needed. */ void anchor(); }; #endif /* __SITECING_SITECING_PARSER_H */ |