diff options
author | ache <ache@FreeBSD.org> | 1999-09-11 18:30:23 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1999-09-11 18:30:23 +0000 |
commit | 114bca6fd9979acb218e9cddad04a0407d1de215 (patch) | |
tree | 63883ca421790458b4804cd52fe2a7f944cf7f21 /gnu | |
parent | e9f7dec9e55a59ba61aacc89c764df9d8551b97d (diff) | |
download | FreeBSD-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.1 | 4 | ||||
-rw-r--r-- | gnu/usr.bin/man/catman/catman.perl | 83 |
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); |