void Generator::Generate(const std::string& aInPath, const std::string& aOutPath) { std::ifstream infile(aInPath, std::ios::binary); std::string content; infile.seekg(0, std::ios::end); content.resize(infile.tellg()); infile.seekg(0, std::ios::beg); infile.read(&content[0], content.size()); infile.close(); size_t pos = 0; std::string search, replace; search = "\r\n"; replace = "\n"; while ((pos = content.find(search, pos)) != std::string::npos) { content.replace(pos, search.length(), replace); pos += replace.length(); } std::string cppContent(""); std::ifstream cppfile(aOutPath, std::ios::binary); if (cppfile.is_open() && cppfile.good()) { cppfile.seekg(0, std::ios::end); cppContent.resize(cppfile.tellg()); cppfile.seekg(0, std::ios::beg); cppfile.read(&cppContent[0], cppContent.size()); } cppfile.close(); // for now just copy the content. GenerateCPP(content, cppContent); std::ofstream outfile(aOutPath, std::ios::binary); outfile.write((const char*)&cppContent[0], cppContent.size()); outfile.close(); }
void PluginGeneratorGUI::save( const QString& filepath,const bool generatecpp) { MLXMLTree tree; collectInfo(tree); if (generatecpp) { QDir dir(finfo.absolutePath()); QString cppcode = MLXMLUtilityFunctions::generateCPP(finfo.baseName(),tree); QFileInfo cppinfo(finfo.absolutePath() + "/" +finfo.baseName() + ".cpp"); QString cppoldfilename = UsefulGUIFunctions::generateBackupName(cppinfo); dir.rename(cppinfo.fileName(),cppoldfilename); QFile cppfile(cppinfo.absoluteFilePath()); if (!cppfile.open(QIODevice::WriteOnly | QIODevice::Text)) return; QTextStream outcpp(&cppfile); outcpp << cppcode; cppfile.close(); QString hcode = MLXMLUtilityFunctions::generateH(finfo.baseName(),tree); QFileInfo hinfo(finfo.absolutePath() + "/" +finfo.baseName() + ".h"); QString holdfilename = UsefulGUIFunctions::generateBackupName(hinfo); dir.rename(hinfo.fileName(),holdfilename); QFile hfile(hinfo.absoluteFilePath()); if (!hfile.open(QIODevice::WriteOnly | QIODevice::Text)) return; QTextStream outh(&hfile); outh << hcode; hfile.close(); } QString xml = generateXML(tree); //QDomDocument has been introduced only in order to indent the xml code QDomDocument doc; doc.setContent(xml,false); xml = doc.toString(); QFile file(filepath); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return; QTextStream out(&file); out << xml; file.close(); finfo.setFile(filepath); }