aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2012-09-05 21:10:05 +0000
committerMike Buland <eichlan@xagasoft.com>2012-09-05 21:10:05 +0000
commit912207fe0fa25d21837ced09dcd689c68e449ef7 (patch)
tree47f7ebb10e813987b9989ce70efc62cdbe451da8
parente5f2e1ce7faeb8fb4609f7291e77d5b682685057 (diff)
downloadlibbu++-912207fe0fa25d21837ced09dcd689c68e449ef7.tar.gz
libbu++-912207fe0fa25d21837ced09dcd689c68e449ef7.tar.bz2
libbu++-912207fe0fa25d21837ced09dcd689c68e449ef7.tar.xz
libbu++-912207fe0fa25d21837ced09dcd689c68e449ef7.zip
Added extra formatting argument indexing method to Bu::String::FormatProxy.
You can now use %{3} so that arguments can be followed by a digit.
-rw-r--r--src/stable/string.cpp24
-rw-r--r--src/stable/string.h1
-rw-r--r--src/unit/string.unit5
3 files changed, 28 insertions, 2 deletions
diff --git a/src/stable/string.cpp b/src/stable/string.cpp
index d1f76aa..dd484fd 100644
--- a/src/stable/string.cpp
+++ b/src/stable/string.cpp
@@ -1269,10 +1269,30 @@ Bu::String Bu::String::FormatProxy::end() const
1269 else 1269 else
1270 { 1270 {
1271 String sNum; 1271 String sNum;
1272 while( s && *s >= '0' && *s <= '9' ) 1272 if( *s == '{' )
1273 { 1273 {
1274 sNum += *s;
1275 s++; 1274 s++;
1275 while( s && *s >= '0' && *s <= '9' )
1276 {
1277 sNum += *s;
1278 s++;
1279 }
1280 if( !s || *s != '}' )
1281 {
1282 delete[] aArg;
1283 throw Bu::ExceptionBase(
1284 "Argument started with a '{' but terminated "
1285 "with a '%c' instead of '}'.", *s );
1286 }
1287 s++;
1288 }
1289 else
1290 {
1291 while( s && *s >= '0' && *s <= '9' )
1292 {
1293 sNum += *s;
1294 s++;
1295 }
1276 } 1296 }
1277 int iIndex = strtol( sNum.getStr(), 0, 10 )-1; 1297 int iIndex = strtol( sNum.getStr(), 0, 10 )-1;
1278 if( iIndex < 0 || iIndex >= iCount ) 1298 if( iIndex < 0 || iIndex >= iCount )
diff --git a/src/stable/string.h b/src/stable/string.h
index c92a704..197821d 100644
--- a/src/stable/string.h
+++ b/src/stable/string.h
@@ -950,6 +950,7 @@ namespace Bu
950 class FormatProxyEndAction 950 class FormatProxyEndAction
951 { 951 {
952 public: 952 public:
953 virtual ~FormatProxyEndAction() { };
953 virtual void operator()( const Bu::String &sFinal )=0; 954 virtual void operator()( const Bu::String &sFinal )=0;
954 }; 955 };
955 956
diff --git a/src/unit/string.unit b/src/unit/string.unit
index dfa0c38..4ea878e 100644
--- a/src/unit/string.unit
+++ b/src/unit/string.unit
@@ -581,6 +581,11 @@ suite String
581 unitTest( (Bu::String)Bu::String("%1%2").arg("IQ").arg(4, Bu::Fmt().plus()) == "IQ+4" ); 581 unitTest( (Bu::String)Bu::String("%1%2").arg("IQ").arg(4, Bu::Fmt().plus()) == "IQ+4" );
582 unitTest( (Bu::String)Bu::String("Sup #%1-Guy!").arg( 1 ) == "Sup #1-Guy!" ); 582 unitTest( (Bu::String)Bu::String("Sup #%1-Guy!").arg( 1 ) == "Sup #1-Guy!" );
583 } 583 }
584
585 test format2
586 {
587 unitTest( Bu::String("0x%{1}00").arg( 75, Bu::Fmt::hex() ).end() == "0x4B00" );
588 }
584} 589}
585// 03F09CA4F58AC8CA0E80F0D9D409D0A60700A192270004BC3A99E91D0001034F544603362E35013103313130019CA4F58AC8CA0E0002830800002C4200008AC200EBF7D9D4090127BB010000E3 590// 03F09CA4F58AC8CA0E80F0D9D409D0A60700A192270004BC3A99E91D0001034F544603362E35013103313130019CA4F58AC8CA0E0002830800002C4200008AC200EBF7D9D4090127BB010000E3
586// 591//