@@ -94,6 +94,12 @@ void WSJCppArgumentProcessor::registryProcessor(WSJCppArgumentProcessor *p) {
9494
9595// ---------------------------------------------------------------------
9696
97+ void WSJCppArgumentProcessor::registryExample (const std::string &sExample ) {
98+ m_vExamples.push_back (sExample );
99+ }
100+
101+ // ---------------------------------------------------------------------
102+
97103void WSJCppArgumentProcessor::registrySingleArgument (const std::string &sArgumentName , const std::string &sDescription ) {
98104 if (hasRegisteredArgumentName (sArgumentName )) {
99105 WSJCppLog::throw_err (TAG, " Argument Name '" + sArgumentName + " ' already registered" );
@@ -184,31 +190,70 @@ bool WSJCppArgumentProcessor::hasRegisteredArgumentName(const std::string &sArgu
184190
185191// ---------------------------------------------------------------------
186192
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+
187214std::string WSJCppArgumentProcessor::help (const std::string &sProgramName , const std::string &sPrefix ) {
188215 std::string sRet = " " ;
216+ int nParams = 0 ;
189217 if (m_vSingleArguments.size () > 0 || m_vParameterArguments.size ()) {
190218 sRet += " \r\n " + sPrefix + " Arguments: \r\n " ;
191219
192220 for (int i = 0 ; i < m_vSingleArguments.size (); i++) {
193221 sRet += m_vSingleArguments[i]->help (sProgramName , sPrefix + " " ) + " \r\n " ;
222+ nParams++;
194223 }
195224
196225 for (int i = 0 ; i < m_vParameterArguments.size (); i++) {
197226 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 " ;
198234 }
235+ sRet += " \r\n " ;
199236 }
200237
201238 if (m_vProcessors.size () > 0 ) {
202239 sRet += " \r\n " + sPrefix + " Commands: \r\n " ;
203240 for (int i = 0 ; i < m_vProcessors.size (); i++) {
204241 WSJCppArgumentProcessor *p = m_vProcessors[i];
205242 // 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 + " " );
208252 }
253+ sRet += " \r\n " ;
209254 }
210255
211- sRet += " \r\n " ; // TODO
256+ // sRet += "\r\n"; // TODO
212257 return sRet ;
213258}
214259
@@ -260,15 +305,14 @@ int WSJCppArguments::recursiveExec(WSJCppArgumentProcessor *pArgumentProcessor,
260305 }
261306 }
262307
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+ }
265314 }
266315
267- WSJCppArgumentProcessor *pNextProcessor = pArgumentProcessor->findRegisteredProcessor (vSubArguments[0 ]);
268- if (pNextProcessor != nullptr ) {
269- vSubArguments.erase (vSubArguments.begin ());
270- return this ->recursiveExec (pNextProcessor, vSubArguments);
271- }
272316 return pArgumentProcessor->exec (m_sProgramName, vSubArguments);
273317}
274318
0 commit comments