1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-03-29 03:36:40 +00:00

Merge pull request #2743 from Capostrophic/formatting

Improve blank line handling in settings writer (bug #5326)
This commit is contained in:
Andrei Kortunov 2020-03-27 09:01:19 +04:00 committed by GitHub
commit 79e7155f50
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 11 deletions

View file

@ -207,6 +207,7 @@
Bug #5300: NPCs don't switch from torch to shield when starting combat Bug #5300: NPCs don't switch from torch to shield when starting combat
Bug #5308: World map copying makes save loading much slower Bug #5308: World map copying makes save loading much slower
Bug #5313: Node properties of identical type are not applied in the correct order Bug #5313: Node properties of identical type are not applied in the correct order
Bug #5326: Formatting issues in the settings.cfg
Bug #5328: Skills aren't properly reset for dead actors Bug #5328: Skills aren't properly reset for dead actors
Feature #1774: Handle AvoidNode Feature #1774: Handle AvoidNode
Feature #2229: Improve pathfinding AI Feature #2229: Improve pathfinding AI

View file

@ -77,6 +77,9 @@ void Settings::SettingsFileParser::saveSettingsFile(const std::string& file, con
// Were there any lines at all in the file? // Were there any lines at all in the file?
bool existing = false; bool existing = false;
// Is an entirely blank line queued to be added?
bool emptyLineQueued = false;
// The category/section we're currently in. // The category/section we're currently in.
std::string currentCategory; std::string currentCategory;
@ -103,9 +106,19 @@ void Settings::SettingsFileParser::saveSettingsFile(const std::string& file, con
// Don't add additional newlines at the end of the file. // Don't add additional newlines at the end of the file.
if (istream.eof()) continue; if (istream.eof()) continue;
// Copy entirely blank lines. // An empty line was queued.
if (!skipWhiteSpace(i, line)) { if (emptyLineQueued)
ostream << line << std::endl; {
emptyLineQueued = false;
// We're still going through the current category, so we should copy it.
if (currentCategory.empty() || line[i] != '[')
ostream << std::endl;
}
// Queue entirely blank lines to add them if desired.
if (!skipWhiteSpace(i, line))
{
emptyLineQueued = true;
continue; continue;
} }
@ -128,15 +141,22 @@ void Settings::SettingsFileParser::saveSettingsFile(const std::string& file, con
continue; continue;
} }
// Ensure that all options in the current category have been written. if (!currentCategory.empty())
for (CategorySettingStatusMap::iterator mit = written.begin(); mit != written.end(); ++mit) { {
if (mit->second == false && mit->first.first == currentCategory) { // Ensure that all options in the current category have been written.
Log(Debug::Verbose) << "Added new setting: [" << currentCategory << "] " for (CategorySettingStatusMap::iterator mit = written.begin(); mit != written.end(); ++mit)
<< mit->first.second << " = " << settings.at(mit->first); {
ostream << mit->first.second << " = " << settings.at(mit->first) << std::endl; if (mit->second == false && mit->first.first == currentCategory)
mit->second = true; {
changed = true; Log(Debug::Verbose) << "Added new setting: [" << currentCategory << "] "
<< mit->first.second << " = " << settings.at(mit->first);
ostream << mit->first.second << " = " << settings.at(mit->first) << std::endl;
mit->second = true;
changed = true;
}
} }
// Add an empty line after the last option in a category.
ostream << std::endl;
} }
// Update the current category. // Update the current category.