]> git.sesse.net Git - xml-template/blobdiff - c++0x/xml-template.h
Tweak C++0x API a bit, to prepare for include. Also, output to stdout instead of...
[xml-template] / c++0x / xml-template.h
index eb132110e8f80604caea2ee12723bce71be26b08..35671869868cb35d662250b9c0a5546df6373f5b 100644 (file)
 
 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<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 {
  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;
+       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);
+       
+void output_to_fd_and_free(xmlDocPtr doc, int fd);
 
 #endif  // !defined(_XML_TEMPLATE_H)