74{
75 bool success(true);
76
78 m_tree =
new MiniConfigTreeNode(
"global", 0 );
81
84 std::cerr << "MiniConfig::ReadFile(): "
85 <<
"cannot read from file: " <<
fileName <<
"\n";
86 return false;
87 }
88
94 std::string att;
96 int skipCount(0);
97 int lineNumber = 0;
98
99 while( getline(
file,line) ) {
100 ++lineNumber;
101 std::istringstream linestream(line);
103
104 while( linestream.get(c) ) {
105
106 if( !isspace(c) ) {
107 break;
108 }
109 }
110
111
112 if( c == 0 || isspace(c) ) {
113 continue;
114 }
115
116
117 if( c == '#' ) {
118 continue;
119 }
120
121 linestream.putback(c);
122
123
125 if( !linestream ) {
126 std::cerr << "MiniConfig::ReadFile(): "
127 <<
"badly formatted line: \"" <<
line <<
"\", line number " << lineNumber <<
"\n";
128 success = false;
129 continue;
130 }
131 if( sep == "}" ) {
132 if( skipCount > 0 ) {
133 --skipCount;
134 }
135 else {
137 if( node == 0 ) {
138 std::cerr << "MiniConfig::ReadFile(): "
139 << "unmatched \"}\", line number " << lineNumber << "\n";
140 success = false;
142 }
143 }
144 continue;
145 }
146
147
150 if( !linestream ) {
151 std::cerr << "MiniConfig::ReadFile(): "
152 <<
"badly formatted line: \"" <<
line <<
"\", line number " << lineNumber <<
"\n";
153 success = false;
154 continue;
155 }
156 if( sep == "=" ) {
157 val =
line.substr(linestream.tellg(), std::string::npos);
158 boost::trim(val);
159
160 if(
val.size() == 0 ) {
161 std::cerr << "MiniConfig::ReadFile(): "
162 <<
"badly formatted line: \"" <<
line <<
"\", line number " << lineNumber <<
"\n";
163 success = false;
164 continue;
165 }
166 if( skipCount == 0 ) {
167 node->SetAttribute( att, val,
false );
168 }
169 continue;
170 }
171
172
174
175
176
177
178 std::string lokey =
key;
179 boost::algorithm::to_lower (lokey);
182 if( !linestream ) {
183 std::cerr << "MiniConfig::ReadFile(): "
184 <<
"badly formatted line: \"" <<
line <<
"\", line number " << lineNumber <<
"\n";
185 success = false;
186 continue;
187 }
188 if( sep == "{" ) {
192 }
195 node->SetAttribute(
id,
node->GetPathName(),
true );
197 }
198 else {
199 skipCount++;
200 }
201 continue;
202 }
203
204 std::cerr << "MiniConfig::ReadFile(): "
205 <<
"badly formatted line: \"" <<
line <<
"\", line number " << lineNumber <<
"\n";
206 success = false;
207 }
208
209 return success;
210}