]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/utils/wxrcedit/xmlhelpr.cpp
[ 1176516 ] argv datatype has changed (char in docs but really wxChar)
[wxWidgets.git] / contrib / utils / wxrcedit / xmlhelpr.cpp
index c5a56f854e3da328dc18f390b8b23c69e513ddad..a8fa0886af253da04529c30efcc6ca48a776df9a 100644 (file)
@@ -29,7 +29,7 @@ wxXmlNode *XmlFindNodeSimple(wxXmlNode *parent, const wxString& param)
     if (param.IsEmpty()) return parent;
 
     wxXmlNode *n = parent->GetChildren();
-    
+
     while (n)
     {
         if (n->GetType() == wxXML_ELEMENT_NODE && n->GetName() == param)
@@ -55,25 +55,42 @@ wxXmlNode *XmlFindNode(wxXmlNode *parent, const wxString& path)
 
 
 
-void XmlWriteValue(wxXmlNode *parent, const wxString& name, const wxString& value)
+wxXmlNode *XmlCreateNode(wxXmlNode *parent, const wxString& name)
 {
-    wxXmlNode *n = XmlFindNode(parent, name);
-    if (n == NULL) 
+    wxXmlNode *n;
+    wxString nm;
+
+    wxStringTokenizer tkn(name, _T("/"));
+    n = parent;
+    while (tkn.HasMoreTokens())
     {
-        wxString pname = name.BeforeLast(_T('/'));
-        if (pname.IsEmpty()) pname = name;
-        wxXmlNode *p = XmlFindNode(parent, pname);
-        if (p == NULL) p = parent;
-        n = new wxXmlNode(wxXML_ELEMENT_NODE, name.AfterLast(_T('/')));
-        p->AddChild(n);
-        n->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString));
+        parent = n;
+        nm = tkn.GetNextToken();
+        n = XmlFindNodeSimple(parent, nm);
+        if (n) continue;
+
+        // n == NULL:
+        n = new wxXmlNode(wxXML_ELEMENT_NODE, nm);
+        parent->AddChild(n);
     }
-    
+    n->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString));
+
+    return n;
+}
+
+
+
+void XmlWriteValue(wxXmlNode *parent, const wxString& name, const wxString& value)
+{
+    wxXmlNode *n = XmlFindNode(parent, name);
+    if (n == NULL)
+        n = XmlCreateNode(parent, name);
+
     n = n->GetChildren();
-    
+
     while (n)
     {
-        if (n->GetType() == wxXML_TEXT_NODE || 
+        if (n->GetType() == wxXML_TEXT_NODE ||
             n->GetType() == wxXML_CDATA_SECTION_NODE)
         {
             n->SetContent(value);
@@ -90,10 +107,10 @@ wxString XmlReadValue(wxXmlNode *parent, const wxString& name)
     wxXmlNode *n = XmlFindNode(parent, name);
     if (n == NULL) return wxEmptyString;
     n = n->GetChildren();
-    
+
     while (n)
     {
-        if (n->GetType() == wxXML_TEXT_NODE || 
+        if (n->GetType() == wxXML_TEXT_NODE ||
             n->GetType() == wxXML_CDATA_SECTION_NODE)
             return n->GetContent();
         n = n->GetNext();