X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=c%2B%2B0x%2Fxml-template.h;h=35671869868cb35d662250b9c0a5546df6373f5b;hb=ad45bc892752571fec46b21564e4683c074f1d46;hp=8f3d69b19257e3ae85e0d4f57163b39597277c30;hpb=34c73f84835f00b960b1bde0aca69588230791a4;p=xml-template diff --git a/c++0x/xml-template.h b/c++0x/xml-template.h index 8f3d69b..3567186 100644 --- a/c++0x/xml-template.h +++ b/c++0x/xml-template.h @@ -12,26 +12,31 @@ class Directive { public: virtual ~Directive(); virtual void process(xmlNode *node, bool clean) = 0; + virtual std::string get_contents(); // Only makes sense for Replace. }; class Replace : public Directive { public: Replace(const std::string &str); virtual void process(xmlNode *node, bool clean); + virtual std::string get_contents(); private: const std::string str; }; +class Substitute; + class Clone : public Directive { public: Clone(const std::vector &subdirectives); + Clone(const std::vector &subdirectives); Clone(std::initializer_list subdirectives); ~Clone(); virtual void process(xmlNode *node, bool clean); private: - const std::vector subdirectives; + std::vector subdirectives; }; class Substitute : public Directive { @@ -43,11 +48,20 @@ class Substitute : public Directive { virtual void process(xmlNode *node, bool clean); private: - const std::unordered_map substitution_map; + friend class Alternate; + std::unordered_map substitution_map; +}; + +class Alternate : public Clone { + public: + Alternate(const std::string &attribute, + const std::vector &subdirectives_subs, + const std::vector &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); + +void output_to_fd_and_free(xmlDocPtr doc, int fd); #endif // !defined(_XML_TEMPLATE_H)