]> git.saurik.com Git - wxWidgets.git/blob - contrib/utils/wxrcedit/xmlhelpr.cpp
c5a56f854e3da328dc18f390b8b23c69e513ddad
[wxWidgets.git] / contrib / utils / wxrcedit / xmlhelpr.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Author: Vaclav Slavik
3 // Created: 2000/05/05
4 // RCS-ID: $Id$
5 // Copyright: (c) 2000 Vaclav Slavik
6 // Licence: wxWindows licence
7 /////////////////////////////////////////////////////////////////////////////
8
9 #ifdef __GNUG__
10 #pragma implementation "xmlhelpr.h"
11 #endif
12
13 // For compilers that support precompilation, includes "wx/wx.h".
14 #include "wx/wxprec.h"
15
16 #ifdef __BORLANDC__
17 #pragma hdrstop
18 #endif
19
20 #include "wx/xml/xml.h"
21 #include "wx/wx.h"
22 #include "wx/tokenzr.h"
23 #include "xmlhelpr.h"
24
25
26
27 wxXmlNode *XmlFindNodeSimple(wxXmlNode *parent, const wxString& param)
28 {
29 if (param.IsEmpty()) return parent;
30
31 wxXmlNode *n = parent->GetChildren();
32
33 while (n)
34 {
35 if (n->GetType() == wxXML_ELEMENT_NODE && n->GetName() == param)
36 return n;
37 n = n->GetNext();
38 }
39 return NULL;
40 }
41
42
43
44 wxXmlNode *XmlFindNode(wxXmlNode *parent, const wxString& path)
45 {
46 wxXmlNode *n = parent;
47 wxStringTokenizer tkn(path, _T("/"));
48 while (tkn.HasMoreTokens())
49 {
50 n = XmlFindNodeSimple(n, tkn.GetNextToken());
51 if (n == NULL) break;
52 }
53 return n;
54 }
55
56
57
58 void XmlWriteValue(wxXmlNode *parent, const wxString& name, const wxString& value)
59 {
60 wxXmlNode *n = XmlFindNode(parent, name);
61 if (n == NULL)
62 {
63 wxString pname = name.BeforeLast(_T('/'));
64 if (pname.IsEmpty()) pname = name;
65 wxXmlNode *p = XmlFindNode(parent, pname);
66 if (p == NULL) p = parent;
67 n = new wxXmlNode(wxXML_ELEMENT_NODE, name.AfterLast(_T('/')));
68 p->AddChild(n);
69 n->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString));
70 }
71
72 n = n->GetChildren();
73
74 while (n)
75 {
76 if (n->GetType() == wxXML_TEXT_NODE ||
77 n->GetType() == wxXML_CDATA_SECTION_NODE)
78 {
79 n->SetContent(value);
80 break;
81 }
82 n = n->GetNext();
83 }
84 }
85
86
87
88 wxString XmlReadValue(wxXmlNode *parent, const wxString& name)
89 {
90 wxXmlNode *n = XmlFindNode(parent, name);
91 if (n == NULL) return wxEmptyString;
92 n = n->GetChildren();
93
94 while (n)
95 {
96 if (n->GetType() == wxXML_TEXT_NODE ||
97 n->GetType() == wxXML_CDATA_SECTION_NODE)
98 return n->GetContent();
99 n = n->GetNext();
100 }
101 return wxEmptyString;
102 }
103
104
105
106 wxString XmlGetClass(wxXmlNode *parent)
107 {
108 return parent->GetPropVal(_T("class"), wxEmptyString);
109 }
110
111
112
113 void XmlSetClass(wxXmlNode *parent, const wxString& classname)
114 {
115 parent->DeleteProperty(_T("class"));
116 parent->AddProperty(_T("class"), classname);
117 }
118
119
120
121
122