--- a/src/lib/INIReader.cpp Fri Nov 27 16:29:12 2020 +0100
+++ b/src/lib/INIReader.cpp Fri Nov 27 16:42:55 2020 +0100
@@ -42,6 +42,14 @@
*/
bool trimLeadingSpacesOnContinuingLines = true;
+
+ /**
+ * Some dialects or configuration files in general does not support sections.
+ * Then a line, that looks like an INI section, should be interpreted as a key
+ * (or error, if does not have a proper key-value separator).
+ */
+ bool allowSections = true;
+
/**
* KDE uses some weird INI dialect that allows [section][x] syntax where „x“ is kind of „tag“ that signalizes some properties of given section.
* Line „[section_1][$i]“ means that the „section_1“ is „locked“.
@@ -239,12 +247,12 @@
// already set
} else if (name == "java-properties") {
trimLeadingSpacesOnContinuingLines = true;
+ allowSections = false;
allowSectionTags = false;
allowSubKeys = false;
commentSeparators = "#";
keyValueSeparators = "=:";
quotes = "";
- // TODO: allowSections = false;
// TODO: enable unicode unescaping
} else {
throw std::invalid_argument(std::string("Unsupported INI dialect: ") + name);
@@ -258,7 +266,7 @@
void setOption(const std::string& uri, const std::string& value) override {
if (uri == "trim-continuing-lines") trimLeadingSpacesOnContinuingLines = parseBoolean(value); // TODO: continuing lines modes (enum), not just boolean
- // TODO: else if (uri == "allow-sections") allowSections = parseBoolean(value);
+ else if (uri == "allow-sections") allowSections = parseBoolean(value);
else if (uri == "allow-section-tags") allowSectionTags = parseBoolean(value);
else if (uri == "allow-sub-keys") allowSubKeys = parseBoolean(value);
else if (uri == "comment-separators") commentSeparators = value;
@@ -296,7 +304,7 @@
if (ch == std::istream::traits_type::eof()) {
break;
- } else if (ch == '[') {
+ } else if (ch == '[' && allowSections) {
if (inSection) for (INIContentHandler* handler : handlers) handler->endSection();
inSection = true;
INIContentHandler::SectionStartEvent event;
@@ -305,6 +313,7 @@
get();
readAllWhitespace();
event.name = readTokenAndEatTerminator(']', "e, &found);
+ // TODO: if (!quote) event.name = trim(event.name);
readSpacesAndTabs();
if (allowSectionTags && peek() == '[') {