23 #include "CfusionEngine.h"
25 CfusionEngine::CfusionEngine() {
30 CfusionEngine::~CfusionEngine() {
34 void CfusionEngine::execute(
string file)
36 string codeh,codem,pub,pri,pro;
37 string path = file.substr(0,file.find_last_of(
"/")+1);
39 Element root = parser.getDocument(file).getRootElement();
40 ElementList eles = root.getChildElements();
41 string className = root.getAttribute(
"name");
42 StringUtil::toUpper(className);
43 codeh += (
"#ifndef "+className+
"_H_\n");
44 codeh += (
"#define "+className+
"_H_\n");
45 codem += (
"#include \""+root.getAttribute(
"name")+
".h\"\n\n");
46 for (
unsigned int var = 0; var < eles.size(); var++)
48 if(eles.at(var).getTagName()==
"includes")
50 string inc = eles.at(var).getAttribute(
"names");
52 StringUtil::split(incs, inc, (
";"));
53 for (
unsigned int i = 0; i < incs.size(); i++)
55 codeh += (
"#include \"" + incs.at(i) +
"\"\n");
58 else if(eles.at(var).getTagName()==
"using")
60 codeh += (
"using namespace " + eles.at(var).getAttribute(
"ns") +
";\n"+
"class " + root.getAttribute(
"name") +
"{\n");
62 else if(eles.at(var).getTagName()==
"constructor")
64 if(eles.at(var).getAttribute(
"access")==
"public" || eles.at(var).getAttribute(
"access")==
"")
66 pub += (root.getAttribute(
"name") +
"("+eles.at(var).getAttribute(
"args")+
");\n");
68 else if(eles.at(var).getAttribute(
"access")==
"private")
70 pri += (root.getAttribute(
"name") +
"("+eles.at(var).getAttribute(
"args")+
");\n");
72 else if(eles.at(var).getAttribute(
"access")==
"protected")
74 pro += (root.getAttribute(
"name") +
"("+eles.at(var).getAttribute(
"args")+
");\n");
77 codem += (root.getAttribute(
"name")+
"::"+root.getAttribute(
"name")+
"("+eles.at(var).getAttribute(
"args")+
")\n{\n}\n");
79 else if(eles.at(var).getTagName()==
"property")
81 if(eles.at(var).getAttribute(
"access")==
"public" || eles.at(var).getAttribute(
"access")==
"")
83 pub += (eles.at(var).getAttribute(
"type") +
" " + eles.at(var).getAttribute(
"name"));
93 else if(eles.at(var).getAttribute(
"access")==
"private")
95 pri += (eles.at(var).getAttribute(
"type") +
" " + eles.at(var).getAttribute(
"name"));
105 else if(eles.at(var).getAttribute(
"access")==
"protected")
107 pro += (eles.at(var).getAttribute(
"type") +
" " + eles.at(var).getAttribute(
"name"));
118 else if(eles.at(var).getTagName()==
"member")
120 map<string,string> vars;
121 if(eles.at(var).getAttribute(
"access")==
"public" || eles.at(var).getAttribute(
"access")==
"")
123 pub += (eles.at(var).getAttribute(
"return") +
" " + eles.at(var).getAttribute(
"name")
124 +
"(" + eles.at(var).getAttribute(
"args") +
");\n");
125 codem += (eles.at(var).getAttribute(
"return") +
" " + root.getAttribute(
"name")+
"::"+
126 eles.at(var).getAttribute(
"name")+
"("+eles.at(var).getAttribute(
"args")+
")\n{\n");
128 else if(eles.at(var).getAttribute(
"access")==
"private")
130 pri += (eles.at(var).getAttribute(
"return") +
" " + eles.at(var).getAttribute(
"name")
131 +
"(" + eles.at(var).getAttribute(
"args") +
");\n");
132 codem += (eles.at(var).getAttribute(
"return") +
" " + root.getAttribute(
"name")+
"::"+
133 eles.at(var).getAttribute(
"name")+
"("+eles.at(var).getAttribute(
"args")+
")\n{\n");
135 else if(eles.at(var).getAttribute(
"access")==
"protected")
137 pro += (eles.at(var).getAttribute(
"return") +
" " + eles.at(var).getAttribute(
"name")
138 +
"(" + eles.at(var).getAttribute(
"args") +
");\n");
139 codem += (eles.at(var).getAttribute(
"return") +
" " + root.getAttribute(
"name")+
"::"+
140 eles.at(var).getAttribute(
"name")+
"("+eles.at(var).getAttribute(
"args")+
")\n{\n");
142 ElementList elesc = eles.at(var).getChildElements();
143 for (
unsigned int var1 = 0; var1 < elesc.size(); var1++)
145 if(elesc.at(var1).getTagName()==
"new")
147 vars[elesc.at(var1).getAttribute(
"name")] = elesc.at(var1).getAttribute(
"type");
148 codem += (elesc.at(var1).getAttribute(
"type")+
" "+elesc.at(var1).getAttribute(
"name"));
149 if(elesc.at(var1).getAttribute(
"initVal")!=
"")
151 if(elesc.at(var1).getAttribute(
"type")!=
"string")
152 codem += (
" = " + elesc.at(var1).getAttribute(
"initVal"));
154 codem += (
" = \"" + elesc.at(var1).getAttribute(
"initVal") +
"\"");
156 else if(elesc.at(var1).getText()!=
"")
158 if(elesc.at(var1).getAttribute(
"type")!=
"string")
159 codem += (
" = " + elesc.at(var1).getText());
161 codem += (
" = \"" + elesc.at(var1).getText() +
"\"");
165 else if(elesc.at(var1).getTagName()==
"assign")
167 string clasprop = elesc.at(var1).getAttribute(
"name");
168 StringUtil::replaceFirst(clasprop,
"this:",
"this->");
169 if(elesc.at(var1).getText()!=
"")
172 if(vars[elesc.at(var1).getAttribute(
"name")]!=
"string")
173 codem += (
" = " + elesc.at(var1).getText());
175 codem += (
" = \"" + elesc.at(var1).getText() +
"\"");
180 codem += (clasprop +
" = ");
181 if(elesc.at(var1).getChildElements().at(0).getTagName()==
"value")
183 if(elesc.at(var1).getChildElements().at(0).getChildElements().size()==1)
185 Element ele = elesc.at(var1).getChildElements().at(0);
186 if(ele.getTagName()==
"call")
188 codem += (ele.getAttribute(
"name"));
189 codem += (
"("+ele.getChildElements().at(0).getText()+
")");
200 else if(elesc.at(var1).getChildElements().at(0).getTagName()==
"var")
202 clasprop = elesc.at(var1).getChildElements().at(0).getAttribute(
"name");
203 StringUtil::replaceFirst(clasprop,
"this:",
"this->");
209 else if(elesc.at(var1).getTagName()==
"assignAdd" && elesc.at(var1).getAttribute(
"name")!=
"")
211 string clasprop = elesc.at(var1).getAttribute(
"name");
212 StringUtil::replaceFirst(clasprop,
"this:",
"this->");
213 if(elesc.at(var1).getAttribute(
"rhs")!=
"" && elesc.at(var1).getAttribute(
"lhs")!=
"")
215 codem += (clasprop +
" = " + elesc.at(var1).getAttribute(
"rhs") +
" + " + elesc.at(var1).getAttribute(
"lhs") +
";\n");
219 codem += (clasprop +
" = ");
220 ElementList elesce = elesc.at(var1).getChildElements();
221 for (
unsigned int var2 = 0; var2 < elesce.size(); var2++)
223 if(elesce.at(var2).getTagName()==
"value")
225 if(elesce.at(var2).getChildElements().size()==1)
227 if(elesce.at(var2).getChildElements().at(0).getTagName()==
"call")
229 codem += (elesce.at(var2).getChildElements().at(0).getAttribute(
"name"));
230 codem += (
"("+elesce.at(var2).getChildElements().at(0).getChildElements().at(0).getText()+
")");
235 if(vars[elesc.at(var1).getAttribute(
"name")]!=
"string")
236 codem += (elesce.at(var2).getText());
238 codem += (
"\"" + elesce.at(var2).getText() +
"\"");
241 else if(elesce.at(var2).getTagName()==
"var")
243 clasprop = elesce.at(var2).getAttribute(
"name");
244 StringUtil::replaceFirst(clasprop,
"this:",
"this->");
247 if(var2!=elesce.size()-1)
253 else if(elesc.at(var1).getTagName()==
"return")
255 string clasprop = elesc.at(var1).getAttribute(
"name");
256 StringUtil::replaceFirst(clasprop,
"this:",
"this->");
257 if(eles.at(var).getAttribute(
"return")==
"string" && elesc.at(var1).getText()!=
"")
258 codem +=
"return \""+elesc.at(var1).getText()+
"\";\n";
259 else if(clasprop!=
"")
260 codem +=
"return "+clasprop+
";\n";
261 else if(elesc.at(var1).getText()!=
"")
262 codem +=
"return "+elesc.at(var1).getText()+
";\n";
268 codeh += (
"private:\n"+pri+
"protected:\n"+pro+
"public:\n"+pub+
"};\n#endif");
269 path =
"/home/sumeet/workspace/inter/";
270 AfcUtil::writeTofile((path+root.getAttribute(
"name")+
".h"),codeh,
true);
271 AfcUtil::writeTofile((path+root.getAttribute(
"name")+
".cpp"),codem,
true);