From 605f3e81a9c0e1d16b2d22297569c1d164635c5c Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Mon, 18 May 2015 15:20:52 +0200 Subject: [PATCH] add Cli\Args\Help --- Makefile | 2 +- bin/pharext | Bin 73515 -> 74552 bytes src/pharext/Cli/Args/Help.php | 108 ++++++++++++++++++++++++++++++++++ src/pharext/Cli/Command.php | 55 +---------------- 4 files changed, 110 insertions(+), 55 deletions(-) create mode 100644 src/pharext/Cli/Args/Help.php diff --git a/Makefile b/Makefile index 41b8041..161d2de 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ all: bin/pharext -bin/pharext: src/* src/pharext/* src/pharext/*/* +bin/pharext: src/* src/pharext/* src/pharext/*/* src/pharext/*/*/* @echo "Linting changed source files ... " @for file in $?; do php -l $$file | sed -ne '/^No syntax errors/!p' && exit $${PIPESTATUS[0]}; done @echo "Creating bin/pharext ... " diff --git a/bin/pharext b/bin/pharext index 8f90155d7cc18f523256040d4e7df0eba2315e07..0858fa6cda382d7d846bfd179b2ebe0305f5f249 100755 GIT binary patch delta 1826 zcmaJ?U2GIp6dr0D*+pY3r0i}H@7%ewKX!LZiz01tlNJ%0@S_VQVs}X<%e38OyB%g` zu>?u2)&~QDhx=dSJr5(3dgfk#M;50Yq_m{7V+d^3bZx#!%O*%BJ&Vb9Dx zf8Y0=d+&a8wfWMo%@>DaEnhvWC_3L8`+U{bxq9q!%Twi_5Am-*J;0!d)iMC2TAiZg_eil8qs1~Y(6d0lX zkSV=ck=3Zt9~PcU*>RI>v|@}oX~JytXsv9UN5t!-<(4O_MkNKUWD>;gx6D#91vSf~ z#7h+Drp3bJU5?ZytT&*v9|(CT{anA9B)4*Q-UE~jpkeQzhL3XkNk#T~RFVx+5{N*; z#>E&K6ag^|Mp6`h+jMJomG}Y@3c^y7B{DG!3qsB%P!*Ibj(kH%W0gG)<^47`*$$Dd_P??}q4xZ5zjl>?8GA?KOA! zu6w<`kEI1_dzpSinarRv>@dndxvfvjPqC#Ov4gAbXp)kQ?vQP|lM?`8UL%`|-b;5e z7@IFB6k7>;Ff0#)PgG*?@mn^Zzc<+N2!oPQDeW<)cAM3t22g-m)z^e)R z@pL^Chr{02m*4T$Kz^s>>bDgkbep&wa-t2NsmHv~eQzFEF?0lDilq$7dNMG_}sBe%CNtDF>|hllbzUQbc}(UKkxTn@jm zq^ZHDJSp-5@CO6CfVX`>=I;Iy(o|A4-^E+6fRn)+PG~1@AGjXp>PuSphTkuRDr`CQdQ@N_LUiXi%uZSZ7NbbDkqX9~Qgx z#x9;9u&>+58*2nfC3RDC+9V;mu&9I}sEfRmy68R6*%lJ*=Fi^ed4A9T|BO9(Wt(5J zEd=W9lVyZ37^=Iot1bPbZqZ)4wibf>v>kPmHljL2FKUn2w2#+AnQB6QomyW2kvZYI zSY-`~hfqI>K2)b<4fjdbupxQy{hri;x*@fomdh;&{a!-I^0!;>IJ6ct*@4B2auezU z`7k!=HbQD>!zOr@TClSUEY`4A)FIZ4nqqCJi_CKLlUbXXVmUjV*IC7f&<}eF2|#@f zZvLt`@bNa^q-{^lLA%P3c1CTiu$L2J9>7$3@a6{0sWKK{sFu$y)e0-RtnkAw>phj% zM=q?VH(lL#)9bn2vKVzsAtM~q{G*A{1f`>lDu&cZSyG>fc{=w90>m>@rG4>n_?(eZ zD{@s(yPT*LcyT;R-7Fdp#|#g>%)bk;Kig3vOhYQm>XZ6-Vv6&rS21W;SdVp^U|pLW zX&!^;uNy#G>30g#e5}xEdXPMwkXpG=7M;+waO5248_5W~%sAo3YW2}VC*>cGyljrjKSPfmGyMMJ z!zX)!gZa$GH6w@^D{T6olbvSDi{px6o*w4k_=~B0`BeY<0RA&n7OYcuaNtBJ5FF_D zNFM0QDR4d~A1GAurabn}OH1kPExD!s>DtGQ?E9J7w`Z@qFCCeA{Oq^wA^#_k!QNxN Fe*kMCK3o6* diff --git a/src/pharext/Cli/Args/Help.php b/src/pharext/Cli/Args/Help.php new file mode 100644 index 0000000..19e8cd4 --- /dev/null +++ b/src/pharext/Cli/Args/Help.php @@ -0,0 +1,108 @@ +prog = $prog; + $this->args = $args; + } + + function __toString() { + $usage = "Usage:\n\n \$ "; + $usage .= $this->prog; + + list($flags, $required, $optional) = $this->listSpec(); + if ($flags) { + $usage .= $this->dumpFlags($flags); + } + if ($required) { + $usage .= $this->dumpRequired($required); + } + if ($optional) { + $usage .= $this->dumpOptional($optional); + } + + $help = $this->dumpHelp(); + + return $usage . "\n\n" . $help . "\n"; + } + + function listSpec() { + $flags = []; + $required = []; + $optional = []; + foreach ($this->args->getSpec() as $spec) { + if ($spec[3] & Args::REQARG) { + if ($spec[3] & Args::REQUIRED) { + $required[] = $spec; + } else { + $optional[] = $spec; + } + } else { + $flags[] = $spec; + } + } + + return [$flags, $required, $optional] + compact("flags", "required", "optional"); + } + + function dumpFlags(array $flags) { + return sprintf(" [-%s]", implode("", array_column($flags, 0))); + } + + function dumpRequired(array $required) { + $dump = ""; + foreach ($required as $req) { + $dump .= sprintf(" -%s <%s>", $req[0], $req[1]); + } + return $dump; + } + + function dumpOptional(array $optional) { + return sprintf(" [-%s ]", implode("|-", array_column($optional, 0))); + } + + function calcMaxLen() { + $spc = $this->args->getSpec(); + $max = max(array_map("strlen", array_column($spc, 1))); + $max += $max % 8 + 2; + return $max; + } + + function dumpHelp() { + $max = $this->calcMaxLen(); + $dump = ""; + foreach ($this->args->getSpec() as $spec) { + $dump .= " "; + if (isset($spec[0])) { + $dump .= sprintf("-%s|", $spec[0]); + } + $dump .= sprintf("--%s ", $spec[1]); + if ($spec[3] & Args::REQARG) { + $dump .= " "; + } elseif ($spec[3] & Args::OPTARG) { + $dump .= "[]"; + } else { + $dump .= " "; + } + + $dump .= str_repeat(" ", $max-strlen($spec[1])+3*!isset($spec[0])); + $dump .= $spec[2]; + + if ($spec[3] & Args::REQUIRED) { + $dump .= " (REQUIRED)"; + } + if (isset($spec[4])) { + $dump .= sprintf(" [%s]", $spec[4]); + } + $dump .= "\n"; + } + return $dump; + } +} diff --git a/src/pharext/Cli/Command.php b/src/pharext/Cli/Command.php index 6ad2c80..b733885 100644 --- a/src/pharext/Cli/Command.php +++ b/src/pharext/Cli/Command.php @@ -124,60 +124,7 @@ trait Command * @param string $prog */ public function help($prog) { - printf("Usage:\n\n \$ %s", $prog); - - $flags = []; - $required = []; - $optional = []; - foreach ($this->args->getSpec() as $spec) { - if ($spec[3] & CliArgs::REQARG) { - if ($spec[3] & CliArgs::REQUIRED) { - $required[] = $spec; - } else { - $optional[] = $spec; - } - } else { - $flags[] = $spec; - } - } - - if ($flags) { - printf(" [-%s]", implode("", array_column($flags, 0))); - } - foreach ($required as $req) { - printf(" -%s ", $req[0]); - } - if ($optional) { - printf(" [-%s ]", implode("|-", array_column($optional, 0))); - } - printf("\n\n"); - $spc = $this->args->getSpec(); - $max = max(array_map("strlen", array_column($spc, 1))); - $max += $max % 8 + 2; - foreach ($spc as $spec) { - if (isset($spec[0])) { - printf(" -%s|", $spec[0]); - } else { - printf(" "); - } - printf("--%s ", $spec[1]); - if ($spec[3] & CliArgs::REQARG) { - printf(" "); - } elseif ($spec[3] & CliArgs::OPTARG) { - printf("[]"); - } else { - printf(" "); - } - printf("%s%s", str_repeat(" ", $max-strlen($spec[1])+3*!isset($spec[0])), $spec[2]); - if ($spec[3] & CliArgs::REQUIRED) { - printf(" (REQUIRED)"); - } - if (isset($spec[4])) { - printf(" [%s]", $spec[4]); - } - printf("\n"); - } - printf("\n"); + print new Args\Help($prog, $this->args); } /** -- 2.30.2