Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals

phpfiles.h

Go to the documentation of this file.
00001 #ifndef _PHPFILES_H_
00002 #define _PHPFILES_H_
00003 
00004 #include "rulesystem.h"
00005 #include "htmlbox.h"
00006 #include "transformerset.h"
00007 #include "treeparser.h"
00008 #include <fstream>
00009 
00011 static string phpName2tplName(const string phpName){
00012   string x = phpName;
00013   return x.replace(phpName.length()-3,phpName.length(),"tpl");  
00014 };
00015 
00017 class PHPFiles{
00018  private:
00019 
00021   class PHPFileInfo{
00022   public:
00024     const string phpName;
00026     StatementList *phpOut;
00028     StatementList *tplOut;
00030     PHPFileInfo(const string iphpName) : phpName(iphpName), 
00031       phpOut(NULL), tplOut(NULL) {};
00032   };
00033 
00035   RuleSystem factor;
00036 
00038   string inDir;
00040   string outDir;
00041 
00043   typedef list<PHPFileInfo> PHPFileInfoList;
00045   typedef PHPFileInfoList::iterator iterator;
00047   typedef PHPFileInfoList::const_iterator const_iterator;
00048 
00050   PHPFileInfoList phpFileInfos;
00051 
00053   HTMLBox htmlBox;
00054 
00056   int yydebug;
00057 
00059   void phpHeader(StatementList *phpOut) const;
00060 
00062   void phpFooter(StatementList *phpOut, const string tplName) const;
00063   
00065   void executeRuleSystemAtTime(){
00066     iterator it = phpFileInfos.begin();
00067     iterator eit = phpFileInfos.end();
00068     while (it!=eit){
00069       StatementList *phpIn = it->phpOut;
00070       it->phpOut = new StatementList();
00071       cout << "Executing rules at time " << factor.getRuleRunTime() << " on " << it->phpName << endl;
00072       factor.execute(it->phpName, phpIn, it->phpOut, it->tplOut);
00073       it++;
00074     };
00075   };
00076 
00078   void executeRuleSystem(){
00079     do {
00080       executeRuleSystemAtTime();
00081     } while (factor.stepTime());
00082   };
00083   
00085   void loadIn(){
00086     iterator it = phpFileInfos.begin();
00087     iterator eit = phpFileInfos.end();
00088     while (it!=eit){
00089       it->tplOut = new StatementList();
00090       cout << "Reading tree of: " << inDir + it->phpName << endl;
00091       it->phpOut = phpParser->parse(inDir + it->phpName, yydebug);
00092       cout << "Normalizing" << endl;
00093       phpPreNormalizers.apply(it->phpOut);
00094       it++;
00095     };
00096   };
00097 
00099   void saveOut(){
00100     iterator it = phpFileInfos.begin();
00101     iterator eit = phpFileInfos.end();
00102     while (it!=eit){
00103       phpHeader(it->phpOut);
00104       phpFooter(it->phpOut,phpName2tplName(it->phpName));
00105 
00106       phpPostNormalizers.apply(it->phpOut);
00107       tplPostNormalizers.apply(it->tplOut);
00108 
00109       ofstream phpOutOfs((outDir+it->phpName).c_str());
00110       phpOutOfs << it->phpOut;
00111       ofstream tplOutOfs((outDir+phpName2tplName(it->phpName)).c_str());
00112       tplOutOfs << it->tplOut;
00113       it++;
00114     };
00115   };
00116 
00118   void processHTML(){
00119     iterator it = phpFileInfos.begin();
00120     iterator eit = phpFileInfos.end();
00121     while (it!=eit){
00122       it->tplOut->transform(&htmlBox.putter);
00123       it++;
00124     };    
00125 
00126     it = phpFileInfos.begin();
00127     eit = phpFileInfos.end();
00128     while (it!=eit){
00129       it->tplOut->transform(&htmlBox.replacer);
00130       it++;
00131     };   
00132   };
00133 
00134 
00135  public:
00136 
00138 
00141   PHPFiles(istream &phpConfig, int iyydebug = 0) : yydebug(iyydebug) {
00142     phpConfig >> inDir;
00143     phpConfig >> outDir;
00144 
00145     htmlBox.setOutDir(outDir);
00146 
00147     while (!phpConfig.eof()){
00148       string phpName;
00149       phpConfig >> phpName;
00150       if (phpName != "") phpFileInfos.push_back(PHPFileInfo(phpName));
00151     };
00152   };
00153 
00155   void execute(){
00156     cout << "Stage 1: reading files" << endl;
00157     loadIn();
00158     cout << "Stage 2: executing rule system" << endl;
00159     executeRuleSystem();
00160     cout << "Stage 3: processing HTML" << endl;
00161     processHTML();
00162     cout << "Stage 4: saving results" << endl;
00163     saveOut();
00164     cout << "DONE!!!" << endl;
00165   };
00166 
00168   ~PHPFiles(){
00169     iterator it = phpFileInfos.begin();
00170     iterator eit = phpFileInfos.end();
00171     while (it!=eit){
00172       delete it->phpOut;
00173       delete it->tplOut;
00174       it++;
00175     };
00176   };
00177 
00178 };
00179 
00180 #endif

Generated on Fri Nov 21 17:54:03 2003 for PHPX by doxygen 1.3.3