diff options
author | Mike Buland <eichlan@xagasoft.com> | 2009-12-18 08:59:16 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2009-12-18 08:59:16 +0000 |
commit | 146930268a695dcc0432599d625ec3eb7e74025e (patch) | |
tree | a944d13981ed055b337757953014ed1e2d45e19c /src/formatter.cpp | |
parent | 0d3d73fb0cacd3d1cf7eb8b83ba87f8b740b871a (diff) | |
download | libbu++-146930268a695dcc0432599d625ec3eb7e74025e.tar.gz libbu++-146930268a695dcc0432599d625ec3eb7e74025e.tar.bz2 libbu++-146930268a695dcc0432599d625ec3eb7e74025e.tar.xz libbu++-146930268a695dcc0432599d625ec3eb7e74025e.zip |
The OptParser still needs help banners and more helper functions, but otherwise,
it's done. It works great, and provides much flexibility and usefulness.
It now relies on the input side of the Formatter class, which at the moment
supports reading strings...not real useful yet...
Next up, adding readers for numbers and such, then it'll be mostly complete.
Also, fixed a bug when copying uninitialized signal objects.
Diffstat (limited to '')
-rw-r--r-- | src/formatter.cpp | 172 |
1 files changed, 104 insertions, 68 deletions
diff --git a/src/formatter.cpp b/src/formatter.cpp index 830e527..5ab1b3f 100644 --- a/src/formatter.cpp +++ b/src/formatter.cpp | |||
@@ -9,8 +9,8 @@ | |||
9 | 9 | ||
10 | #include <string.h> | 10 | #include <string.h> |
11 | 11 | ||
12 | Bu::Formatter::Formatter( Stream &rOut ) : | 12 | Bu::Formatter::Formatter( Stream &rStream ) : |
13 | rOut( rOut ), | 13 | rStream( rStream ), |
14 | uIndent( 0 ), | 14 | uIndent( 0 ), |
15 | cIndent( '\t' ) | 15 | cIndent( '\t' ) |
16 | { | 16 | { |
@@ -22,12 +22,12 @@ Bu::Formatter::~Formatter() | |||
22 | 22 | ||
23 | void Bu::Formatter::write( const Bu::FString &sStr ) | 23 | void Bu::Formatter::write( const Bu::FString &sStr ) |
24 | { | 24 | { |
25 | rOut.write( sStr ); | 25 | rStream.write( sStr ); |
26 | } | 26 | } |
27 | 27 | ||
28 | void Bu::Formatter::write( const void *sStr, int iLen ) | 28 | void Bu::Formatter::write( const void *sStr, int iLen ) |
29 | { | 29 | { |
30 | rOut.write( sStr, iLen ); | 30 | rStream.write( sStr, iLen ); |
31 | } | 31 | } |
32 | 32 | ||
33 | void Bu::Formatter::writeAligned( const Bu::FString &sStr ) | 33 | void Bu::Formatter::writeAligned( const Bu::FString &sStr ) |
@@ -111,6 +111,36 @@ void Bu::Formatter::writeAligned( const char *sStr, int iLen ) | |||
111 | usedFormat(); | 111 | usedFormat(); |
112 | } | 112 | } |
113 | 113 | ||
114 | Bu::FString Bu::Formatter::readToken() | ||
115 | { | ||
116 | Bu::FString sRet; | ||
117 | for(;;) | ||
118 | { | ||
119 | char buf; | ||
120 | int iRead = rStream.read( &buf, 1 ); | ||
121 | if( iRead == 0 ) | ||
122 | return sRet; | ||
123 | if( buf == ' ' || buf == '\t' || buf == '\n' || buf == '\r' ) | ||
124 | continue; | ||
125 | else | ||
126 | { | ||
127 | sRet += buf; | ||
128 | break; | ||
129 | } | ||
130 | } | ||
131 | for(;;) | ||
132 | { | ||
133 | char buf; | ||
134 | int iRead = rStream.read( &buf, 1 ); | ||
135 | if( iRead == 0 ) | ||
136 | return sRet; | ||
137 | if( buf == ' ' || buf == '\t' || buf == '\n' || buf == '\r' ) | ||
138 | return sRet; | ||
139 | else | ||
140 | sRet += buf; | ||
141 | } | ||
142 | } | ||
143 | |||
114 | void Bu::Formatter::incIndent() | 144 | void Bu::Formatter::incIndent() |
115 | { | 145 | { |
116 | if( uIndent < 0xFFU ) | 146 | if( uIndent < 0xFFU ) |
@@ -192,137 +222,143 @@ Bu::Formatter::Fmt &Bu::Formatter::Fmt::caps( bool bCaps ) | |||
192 | return *this; | 222 | return *this; |
193 | } | 223 | } |
194 | 224 | ||
195 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, const Bu::Formatter::Fmt &f ) | 225 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, const Bu::Formatter::Fmt &fmt ) |
196 | { | 226 | { |
197 | rOut.setTempFormat( f ); | 227 | f.setTempFormat( fmt ); |
198 | return rOut; | 228 | return f; |
199 | } | 229 | } |
200 | 230 | ||
201 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, Bu::Formatter::Special s ) | 231 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, Bu::Formatter::Special s ) |
202 | { | 232 | { |
203 | switch( s ) | 233 | switch( s ) |
204 | { | 234 | { |
205 | case Formatter::nl: | 235 | case Formatter::nl: |
206 | { | 236 | { |
207 | rOut.write("\n", 1 ); | 237 | f.write("\n", 1 ); |
208 | char ci = rOut.getIndentChar(); | 238 | char ci = f.getIndentChar(); |
209 | for( int j = 0; j < rOut.getIndent(); j++ ) | 239 | for( int j = 0; j < f.getIndent(); j++ ) |
210 | rOut.write( &ci, 1 ); | 240 | f.write( &ci, 1 ); |
211 | } | 241 | } |
212 | break; | 242 | break; |
213 | 243 | ||
214 | case Formatter::flush: | 244 | case Formatter::flush: |
215 | rOut.doFlush(); | 245 | f.doFlush(); |
216 | break; | 246 | break; |
217 | } | 247 | } |
218 | return rOut; | 248 | return f; |
249 | } | ||
250 | |||
251 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, const char *sStr ) | ||
252 | { | ||
253 | f.writeAligned( sStr, strlen( sStr ) ); | ||
254 | return f; | ||
219 | } | 255 | } |
220 | 256 | ||
221 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, const char *sStr ) | 257 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, char *sStr ) |
222 | { | 258 | { |
223 | rOut.writeAligned( sStr, strlen( sStr ) ); | 259 | f.writeAligned( sStr, strlen( sStr ) ); |
224 | return rOut; | 260 | return f; |
225 | } | 261 | } |
226 | 262 | ||
227 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, char *sStr ) | 263 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, const Bu::FString &sStr ) |
228 | { | 264 | { |
229 | rOut.writeAligned( sStr, strlen( sStr ) ); | 265 | f.writeAligned( sStr ); |
230 | return rOut; | 266 | return f; |
231 | } | 267 | } |
232 | 268 | ||
233 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, const Bu::FString &sStr ) | 269 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, signed char c ) |
234 | { | 270 | { |
235 | rOut.writeAligned( sStr ); | 271 | f.write( (char *)&c, 1 ); |
236 | return rOut; | 272 | return f; |
237 | } | 273 | } |
238 | 274 | ||
239 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, signed char c ) | 275 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, char c ) |
240 | { | 276 | { |
241 | rOut.write( (char *)&c, 1 ); | 277 | f.write( (char *)&c, 1 ); |
242 | return rOut; | 278 | return f; |
243 | } | 279 | } |
244 | 280 | ||
245 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, char c ) | 281 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, unsigned char c ) |
246 | { | 282 | { |
247 | rOut.write( (char *)&c, 1 ); | 283 | f.write( (char *)&c, 1 ); |
248 | return rOut; | 284 | return f; |
249 | } | 285 | } |
250 | 286 | ||
251 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, unsigned char c ) | 287 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, signed short i ) |
252 | { | 288 | { |
253 | rOut.write( (char *)&c, 1 ); | 289 | f.ifmt<signed short>( i ); |
254 | return rOut; | 290 | return f; |
255 | } | 291 | } |
256 | 292 | ||
257 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, signed short i ) | 293 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, unsigned short i ) |
258 | { | 294 | { |
259 | rOut.ifmt<signed short>( i ); | 295 | f.ufmt<unsigned short>( i ); |
260 | return rOut; | 296 | return f; |
261 | } | 297 | } |
262 | 298 | ||
263 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, unsigned short i ) | 299 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, signed int i ) |
264 | { | 300 | { |
265 | rOut.ufmt<unsigned short>( i ); | 301 | f.ifmt<signed int>( i ); |
266 | return rOut; | 302 | return f; |
267 | } | 303 | } |
268 | 304 | ||
269 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, signed int i ) | 305 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, unsigned int i ) |
270 | { | 306 | { |
271 | rOut.ifmt<signed int>( i ); | 307 | f.ufmt<unsigned int>( i ); |
272 | return rOut; | 308 | return f; |
273 | } | 309 | } |
274 | 310 | ||
275 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, unsigned int i ) | 311 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, signed long i ) |
276 | { | 312 | { |
277 | rOut.ufmt<unsigned int>( i ); | 313 | f.ifmt<signed long>( i ); |
278 | return rOut; | 314 | return f; |
279 | } | 315 | } |
280 | 316 | ||
281 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, signed long i ) | 317 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, unsigned long i ) |
282 | { | 318 | { |
283 | rOut.ifmt<signed long>( i ); | 319 | f.ufmt<unsigned long>( i ); |
284 | return rOut; | 320 | return f; |
285 | } | 321 | } |
286 | 322 | ||
287 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, unsigned long i ) | 323 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, signed long long i ) |
288 | { | 324 | { |
289 | rOut.ufmt<unsigned long>( i ); | 325 | f.ifmt<signed long long>( i ); |
290 | return rOut; | 326 | return f; |
291 | } | 327 | } |
292 | 328 | ||
293 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, signed long long i ) | 329 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, unsigned long long i ) |
294 | { | 330 | { |
295 | rOut.ifmt<signed long long>( i ); | 331 | f.ufmt<unsigned long long>( i ); |
296 | return rOut; | 332 | return f; |
297 | } | 333 | } |
298 | 334 | ||
299 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, unsigned long long i ) | 335 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, float flt ) |
300 | { | 336 | { |
301 | rOut.ufmt<unsigned long long>( i ); | 337 | f.ffmt<float>( flt ); |
302 | return rOut; | 338 | return f; |
303 | } | 339 | } |
304 | 340 | ||
305 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, float f ) | 341 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, double flt ) |
306 | { | 342 | { |
307 | rOut.ffmt<float>( f ); | 343 | f.ffmt<double>( flt ); |
308 | return rOut; | 344 | return f; |
309 | } | 345 | } |
310 | 346 | ||
311 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, double f ) | 347 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, long double flt ) |
312 | { | 348 | { |
313 | rOut.ffmt<double>( f ); | 349 | f.ffmt<long double>( flt ); |
314 | return rOut; | 350 | return f; |
315 | } | 351 | } |
316 | 352 | ||
317 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, long double f ) | 353 | Bu::Formatter &Bu::operator<<( Bu::Formatter &f, bool b ) |
318 | { | 354 | { |
319 | rOut.ffmt<long double>( f ); | 355 | f.writeAligned( b?("true"):("false") ); |
320 | return rOut; | 356 | return f; |
321 | } | 357 | } |
322 | 358 | ||
323 | Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, bool b ) | 359 | Bu::Formatter &Bu::operator>>( Bu::Formatter &f, Bu::FString &sStr ) |
324 | { | 360 | { |
325 | rOut.writeAligned( b?("true"):("false") ); | 361 | sStr = f.readToken(); |
326 | return rOut; | 362 | return f; |
327 | } | 363 | } |
328 | 364 | ||