localize it

Submitted by: Alexey Zelkin <phantom@crimea.edu>
This commit is contained in:
Andrey A. Chernov 1999-09-11 18:21:16 +00:00
parent 04d5308a6b
commit 198f193685
2 changed files with 68 additions and 15 deletions

View file

@ -34,6 +34,7 @@
.Op Fl a | Fl append
.Op Fl h | Fl help
.Op Fl i | Fl indent Ar column
.Op Fl L | Fl locale
.Op Fl n | Fl name Ar name
.Op Fl o | Fl outfile Ar file
.Op Fl v | Fl verbose
@ -66,6 +67,9 @@ Print options and exit.
.It Fl i , Fl indent Ar column
Justify description strings to
.Ar column Pq default 24 .
.It Fl L , Fl locale
Sense locale environment variables for possible localized man subdirectories
and process this entries only.
.It Fl n , Fl name Ar name
Use
.Ar name

View file

@ -32,8 +32,8 @@
sub usage {
warn <<EOF;
usage: makewhatis [-a|-append ] [-h|-help] [-i|-indent column]
[-n|-name name] [-o|-outfile file] [-v|-verbose]
usage: makewhatis [-a|-append] [-h|-help] [-i|-indent column] [-L|-locale]
[-n|-name name] [-o|-outfile file] [-v|-verbose]
[directories ...]
EOF
exit 1;
@ -53,11 +53,9 @@ sub open_output {
}
$tmp = $whatisdb; # for signals
# Array of all entries
@a = ();
# Append mode
if ($append) {
local($file) = $whatisdb;
@ -97,7 +95,6 @@ sub close_output {
$w =~ s/\.tmp$//;
if ($success) { # success
# uniq
warn "\n" if $verbose && $pointflag;
warn "sort -u > $whatisdb\n" if $verbose;
@ -199,7 +196,7 @@ sub parse_dir {
sub dir_redundant {
local($dir) = @_;
local ($dev,$ino) = (stat($dir))[0..1];
local($dev,$ino) = (stat($dir))[0..1];
if ($dir_redundant{"$dev.$ino"}) {
warn "$dir is equal to: $dir_redundant{\"$dev.$ino\"}\n" if $verbose;
@ -332,12 +329,14 @@ sub manual {
$extension = &ext($file);
$name = &name($file);
$section_name = "NAME|Name|NAMN|BEZEICHNUNG|̾¾Î|îáú÷áîéå";
local($source) = 0;
local($list);
while(<F>) {
# ``man'' style pages
# &&: it takes you only half the user time, regexp is slow!!!
if (/^\.SH/ && /^\.SH[ \t]+["]?(NAME|Name|NAMN|BEZEICHNUNG|̾¾Î)["]?/) {
if (/^\.SH/ && /^\.SH[ \t]+["]?($section_name)["]?/) {
#while(<F>) { last unless /^\./ } # Skip
#chop; $list = $_;
while(<F>) {
@ -354,7 +353,7 @@ sub manual {
}
}
&out($list); close F; return 1;
} elsif (/^\.Sh/ && /^\.Sh[ \t]+["]?(NAME|Name|BEZEICHNUNG|̾¾Î)["]?/) {
} elsif (/^\.Sh/ && /^\.Sh[ \t]+["]?($section_name)["]?/) {
# ``doc'' style pages
local($flag) = 0;
while(<F>) {
@ -425,10 +424,20 @@ sub stripdir {
sub variables {
$verbose = 0; # Verbose
$indent = 24; # indent for description
$indent = 24; # Indent for description
$outfile = 0; # Don't write to ./whatis
$whatis_name = "whatis"; # Default name for DB
$append = 0; # Don't delete old entries
$locale = 0; # Build DB only for localized man directories
# choose localized man direcotries suffixs. If $LC_CTYPE is set, then
# its value will be used as suffix, otherwise $LANG value (if set)
$local_suffix = "";
if ($ENV{'LC_CTYPE'}) {
$local_suffix = $ENV{'LC_CTYPE'};
} elsif ($ENV{'LANG'}) {
$local_suffix = $ENV{'LANG'}
}
# if no argument for directories given
@defaultmanpath = ( '/usr/share/man' );
@ -472,8 +481,11 @@ sub parse {
elsif (/^--?(f|format|i|indent)$/) { $i = $argv[0]; shift @argv }
elsif (/^--?(n|name)$/) { $whatis_name = $argv[0];shift @argv }
elsif (/^--?(a|append)$/) { $append = 1 }
elsif (/^--?(L|locale)$/) { $locale = 1 }
else { &usage }
}
warn "Localized man directory suffix is ``$local_suffix''\n"
if $verbose && $locale;
if ($i ne "") {
if ($i =~ /^[0-9]+$/) {
@ -489,6 +501,31 @@ sub parse {
warn "Missing directories\n"; &usage;
}
# Process man directory
sub process_dir {
local($dir) = @_;
$dir = &stripdir($dir);
&dir_redundant($dir) && &parse_dir($dir);
}
# Process man directory and store output to file
sub process_dir_to_file {
local($dir) = @_;
$dir = &stripdir($dir);
&dir_redundant($dir) &&
&close_output(&open_output($dir) && &parse_dir($dir));
}
# convert locale name to short notation (ru_RU.KOI8-R -> ru.KOI8-R)
sub short_locale_name {
local($lname) = @_;
$lname =~ s|_[A-Z][A-Z]||;
warn "short locale name is $lname\n" if $verbose && $locale;
return $lname;
}
##
## Main
@ -498,20 +535,32 @@ sub parse {
# allow colons in dir: ``makewhatis dir1:dir2:dir3''
@argv = &parse(split(/[: ]/, join($", @ARGV))); # "
if ($outfile) {
if(&open_output($outfile)){
foreach $dir (@argv) {
$dir = &stripdir($dir);
&dir_redundant($dir) && &parse_dir($dir);
# "Local only" flag set ? Yes ...
if ($locale) {
if ($local_suffix ne "") {
&process_dir($dir.'/'.$local_suffix);
&process_dir($dir.'/'.&short_locale_name($local_suffix));
}
} else {
&process_dir($dir);
}
}
}
&close_output(1);
} else {
foreach $dir (@argv) {
$dir = &stripdir($dir);
&dir_redundant($dir) &&
&close_output(&open_output($dir) && &parse_dir($dir));
# "Local only" flag set ? Yes ...
if ($locale) {
if ($local_suffix ne "") {
&process_dir_to_file($dir.'/'.$local_suffix);
&process_dir_to_file($dir.'/'.&short_locale_name($local_suffix));
}
} else {
&process_dir_to_file($dir);
}
}
}