23 #include "DCPGenerator.h"
26 DCPGenerator::DCPGenerator() {
31 DCPGenerator::~DCPGenerator() {
34 string DCPGenerator::generateDCPAll(strVec fileNames)
36 string bodies,headersb=
"#include \"AfcUtil.h\"",funcdefs;
37 for (
unsigned int var = 0; var < fileNames.size(); ++var)
39 bodies += generateDCP(fileNames.at(var),headersb,funcdefs);
41 bodies = (headersb+
"\nextern \"C\"\n{\n"+funcdefs+bodies+
"}\n");
44 string DCPGenerator::generateDCP(
string fileName,
string &headersb,
string &funcdefs)
47 string data,allcontent;
48 infile.open(fileName.c_str());
51 s = fileName.find_last_of(
"/")+1;
52 dir = fileName.substr(0,s-1);
53 en = fileName.find_last_of(
".");
54 file = fileName.substr(s,en-s);
57 while(getline(infile, data))
59 if(data.find(
"<import>")!=string::npos && data.find(
"</import>")!=string::npos)
61 int s = data.find(
"<import>")+8;
62 int e = data.find(
"</import>");
63 data=data.substr(s,e-s);
64 s = data.find_last_of(
"/")+1;
65 en = data.find_last_of(
".");
66 string file1 = data.substr(s,en-s);
67 allcontent.append(
"<DCPB>screen << _"+file1+
"emittHTML();\n</DCPB>");
78 allcontent.append(data+
"\n");
81 string header,bodies,funcs;
82 int b = allcontent.find(
"<DCPH>") + 6;
83 int e = allcontent.find(
"</DCPH>");
87 header.append(allcontent.substr(b,len));
88 allcontent = allcontent.substr(e+7);
89 headersb.append(header+
"\n");
92 while(allcontent.find(
"<DCPF>")!=string::npos)
94 b = allcontent.find(
"<DCPF>");
95 e = allcontent.find(
"</DCPF>") + 7;
96 string temp1 = allcontent.substr(b,e-b);
97 StringUtil::replaceAll(allcontent,temp1,
"");
102 e = temp1.find(
"</DCPF>");
104 funcs.append(temp1.substr(6,e-6));
107 bodies.append(funcs);
109 funcdefs.append(
"string _"+file+
"emittHTML();\n");
110 bodies.append(
"string _"+file+
"emittHTML()\n{\n");
111 bodies.append(
"stringstream screen;\n");
112 while(allcontent.find(
"<DCPB>")!=string::npos)
114 b = allcontent.find(
"<DCPB>") + 6;
115 string ter(allcontent.substr(0,b-6));
116 StringUtil::replaceAll(ter,
"\n",
"");
117 StringUtil::replaceAll(ter,
"\"",
"\\\"");
118 bodies.append(
"screen << \""+ter+
"\";");
119 e = allcontent.find(
"</DCPB>");
121 bodies.append(allcontent.substr(b,len));
122 allcontent = allcontent.substr(e+7);
124 string ter(allcontent.substr(0));
125 StringUtil::replaceAll(ter,
"\n",
"");
126 StringUtil::replaceAll(ter,
"\"",
"\\\"");
127 bodies.append(
"screen << \""+ter+
"\";\nstring scr;\nscr = screen.str();\n");
128 bodies.append(
"\nAfcUtil::writeTofile(\""+dir+
"_"+file+
".html\",scr,true);\n");
129 bodies.append(
"\nreturn scr;\n");
130 bodies.append(
"\n}\n");