src/XMLDocumentConstructor.h
branchv_0
changeset 30 f686bdaeb9e0
parent 29 06aaad12c207
child 31 c6527b45fbc2
equal deleted inserted replaced
29:06aaad12c207 30:f686bdaeb9e0
   104 
   104 
   105 class XMLDocumentConstructor {
   105 class XMLDocumentConstructor {
   106 private:
   106 private:
   107 	std::istream* input = nullptr;
   107 	std::istream* input = nullptr;
   108 	xmlpp::DomParser* parser = nullptr;
   108 	xmlpp::DomParser* parser = nullptr;
       
   109 	std::shared_ptr<INIReader> reader;
   109 public:
   110 public:
   110 
   111 
   111 	XMLDocumentConstructor(std::istream* input, xmlpp::DomParser* parser) : input(input), parser(parser) {
   112 	XMLDocumentConstructor(std::istream* input, xmlpp::DomParser* parser) : input(input), parser(parser) {
       
   113 		reader.reset(INIReader::create(*input));
       
   114 		reader->addUnescapingProcessor(std::make_shared<BasicUnescapingProcessor>(), unescaping::Basic, true);
       
   115 		reader->addUnescapingProcessor(std::make_shared<JavaPropertiesUnescapingProcessor>(), unescaping::JavaProperties, false);
       
   116 		reader->addUnescapingProcessor(std::make_shared<BackspaceUnescapingProcessor>(), unescaping::Backspace, true);
       
   117 		reader->addDialect(std::make_shared<JavaPropertiesDialect>(), dialect::JavaProperties, false);
       
   118 	}
       
   119 
       
   120 	void setOption(const std::string& uri, const std::string& value) {
       
   121 		reader->setOption(uri, value);
   112 	}
   122 	}
   113 
   123 
   114 	void process() {
   124 	void process() {
   115 		HierarchicalINIContentHandler handler(parser);
   125 		HierarchicalINIContentHandler handler(parser);
   116 		std::shared_ptr<INIReader> reader(INIReader::create(*input));
       
   117 		reader->addUnescapingProcessor(std::make_shared<BasicUnescapingProcessor>(), unescaping::Basic, true);
       
   118 		reader->addUnescapingProcessor(std::make_shared<JavaPropertiesUnescapingProcessor>(), unescaping::JavaProperties, false);
       
   119 		reader->addUnescapingProcessor(std::make_shared<BackspaceUnescapingProcessor>(), unescaping::Backspace, true);
       
   120 		reader->addDialect(std::make_shared<JavaPropertiesDialect>(), dialect::JavaProperties, false);
       
   121 		reader->addHandler(&handler);
   126 		reader->addHandler(&handler);
   122 		// TODO: smart pointers vs. references: are we going to call addUnescapingProcessor() dynamically/conditionally or share instances? Then pointers will be better.
       
   123 		// TODO: call setOption() according to the configuration
       
   124 		// for (ParserOptionRecipe option : configuration.parserOptions) reader->setOption(convertor.to_bytes(option.uri), convertor.to_bytes(option.value));
       
   125 		reader->process();
   127 		reader->process();
   126 	}
   128 	}
   127 };
   129 };
   128 
   130 
   129 }
   131 }