const std::string str;
};
+class ReplaceInclude : public Directive {
+ public:
+ ReplaceInclude(xmlNodePtr included_node);
+ ReplaceInclude(xmlDocPtr included_doc);
+ ~ReplaceInclude();
+ virtual void process(xmlNode *node, bool clean);
+
+ private:
+ xmlNodePtr included_node;
+ xmlDocPtr included_doc;
+};
+
+class Substitute;
+
class Clone : public Directive {
public:
Clone(const std::vector<Directive *> &subdirectives);
+ Clone(const std::vector<Substitute *> &subdirectives);
Clone(std::initializer_list<Directive *> subdirectives);
~Clone();
virtual void process(xmlNode *node, bool clean);
private:
- const std::vector<Directive *> subdirectives;
+ std::vector<Directive *> subdirectives;
};
class Substitute : public Directive {
virtual void process(xmlNode *node, bool clean);
private:
- const std::unordered_map<std::string, Directive*> substitution_map;
+ friend class Alternate;
+ std::unordered_map<std::string, Directive*> substitution_map;
+};
+
+class Alternate : public Clone {
+ public:
+ Alternate(const std::string &attribute,
+ const std::vector<Substitute *> &subdirectives_subs,
+ const std::vector<std::string> &alternatives);
};
-void process_file(const std::string &input_filename,
- const std::string &output_filename,
- Directive *root_directive);
+xmlDocPtr process_file(const std::string &input_filename,
+ Directive *root_directive,
+ bool clean = true);
+
+void output_to_fd_and_free(xmlDocPtr doc, int fd);
#endif // !defined(_XML_TEMPLATE_H)