src/XMLDocumentConstructor.h
branchv_0
changeset 30 f686bdaeb9e0
parent 29 06aaad12c207
child 31 c6527b45fbc2
--- a/src/XMLDocumentConstructor.h	Sat Nov 28 21:09:18 2020 +0100
+++ b/src/XMLDocumentConstructor.h	Sun Nov 29 00:30:36 2020 +0100
@@ -106,22 +106,24 @@
 private:
 	std::istream* input = nullptr;
 	xmlpp::DomParser* parser = nullptr;
+	std::shared_ptr<INIReader> reader;
 public:
 
 	XMLDocumentConstructor(std::istream* input, xmlpp::DomParser* parser) : input(input), parser(parser) {
+		reader.reset(INIReader::create(*input));
+		reader->addUnescapingProcessor(std::make_shared<BasicUnescapingProcessor>(), unescaping::Basic, true);
+		reader->addUnescapingProcessor(std::make_shared<JavaPropertiesUnescapingProcessor>(), unescaping::JavaProperties, false);
+		reader->addUnescapingProcessor(std::make_shared<BackspaceUnescapingProcessor>(), unescaping::Backspace, true);
+		reader->addDialect(std::make_shared<JavaPropertiesDialect>(), dialect::JavaProperties, false);
+	}
+
+	void setOption(const std::string& uri, const std::string& value) {
+		reader->setOption(uri, value);
 	}
 
 	void process() {
 		HierarchicalINIContentHandler handler(parser);
-		std::shared_ptr<INIReader> reader(INIReader::create(*input));
-		reader->addUnescapingProcessor(std::make_shared<BasicUnescapingProcessor>(), unescaping::Basic, true);
-		reader->addUnescapingProcessor(std::make_shared<JavaPropertiesUnescapingProcessor>(), unescaping::JavaProperties, false);
-		reader->addUnescapingProcessor(std::make_shared<BackspaceUnescapingProcessor>(), unescaping::Backspace, true);
-		reader->addDialect(std::make_shared<JavaPropertiesDialect>(), dialect::JavaProperties, false);
 		reader->addHandler(&handler);
-		// TODO: smart pointers vs. references: are we going to call addUnescapingProcessor() dynamically/conditionally or share instances? Then pointers will be better.
-		// TODO: call setOption() according to the configuration
-		// for (ParserOptionRecipe option : configuration.parserOptions) reader->setOption(convertor.to_bytes(option.uri), convertor.to_bytes(option.value));
 		reader->process();
 	}
 };