summaryrefslogtreecommitdiff
path: root/src/optparser.cpp
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2009-12-18 15:32:37 +0000
committerMike Buland <eichlan@xagasoft.com>2009-12-18 15:32:37 +0000
commit038815ae3a019ac56fa1c62e18c5861166d3a975 (patch)
tree816352148be5593f43c746062657849212bdc55e /src/optparser.cpp
parent146930268a695dcc0432599d625ec3eb7e74025e (diff)
downloadlibbu++-038815ae3a019ac56fa1c62e18c5861166d3a975.tar.gz
libbu++-038815ae3a019ac56fa1c62e18c5861166d3a975.tar.bz2
libbu++-038815ae3a019ac56fa1c62e18c5861166d3a975.tar.xz
libbu++-038815ae3a019ac56fa1c62e18c5861166d3a975.zip
Wow, cool, Bu::Formatter can read all the basic types now, (int, float, bool,
char, etc.) and OptParser totally works. I have one last change to make to it, which is using the return value of signal type options to determine weather or not the option took a parameter at all, especially in the case of short options.
Diffstat (limited to 'src/optparser.cpp')
-rw-r--r--src/optparser.cpp57
1 files changed, 56 insertions, 1 deletions
diff --git a/src/optparser.cpp b/src/optparser.cpp
index 2a8e64b..d656e12 100644
--- a/src/optparser.cpp
+++ b/src/optparser.cpp
@@ -106,6 +106,14 @@ void Bu::OptParser::parse( int argc, char **argv )
106 ); 106 );
107 break; 107 break;
108 } 108 }
109 else if( argv[j+1] )
110 {
111 pOpt->pProxy->setValue(
112 argv[j+1]
113 );
114 j++;
115 break;
116 }
109 } 117 }
110 } 118 }
111 else 119 else
@@ -135,6 +143,16 @@ void Bu::OptParser::addOption( const Option &opt )
135 hlOption.insert( opt.sOpt, &lOption.last() ); 143 hlOption.insert( opt.sOpt, &lOption.last() );
136} 144}
137 145
146void Bu::OptParser::setOverride( char cOpt, const Bu::FString &sOverride )
147{
148 hsOption.get( cOpt )->sOverride = sOverride;
149}
150
151void Bu::OptParser::setOverride( const Bu::FString &sOpt, const Bu::FString &sOverride )
152{
153 hlOption.get( sOpt )->sOverride = sOverride;
154}
155
138void Bu::OptParser::addHelpOption( char c, const Bu::FString &s, const Bu::FString &sHelp ) 156void Bu::OptParser::addHelpOption( char c, const Bu::FString &s, const Bu::FString &sHelp )
139{ 157{
140 Option o; 158 Option o;
@@ -146,7 +164,19 @@ void Bu::OptParser::addHelpOption( char c, const Bu::FString &s, const Bu::FStri
146 addOption( o ); 164 addOption( o );
147} 165}
148 166
149int Bu::OptParser::optHelp( StrArray aParams ) 167void Bu::OptParser::addHelpBanner( const Bu::FString &sText, bool bFormatted )
168{
169 Banner b;
170 b.sText = sText;
171 b.bFormatted = bFormatted;
172 if( lOption.getSize() > 0 )
173 {
174 for( b.iAfter = lOption.begin(); b.iAfter+1; b.iAfter++ ) { }
175 }
176 lBanner.append( b );
177}
178
179int Bu::OptParser::optHelp( StrArray /*aParams*/ )
150{ 180{
151 bool bHasShort = false; 181 bool bHasShort = false;
152 int iMaxWidth = 0; 182 int iMaxWidth = 0;
@@ -166,6 +196,19 @@ int Bu::OptParser::optHelp( StrArray aParams )
166 iIndent += 4; 196 iIndent += 4;
167 if( iMaxWidth > 0 ) 197 if( iMaxWidth > 0 )
168 iIndent += 4 + iMaxWidth; 198 iIndent += 4 + iMaxWidth;
199
200 BannerList::iterator iBanner;
201 for( iBanner = lBanner.begin(); iBanner; iBanner++ )
202 {
203 if( (*iBanner).iAfter )
204 break;
205
206 if( (*iBanner).bFormatted )
207 sio << format( (*iBanner).sText, iScrWidth-1, 0 );
208 else
209 sio << (*iBanner).sText;
210 sio << sio.nl;
211 }
169 for( OptionList::iterator i = lOption.begin(); i; i++ ) 212 for( OptionList::iterator i = lOption.begin(); i; i++ )
170 { 213 {
171 sio << " "; 214 sio << " ";
@@ -191,6 +234,18 @@ int Bu::OptParser::optHelp( StrArray aParams )
191 } 234 }
192 sio << format( (*i).sHelp, iScrWidth-iIndent-1, iIndent ); 235 sio << format( (*i).sHelp, iScrWidth-iIndent-1, iIndent );
193 sio << sio.nl; 236 sio << sio.nl;
237
238 for( ; iBanner; iBanner++ )
239 {
240 if( (*iBanner).iAfter != i )
241 break;
242
243 if( (*iBanner).bFormatted )
244 sio << format( (*iBanner).sText, iScrWidth-1, 0 );
245 else
246 sio << (*iBanner).sText;
247 sio << sio.nl;
248 }
194 } 249 }
195 exit( 0 ); 250 exit( 0 );
196 return 0; 251 return 0;