@@ -94,6 +94,12 @@ void WSJCppArgumentProcessor::registryProcessor(WSJCppArgumentProcessor *p) {
94
94
95
95
// ---------------------------------------------------------------------
96
96
97
+ void WSJCppArgumentProcessor::registryExample (const std::string &sExample ) {
98
+ m_vExamples.push_back (sExample );
99
+ }
100
+
101
+ // ---------------------------------------------------------------------
102
+
97
103
void WSJCppArgumentProcessor::registrySingleArgument (const std::string &sArgumentName , const std::string &sDescription ) {
98
104
if (hasRegisteredArgumentName (sArgumentName )) {
99
105
WSJCppLog::throw_err (TAG, " Argument Name '" + sArgumentName + " ' already registered" );
@@ -184,31 +190,70 @@ bool WSJCppArgumentProcessor::hasRegisteredArgumentName(const std::string &sArgu
184
190
185
191
// ---------------------------------------------------------------------
186
192
193
+ bool WSJCppArgumentProcessor::applySingleArgument (const std::string &sProgramName , const std::string &sArgumentName ) {
194
+ WSJCppLog::throw_err (TAG, " No support single argument '" + sArgumentName + " '" );
195
+ return false ;
196
+ }
197
+
198
+ // ---------------------------------------------------------------------
199
+
200
+ bool WSJCppArgumentProcessor::applyParameterArgument (const std::string &sProgramName , const std::string &sArgumentName , const std::string &sValue ) {
201
+ WSJCppLog::throw_err (TAG, " No support parameter argument '" + sArgumentName + " ' for '" + getName () + " '" );
202
+ return false ;
203
+ }
204
+
205
+ // ---------------------------------------------------------------------
206
+
207
+ int WSJCppArgumentProcessor::exec (const std::string &sProgramName , const std::vector<std::string> &vSubParams) {
208
+ WSJCppLog::throw_err (TAG, " Processor '" + getName () + " ' has not implementation" );
209
+ return -1 ;
210
+ }
211
+
212
+ // ---------------------------------------------------------------------
213
+
187
214
std::string WSJCppArgumentProcessor::help (const std::string &sProgramName , const std::string &sPrefix ) {
188
215
std::string sRet = " " ;
216
+ int nParams = 0 ;
189
217
if (m_vSingleArguments.size () > 0 || m_vParameterArguments.size ()) {
190
218
sRet += " \r\n " + sPrefix + " Arguments: \r\n " ;
191
219
192
220
for (int i = 0 ; i < m_vSingleArguments.size (); i++) {
193
221
sRet += m_vSingleArguments[i]->help (sProgramName , sPrefix + " " ) + " \r\n " ;
222
+ nParams++;
194
223
}
195
224
196
225
for (int i = 0 ; i < m_vParameterArguments.size (); i++) {
197
226
sRet += m_vParameterArguments[i]->help (sProgramName , sPrefix + " " ) + " \r\n " ;
227
+ nParams++;
228
+ }
229
+ }
230
+
231
+ if (m_vExamples.size () > 0 ) {
232
+ for (int ei = 0 ; ei < m_vExamples.size (); ei++) {
233
+ sRet += sPrefix + " - example " + std::to_string (ei) + " : " + m_vExamples[ei] + " \r\n " ;
198
234
}
235
+ sRet += " \r\n " ;
199
236
}
200
237
201
238
if (m_vProcessors.size () > 0 ) {
202
239
sRet += " \r\n " + sPrefix + " Commands: \r\n " ;
203
240
for (int i = 0 ; i < m_vProcessors.size (); i++) {
204
241
WSJCppArgumentProcessor *p = m_vProcessors[i];
205
242
// TODO need a previous Processors
206
- sRet += sPrefix + " " + sProgramName + " <params> " + p->getName () + " - " + p->getDescription () + " \r\n " ;
207
- sRet += p->help (sProgramName , sPrefix + " " );
243
+
244
+ std::string sRoute = sProgramName ;
245
+ if (nParams > 0 ) {
246
+ sRoute += " <arguments>" ;
247
+ }
248
+ sRoute += " " + p->getName ();
249
+ // TODO: <package-name>
250
+ sRet += sPrefix + " " + sRoute + " - " + p->getDescription () + " \r\n " ;
251
+ sRet += p->help (sRoute , sPrefix + " " );
208
252
}
253
+ sRet += " \r\n " ;
209
254
}
210
255
211
- sRet += " \r\n " ; // TODO
256
+ // sRet += "\r\n"; // TODO
212
257
return sRet ;
213
258
}
214
259
@@ -260,15 +305,14 @@ int WSJCppArguments::recursiveExec(WSJCppArgumentProcessor *pArgumentProcessor,
260
305
}
261
306
}
262
307
263
- if (vSubArguments.size () == 0 ) {
264
- WSJCppLog::throw_err (TAG, " Could not find processor for execute with empty name" );
308
+ if (vSubArguments.size () > 0 ) {
309
+ WSJCppArgumentProcessor *pNextProcessor = pArgumentProcessor->findRegisteredProcessor (vSubArguments[0 ]);
310
+ if (pNextProcessor != nullptr ) {
311
+ vSubArguments.erase (vSubArguments.begin ());
312
+ return this ->recursiveExec (pNextProcessor, vSubArguments);
313
+ }
265
314
}
266
315
267
- WSJCppArgumentProcessor *pNextProcessor = pArgumentProcessor->findRegisteredProcessor (vSubArguments[0 ]);
268
- if (pNextProcessor != nullptr ) {
269
- vSubArguments.erase (vSubArguments.begin ());
270
- return this ->recursiveExec (pNextProcessor, vSubArguments);
271
- }
272
316
return pArgumentProcessor->exec (m_sProgramName, vSubArguments);
273
317
}
274
318
0 commit comments