From owner-man-jp@jp.freebsd.org  Thu Apr 27 20:57:17 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id UAA13920;
	Thu, 27 Apr 2000 20:57:17 +0900 (JST)
	(envelope-from owner-man-jp@jp.FreeBSD.org)
Received: from bulls.mei.co.jp (bulls.mei.co.jp [202.224.189.102])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id UAA13915
	for <man-jp@jp.freebsd.org>; Thu, 27 Apr 2000 20:57:16 +0900 (JST)
	(envelope-from takamune@vrl.mei.co.jp)
Received: by bulls.mei.co.jp (8.9.3/3.7W) with ESMTP id UAA00443
	for <man-jp@jp.freebsd.org>; Thu, 27 Apr 2000 20:56:45 +0900 (JST)
Received: by mariners.mei.co.jp (8.9.1/3.7W) with ESMTP id UAA27384
	for <man-jp@jp.freebsd.org>; Thu, 27 Apr 2000 20:56:45 +0900 (JST)
Received: by dream.vrl.mei.co.jp (8.9.3/3.7W-11/29/99)
	id UAA35693; Thu, 27 Apr 2000 20:56:12 +0900 (JST)
To: man-jp@jp.freebsd.org
From: Kazu TAKAMUNE (=?iso-2022-jp?B?GyRCOWI9IU9CNkcbKEI=?=)
 <takamune@avrl.mei.co.jp>
X-Mailer: Mew version 1.94.1 on Emacs 20.6 / Mule 4.0 (HANANOEN)
Mime-Version: 1.0
Content-Type: Multipart/Mixed;
 boundary="--Next_Part(Thu_Apr_27_20:54:19_2000_518)--"
Content-Transfer-Encoding: 7bit
Message-Id: <20000427205612X.takamune@vrl.mei.co.jp>
Date: Thu, 27 Apr 2000 20:56:12 +0900
X-Dispatcher: imput version 20000228(IM140)
Lines: 246
Reply-To: man-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: man-jp 2356
Subject: [man-jp 2356] lintjpman
Errors-To: owner-man-jp@jp.freebsd.org
Sender: owner-man-jp@jp.freebsd.org
X-Originator: takamune@vrl.mei.co.jp

----Next_Part(Thu_Apr_27_20:54:19_2000_518)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

$B9b=!$G$9!#$3$s$P$s$O!#(B

