summaryrefslogtreecommitdiffabout
path: root/include/sitecing/sitecing_enflesher.h
Side-by-side diff
Diffstat (limited to 'include/sitecing/sitecing_enflesher.h') (more/less context) (ignore whitespace changes)
-rw-r--r--include/sitecing/sitecing_enflesher.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/include/sitecing/sitecing_enflesher.h b/include/sitecing/sitecing_enflesher.h
new file mode 100644
index 0000000..ad57fb5
--- a/dev/null
+++ b/include/sitecing/sitecing_enflesher.h
@@ -0,0 +1,65 @@
+#ifndef __SITECING_SITECING_ENFLESHER_H
+#define __SITECING_SITECING_ENFLESHER_H
+
+#include <fstream>
+#include <string>
+using namespace std;
+
+/**
+ * @file
+ * @brief The preprocessed source builder.
+ */
+
+#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;
+ /**
+ * @todo TODO: wish I could remember -- document me.
+ */
+ bool anchoraged;
+ /**
+ * The reference to the parser object containg the parsed source.
+ */
+ sitecing_parser& parser;
+ /**
+ * The output stream.
+ */
+ ofstream outs;
+
+ /**
+ * @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();
+};
+
+#endif /* __SITECING_SITECING_ENFLESHER_H */