summaryrefslogtreecommitdiffstats
path: root/gnu
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>1999-09-11 18:30:23 +0000
committerache <ache@FreeBSD.org>1999-09-11 18:30:23 +0000
commit114bca6fd9979acb218e9cddad04a0407d1de215 (patch)
tree63883ca421790458b4804cd52fe2a7f944cf7f21 /gnu
parente9f7dec9e55a59ba61aacc89c764df9d8551b97d (diff)
downloadFreeBSD-src-114bca6fd9979acb218e9cddad04a0407d1de215.zip
FreeBSD-src-114bca6fd9979acb218e9cddad04a0407d1de215.tar.gz
localize it
Submitted by: Alexey Zelkin <phantom@crimea.edu>
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/man/catman/catman.14
-rw-r--r--gnu/usr.bin/man/catman/catman.perl83
2 files changed, 74 insertions, 13 deletions
diff --git a/gnu/usr.bin/man/catman/catman.1 b/gnu/usr.bin/man/catman/catman.1
index 13fefaf..fe1a680 100644
--- a/gnu/usr.bin/man/catman/catman.1
+++ b/gnu/usr.bin/man/catman/catman.1
@@ -35,6 +35,7 @@
.Nm catman
.Op Fl f | Fl force
.Op Fl h | Fl help
+.Op Fl L | Fl locale
.Op Fl p | Fl print
.Op Fl r | Fl remove
.Op Fl v | Fl verbose
@@ -60,6 +61,9 @@ Force overwriting old cat pages. Normally only those pages will be formatted
which are not up to date. This option is a waste of time, CPU and RAM.
.It Fl h , Fl help
Print options and exit.
+.It Fl L , Fl locale
+Sense locale environment variables for possible localized man subdirectoris
+and process this entries only.
.It Fl p , Fl print
Don't actually format man pages. Show what would be done.
.It Fl r , Fl remove
diff --git a/gnu/usr.bin/man/catman/catman.perl b/gnu/usr.bin/man/catman/catman.perl
index 5add5d4..4974987 100644
--- a/gnu/usr.bin/man/catman/catman.perl
+++ b/gnu/usr.bin/man/catman/catman.perl
@@ -32,7 +32,7 @@
sub usage {
warn <<EOF;
-usage: catman [-h|-help] [-f|-force] [-p|-print] [-r|remove]
+usage: catman [-f|-force] [-h|-help] [-L|-locale] [-p|-print] [-r|remove]
[-v|-verbose] [directories ...]
EOF
@@ -44,6 +44,16 @@ sub variables {
$verbose = 0; # more warnings
$print = 0; # show only, do nothing
$remove = 0; # unlink forgotten man/catpages
+ $locale = 0; # go through localized man directories only
+
+ # choose localized man directories suffix. If $LC_CTYPE is set, then
+ # its value should be used as suffix, otherwise $LANG (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' );
@@ -78,8 +88,11 @@ sub parse {
elsif (/^--?(p|print)$/) { $print = 1 }
elsif (/^--?(r|remove)$/) { $remove = 1 }
elsif (/^--?(v|verbose)$/) { $verbose = 1 }
+ elsif (/^--?(L|locale)$/) { $locale = 1 }
else { &usage }
}
+ warn "Localized man directory suffix is $local_suffix\n"
+ if $verbose && $locale;
return &absolute_path(@argv) if $#argv >= 0;
return @defaultmanpath if $#defaultmanpath >= 0;
@@ -134,8 +147,10 @@ sub parse_dir {
}
$dir_visit{$dev,$ino} = $dir;
- # Manpath, /usr/local/man
- if ($dir =~ /man$/) {
+ # Manpath, /usr/local/man or
+ # localized manpath /usr/local/man/{$LC_CTYPE|$LANG}
+ if (($dir =~ /man$/) ||
+ (($locale) && ($dir =~ /man/) && ($dir =~ $local_suffix))) {
warn "open manpath directory ``$dir''\n" if $verbose;
if (!opendir(DIR, $dir)) {
warn "opendir ``$dir'':$!\n"; $exit = 1; return 0;
@@ -210,7 +225,6 @@ sub parse_subdir {
local($file, $f, $catdir, $catdir_short, $mandir, $mandir_short);
local($mtime_man, $mtime_cat);
local(%read);
-
$mandir = $subdir;
$catdir = &man2cat($mandir);
@@ -323,7 +337,7 @@ sub garbage {
sub nroff {
local($man,$cat) = @_;
- local($nroff) = "nroff -Tascii -man | col";
+ local($nroff) = "nroff -T" . $dev_name . " -man | col";
local($dev, $ino) = (stat($man))[01];
# It's a link
@@ -366,21 +380,64 @@ sub nroff {
$link{"$dev.$ino"} = $cat;
}
+# Set correct [gn]roff output device name ([ng]roff's "-T" option)
+sub nroff_device {
+ # Choose default output device name.
+ $dev_name = "ascii";
+
+ if ($locale) {
+ # Use "nroff -Tkoi8-r -man" to format russian manpages (if catman "-L"
+ # option specified only).
+ if ($local_suffix =~ '\.KOI8-R$') {
+ $dev_name = "koi8-r";
+ }
+ # Use "nroff -Tlatin1 -man" to format ISO 8859-1 manpages
+ elsif ($local_suffix =~ '\.ISO_8859-1$') {
+ $dev_name = "latin1";
+ }
+ }
+ warn "nroff output device name is $dev_name\n" if $verbose;
+}
+
+# process directory
+sub process_dir {
+ local($dir) = @_;
+
+ if (-e $dir && -d _ && -r _ && -x _) {
+ warn "``$dir'' is not writable for you,\n" .
+ "can only write to existing cat subdirs (if any)\n"
+ if ! -w _ && $verbose;
+ &parse_dir(&stripdir($dir));
+ } else {
+ warn "``$dir'' is not a directory or not read-/searchable for you\n";
+ $exit = 1;
+ }
+}
+
+# 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;
+}
+
#############
# main
warn "Don't start this program as root, use:\n" .
"echo $0 @ARGV | nice -5 su -m man\n" unless $>;
&variables;
-foreach $dir (&parse(split(/[ :]/, join($", @ARGV)))) { #"
- if (-e $dir && -d _ && -r _ && -x _) {
- warn "``$dir'' is not writable for you,\n" .
- "can only write to existing cat subdirs (if any)\n"
- if ! -w _ && $verbose;
- &parse_dir(&stripdir($dir));
+@argv = &parse(split(/[ :]/, join($", @ARGV)));
+&nroff_device;
+foreach $dir (@argv) {
+ if ($locale) {
+ if ($local_suffix ne "") {
+ &process_dir($dir.'/'.$local_suffix);
+ &process_dir($dir.'/'.&short_locale_name($local_suffix));
+ }
} else {
- warn "``$dir'' is not a directory or not read-/searchable for you\n";
- $exit = 1;
+ &process_dir($dir);
}
}
exit($exit);
OpenPOWER on IntegriCloud