--- a/src/XMLDocumentConstructor.h Sun Nov 29 10:49:33 2020 +0100
+++ b/src/XMLDocumentConstructor.h Mon Nov 30 00:12:16 2020 +0100
@@ -52,6 +52,13 @@
TreeStyle treeStyle = TreeStyle::Literal;
+ std::string rootName = "ini";
+ bool enableLineNumbers = true;
+ bool enableEventNumbers = true;
+ bool enableSubKeys = true;
+ bool enableComments = true;
+ bool enableWhitespace = true;
+
/**
* TODO: use a common method
*/
@@ -73,7 +80,7 @@
void startDocument() override {
if (currentSection) throw std::out_of_range("Lunatic INI parser send us multiple documents.");
- currentSection = domParser->get_document()->create_root_node("ini", treeWithNamespaces ? xml::XMLNS : "");
+ currentSection = domParser->get_document()->create_root_node(rootName, treeWithNamespaces ? xml::XMLNS : "");
};
void endDocument() override {
@@ -84,8 +91,8 @@
if (treeStyle == TreeStyle::Literal) currentSection->set_attribute("type", "section");
currentSection->set_attribute("name", event.name);
if (event.comment.size()) currentSection->set_attribute("comment", event.comment);
- if (event.lineNumber >= 0) currentSection->set_attribute("line-number", std::to_string(event.lineNumber));
- if (event.eventNumber >= 0) currentSection->set_attribute("event-number", std::to_string(event.eventNumber));
+ if (event.lineNumber >= 0 && enableLineNumbers) currentSection->set_attribute("line-number", std::to_string(event.lineNumber));
+ if (event.eventNumber >= 0 && enableEventNumbers) currentSection->set_attribute("event-number", std::to_string(event.eventNumber));
};
void endSection() override {
@@ -96,34 +103,40 @@
void entry(const EntryEvent& event) override {
xmlpp::Element* entry = currentSection->add_child(treeStyle == TreeStyle::Literal ? nameCodec.encode(event.fullKey) : "entry");
if (treeStyle == TreeStyle::Literal) entry->set_attribute("type", "entry");
- entry->set_attribute("key", event.key);
- entry->set_attribute("full-key", event.fullKey);
- if (event.subKey.size()) entry->set_attribute("sub-key", event.subKey);
+ entry->set_attribute("key", enableSubKeys ? event.key : event.fullKey);
+ if (enableSubKeys)entry->set_attribute("full-key", event.fullKey);
+ if (event.subKey.size() && enableSubKeys) entry->set_attribute("sub-key", event.subKey);
if (event.comment.size()) entry->set_attribute("comment", event.comment);
- if (event.lineNumber >= 0) entry->set_attribute("line-number", std::to_string(event.lineNumber));
- if (event.eventNumber >= 0) entry->set_attribute("event-number", std::to_string(event.eventNumber));
+ if (event.lineNumber >= 0 && enableLineNumbers) entry->set_attribute("line-number", std::to_string(event.lineNumber));
+ if (event.eventNumber >= 0 && enableEventNumbers) entry->set_attribute("event-number", std::to_string(event.eventNumber));
entry->add_child_text(event.value);
};
void comment(const CommentEvent& event) override {
xmlpp::Element* comment = currentSection->add_child("comment");
if (treeStyle == TreeStyle::Literal) comment->set_attribute("type", "comment");
- if (event.lineNumber >= 0) comment->set_attribute("line-number", std::to_string(event.lineNumber));
- if (event.eventNumber >= 0) comment->set_attribute("event-number", std::to_string(event.eventNumber));
+ if (event.lineNumber >= 0 && enableLineNumbers) comment->set_attribute("line-number", std::to_string(event.lineNumber));
+ if (event.eventNumber >= 0 && enableEventNumbers) comment->set_attribute("event-number", std::to_string(event.eventNumber));
comment->add_child_text(event.comment);
}
void whitespace(const WhitespaceEvent& event) override {
xmlpp::Element* whitespace = currentSection->add_child("whitespace");
if (treeStyle == TreeStyle::Literal) whitespace->set_attribute("type", "whitespace");
- if (event.lineNumber >= 0) whitespace->set_attribute("line-number", std::to_string(event.lineNumber));
- if (event.eventNumber >= 0) whitespace->set_attribute("event-number", std::to_string(event.eventNumber));
+ if (event.lineNumber >= 0 && enableLineNumbers) whitespace->set_attribute("line-number", std::to_string(event.lineNumber));
+ if (event.eventNumber >= 0 && enableEventNumbers) whitespace->set_attribute("event-number", std::to_string(event.eventNumber));
whitespace->add_child_text(event.whitespace);
}
bool setOption(const std::string& uri, const std::string& value) {
if (uri == xml::TreeWithNamespaces) treeWithNamespaces = parseBoolean(value);
else if (uri == xml::TreeStyle) treeStyle = parseTreeStyle(value);
+ else if (uri == xml::RootName) rootName = value;
+ else if (uri == xml::EnableWhitespace) enableWhitespace = parseBoolean(value);
+ else if (uri == xml::EnableComments) enableComments = parseBoolean(value);
+ else if (uri == xml::EnableSubKeys) enableSubKeys = parseBoolean(value);
+ else if (uri == xml::EnableLineNumbers) enableLineNumbers = parseBoolean(value);
+ else if (uri == xml::EnableEventNumbers) enableEventNumbers = parseBoolean(value);
else return false;
return true;
}