9
9
use Toolkit \PFlag \Contract \ParserInterface ;
10
10
use Toolkit \PFlag \Contract \ValidatorInterface ;
11
11
use Toolkit \PFlag \Exception \FlagException ;
12
+ use Toolkit \PFlag \Flag \Argument ;
13
+ use Toolkit \PFlag \Flag \Option ;
12
14
use Toolkit \Stdlib \Arr ;
13
15
use Toolkit \Stdlib \Helper \DataHelper ;
14
16
use Toolkit \Stdlib \Helper \IntHelper ;
@@ -225,6 +227,10 @@ protected function parseRawArgs(array $rawArgs): array
225
227
return $ args ;
226
228
}
227
229
230
+ /****************************************************************
231
+ * build and render help
232
+ ***************************************************************/
233
+
228
234
/**
229
235
* display help messages
230
236
*/
@@ -288,22 +294,7 @@ protected function doBuildHelp(array $argDefines, array $optDefines, bool $withC
288
294
289
295
$ nameLen = $ this ->settings ['argNameLen ' ];
290
296
foreach ($ fmtArgs as $ hName => $ arg ) {
291
- $ desc = $ arg ['desc ' ];
292
- if ($ arg ['required ' ]) {
293
- $ desc = '<red1>*</red1> ' . $ desc ;
294
- }
295
-
296
- // default value.
297
- if (isset ($ arg ['default ' ]) && $ arg ['default ' ] !== null ) {
298
- $ desc .= sprintf ('(default <mga>%s</mga>) ' , DataHelper::toString ($ arg ['default ' ]));
299
- }
300
-
301
- // desc has multi line
302
- $ lines = [];
303
- if (strpos ($ desc , "\n" ) > 0 ) {
304
- $ lines = explode ("\n" , $ desc );
305
- $ desc = array_shift ($ lines );
306
- }
297
+ [$ desc , $ lines ] = $ this ->formatDesc ($ arg );
307
298
308
299
// write to buffer.
309
300
$ hName = Str::padRight ($ hName , $ nameLen );
@@ -331,34 +322,7 @@ protected function doBuildHelp(array $argDefines, array $optDefines, bool $withC
331
322
$ nameLen = $ this ->settings ['optNameLen ' ];
332
323
$ maxWidth = $ this ->settings ['descNlOnOptLen ' ];
333
324
foreach ($ fmtOpts as $ hName => $ opt ) {
334
- $ desc = $ opt ['desc ' ];
335
-
336
- if ($ opt ['required ' ]) {
337
- $ desc = '<red1>*</red1> ' . $ desc ;
338
- }
339
-
340
- // validator limit
341
- if (!empty ($ opt ['validator ' ])) {
342
- $ v = $ opt ['validator ' ];
343
-
344
- /** @see ValidatorInterface */
345
- if (is_object ($ v ) && method_exists ($ v , '__toString ' )) {
346
- $ limit = (string )$ v ;
347
- $ desc .= $ limit ? ' ' . $ limit : '' ;
348
- }
349
- }
350
-
351
- // default value.
352
- if (isset ($ opt ['default ' ]) && $ opt ['default ' ] !== null ) {
353
- $ desc .= sprintf ('(default <mga>%s</mga>) ' , DataHelper::toString ($ opt ['default ' ]));
354
- }
355
-
356
- // desc has multi line
357
- $ lines = [];
358
- if (strpos ($ desc , "\n" ) > 0 ) {
359
- $ lines = explode ("\n" , $ desc );
360
- $ desc = array_shift ($ lines );
361
- }
325
+ [$ desc , $ lines ] = $ this ->formatDesc ($ opt );
362
326
363
327
// need echo desc at newline.
364
328
$ hName = Str::padRight ($ hName , $ nameLen );
@@ -381,6 +345,46 @@ protected function doBuildHelp(array $argDefines, array $optDefines, bool $withC
381
345
return $ withColor ? $ buf ->clear () : ColorTag::clear ($ buf ->clear ());
382
346
}
383
347
348
+ /**
349
+ * @see DEFINE_ITEM for array $define
350
+ * @param array|Option|Argument $define
351
+ *
352
+ * @return array
353
+ */
354
+ protected function formatDesc ($ define ): array
355
+ {
356
+ $ desc = $ define ['desc ' ];
357
+
358
+ if ($ define ['required ' ]) {
359
+ $ desc = '<red1>*</red1> ' . $ desc ;
360
+ }
361
+
362
+ // validator limit
363
+ if (!empty ($ define ['validator ' ])) {
364
+ $ v = $ define ['validator ' ];
365
+
366
+ /** @see ValidatorInterface */
367
+ if (is_object ($ v ) && method_exists ($ v , '__toString ' )) {
368
+ $ limit = (string )$ v ;
369
+ $ desc .= $ limit ? ' ' . $ limit : '' ;
370
+ }
371
+ }
372
+
373
+ // default value.
374
+ if (isset ($ define ['default ' ]) && $ define ['default ' ] !== null ) {
375
+ $ desc .= sprintf ('(default <mga>%s</mga>) ' , DataHelper::toString ($ define ['default ' ]));
376
+ }
377
+
378
+ // desc has multi line
379
+ $ lines = [];
380
+ if (strpos ($ desc , "\n" ) > 0 ) {
381
+ $ lines = explode ("\n" , $ desc );
382
+ $ desc = array_shift ($ lines );
383
+ }
384
+
385
+ return [$ desc , $ lines ];
386
+ }
387
+
384
388
/**
385
389
* @param array $argDefines
386
390
*
@@ -391,10 +395,9 @@ protected function buildArgsForHelp(array $argDefines): array
391
395
$ fmtArgs = [];
392
396
$ maxLen = $ this ->settings ['argNameLen ' ];
393
397
394
- /** @var array $arg {@see DEFINE_ITEM} */
398
+ /** @var array|Argument $arg {@see DEFINE_ITEM} */
395
399
foreach ($ argDefines as $ arg ) {
396
400
$ helpName = $ arg ['name ' ] ?: 'arg ' . $ arg ['index ' ];
397
-
398
401
if ($ desc = $ arg ['desc ' ]) {
399
402
$ desc = trim ($ desc );
400
403
}
@@ -412,7 +415,7 @@ protected function buildArgsForHelp(array $argDefines): array
412
415
$ helpName .= $ typeName ? " $ typeName " : '' ;
413
416
}
414
417
415
- $ maxLen = FlagUtil:: getMaxInt ($ maxLen , strlen ($ helpName ));
418
+ $ maxLen = IntHelper:: getMax ($ maxLen , strlen ($ helpName ));
416
419
417
420
// append
418
421
$ fmtArgs [$ helpName ] = $ arg ;
@@ -437,9 +440,14 @@ protected function buildOptsForHelp(array $optDefines): array
437
440
$ nameLen = $ this ->settings ['optNameLen ' ];
438
441
ksort ($ optDefines );
439
442
440
- /** @var array $opt {@see DEFINE_ITEM} */
443
+ /** @var array|Option $opt {@see DEFINE_ITEM} */
441
444
foreach ($ optDefines as $ name => $ opt ) {
442
- $ names = $ opt ['shorts ' ];
445
+ $ names = $ opt ['shorts ' ];
446
+ /** @see Option support alias name. */
447
+ if (isset ($ opt ['alias ' ]) && $ opt ['alias ' ]) {
448
+ $ names [] = $ opt ['alias ' ];
449
+ }
450
+ // real name.
443
451
$ names [] = $ name ;
444
452
445
453
if ($ desc = $ opt ['desc ' ]) {
@@ -455,7 +463,7 @@ protected function buildOptsForHelp(array $optDefines): array
455
463
$ helpName .= $ typeName ? " $ typeName " : '' ;
456
464
}
457
465
458
- $ nameLen = FlagUtil:: getMaxInt ($ nameLen , strlen ($ helpName ));
466
+ $ nameLen = IntHelper:: getMax ($ nameLen , strlen ($ helpName ));
459
467
// append
460
468
$ fmtOpts [$ helpName ] = $ opt ;
461
469
}
0 commit comments