src/INICommand.cpp
branchv_0
changeset 27 e9aad9dd823a
parent 23 b497140b0b63
child 28 596a724fbb83
--- a/src/INICommand.cpp	Sat Nov 28 00:46:40 2020 +0100
+++ b/src/INICommand.cpp	Sat Nov 28 18:10:47 2020 +0100
@@ -28,8 +28,9 @@
 
 #include "INICommand.h"
 #include "lib/INIReader.h"
-#include "lib/BasicUnescapingINIHandler.h"
-#include "lib/JavaPropertiesUnescapingINIHandler.h"
+#include "lib/BasicUnescapingProcessor.h"
+#include "lib/BackspaceUnescapingProcessor.h"
+#include "lib/JavaPropertiesUnescapingProcessor.h"
 
 using namespace std;
 using namespace relpipe::writer;
@@ -170,10 +171,13 @@
 void INICommand::process(std::istream& input, std::shared_ptr<writer::RelationalWriter> writer, Configuration& configuration) {
 	FlatINIContentHandler handler(writer, configuration);
 	std::shared_ptr<INIReader> reader(INIReader::create(input));
+	reader->addUnescapingProcessor(std::make_shared<BasicUnescapingProcessor>(), "unescape-basic", true);
+	reader->addUnescapingProcessor(std::make_shared<JavaPropertiesUnescapingProcessor>(), "unescape-java-properties", false);
+	reader->addUnescapingProcessor(std::make_shared<BackspaceUnescapingProcessor>(false), "unescape-backspace-disorder", false);
+	reader->addUnescapingProcessor(std::make_shared<BackspaceUnescapingProcessor>(), "unescape-backspace", true);
+	reader->addHandler(&handler);
+	// TODO: smart pointers vs. references: are we going to call addUnescapingProcessor() dynamically/conditionally or share instances? Then pointers will be better.
 	for (ParserOptionRecipe option : configuration.parserOptions) reader->setOption(convertor.to_bytes(option.uri), convertor.to_bytes(option.value));
-	BasicUnescapingINIContentHandler unescapingHandler(handler, false);
-	JavaPropertiesUnescapingINIContentHandler javaHandler(unescapingHandler, true);
-	reader->addHandler(&javaHandler);
 	reader->process();
 
 }