Changeset 159

Show
Ignore:
Timestamp:
06/02/04 02:46:15 (4 years ago)
Author:
svn
Message:

Refactored HELP extraction into a subroutine.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • manage/trunk/CLI/CLI.pm

    r158 r159  
    121121                $help .= $format->format($cmd{HELPHEADER}) . "\n" if $cmd{HELPHEADER}; 
    122122 
     123        my $process_help = sub { 
     124                my $help = shift; 
     125                my $commands = shift; 
     126                my $command = shift; 
     127                my $type = ref($help); 
     128 
     129                        if ($type eq 'ARRAY') { 
     130                                $commands->{$help->[0]} = $help->[1]; 
     131                        } elsif ($type eq 'CODE') { 
     132                                %$commands = (%$commands, $help->()); 
     133                        } elsif (!$type) { 
     134                                $commands->{$command} = $help; 
     135                        } 
     136                }; 
     137 
    123138                for my $key (keys %cmd) { 
    124139                        next if $key =~ /^[A-Z]+$/; 
    125140 
    126141                        if (ref($cmd{$key}) eq 'HASH' and $cmd{$key}->{HELP}) { 
    127                         my ($name, $hstr); 
    128                         my $type = ref($cmd{$key}->{HELP}); 
    129                          
    130                                 if ($type eq 'CODE') { 
    131                                         %commands = (%commands, $cmd{$key}->{HELP}->()); 
    132                                 } else { 
    133                                         if ($type eq 'ARRAY') { 
    134                                                 ($name, $hstr) = @{$cmd{$key}->{HELP}}; 
    135                                         } else { 
    136                                                 $name = $key; 
    137                                                 $hstr = $cmd{$key}->{HELP}; 
    138                                         } 
    139                                         $commands{$name} = $hstr; 
    140                                 } 
     142                                $process_help->($cmd{$key}->{HELP}, \%commands, $key); 
    141143                        } else { 
    142144                                $commands{$key} = ''; 
     
    149151                if ($cmd{ACTION}) { 
    150152                        if (ref($cmd{ACTION}) eq 'HASH' and $cmd{ACTION}->{HELP}) { 
    151                                 if (ref($cmd{ACTION}->{HELP}) eq 'ARRAY') { 
    152                                         $commands{'<eol>'} = $cmd{ACTION}->{HELP}->[1]; 
    153                                 } elsif (!ref($cmd{ACTION}->{HELP})) { 
    154                                         $commands{'<eol>'} = $cmd{ACTION}->{HELP}; 
    155                                 } else { 
    156                                         $commands{'<eol>'} = "\e[31m\e[1m(expected SCALAR or ARRAY help, not CODE)\e[0m"; 
    157                                 } 
     153                                $process_help->($cmd{ACTION}->{HELP}, \%commands, '<eol>'); 
    158154                        } elsif ($cmd{ACTIONHELP}) { 
    159155                                $commands{'<eol>'} = $cmd{ACTIONHELP}; 
    160156                        } elsif ($cmd{HELP}) { 
    161                                 if (ref($cmd{HELP}) eq 'ARRAY') { 
    162                                         $commands{'<eol>'} = $cmd{HELP}->[1]; 
    163                                 } elsif (!ref($cmd{HELP})) { 
    164                                         $commands{'<eol>'} = $cmd{HELP}; 
    165                                 } else { 
    166                                         $commands{'<eol>'} = "\e[31m\e[1m(expected SCALAR or ARRAY help, not CODE)\e[0m"; 
    167                                 } 
     157                                $process_help->($cmd{HELP}, \%commands, '<eol>'); 
    168158                        } else { 
    169159                                $commands{'<eol>'} = "\e[31m\e[1m(need ACTIONHELP, ACTION->HELP or HELP entry)\e[0m"; 
     
    225215                        if (defined($token)) { 
    226216                        my @candidates = grep(/^(?:\d+\)(?:\$))?$token/, keys(%cmd)); 
     217 
    227218                                $unique = 1 if @candidates == 1 and $candidates[0] eq $key; 
    228219                        }