#include <string>
#include <utility>
#include <unordered_map>
+#include <vector>
class Directive {
public:
+ virtual ~Directive();
virtual void process(xmlNode *node, bool clean) = 0;
};
const std::string str;
};
+class Clone : public Directive {
+ public:
+ Clone(const std::vector<Directive *> &subdirectives);
+ Clone(std::initializer_list<Directive *> subdirectives);
+ ~Clone();
+ virtual void process(xmlNode *node, bool clean);
+
+ private:
+ const std::vector<Directive *> subdirectives;
+};
+
class Substitute : public Directive {
public:
Substitute(const std::unordered_map<std::string, Directive*> &substitution_map);
+ Substitute(std::initializer_list<std::pair<const std::string, Directive*>> substitution_map);
+ ~Substitute();
virtual void process(xmlNode *node, bool clean);
private:
- const std::unordered_map<std::string, Directive*> &substitution_map;
+ const std::unordered_map<std::string, Directive*> substitution_map;
};
+void process_file(const std::string &input_filename,
+ const std::string &output_filename,
+ Directive *root_directive);
+
#endif // !defined(_XML_TEMPLATE_H)