diff -r fd669e73d39a -r 0e7c57d48d1e src/XMLDocumentConstructor.h --- a/src/XMLDocumentConstructor.h Thu Nov 26 11:42:26 2020 +0100 +++ b/src/XMLDocumentConstructor.h Sat Nov 28 18:14:15 2020 +0100 @@ -20,8 +20,9 @@ #include #include "lib/INIReader.h" -#include "lib/BasicUnescapingINIHandler.h" -#include "lib/JavaPropertiesUnescapingINIHandler.h" +#include "lib/BasicUnescapingProcessor.h" +#include "lib/BackspaceUnescapingProcessor.h" +#include "lib/JavaPropertiesUnescapingProcessor.h" #include "lib/XMLNameCodec.h" using namespace relpipe::in::ini::lib; @@ -111,9 +112,14 @@ void process() { HierarchicalINIContentHandler handler(parser); std::shared_ptr reader(INIReader::create(*input)); - BasicUnescapingINIContentHandler unescapingHandler(handler, false); - JavaPropertiesUnescapingINIContentHandler javaHandler(handler, true); - reader->addHandler(&javaHandler); + 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. + // 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(); } };