Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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);
}