aboutsummaryrefslogtreecommitdiff
path: root/src/formatter.cpp
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2009-12-18 08:59:16 +0000
committerMike Buland <eichlan@xagasoft.com>2009-12-18 08:59:16 +0000
commit146930268a695dcc0432599d625ec3eb7e74025e (patch)
treea944d13981ed055b337757953014ed1e2d45e19c /src/formatter.cpp
parent0d3d73fb0cacd3d1cf7eb8b83ba87f8b740b871a (diff)
downloadlibbu++-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.cpp172
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
12Bu::Formatter::Formatter( Stream &rOut ) : 12Bu::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
23void Bu::Formatter::write( const Bu::FString &sStr ) 23void Bu::Formatter::write( const Bu::FString &sStr )
24{ 24{
25 rOut.write( sStr ); 25 rStream.write( sStr );
26} 26}
27 27
28void Bu::Formatter::write( const void *sStr, int iLen ) 28void Bu::Formatter::write( const void *sStr, int iLen )
29{ 29{
30 rOut.write( sStr, iLen ); 30 rStream.write( sStr, iLen );
31} 31}
32 32
33void Bu::Formatter::writeAligned( const Bu::FString &sStr ) 33void 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
114Bu::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
114void Bu::Formatter::incIndent() 144void 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
195Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, const Bu::Formatter::Fmt &f ) 225Bu::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
201Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, Bu::Formatter::Special s ) 231Bu::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
251Bu::Formatter &Bu::operator<<( Bu::Formatter &f, const char *sStr )
252{
253 f.writeAligned( sStr, strlen( sStr ) );
254 return f;
219} 255}
220 256
221Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, const char *sStr ) 257Bu::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
227Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, char *sStr ) 263Bu::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
233Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, const Bu::FString &sStr ) 269Bu::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
239Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, signed char c ) 275Bu::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
245Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, char c ) 281Bu::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
251Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, unsigned char c ) 287Bu::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
257Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, signed short i ) 293Bu::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
263Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, unsigned short i ) 299Bu::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
269Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, signed int i ) 305Bu::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
275Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, unsigned int i ) 311Bu::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
281Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, signed long i ) 317Bu::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
287Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, unsigned long i ) 323Bu::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
293Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, signed long long i ) 329Bu::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
299Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, unsigned long long i ) 335Bu::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
305Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, float f ) 341Bu::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
311Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, double f ) 347Bu::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
317Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, long double f ) 353Bu::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
323Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, bool b ) 359Bu::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