]>
git.saurik.com Git - wxWidgets.git/blob - src/common/config.cpp
1 ///////////////////////////////////////////////////////////////////////////////
3 // Purpose: implementation of wxConfig class
4 // Author: Vadim Zeitlin
8 // Copyright: (c) 1997 Karsten Ballüder Ballueder@usa.net
9 // Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
10 // Licence: wxWindows license
11 ///////////////////////////////////////////////////////////////////////////////
13 // ============================================================================
15 // ============================================================================
17 #pragma implementation "app.h"
20 #include "wx/wxprec.h"
26 #include <wx/string.h>
30 #include <wx/textfile.h>
31 #include <wx/config.h>
36 // ============================================================================
38 // ============================================================================
40 // ----------------------------------------------------------------------------
42 // ----------------------------------------------------------------------------
47 // ----------------------------------------------------------------------------
48 // static & global functions
49 // ----------------------------------------------------------------------------
51 // understands both Unix and Windows (but only under Windows) environment
52 // variables expansion: i.e. $var, $(var) and ${var} are always understood
53 // and in addition under Windows %var% is also.
54 wxString
ExpandEnvVars(const wxString
& str
)
58 // don't change the values the enum elements: they must be equal
59 // to the matching [closing] delimiter.
66 Bracket_Windows
= '%' // yeah, Windows people are a bit strange ;-)
71 for ( uint n
= 0; n
< str
.Len(); n
++ ) {
81 bracket
= Bracket_Windows
;
84 if ( n
== str
.Len() - 1 ) {
85 bracket
= Bracket_None
;
88 switch ( str
[n
+ 1] ) {
90 bracket
= Bracket_Normal
;
91 n
++; // skip the bracket
95 bracket
= Bracket_Curly
;
96 n
++; // skip the bracket
100 bracket
= Bracket_None
;
106 while ( m
< str
.Len() && (isalnum(str
[m
]) || str
[m
] == '_') )
109 wxString
strVarName(str
.c_str() + n
+ 1, m
- n
- 1);
111 const char *pszValue
= getenv(strVarName
);
112 if ( pszValue
!= NULL
) {
113 strResult
+= pszValue
;
116 // variable doesn't exist => don't change anything
118 if ( bracket
!= Bracket_Windows
)
120 if ( bracket
!= Bracket_None
)
121 strResult
<< str
[n
- 1];
122 strResult
<< str
[n
] << strVarName
;
125 // check the closing bracket
126 if ( bracket
!= Bracket_None
) {
127 if ( m
== str
.Len() || str
[m
] != (char)bracket
) {
128 wxLogWarning("missing '%c' at position %d in '%s'.",
129 (char)bracket
, m
+ 1, str
.c_str());
132 // skip closing bracket
133 if ( pszValue
== NULL
)
134 strResult
<< (char)bracket
;
139 n
= m
- 1; // skip variable name