rplPattern.h
00001 #ifndef RPLPATTERN_H
00002 #define RPLPATTERN_H
00003
00004 #include "config.h"
00005 #include "doomed.h"
00006 #include <string>
00007 #include <set>
00008 #include "traceString.h"
00009 #include <stdio.h>
00010
00011 class Options;
00012 class IO;
00013
00027
00028 class RplPattern
00029 {
00031 enum ListType_t {NONE, ACTIVE, INACTIVE};
00032
00033 public:
00034
00040
00041 static RplPattern& instance()
00042 {
00043 assert(msp_rplPattern && "Failed to call RplPattern::build()");
00044 return *msp_rplPattern;
00045 }
00046
00047
00051
00052 static void build()
00053 {
00054 if (msp_rplPattern != 0)
00055 return;
00056 msp_rplPattern = new RplPattern();
00057 ms_destroyer.setDoomed(msp_rplPattern);
00058 }
00059
00060
00064
00065 ~RplPattern();
00066
00067
00068
00085
00086 void replace(Tbl& dict, std::string& ts, std::string& leadwspc);
00087
00088
00102
00103 void replace(Tbl& dict, std::string& ts, std::string& leadwspc,
00104 std::string& rtnStr);
00105
00106
00107 private:
00108
00117
00118 RplPattern();
00119
00120 RplPattern(const RplPattern&);
00121 RplPattern& operator=(const RplPattern&);
00122
00123
00124 private:
00125
00133
00134 void findPattern(Tbl& tbl, std::string& ts, std::string& pat);
00135
00136
00141
00142 void buildPatternTbl(std::string& line, Tbl& tbl);
00143
00144
00148
00149 void add2dict(std::string& args, Tbl& tbl);
00150
00151
00155
00156 void buildList(ListType_t listType, const char* fn);
00157
00158
00159
00163
00164 Tbl m_startPatternTbl;
00165
00166
00170
00171 Tbl m_endPatternTbl;
00172
00173
00179
00180 STD(set)<std::string> m_routineList;
00181
00182
00187
00188 ListType_t m_listType;
00189
00190
00194
00195 int m_remove;
00196
00197
00198
00202
00203 static RplPattern* msp_rplPattern;
00204
00205
00209
00210 static SingletonDestroyer<RplPattern> ms_destroyer;
00211
00212 };
00213
00214
00215 void removeComment(std::string& line);
00216
00217 void strip(std::string& s);
00218
00219 void rstrip(std::string& s);
00220
00221
00222 #endif //RPLPATTERN_H
00223
00224