Ignore:
Timestamp:
02/21/19 19:50:37 (5 years ago)
Author:
nanardon
Message:

Migrate online help to Pod format

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Cli/Base.pm

    r2212 r2213  
    1212use Text::ParseWords; 
    1313use Getopt::Long; 
     14use Pod::Select; 
     15use Pod::Text::Termcap; 
     16use File::Temp; 
    1417 
    1518=head1 NAME 
     
    146149    $self->add_func('exit', { help => "exit current mode", 
    147150            code => sub { return "EXIT" }, }); 
     151 
     152 
     153=head2 help 
     154 
     155    help [command] - print help about command 
     156 
     157=cut 
     158 
    148159    $self->add_func('help', { 
    149         help => 'help [command] - print help about command', 
    150160        completion => sub { 
    151161            if (!$_[2]) { return sort keys %{ $_[0]->{funcs} || {}} } 
    152162        }, 
    153163        code => sub { 
    154             my ($self, $name) = @_; 
    155             if (!$name) { 
    156                 print $OUT join(', ', sort keys %{ $self->{funcs} || {}}) . "\n"; 
    157             } elsif ($self->{funcs}{$name}{alias}) { 
    158                 print $OUT "$name is an alias for " . join(' ', 
    159                     @{$self->{funcs}{$name}{alias}}) . "\n"; 
    160             } elsif ($self->{funcs}{$name}{help}) { 
    161                 print $OUT $self->{funcs}{$name}{help} . "\n"; 
    162             } else { 
    163                 print $OUT "No help availlable\n"; 
    164             } 
     164            my $env = shift; 
     165 
     166            $env->Help(@_); 
    165167        }, 
    166168    }); 
     
    283285sub add_func { 
    284286    my ($self, $name, $param) = @_; 
     287    my (undef, $file) = caller(0); 
     288    $param->{podfile} = $file; 
    285289    $self->{funcs}{$name} = $param; 
     290} 
     291 
     292=head2 Help 
     293 
     294Display help of given function 
     295 
     296=cut 
     297 
     298sub Help { 
     299    my ($self, $name) = @_; 
     300    if (!$name) { 
     301        $self->print(join(', ', sort keys %{ $self->{funcs} || {}}) . "\n"); 
     302    } elsif ($self->{funcs}{$name}{alias}) { 
     303        $self->print("$name is an alias for " . join(' ', @{$self->{funcs}{$name}{alias}}) . "\n"); 
     304    } elsif ($self->{funcs}{$name}{help}) { 
     305        $self->print($self->{funcs}{$name}{help}); 
     306    } else { 
     307        my $fh = File::Temp->new(); 
     308        my $parser = Pod::Text::Termcap->new( sentence => 0, width => 78 ); 
     309 
     310        podselect( 
     311            {-output => $fh, -sections => ["CLI FUNCTIONS/\Q$name"]}, 
     312            $self->{funcs}{$name}{podfile} 
     313        ); 
     314        seek($fh, 0, 0); 
     315        $parser->parse_from_filehandle($fh, $self->Context->Out); 
     316    } 
    286317} 
    287318 
     
    330361    my ($self, $name, @args) = @_; 
    331362    return if (!$name); 
    332     if (!exists($self->{funcs}{$name})) { 
     363 
     364    if (grep { m/^(-h|--help)$/ } @args) { 
     365        $self->Help($name); 
     366    } elsif (!exists($self->{funcs}{$name})) { 
    333367        $self->print("No command $name found\n"); 
    334368    } elsif ($self->{funcs}{$name}{alias}) { 
Note: See TracChangeset for help on using the changeset viewer.