If a removed 'content=' item has comments, keep them in config file for later use.

c++11
cc9cii 10 years ago
parent c22c9c271d
commit 36aa4aa9bd

@ -195,6 +195,9 @@ bool Config::GameSettings::isOrderedLine(const QString& line) const
// //
// - If there is no corresponding line in file, add at the end // - If there is no corresponding line in file, add at the end
// //
// - Removed content items are saved as comments if the item had any comments.
// Content items prepended with '##' are considered previously removed.
//
bool Config::GameSettings::writeFileWithComments(QFile &file) bool Config::GameSettings::writeFileWithComments(QFile &file)
{ {
QTextStream stream(&file); QTextStream stream(&file);
@ -227,7 +230,8 @@ bool Config::GameSettings::writeFileWithComments(QFile &file)
// v | | // v | |
// blank or comment line, save in temp buffer <--------+ | // blank or comment line, save in temp buffer <--------+ |
// | | | | // | | | |
// v +------- comment line ------+ | // | +------- comment line ------+ |
// v (special processing '##') |
// "ordered" line | // "ordered" line |
// | | // | |
// v | // v |
@ -263,7 +267,20 @@ bool Config::GameSettings::writeFileWithComments(QFile &file)
// comment line, save in temp buffer // comment line, save in temp buffer
if (comments.empty()) if (comments.empty())
commentStart = iter; commentStart = iter;
// special removed content processing
if ((*iter).contains(QRegExp("^##content\\s*=")))
{
if (!comments.empty())
{
commentsMap[*iter] = comments;
comments.clear();
commentStart = fileCopy.end();
}
}
else
comments.push_back(*iter); comments.push_back(*iter);
*iter = QString(); // assume to be deleted later *iter = QString(); // assume to be deleted later
} }
else else
@ -359,17 +376,43 @@ bool Config::GameSettings::writeFileWithComments(QFile &file)
std::map<QString, std::vector<QString> >::const_iterator i = std::map<QString, std::vector<QString> >::const_iterator i =
commentsMap.find(settingRegex.cap(1)+"="+settingRegex.cap(2)); commentsMap.find(settingRegex.cap(1)+"="+settingRegex.cap(2));
// check if previous removed content item with comments
if (i == commentsMap.end())
i = commentsMap.find("##"+settingRegex.cap(1)+"="+settingRegex.cap(2));
if (i != commentsMap.end()) if (i != commentsMap.end())
{ {
std::vector<QString> cLines = i->second; std::vector<QString> cLines = i->second;
for (std::vector<QString>::const_iterator ci = cLines.begin(); ci != cLines.end(); ++ci) for (std::vector<QString>::const_iterator ci = cLines.begin(); ci != cLines.end(); ++ci)
stream << *ci << "\n"; stream << *ci << "\n";
commentsMap.erase(i);
} }
} }
stream << settingLine << "\n"; stream << settingLine << "\n";
} }
// flush any removed settings
if (!commentsMap.empty())
{
std::map<QString, std::vector<QString> >::const_iterator i = commentsMap.begin();
for (; i != commentsMap.end(); ++i)
{
if (i->first.contains(QRegExp("^\\s*content\\s*=")))
{
std::vector<QString> cLines = i->second;
for (std::vector<QString>::const_iterator ci = cLines.begin(); ci != cLines.end(); ++ci)
stream << *ci << "\n";
// mark the content line entry for future preocessing
stream << "##" << i->first << "\n";
//commentsMap.erase(i);
}
}
}
// flush any end comments // flush any end comments
if (!comments.empty()) if (!comments.empty())
{ {

Loading…
Cancel
Save