Article View: fj.lang.perl
Article #53jfmt [Re: jcode.pl]
From: Katsujiroh NAKANO
Date: Sat, 21 Nov 1992 11:56
Date: Sat, 21 Nov 1992 11:56
270 lines
6848 bytes
6848 bytes
>>>>> In <9227@coins.is.tsukuba.ac.jp>,
>>>>> bizenya@coins.is.tsukuba.ac.jp == $BCfLn(B said ....
$BCfLn(B> $BCfLn(B@$BC^GHBg3X>pJs$G$9(B.
$BCfLn(B> $B$$$d$"(B, $BD>@\$$$?$@$$$?$N$K(B, report $B$b$7$J$$$G?=$7Lu$J$$$G(B
$BCfLn(B> $B$9(B. $B$H$j$"$($:(B, $B<j;}$A$N<+J,$N:n$C$?(B jperl + kconv$BHG$N$b$N(B
$BCfLn(B> $B$r(B jcode $B$G=q$-D>$7$F$_$^$7$?(B.
$B$H$j$"$($:=P$7$^$9(B.
$BF|K\8lHG(B fmt + $B&A$N(B jfmt $B$G$9(B.
$B%P%0$^$@$$$C$Q$$$"$k$H;W$$$^$9$,(B,
$B3'$5$s$H0l=o$KH/E8$7$F$$$-$?$$$H;W$$$^$9$N$G(B,
$B$h$m$7$/$*4j$$$7$^$9(B 8-}
README + source$B$G$9(B.
-- cut here -- "README"
jfmt -- $BF|K\8l(Bformatter
{ > $B$G;O$^$k9T$O0zMQ$G:8C<$G$"$k! (B}
{ $BNc$K;H$C$F$$$k(Bjfmt$B$N(Bwidth$B$O(B40 }
1. $B35MW(B
$BF|K\8l$r@5$7$/07$&(B fmt clone $B$,M_$7$$$H;W$C$F:n$j$^$7$?(B.
$B1Q8lHG(Bfmt$B$H0c$&E@$O!"EvA3F|K\8l$r@5$7$/07$&$H$$$&$3$H$NB>$K!"4JC1(B
$B$J(Bformatting$B$b9T$J$$$^$9!#Nc$r<($7$^$9!#(B
$B!&(B $itemhead $B$G;O$^$k9T$O2U>r=q$N9T$N;O$^$j$H$_$J$7$F!"$9$3$7(B
indent$B$r$D$1$F!"5M$a$k!#(B
before:
> $B!&(B $B:#F|$N@$3&>p@*$OHs>o$KIT0BDj$G!"C/$K$b9T$/Kv$,$o$+$i$J$$!#(B
+--------------------------------------+
after:
> $B!&(B $B:#F|$N@$3&>p@*$OHs>o$KIT0BDj$G!"(B
> $BC/$K$b9T$/Kv$,$o$+$i$J$$!#(B
$B!&(B /^\s+>/ $B$G;O$^$k9T$O0zMQ$H$_$J$7$F!"(Bindentation$B$rJQ$($J$$!#(B
before:
> $B!&(B $BJ?2>L>$GF~NO$9$k$N$K$O<!$N$h$&$K(B
>
> > % dict -k yanbarukuina
>
>$B$HBG$C$F2<$5$$!#(B
+--------------------------------------+
after:
> $B!&(B $BJ?2>L>$GF~NO$9$k$N$K$O<!$N$h$&$K(B
>
> > % dict -k yanbarukuina
>
> $B$HBG$C$F2<$5$$!#(B
2. install
jcode.pl $B$H(B perl $B$,I,MW$G$9(B. $B@hF,$N(B perl $B$N(B path $B$@$1JQ99$7$F(B, $B$=(B
$B$N$^$^$*;H$$2<$5$$(B.
3. customize
$B<!$NJQ?t$,(B, $B$=$l$>$l$N%Q%?!<%s$rI=$7$^$9(B.
$B!&(B [$postkinsoku] $B9TKv$KMh$k$Y$-$G$J$$J8;z(B.
$B!&(B [$prekinsoku] $B9TF,$KMh$k$Y$-$G$J$$J8;z(B.
$B!&(B [$itemhead] $B0zMQ$N@hF,$H$_$J$9(B pattern.
$B!&(B [$untermword] $B9T$r1[$($FM_$7$/$J$$(B pattern $B$r9=@.$9$kJ8;z(B.
$B$^$?(B,
4. options
-N N $B$,B7$($kI}$G$9(B. -w N $B$G$bF1$8$$$_$K$J$j$^$9(B.
-o $B=PNO%3!<%I$G$9(B. 'jis', 'euc', 'sjis'$B$NCf$+$i$*A*$S2<$5$$(B.
5. bugs
$B2?$,(B bug $B$+$C$F(B, $B$=$j$cCY$/$F$?$^$s$J$$$3$H$K$D$-$^$9(B.
$B$=$N$&$A(B C $B$G=q$-D>$7$^$9$M(B.
-- cut here -- "jfmt"
#!/usr/local/bin/perl
#
# jfmt - Japanese fmt
#
# usage: jfmt [-(w|width) N] [-joutcode JCODE] [filename ...]
#
$version = 'release 0 revision 0.1';
#
require 'jcode.pl';
# inner kanji code for perl
$icode = 'euc';
# standard values
$tabstop = 8;
$w = 70;
$ocode = 'jis';
$SRC = <<'_END_KANJI_BLOCK_';
$postkinsoku = '(\?|\>|\)|\}|\]|$B$C(B|$B$c(B|$B$e(B|$B$g(B|$B$!(B|$B%!(B|$B$#(B|$B%#(B|$B$%(B|$B%%(B|$B$'(B|$B%'(B|$B$)(B|$B%)(B|$B$C(B|$B!<(B|$B!#(B|$B!"(B|$B!W(B|$B!K(B|$B![(B|$B!M(B|$B!O(B|$B!Q(B|$B!S(B|$B!U(B|\,|\.|\')';
$prekinsoku = '($B!V(B|$B!J(B|$B!N(B|$B!P(B|$B!R(B|$B!T(B|$B!L(B|\[|\(|\<|\{|\`)';
$itemhead = '($B!z(B|$B!y(B|$B!v(B|$B!{(B|$B!}(B|$B!|(B|$B""(B|$B"#(B|-|$B!&(B|#|\*|\(?[0-9]+[.)])';
$untermword = '[-a-zA-Z0-9\026]';
_END_KANJI_BLOCK_
$sp = '(\026*\025| )';
&jcode'convert(*SRC, $icode);
eval $SRC || die "KANJI BLOCK:".$!."\n";
# user customise values
$ENV{'JFMT'} && eval $ENV{'JFMT'};
# parse command line option
while ($ARGV[0] =~ /^-/) {
$_ = shift;
if (/^-(width|w)$/) {$w = shift;}
elsif (/^-(\d+)$/) {$w = $1;}
elsif (/^-v/) {warn $version."\n";exit(0);}
elsif (/^-ocode$/) {
$joutcode = shift;
if (!/^(jis|euc|sjis)$/){
warn "jfmt: no such kanji code '$joutcode'\n";
exit(1);
}
}
else {
print STDERR 'jfmt: \'$_\', no such option.';
exit(1);
}
}
#
# main routine
#
$k = 1;
$indent = '';
$line = $buf = '';
while (<>) {
&wraping(*_);
}
&flush;
sub wraping {
local(*_) = @_;
chop;
&jcode'convert(*_, $icode);
if (/\t/) {&untabify(*_);}
if (/^(>>>>>|${sp}+>|[^\s]+> )/){
$line .= $buf;
&flush;
$line = "$_";
&flush;
print "\n";
$quote = 1;
next;
}
if (/^${sp}*$/) {
if ($quote) {$indent = $recindent;}
else {$recindent = $indent; $indent = '';}
&flush;
print "\n";
$quote = 0;
next;
}
if (/^(${sp}+)([^\025 ].*)$/) {
$line .= $buf;
$buf = '';
$_ = $+;
$ws = $1;
if (length($indent) != length($ws)){
&flush;
$line = $ws;
if (/^$itemhead/) {
$indent = ' ' x (length($ws) + 2);
}
else {$indent = '';}
}
#else {$line =~ s/^${indent}//;}
}
if (/($untermword|[.,)(])$/) {
$_ .= ' ';
}
foreach (/[\200-\377]?./g) {
$k = 1;
if ($_ =~ /\s/) {
if (length($buffer.$i.$_) >= $w) {
$line .= $buf;
&flush;
}
else {
$line .= $buf . $_;
}
$buf = '';
next;
}
if (/$prekinsoku/
&& length($line.$buf.$_) >= ($w - 2)) {
$line .= $buf;
$buf = '';
&flush;
$line .= $_;
next;
}
if (/$postkinsoku/) {
$line .= $buf . $_;
$buf = '';
next;
}
if (/$untermword/) {
$buf .= $_;
if(length($line.$buf) >= $w) {
&flush;
}
next;
}
# otherwise ...
if (length($line.$buf.$_) >= $w) {
&flush;
}
$line .= $buf . $_;
$buf = '';
}
}
sub untabify {
local(*_) = @_;
s/^([^\t]*)\t/$1 .
("\026" x ($tabstop - (length($1) % $tabstop) - 1)). "\025"/eg;
}
sub tabify {
local(*_) = @_;
s/[^026]\026*\025/\t/g;
}
sub flush {
if ($line =~ /^${sp}+$/) {return;}
$line =~ s/([^\026 ])[\026 ]+$/$1/;
if ($line) {
local($l) = $line;
&tabify(*l);
&jcode'convert(*l, $ocode, $icode);
if ($k) {print $l."\n";}
else {print $l;}
$k = 0;
}
$line = $indent;
}
Technical Details
Message-ID:
<9253@coins.is.tsukuba.ac.jp>Path:
arc1-ca.pugleaf.net!sparky!uunet!stanford.edu!sun-barr!sh.wide!wnoc-kyo!kuis!s.u-tokyo!kekux!crimson!ume!is.tsukuba.ac.jp!coins!bizenyaReferences:
<Bw27JJ.EAF@sran230.sra.co.jp> <BxwFqC.3F8@sran230.sra.co.jp> <9227@coins.is.tsukuba.ac.jp>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!sparky!uunet!stanford.edu!sun-barr!sh.wide!wnoc-kyo!kuis!s.u-tokyo!kekux!crimson!ume!is.tsukuba.ac.jp!coins!bizenya From: bizenya@coins.is.tsukuba.ac.jp (Katsujiroh NAKANO) Newsgroups: fj.lang.perl Subject: jfmt [Re: jcode.pl] Message-ID: <9253@coins.is.tsukuba.ac.jp> Date: 21 Nov 92 11:56:37 GMT References: <Bw27JJ.EAF@sran230.sra.co.jp> <BxwFqC.3F8@sran230.sra.co.jp> <9227@coins.is.tsukuba.ac.jp> Distribution: fj Organization: Coll. Of Info. Sci., U. of Tsukuba, Tsukuba-City, Ibaraki, Japan Lines: 270