my $lang = $self->lang;
$lang = 'en' if !$lang;
-my $h = new FileHandle;
+my $in;
+$line = 'help' unless $line;
+$line =~ s/\W//g; # remove dubious characters
+
+my ($priv, $cmd, $desc);
+my %cmd;
-if (!open($h, "$main::localcmd/Commands_$lang.hlp")) {
- if (!open($h, "$main::cmd/Commands_$lang.hlp")) {
+my $defh = new IO::File;
+unless ($defh->open("$main::localcmd/Commands_en.hlp")) {
+ unless($defh->open("$main::cmd/Commands_en.hlp")) {
return (1, $self->msg('helpe1'));
}
}
-my $in;
-$line =~ s/\W//og; # remove dubious characters
+my $h;
+if ($lang ne 'en') {
+ $h = new IO::File;
+ unless ($h->open("$main::localcmd/Commands_$lang.hlp")) {
+ unless($h->open("$main::cmd/Commands_$lang.hlp")) {
+ undef $h;
+ }
+ }
+}
+# do english help
my $include;
-my ($priv, $cmd, $desc);
-
-foreach $in (<$h>) {
+foreach $in (<$defh>) {
next if $in =~ /^\#/;
chomp $in;
+ $in =~ s/\r$//;
if ($in =~ /^===/) {
- push @out, "$cmd $desc" if $include;
+ $cmd{$cmd} = "$cmd $desc" if $include;
$include = 0;
$in =~ s/=== //;
($priv, $cmd, $desc) = split /\^/, $in;
$include = 1;
next;
}
- $include =~ 1 if $cmd =~ /$line/i;
+ $include = 1 if $cmd =~ /$line/i;
+}
+$cmd{$cmd} = "$cmd $desc" if $include;
+$defh->close;
+
+# override with any not english help
+if ($h) {
+ my $include;
+ foreach $in (<$h>) {
+ next if $in =~ /^\#/;
+ chomp $in;
+ $in =~ s/\r$//;
+ if ($in =~ /^===/) {
+ $cmd{$cmd} = "$cmd $desc" if $include;
+ $include = 0;
+ $in =~ s/=== //;
+ ($priv, $cmd, $desc) = split /\^/, $in;
+ next if $priv > $self->priv; # ignore subcommands that are of no concern
+ next unless $cmd =~ /$line/i || $desc =~ /$line/i;
+ next if $cmd =~ /-$/o;
+ $include = 1;
+ next;
+ }
+ $include = 1 if $cmd =~ /$line/i;
+ }
+ $cmd{$cmd} = "$cmd $desc" if $include;
+ $h->close;
}
-push @out, "$cmd $desc" if $include;
-close($h);
+push @out, map {$cmd{$_}} sort keys %cmd;
push @out, $self->msg('helpe2', $line) if @out == 0;