1 #ifndef _XML_TEMPLATE_H
2 #define _XML_TEMPLATE_H 1
4 #include <libxml/tree.h>
8 #include <unordered_map>
14 virtual void process(xmlNode *node, bool clean) = 0;
17 class Replace : public Directive {
19 Replace(const std::string &str);
20 virtual void process(xmlNode *node, bool clean);
23 const std::string str;
26 class Clone : public Directive {
28 Clone(const std::vector<Directive *> &subdirectives);
29 Clone(std::initializer_list<Directive *> subdirectives);
31 virtual void process(xmlNode *node, bool clean);
34 const std::vector<Directive *> subdirectives;
37 class Substitute : public Directive {
39 Substitute(const std::unordered_map<std::string, Directive*> &substitution_map);
40 Substitute(std::initializer_list<std::pair<const std::string, Directive*>> substitution_map);
43 virtual void process(xmlNode *node, bool clean);
46 const std::unordered_map<std::string, Directive*> substitution_map;
49 void process_file(const std::string &input_filename,
50 const std::string &output_filename,
51 Directive *root_directive);
53 #endif // !defined(_XML_TEMPLATE_H)