26 |
26 |
27 #include <relpipe/cli/CLI.h> |
27 #include <relpipe/cli/CLI.h> |
28 |
28 |
29 #include "INICommand.h" |
29 #include "INICommand.h" |
30 #include "lib/INIReader.h" |
30 #include "lib/INIReader.h" |
31 #include "lib/BasicUnescapingINIHandler.h" |
31 #include "lib/BasicUnescapingProcessor.h" |
32 #include "lib/JavaPropertiesUnescapingINIHandler.h" |
32 #include "lib/BackspaceUnescapingProcessor.h" |
|
33 #include "lib/JavaPropertiesUnescapingProcessor.h" |
33 |
34 |
34 using namespace std; |
35 using namespace std; |
35 using namespace relpipe::writer; |
36 using namespace relpipe::writer; |
36 using namespace relpipe::in::ini::lib; |
37 using namespace relpipe::in::ini::lib; |
37 |
38 |
168 }; |
169 }; |
169 |
170 |
170 void INICommand::process(std::istream& input, std::shared_ptr<writer::RelationalWriter> writer, Configuration& configuration) { |
171 void INICommand::process(std::istream& input, std::shared_ptr<writer::RelationalWriter> writer, Configuration& configuration) { |
171 FlatINIContentHandler handler(writer, configuration); |
172 FlatINIContentHandler handler(writer, configuration); |
172 std::shared_ptr<INIReader> reader(INIReader::create(input)); |
173 std::shared_ptr<INIReader> reader(INIReader::create(input)); |
|
174 reader->addUnescapingProcessor(std::make_shared<BasicUnescapingProcessor>(), "unescape-basic", true); |
|
175 reader->addUnescapingProcessor(std::make_shared<JavaPropertiesUnescapingProcessor>(), "unescape-java-properties", false); |
|
176 reader->addUnescapingProcessor(std::make_shared<BackspaceUnescapingProcessor>(false), "unescape-backspace-disorder", false); |
|
177 reader->addUnescapingProcessor(std::make_shared<BackspaceUnescapingProcessor>(), "unescape-backspace", true); |
|
178 reader->addHandler(&handler); |
|
179 // TODO: smart pointers vs. references: are we going to call addUnescapingProcessor() dynamically/conditionally or share instances? Then pointers will be better. |
173 for (ParserOptionRecipe option : configuration.parserOptions) reader->setOption(convertor.to_bytes(option.uri), convertor.to_bytes(option.value)); |
180 for (ParserOptionRecipe option : configuration.parserOptions) reader->setOption(convertor.to_bytes(option.uri), convertor.to_bytes(option.value)); |
174 BasicUnescapingINIContentHandler unescapingHandler(handler, false); |
|
175 JavaPropertiesUnescapingINIContentHandler javaHandler(unescapingHandler, true); |
|
176 reader->addHandler(&javaHandler); |
|
177 reader->process(); |
181 reader->process(); |
178 |
182 |
179 } |
183 } |
180 |
184 |
181 } |
185 } |