$B9;@5%k!<%k(B <http://www.jp.FreeBSD.org/man-jp/docs/guideline.html>
$B$rB?>/$J$j$H$b3Z$K8!>Z$9$k$?$a$N%D!<%k(B lintjpman $B$r:n@.$7$^$7$?!#(B
# $B$3$N<j$N%D!<%k$O$^$@$"$j$^$;$s$G$7$?$h$M(B?

$BNc$($P!"(B

% cd somewhere/doc/ja_JP.eucJP/man
% jpmanlint -s man1/fetch.1
FATAL: man1/fetch.1:111:``$BBg;v$K$5$l(B''$B!"$I$s$J>u672<$G$b%U%!%$%kL>$O>C5n$5$l$^$;$s!%(B
FATAL: man1/fetch.1:138:$B4D6-JQ?t$,!$@_Dj$5$l$F$$$?>l9g$O!"$=$l$r>e=q$-$7$^$9!#(B

$B$H$J$C$F!"6gFIE@(B `$B!%!$(B' $B$r;HMQ$7$F$$$k$3$H$,$o$+$j$^$9!#(B

% lintjpman -h

$B$G4JC1$J;H$$J}$,$o$+$j$^$9!#0lIt:n@.Cf$N%3%a%s%H$,;D$C$F$$$?$j$7$^$9(B
$B$,!"F,$,%&%K$K$J$j$=$&$G$9$N$G!"$R$H$^$:Ej9F$7$^$9!#JQ$J=j$r%S%7%P%7(B
$BC!$$$F2<$5$$$^$;!#(B
--
$B9b=!(B $BOB6G(B($B$?$+$`$M(B $B$+$:$H$-(B)
mailto:takamune@avrl.mei.co.jp

----Next_Part(Thu_Apr_27_20:54:19_2000_518)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Content-Description: jpmanlint
Content-Disposition: attachment; filename=jpmanlint

#! /usr/local/bin/jperl5				# -*-mode: Perl; -*-

# jpmanlint - FreeBSD $BF|K\8l%^%K%e%"%k%W%m%8%'%/%H$N9;@5%k!<%k$r8!>Z$9$k(B

# Copyright(c) 2000 by Kazu TAKAMUNE <takamune@avrl.mei.co.jp>.
# All rights reserved.
# Freely redistributable.  Absolutely no warranty.

use strict;
use Getopt::Std;
use vars qw/ $opt_e $opt_h $opt_s $opt_v $opt_w /;

my $prog = ($0 =~ m!/([^/]+)$!) ? $1 : $0;

sub usage {
    print STDERR <<EOF;
usage: $prog [-ehsvw] [-] [file ...]
    -e	display a dollar sign (`\$') at the end of each line.
    -h	print this message.
    -s	verify strictly.
    -v	verbose mode.
    -w	show wargings also.
EOF
    exit 0;
}

getopts('ehsvw');
&usage if ($opt_h);

my $end;
$end = "\$" if ($opt_e);

my ($zenkaku, $ok, $ng);

$zenkaku .= "$B!!!"!#!$!%!&!'!(!)!*!+!,!-!.!/!0!1!2(B";
$zenkaku .= "$B!3!4!5!6!7!8!9!:!;!<(B";
$zenkaku .= "$B!=!>!?!@!A!B!C!D!E(B";
$zenkaku .= "$B!F!G!H!I!J!K!L!M!N!O!P!Q!R!S!T!U!V!W!X!Y!Z![(B";
$zenkaku .= "$B!\!]!^!_!`!a!b!c!d!e!f!g!h!i!j!k!l!m!n!o!p!q!r!s!t!u!v!w!x(B";
$zenkaku .= "$B!y!z!{!|!}!~"!"""#"$"%"&"'(B";
$zenkaku .= "$B"(")"*"+","-".(B";
$zenkaku .= "$B":";"<"=">"?"@"A"J"K"L"M"N"O"P"\"]"^"_"`"a"b"c"d"e"f"g"h"i"j(B";
$zenkaku .= "$B"r"s"t"u"v"w"x"y"~(B";
$zenkaku .= "$B#0#1#2#3#4#5#6#7#8#9(B";
$zenkaku .= "$B#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z(B";
$zenkaku .= "$B#a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#x#y#z(B";

$ok .= "$B!"!#!&(B";
$ok .= "$B!3!4!5!6!7!8!9!:!;!<(B";
$ok .= "$B!A!B!C!D!E(B";
$ok .= "$B!V!W!X!Y!Z![(B";
$ok .= "$B!^!_!`!b!e!f(B";

my $x = '!!!!';
my $a = '$B(2(B';
my $b = '$B(4(B';
$ok .= "$x$a$b";

($ng = $zenkaku) =~ s/[$ok]//g;

my $fatal;
my $warn;
my @argv = @ARGV;
my $inName = '';

sub fatal {
    my $re = $_[0];

    $fatal .= "|$re" if (/$re/);
    s/$re/\e[7m$&\e[m/g if ($opt_v);
}

sub warn {
    my $re = $_[0];

    $warn .= "|$re" if (/$re/);
    s/$re/$a$&$b/g if ($opt_v);
}

while (<>) {
    my $orig;

    # $B%3%a%s%H%9%-%C%W(B
    next if (/^\.\\"/);

    chop;

    $orig = $_;
    $fatal = $warn = '';

    $inName = ($1 =~ /^$BL>>N(B$/) if (/^\.Sh (.*)$/i);

    # $B6gFIE@;XDj(B
    &fatal('[$B!$!%(B]');
    &fatal('[^\s!-~][,.]\s') if ($opt_s);

    # NAME($BL>>N(B)$B%;%/%7%g%s0J30$G$O7IBN(B
    if ($inName) {
	&fatal('($B$G$9(B|$B$^$9(B)$B!#(B?$');
    }
    elsif ($opt_s) {
	&fatal('($B$k(B|[^$B$G$^(B]$B$9(B|$B$@(B|$B$J$$(B|[$B$^$m(B]$B$&(B)$B!#(B');
	&fatal('([^$B$G$^(B]$B$7(B|[$B$$$-$C$l$2(B])$B$?!#(B');

#	# JPERL's Bug !?
#	#    s/($B$G$9(B|$B$^$9(B|$B$^$;$s(B|$B$^$7$?(B|$B$7$g$&(B|$B$/$@$5$$(B|$B2<$5$$(B)$B!#(B/$1 $B!#(B/g;
#	s/($B$G$9(B)$B!#(B/$1 $B!#(B/g;
#	s/($B$^$9(B)$B!#(B/$1 $B!#(B/g;
#	s/($B$^$;$s(B)$B!#(B/$1 $B!#(B/g;
#	s/($B$^$7$?(B)$B!#(B/$1 $B!#(B/g;
#	s/($B$^$7$g$&(B)$B!#(B/$1 $B!#(B/g;
#	s/($B$/$@$5$$(B)$B!#(B/$1 $B!#(B/g;
#	s/($B2<$5$$(B)$B!#(B/$1 $B!#(B/g;
#	&fatal('[^ !-~]$B!#(B');
#	s/ $B!#(B/$B!#(B/g;
    }

    print "FATAL: $ARGV:$.:$_$end\n" if ($fatal);

    $_ = $orig;
    if ($opt_w) {
	# abc$B!"$"$$$&(B	abc$B!#$"$$$&(B
	s/[$B!"!#(B]/$x$&/g;

	# $B$"$$$&!"(Babc	$B$7$^$9!#(Babc	$B$"$$$&!&(Babc
	s/[$B!"!#!&(B]/$&$x/g;

	# abc$B!V(Bde$B!W(Bfg	abc$B!X(Bde$B!Y(Bfg	abc$B!Z(Bde$B![(Bfg
	# $B$"$$(B/$B$&$((B/$B$*(B
	s([$B!V!W!X!Y!Z![(B/])($x$&$x)g;

	# $B$"$$(B!$
	s/!/$x$&/g;

	# $B$"$$(B\c$
	s/\\c$/$x$&/g;

	# \&$B$"$$(B
	s/\\&/$&$x/g;

	# \fB$B$"$$(B\fP$B$&$((B
	# \fI$B$"$$(B\fP$B$&$((B
	s/\\f[BIP]/$x$&$x/g;

	# \*(lq$B$"$$$&(B\*(rq
	s/\\\*\(lq/$&$x/g;
	s/\\\*\(rq/$x$&/g;

	# $B$"$$(B\(em
	# $B$"$$(B\(dg
	s/\\/$x$&/g;

	# $B$"$$(B `$B$&$((B' $B$*(B	$B$"$$(B ``$B$&$((B'' $B$*(B
	s/``?/$&$x/g;
	s/''?/$x$&/g;

	# $B$"$$(B "$B$&$((B" $B$*(B
	# ^"$B$"$$(B"$
	# ("$B$"$$(B")	{"$B$"$$(B"}	["$B$"$$(B"]	<"$B$"$$(B">
	# (`$B$"$$(B')	{`$B$"$$(B'}	[`$B$"$$(B']	<`$B$"$$(B'>
	# (``$B$"$$(B'')	{``$B$"$$(B''}	[``$B$"$$(B'']	<``$B$"$$(B''>
	s/(^|\s|[({[<])"/$&$x/g;
	s/"(\s|$|[)}\]>])/$x$&/g;
	s/[({[<]``?/$&$x/g;
	s/''?[)}\]>]/$x$&/g;

	# $B$"$$(B ($B$&$((B) $B$*(B	$B$"$$(B {$B$&$((B} $B$*(B	$B$"$$(B [$B$&$((B] $B$*(B	$B$"$$(B <$B$&$((B> $B$*(B
	# ^($B$"$$(B)$
	s/(^|\s)[({[<]/$&$x/g;
	s/[)}\]>](\s|$)/$x$&/g;

	# $B$"$$(B:$	$B$"$$(B;$
	# $B$"$$(B: $B$&$((B: $B$*(B	$B$"$$(B; $B$&$((B; $B$*(B
	s/[:;]([\s]|$)/$x$&/g;

	# $B$"$$(B($B$&$((B)$B$*(B	$B$"$$(B{$B$&$((B}$B$*(B	$B$"$$(B[$B$&$((B]$B$*(B	$B$"$$(B<$B$&$((B>$B$*(B
	s/[(){}[\]<>]/$x$&$x/g;

	# $B$"$$(B:$B$&$((B:$B$*(B	$B$"$$(B;$B$&$((B;$B$*(B
	s/[:;]/$x$&$x/g;

	# ($B$"$$(B)$B!"(B	[$B$"$$(B]$B!"(B	{$B$"$$(B}$B!"(B	<$B$"$$(B>$B!"(B
	# ($B$"$$(B)$B!#(B	[$B$"$$(B]$B!#(B	{$B$"$$(B}$B!#(B	<$B$"$$(B>$B!#(B
	s/([)\]}>])([$B!"!#(B])/$1$x$2/g;

	# $B$"$$(B1$B$&$((B2$B$*(B
	s/[0-9]/$x$&$x/g;

	# 2$B%P%$%HJ8;z;HMQ(B
	&warn("[$ng]");

	# $B1QC18l6h@Z$j$,A43Q6gFIE@(B
	# $BA43Q6gFIE@8e$K6uGr$H1QC18l(B
	&warn('["-~][$B!"!#(B]|[$B!"!#(B] ["-~]') if ($opt_s);

	# $B$=$NB>$OK>$^$7$/$J$$(B
	&warn('[^\s!-~]["-~]|["-~][^\s!-~]');

	# $BI|5"(B
	s/$x//g;

	if ($warn) {
	    s/$a/\e[7m/g;
	    s/$b/\e[m/g;
	    print "WARN:  $ARGV:$.:$_$end\n"
	}
    }

    close(ARGV) if (eof);
}

----Next_Part(Thu_Apr_27_20:54:19_2000_518)----
