diff -r b1f6fa3a6555 -r e9aad9dd823a src/INICommand.cpp --- 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, Configuration& configuration) { FlatINIContentHandler handler(writer, configuration); std::shared_ptr reader(INIReader::create(input)); + reader->addUnescapingProcessor(std::make_shared(), "unescape-basic", true); + reader->addUnescapingProcessor(std::make_shared(), "unescape-java-properties", false); + reader->addUnescapingProcessor(std::make_shared(false), "unescape-backspace-disorder", false); + reader->addUnescapingProcessor(std::make_shared(), "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(); }