Switch to side-by-side view

--- a/src/conftree.h
+++ b/src/conftree.h
@@ -74,11 +74,12 @@
 /** Internal class used for storing presentation information */
 class ConfLine {
 public:
-    enum Kind {CFL_COMMENT, CFL_SK, CFL_VAR};
+    enum Kind {CFL_COMMENT, CFL_SK, CFL_VAR, CFL_VARCOMMENT};
     Kind m_kind;
     string m_data;
-    ConfLine(Kind k, const string& d)
-        : m_kind(k), m_data(d) {
+    string m_aux;
+    ConfLine(Kind k, const string& d, string a = string())
+        : m_kind(k), m_data(d), m_aux(a) {
     }
     bool operator==(const ConfLine& o) {
         return o.m_kind == m_kind && o.m_data == m_data;
@@ -239,10 +240,14 @@
     virtual vector<string> getSubKeys(bool) const {
         return getSubKeys();
     }
+    virtual vector<string> getSubKeys() const;
+    
+    /** Return subkeys in file order. BEWARE: only for the original from the 
+     * file: the data is not duplicated to further copies */
     virtual vector<string> getSubKeys_unsorted(bool = false) const {
         return m_subkeys_unsorted;
     }
-    virtual vector<string> getSubKeys() const;
+
     /** Test for subkey existence */
     virtual bool hasSubKey(const string& sk) const {
         return m_submaps.find(sk) != m_submaps.end();
@@ -252,6 +257,13 @@
         return m_filename;
     }
 
+    /** Used with config files with specially formatted, xml-like comments.
+     * Extract the comments as text */
+    virtual bool commentsAsXML(ostream& out);
+
+    /** !! Note that assignment and copy constructor do not copy the
+        auxiliary data (m_order and subkeys_unsorted). */
+    
     /**
      * Copy constructor. Expensive but less so than a full rebuild
      */
@@ -352,6 +364,7 @@
      * @return 0 if name not found, 1 else
      */
     virtual int get(const string& name, string& value, const string& sk) const;
+    using ConfSimple::get;
 };
 
 /**