#!/bin/sh # This is a shell archive (produced by GNU sharutils 4.2). # To extract the files from this archive, save it to some FILE, remove # everything before the `!/bin/sh' line above, then type `sh FILE'. # # Made on 1998-11-16 19:21 GMT+0900 by <kono@rananim.ie.u-ryukyu.ac.jp>. # Source directory was `/private/tmp/nkf17/nkf17'. # # Existing files will *not* be overwritten unless `-c' is specified. # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 15066 -rw-r--r-- nkf.doc # 143 -rw-r--r-- MANIFEST # 434 -rw-r--r-- Makefile # 3333 -rw-r--r-- nkf.1 # 8015 -rw-r--r-- nkf.1j # 56296 -rw-r--r-- nkf.c # 12697 -rw-r--r-- nkf_test.pl # 115 -rw-r--r-- NKF/Changes # 51 -rw-r--r-- NKF/MANIFEST # 367 -rw-r--r-- NKF/Makefile.PL # 1957 -rw-r--r-- NKF/NKF.pm # 1689 -rw-r--r-- NKF/NKF.xs # 423 -rw-r--r-- NKF/README # 12693 -rw-r--r-- NKF/test.pl # save_IFS="${IFS}" IFS="${IFS}:" gettext_dir=FAILED locale_dir=FAILED first_param="$1" for dir in $PATH do if test "$gettext_dir" = FAILED && test -f $dir/gettext \ && ($dir/gettext --version >/dev/null 2>&1) then set `$dir/gettext --version 2>&1` if test "$3" = GNU then gettext_dir=$dir fi fi if test "$locale_dir" = FAILED && test -f $dir/shar \ && ($dir/shar --print-text-domain-dir >/dev/null 2>&1) then locale_dir=`$dir/shar --print-text-domain-dir` fi done IFS="$save_IFS" if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED then echo=echo else TEXTDOMAINDIR=$locale_dir export TEXTDOMAINDIR TEXTDOMAIN=sharutils export TEXTDOMAIN echo="$gettext_dir/gettext -s" fi touch -am 1231235999 $$.touch >/dev/null 2>&1 if test ! -f 1231235999 && test -f $$.touch; then shar_touch=touch else shar_touch=: echo $echo 'WARNING: not restoring timestamps. Consider getting and' $echo "installing GNU \`touch', distributed in GNU File Utilities..." echo fi rm -f 1231235999 $$.touch # if mkdir _sh18783; then $echo 'x -' 'creating lock directory' else $echo 'failed to create lock directory' exit 1 fi # ============= nkf.doc ============== if test -f 'nkf.doc' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'nkf.doc' '(file already exists)' else $echo 'x -' extracting 'nkf.doc' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'nkf.doc' && NAME X nkf - $B%M%C%H%o!<%/MQ4A;z%3!<%IJQ49%U%#%k%?(B v1.7 X SYNOPSIS X nkf [options] [in_file] ...Unix$BHG(B X nkf [options] [in_file] [out_file for -O] ...DOS$BHG(B X wnkf [options] [in_file] [outfile for -O] ...Windows16bit(3.x)$BHG(B X nkf32 [options] [in_file] [outfile for -O]...Windows32bit(95/NT)$BHG(B X nkf2 [options] [in_file] [outfile for -O] ...OS/2$BHG(B X X $B!JL>>N$O!"F1$8(BPath$B>e$K$"$C$F$b6hJL$G$-$k$h$&$KJQ99$7$F$$$k!#!K(B X DESCRIPTION X nkf$B$O%M%C%H%o!<%/$G%a!<%k$d%K%e!<%9$NFI$_=q$-$r$9$k$?$a$K:n$i$l$?!"4A(B X$B;z%3!<%I$NJQ49%U%#%k%?$G$"$k!#(B X X$B$3$N(Bnkf$B$NFCD'$H$7$F$O!"F~NO4A;z%3!<%I7O$NE}7WE*$J<+F0G'<15!G=$,$"$k!#(B X$B$3$N$?$a!"MxMQ<T$O!"F~NO4A;z%3!<%I7O$,2?$G$"$k$+$rCN$i$J$/$F$b!"=PNO4A;z(B X$B%3!<%I7O$N$_;XDj$9$l$PNI$$$3$H$K$J$k!#$?$@!"$3$NH=Dj5!9=$O!"M}O@E*$K$O40(B X$BA4$G$O$J$$$,!"DL>o$N%K%e!<%9$d%a!<%k$N%a%C%;!<%8$K$D$$$F$O3N<B$KF0:n$9$k(B X$B0BA4$J$b$N$K$O$J$C$F$$$k!#(B X X$B8=:_!"(Bnkf$B$,G'<1$G$-$kF~NO$N4A;z%3!<%I7O$O!"$$$o$f$k!V(BJIS$B%3!<%I!W(B(ISO- 2022-JP$B$K4p$E$/$b$N(B)$B!"(BMS$B4A;z%3!<%I(B($B%7%U%H(BJIS)$B!"F|K\8l(BEUC(AT&T$B%3!<%I(B)$B$N$$(B X$B$:$l$+$G$"$k!#=PNO$9$k4A;z%3!<%I7O$b!"$3$N(B3$B<oN`$G$"$k!#(B X X$BF~NO$O!"%U%!%$%k$r;XDj$7$J$1$l$P!"I8=`F~NO$H$J$k!#=PNO$OI8=`=PNO$G$"$k!#(B X X$B;XDj$G$-$k%*%W%7%g%s$O!"0J2<$NDL$j!#(B-mu $B$N$h$&$KB3$1$k$3$H$,$G$-$k!#(B X X -b $B%P%C%U%!%j%s%0=PNO$r9T$&!#(B($B%G%U%)%k%H(B) X -u $B=PNO;~$K!"%P%C%U%!%j%s%0$7$J$$!#(B X rsh localhost | nkf -u $B$H$$$&$h$&$K;H$&!#(B X X -t $B2?$b$7$J$$!#(B X X -j JIS$B%3!<%I$r=PNO$9$k!#(B($B%G%U%)%k%H(B) X X -e EUC$B%3!<%I$r=PNO$9$k!#(B X X -s $B%7%U%H(BJIS$B%3!<%I$r=PNO$9$k!#(B X X -i? JIS$B4A;z$r;X<($9$k%7!<%1%s%9$H$7$F(B ESC-'$'-?$B$r;HMQ$9$k!#(B X ($B%G%U%)%k%H$O!"(BESC-'$'-'B') X X -o? 1$B%P%$%H1Q?tJ8;z%;%C%H$r;X<($9$k%7!<%1%s%9$H$7$F!"(BESC- X '('-?$B$r;HMQ$9$k!#(B($B%G%U%)%k%H$O!"(BESC-'('-'B') X X -r ROT13/47$B$NJQ49$r$9$k!#(B X X -v $B%P!<%8%g%s$rI=<($9$k!#(B X X -T $B%F%-%9%H%b!<%I$G=PNO$9$k!#(B(MS-DOS$B>e$G$N$_8zNO$r;}$D(B) X X -m MIME $B$r2rFI$9$k!#(B(defalut on) X ISO-2022-JP(base64)$B$H(BISO-8859-1(Q encode) X $B$N$_$r2rFI$9$k!#(BISO-8859-1 (Latin-1) $B$r2rFI$9$k;~$O!"(B X -l$B%U%i%0$bI,MW$G$"$k!#(B X -mB MIME base64 stream $B$r2rFI$9$k!#%X%C%@$J$I$O<h$j=|$/$3$H!#(B X -mQ MIME quoted stream $B$r2rFI$9$k!#(B X -m0 MIME $B$r2rFI$7$J$$!#(B X X -l 0x80-0xfe$B$N%3!<%I$r(BISO-8859-1 (Latin-1)$B$H$7$F07$&!#(B X JIS$B%3!<%I%"%&%H%W%C%H$H$NAH9g$;$_$N$_M-8z!#(B X -s, -e, -x$B$H$ON>N)$7$J$$!#(B X X -f? $B0l9T(B?$BJ8;z$K$J$k$h$&$K4JC1$J@07A$r$*$3$J$&!#%G%U%)%k%H$O(B X 60$BJ8;z$G$"$k!#(B X X -Z X0208$BCf$N1Q?t;z$H<c43$N5-9f$r(BASCII$B$KJQ49$9$k!#(B X -Z1 $B$O(BX0208$B4V3V$r(BASCII space$B$KJQ49$9$k!#(B X -Z2 $B$O(BX0208$B4V3V$r(BASCII space $BFs$D$KJQ49$9$k!#(B X X X -J -E -S -X -B X $B4|BT$5$l$kF~NO%3!<%I$N@-<A$r;XDj$9$k!#(B X -J ISO-2022-JP$B$r2>Dj$9$k!#(B X -E $BF|K\8l(BEUC(AT&T)$B$r2>Dj$9$k!#(B X -S MS$B4A;z$r2>Dj$9$k!#(BX0201$B2>L>$b2>Dj$5$l$k!#(B X -X MS$B4A;zCf$K(BX0201$B2>L>$,$"$k$H2>Dj$9$k!#(B X -B $B2u$l$?(B(Broken)JIS$B%3!<%I!#(BESC$B$,$J$/$J$C$?$H2>Dj$9$k!#(B X -B1 ESC-(, ESC-$ $B$N$"$H$N%3!<%I$rLd$o$J$$(B X -B2 $B2~9T$N$"$H$K6/@)E*$K(BASCII$B$KLa$9(B X X -x $BDL>o$*$3$J$o$l$k(BX0201$B2>L>(B->X0208$B$N2>L>JQ49$r$7$J$$$G!"(B X X0201$B2>L>$rJ]B8$9$k!#F~NO$O!"(BMS-Kanji$B$N(B1byte$B2>L>!"(BSO/SI$B!"(B X ESC-(-I, SSO$B$r<u$1IU$1$k!#=PNO$O!"F|K\8l(BEUC$BCf$G$O(BSSO$B!"(B X JIS$B$G$O(B ESC-'('-I $B$r;H$&!#(B X X -O $B%U%!%$%k(B out_file $B$K=PNO$,J]B8$5$l$^$9!#%U%!%$%kL>$,;XDj$5$l(B X $B$F$$$J$$>l9g$O!"(B'nkf.out'$BKt$O(B'wnkf.out'$B$K=PNO$9$k!#(B X X -c $B9TKv$K(BCR$B%3!<%I(B(0D)$B$rDI2C(B($B3HD%5!G=(B -T $B$HJ;MQIT2D(B) X X -d $B9TKv$+$i(BCR$B%3!<%I(B(0D)$B$r:o=|(B($B3HD%5!G=(B -T $B$HJ;MQIT2D(B) X X AUTHOR X X$B;T@n(B $B;j(B ichikawa@flab.fujitsu.co.jp (was ichikawa@fujitsu.JUNET) X ACKNOWLEDGE X X morb@fujitsu, kiss@ayumi.stars.flab.fujitsu, cen122@flab.fujitsu, X yuki@flab.fujitsu $BB>!"(Bfujitsu & flab.fujitsu$B$N3'$5$s$N6(NO$K46<U!#(B X shinoda@cs.titech, kato@cs.titech, uematsu@cs.titech TNX X kono@ie.u-ryukyu.ac.jp, GHG00637@niftyserve.or.jp X BUGS X X$B<B$O!"F~NO$N%3!<%I7O$NH=Dj$O!"(BEUC$B$H%7%U%H(BJIS$B$H$N<+F0H=Dj$G$"$j!":G=i$K(B X$BFCDj$G$-$kJ8;z$,Mh$?;~E@$G3NDj$7$F$7$^$&!#$=$7$F!"FCDjITG=$N4V$OJ]N1%P%C(B X$B%U%!$K$?$a$F$*$+$l!"3NDj8e$K=hM}$5$l$k!#$3$N$?$a!"(B X X 1)7$B%S%C%H(BJIS$B$O>o$KG'<1$5$l$k!#%7%U%H(BJIS$B!"(BEUC$B:.9g$b$[$H$s$I$N(B X $B>l9g$OLdBj$,$J$$!#$?$@$7!"(B X X 2)$B%7%U%H(BJIS$B$N(BX0201$B2>L>$H(BEUC$B$,<1JL$G$-$J$$!#$7$?$,$C$F!"(B X $B%G%U%)%k%H$G$O%7%U%H(BJIS$B$N(BX0201$B2>L>$O$J$$$H2>Dj$7$F$$$k!#(B X X 3)$B$A$g$C$H!"$N$m$$!#(B($B=i4|$NHG$h$j$O2~NI$5$l$F$$$k(B) X JIS$B4A;z$N?75lHG$N6hJL$H$+!"(BASCII$B$H(BJIS$B%m!<%^;z$N6hJL$J$I$K$D$$$F$OJ]B8$5(B X$B$l$J$$!#(B X X$B$3$N%U%#%k%?$NJQ49$O!"%3!<%I7O$KBP1~$7$?0l3g<LA|$r;\$9$@$1$J$N$G!"30;z(B X$B$dFC<l5-9f$d7S@~AGJR$J$I!"(BJIS$BBh0l!"BhFs?e=`I=$K$*$$$FDj5A$5$l$F$$$J$$%3!<(B X$B%I$K3F<R$K$h$j3d$jEv$F$i$l$?J8;z$,$I$&$J$k$+$^$G$O4XCN$7$J$$!#$=$7$F!"Bh(B X$BFs?e=`$,$J$$$H$+$"$k$H$+$K$h$kLdBj$O!"$3$N%U%#%k%?$NHO0O30$H;W$($k!#$=$l(B X$B$i$O!"=q$-<j$N@UG$$G$J$s$H$+$7$F$b$i$$$?$$!#(B X X$B$$$:$l$K$;$h!"DL>o$N%K%e!<%9$N5-;v$K$D$$$F$OLdBj$O$J$/JQ49$G$-$k$O$:$G(B X$B$"$k!#(B($B$H;W$&$N$@$,!":#$R$H$D<+?.$O$J$$(B) X kono@csl.sony.co.jp (Shinji Kono) $B$K$h$kJQ99!#(B X nkf 1.4 $B$N>iD9$@$1$I@N$OJXMx$@$C$?%*%W%7%g%s$N$$$/$D$+$O:o=|$5$l$F$$$k!#(B -n -B$B$J$I!#(B X XX0201$B2>L>$O%G%U%)%k%H$G(BX0208$B$KJQ49$5$l$k!#$?$@$7!"%7%U%H(BJIS$B$N(BX0201$B2>L>(B X$B$O%G%U%)%k%H$G$O(BEUC$B$@$H2r<a$5$l$F$7$^$&!#$3$l$,K>$^$7$/$J$$;~$K$O(B -S $B$d(B -X $B$J$I$N%U%i%0$r;H$($PNI$$!#(B-X$B$r;XDj$9$k$H0lC63NDj$7$?%7%U%H(BJIS$B$+$i(B EUC$B$K0\9T$9$k$3$H$O$J$$!#(BESC-(-I$B$K$h$k(B X0201$B$O>o$KG'<1$5$l$k!#(BSI/SO SSO$B$O!"(B-l$B$,;XDj$5$l$F$$$J$1$l$P(BX0201$B$H2r<a$9$k!#(B X MIME decode$B$O!"(BISO-2022-JP$B$N(Bbase64$B$H!"(BISO-8859-1$B$N(B16$B?J(Bencode$B$N$_(B decode$B$9$k!#(B MIME decode$B$O!"C1=c$J2~9T$d6uGr$O0BA4$KFI$_Ht$P$5$l$k!#(B X$B$H$$$&$3$H$O!"(B MIME decode$BCf$N6uGr$OJ]B8$5$l$J$$!#(Bless$B$d(Brn$B$G9T$,J,3d(B X$B$5$l$?;~$O!"(B Terminal$B$K$h$C$F0[$J$k(B ESC-[-K $B$J$I$,A^F~$5$l$k$N$G!"(B X$B40A4$K$O(Bdecode $B$G$-$J$$!#(BISO-8859-1 $B=PNO$O(BJIS $B%3!<%I=PNO$H$7$+N>N)$7$J$$!#(B X Fold $B5!G=$O(Bfmt$B$H0[$J$j9TF,$N6uGr$rL5;k$9$k!#6XB'=hM}$O$"$k$,;XDj$5$l$?(B X$BD9$5(B+5$B$G6/@)2~9T$9$k!#(B X XX0201$B2>L>$O(Brot47$B$5$l$J$$!#(B X nkf 1.6 X kono@ie.u-ryukyu.ac.jp (Shinji Kono) $B$K$h$kJQ99!#(B X MIME $B$N%A%'%C%/$r$-$S$7$/$7$F(B($BCY$/$J$C$?J,(B)$B0BA4$K$J$C$?!#(B X$B$7$?$,$C$FJ#?t9T$K$^$?$,$k(BMIME$B$O(Bdecode$B$5$l$J$$!#(B MIME $B$ND>8e$N6uGr$OFI$_Ht$P$9!#(BQ-Encding $B$N(B_$B$O6uGr$KJQ49$5$l$k!#(B X -B $B$N(Blevel$B$r(B0,1,2 $B$KA}$d$7$?!#(BMIME$B$N(Bbase64, Q-Encoding$B$r2rFI$9$k(B X$B5!G=$rIU$1$?!#%X%C%@$J$I$O2rFI$7$J$$$N$G!"(BEncode$B$5$l$?ItJ,$@$1$r(B X$BDL$9I,MW$,$"$k!#(B -mB $B$O!"(Bnkf1.5$B$H0c$&F0$-$r$9$k$N$G!"(B-B -m $B$H$9$k$3$H!#(B X nkf 1.6.1 X X -Z $B$G!A(B -> ~$B$NJQ49$r;_$a$?!#(B X -Z1 $B$G(BX0208$B4V3V(B->ASCII space$B$NJQ49$r$*$3$J$&!#(B X -Z2 $B$G(BX0208$B4V3V(B->ASCII space 2$B8D$NJQ49$r$*$3$J$&!#(B X X kabe@dais.is.tohoku.ac.jp (Taketo Kabe) $B$K$h$kF|K\8l(Broff $B$N%=!<%9$,(B X $B$D$-$^$7$?!#(B X ======== nkf 1.62 X GHG00637@niftyserve.or.jp (COW) $B$K$h$kJQ99(B X X$B!!;T@n;a$N(Bnkf$B$O!"(BUNIX$BMQ$N%D!<%k$G$"$k$N$G!"=PNO$N%G%U%)%k%H$N@_Dj$,(B7bit X$B$N(BJIS$B%3!<%I$G$"$C$?$b$N$r!"(BDOS,Windows$BHG$G$O!"(BS-JIS$B%3!<%I$r=PNO%G%U%)%k(B X$B%H$K@_Dj$7$?!#$3$l$K$h$j!"(BUNIX$B$G:n@.$5$l$?%U%!%$%k$r!"(BDOS,Windows$B>e$G1\(B X$BMw$9$k$3$H$,$G$-$k!#$=$NB>$N5!G=DI2C$H$7$F%P!<%8%g%s>pJs$H;HMQJ}K!$rI=<((B X$B$9$k$h$&$K$7!"%U%!%$%k=PNO5!G=$rDI2C$7$?!#!J:F%3%s%Q%$%k$GJQ992DG=!K(B X Windows16bit$BHG$N$_$N3HD%$K$D$$$F(B X X$B!!(BWindows16bit$BHG$K$D$$$F$O!"%j%@%$%l%/%H$d%Q%$%W5!G=$,;H$($^$;$s!#$h$C$F$3$N(B X$B>l9g$K$O(B-O$B%*%W%7%g%s$rMxMQ$7$F%U%!%$%k=PNO$5$l$?$b$N$rMxMQ$7$F$b$i$$$?$$!#(B X X$BNc!'!!(Bwnkf -e -O nkf.in nkf.out ...nkf.in$B$r(BEUC$B%3!<%I$G(Bnkf,out$B$K=PNO$9$k!#(B X X$B!!(BWindows16bit$BHG$G$O!"I8=`=PNO5Z$S%(%i!<=PNO$,%&%$%s%I%&2hLL$K$J$j$^$9!#I8=`(B X$B=PNO$N>l9g$O%9%/%m!<%kF0:n$,DI2C$5$l$F$*$j!"2hLL$,N.$l$J$$$h$&$K$J$C$F$$$k!#(B X$B$@$@$7!"(B-O$B%*%W%7%g%s$r;XDj$7$?>l9g$K$O%U%!%$%k$K=PNO$5$l$k$?$a!"2hLL$K(B X$B$O2?$bI=<($5$l$J$$!#(B X$B$^$?!"(BEasyWin$B$N%P!<%8%g%s%"%C%W$G!"(B400$B9T$^$G$N%/%j%C%W%\!<%IE>Aw$H0u:~$b(B X$B2DG=$H$J$C$?!#$^$?!"%I%i%C%0!&%"%s%I!&%I%m%C%W$K$bBP1~$7$F$$$k!#(B X X$B!!(BUNIX$B%U%!%$%k$N(BViewer$B$H$7$F;H$&$K$O!"0J2<$N$h$&$K;HMQ$9$k!#$3$l$O3HD%;R(B X$B$r4XO"$E$1$7$F$b;HMQ2DG=$H;W$o$l$k!#(B X X$BNc!'!!(Bwnkf in.euc ...EUC$B%3!<%I$N%U%!%$%k$r(BS-JIS$B$G1\Mw(B X$B!!!!!!(Bwnkf in.jis ...JIS$B%3!<%I$N%U%!%$%k$r(BS-JIS$B$G1\Mw(B X X$B$J$*!"$3$N(Bwnkf.exe$B$O(BDOS$BAk>e$G$O5/F0$G$-$J$$$N$G!"%3%^%s%I%i%$%s$G!"(B Windows16bit$B%=%U%H$,F0:n$G$-$k4D6-$G$"$k(BComWin,ComRun$BEy$rMxMQ$7$F$[$7$$!#(B (Windows95/NT$B$G$"$l$P!"%3%s%=!<%k$+$i<B9T$,2DG=$G$"$k!#(B) X DOS,OS/2,Windows32bit$BHG$K$D$$$F(B X X$B!!(BDOS,OS/2,Windows32bit$BHG$O(BUNIX$B$HF1$8$h$&$K%Q%$%W5Z$S%j%@%$%l%/%H$,2DG=(B X$B$G$"$k!#$h$C$F!"0J2<$N$h$&$K$7$F$b%U%!%$%k=PNO2DG=$G$"$k!#(B X X$BNc!'!!(Bnkf -e nkf.in > nkf.out ...nkf.in$B$r(BEUC$B%3!<%I$G(Bnkf,out$B$K=PNO$9$k!#(B X X$B!!(BViewer$B$H$7$F;HMQ$9$k>l9g$O0J2<$N$h$&$K$9$k!#(B X X$BNc!'!!(Bnkf in.euc | more ...EUC$B%3!<%I$N%U%!%$%k$r(BS-JIS$B$G1\Mw(B X$B!!!!!!(Bnkf in.jis | more ...JIS$B%3!<%I$N%U%!%$%k$r(BS-JIS$B$G1\Mw(B X X DOS,Windows$B$H(BUNIX$B4V$N%G!<%?JQ495!G=$K$D$$$F$O!"2~9T%3!<%I$N(BCR(0D)$B$r:o=|(B X$B$7$?$jDI2C$7$?$j$9$k5!G=$rDI2C$7$?!#(B(UNIX$B$N%"!<%+%$%V$rE83+$7$?;~$KJXMx(B) X X$BNc!'(B nkf -j -d nkf.man > nkf.jis ...nkf.man$B$r(BCR$B$r:o=|$7$F(BJIS$B%3!<%I$K(B X $BJQ49$7!"(Bnkf.jis$B$K=q$-9~$`!#(B X X$B!!(B-O$B%*%W%7%g%s$b;H$($k$h$&$KJQ99$7$?$N$G!">e5-$NNc$O<!$N$h$&$K;HMQ2DG=(B X$B!!$3$N%3%^%s%I%i%$%s$G%"%W%j$NCf$+$iD>@\5/F0$G$-$FJXMx$N$O$:$G$9$,!&!&(B X X$BNc!'(B nkf -j -d -O nkf.man nkf.jis X X$BDI2C%*%W%7%g%s$NMxMQ$K$D$$$F!"(B X X $BDI2C$5$l$?(B-c,-d$B%*%W%7%g%s$O!"(Bftp$B$GE>Aw$5$l$?%P%$%J%j05=L2rE`8e$N%F%-%9%H(B X$B$r(BUNIX$B$H(BDOS Windows$B4V$G;HMQ$G$-$k$h$&$K2~9T%3!<%I$rJQ49$9$k$N$KMxMQ$G$-$k(B X$B$H;W$&!#DL>o$O(B-T$B%*%W%7%g%s$@$1$G$b==J,$G$"$m$&!#(B X X$B?7(BOS/2$BHG;HMQ$K$*$1$kCm0U(B X X$B!!$3$N?7(BOS/2$BHG$rMxMQ$9$k$K$O!"(BGNU$B$K$h$k(Bemx 0.8h$B0J9_$N4D6-$OITMW$G$9!#(B X$B!!0J2<$K(BIBM VisualAge C++3.0$B$G$N<B9T%U%!%$%k:n@.<j=g$r<($9!#(B X icc /Fe nkf2.exe nkf.c X X$BJQ99MzNr(B X X$B$3$N(Bnkf$B$O!"(B1995$BG/(B3$B7n(B1$BF|HG$+$i$N:9J,%Q%C%A(B1.5$B$r%Y!<%9$K5!G=3HD%$7$?$b$N$G$"$k!#(B X$B$3$N$?$a!"A02s8x3+$7$?(BVersion 1.43$B$h$j(B-O$B%*%W%7%g%s$,(BWindows16bit$B$@$1$KJQ99$5(B X$B$l!"(BWindows16bit$BHG$O!"2hLL%9%/%m!<%k$H%/%j%C%/%\!<%IE>Aw$H0u:~5!G=$,DI2C$5$l(B X$B$?!#(B X$B0JA0$N%P!<%8%g%s$G$O!"(BJIS$BJQ49;~$K>c32$,$"$j!"(B-O$B%*%W%7%g%s$N%9%H%j!<%`$N;HMQJ}(B X$BK!$rJQ99$7$?!#$^$?!";d(BCOW$B$O!":G6a%$%s%?!<%M%C%H$K@\B3$7$?$,!"(BNews$B$K;22C$7$F$$(B X$B$J$$$?$a!":G?7$G$J$$$+$b$7$l$J$$$N$O!"4*J[$7$F$$$?$@$-$?$$!#(B X Ver1.52$B$K$*$$$FJQ49$N%G%U%)%k%HI=<($N4V0c$$Ey$r=$@5$7$?!#?=$7Lu$J$$!#(B Ver1.53$B$K$*$$$F(Bnkf,nkf32,nkf2$B$N(B-O$B%*%W%7%g%s$rI|3h$7$?!#(B($BJ}?K$,5$$^$0$l$@(B) ($B%3%^%s%I%7%'%k$r%"%W%j$+$i<B9T$9$k$N$K(B>$B$d(B|$B$,G'<1$5$l$J$$LdBj$,$"$k$?$a(B) X$B$^$?!"(BOS/2$B$K$*$1$k(B-c,-d$B%*%W%7%g%s;XDj;~$K%P%$%J%j%b!]%I$K$J$i$J$+$C$?(B X$B$?$a!"2~9T%3!]%IJQ49$,$G$-$J$$%P%0$r=$@5$7$?!#(B(icc$B$N;EMM$,FC<l$G$"$C$?!#(B) X$B$=$l$KIU?o$7$F!"$=$NB>(B-c,-d$B%*%W%7%g%s$N(BJIS,EUC$B%b!<%I$G$NIT6q9g$b=$@5$7$?!#(B Ver1.54$B$K$*$$$F(B-m$B%*%W%7%g%s$G(BMIME$B%(%s%3!<%I$5$l$?J8;zNs$N07$$$N%X%C%@!<ItJ,$,!"(B X $B$+$:$d$s(B X$B$^$?$O!"(B X $B$+$:$d$s(B X$B$N>l9g$G$b@5>o$KJQ49$G$-$k$h$&$K=$@5$7$?!#(B Ver1.62$B$K$*$$$F(Bkono$B;a$N(BVer1.6$B$N(B-Z,-B level$B%*%W%7%g%sDI2C5!G=$KBP=h$7$?!#(B X$B$=$l0J30$K(B-c$B%*%W%7%g%s$N%P%0=$@5$r$*$3$J$C$?!#(B X$B%G%U%)%k%H$N=PNO%3!<%I$rA*Br$G$-$k$h$&$K%=!<%9$rJQ99$7$?!#(B X X$B%Q%C%A$K$D$$$F(B X nkf $B$K$O?tB?$/$NHs8x<0%Q%C%A$,B8:_$9$k!#:#$^$G$=$l$i$rJT=8$7$F(B X$B$-$?$o$1$@$,!":#2s!V7hDjHG!W$H$7$F%*%j%8%J%k$+$i$N%Q%C%A0lK\$K(B X$B=8Ls$7$?!#$b$A$m$s!":NMQ$7$?%Q%C%A$N=PE5$OL@5-$7$F$"$k!#%Q%C%A(B X$B$d%I%-%e%a%s%H$r=q$$$??M$N$&$A!"K\%Q%C%1!<%8$K4X$o$C$F$$$k$N$O(B X$B0J2<$K<($9DL$j$G$"$k!#(B($B=gITF1!"7I>NN,(B) X X void@merope.pleiades.or.jp (Kusakabe Youichi) X nide@ics.nara-wu.ac.jp (NIDE Naoyuki) X ohta@src.ricoh.co.jp (Junn Ohta) X inouet@strl.nhk.or.jp (Tomoyuki Inoue) X a_kuroe@hoffman.cc.sophia.ac.jp (Akihiko Kuroe) X kono@ie.u-ryukyu.ac.jp(Shinji Kono) X X$B:G8e$K(B X nkf$B$r(BGUI$B2=$7$?(BEasy nkf$B$r8x3+$7$F$$$^$9!#(B(http://www.mirai.or.jp/~cow/) X$BB>$N%=%U%H$b$3$m$,$C$F$$$^$9$N$G!"2K$J?M$OGA$$$F$_$F$/$@$5$$!#(B X nkf 1.7 X ESC-$-(-B $B$J$I$K$bBP1~$9$k$h$&$K$7$^$7$?!#(B X MIME$B$N%A%'%C%/$,87$7$9$.$k$h$&$K;W$&$N$G!"(BSTRICT_MIME $B$r(Bdefine X$B$7$?;~$K$N$_$K87$7$$%A%'%C%/$r9T$&MQ$K$7$^$7$?!#(B X nkf $B$O!"K\Mh!"(Bnetwork $B>e$K=P$7$F0BA4$J%3!<%I$r%G%U%)%k%H$G=PNO$9$Y$-(B X$B$G$"$k$N$G!"%G%U%)%k%H$N=PNO%3!<%I$r(BShift JIS, EUC $B$J$I$K$9$k$N$O(B X$BK>$^$7$/$J$$$G$7$g$&!#(B X X$BB>$N?M$H>/$7OC$7$F!"(Bcopy right $B$NHs1DMx$N>r7o$r4K$a$^$7$?!#(B X Perl Extension $B$H$7$F;H$($k$h$&$K$J$j$^$7$?!#(B X X % time perl5 nkf_test.pl X 0.609u 2.264s 0:03.24 88.2% 0+0k 6+96io 0pf+0w X % time perl5 test.pl X 0.494u 0.178s 0:01.17 56.4% 0+0k 0+0io 0pf+0w X X$BB.$$(B! X patch 1 for 1.7 X version $B$,4V0c$C$F$^$7$?!#(B X MIME decode $B$r%G%U%)%k%H$K$7$?$N$K!"(BMIME $B$N>r7o$r4K$a$?$N$,(B X$B>/$74K$a2a$.$N$h$&$G$9$M!#(Buuencode $B$H$+$,$R$C$+$+$C$F$7$^$&!#(B STRICT_MIME $B$r(B define $B$9$l$P$$$$$N$G$9$,!"$A$g$C$H(B syntax error X$B$$$l$F$7$^$$$^$7$?!#(B X define STRICT_MIME $B$r%G%U%)%k%H$KD>$7$^$7$?!#$^$!!";EJ}$J$$$+$J$!!#(B X X$B<!$N(B nkf 1.9 $B$G$O!"(Bcommand option $B$G@Z$jBX$($i$l$k$h$&$K$J$j$^$9!#(B X X$B$"$H(B NKF.xs $B$G(B X argc = items - 1; X$B$r;H$&$h$&$K$7$^$7$?!#(B(by $BLZB<(B $B4`(B <iwao@math.tsukuba.ac.jp>) X SHAR_EOF $shar_touch -am 1116192198 'nkf.doc' && chmod 0644 'nkf.doc' || $echo 'restore of' 'nkf.doc' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'nkf.doc:' 'MD5 check failed' 43071937eb976e18fe2bdf720a9f79a2 nkf.doc SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'nkf.doc'`" test 15066 -eq "$shar_count" || $echo 'nkf.doc:' 'original size' '15066,' 'current size' "$shar_count!" fi fi # ============= MANIFEST ============== if test -f 'MANIFEST' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'MANIFEST' '(file already exists)' else $echo 'x -' extracting 'MANIFEST' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'MANIFEST' && nkf.doc MANIFEST Makefile nkf.1 nkf.1j nkf.c nkf_test.pl NKF/Changes NKF/MANIFEST NKF/Makefile.PL NKF/NKF.pm NKF/NKF.xs NKF/README NKF/test.pl SHAR_EOF $shar_touch -am 1116192198 'MANIFEST' && chmod 0644 'MANIFEST' || $echo 'restore of' 'MANIFEST' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'MANIFEST:' 'MD5 check failed' f575e0db3d3af4e644eaae4b4fa364fd MANIFEST SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'MANIFEST'`" test 143 -eq "$shar_count" || $echo 'MANIFEST:' 'original size' '143,' 'current size' "$shar_count!" fi fi # ============= Makefile ============== if test -f 'Makefile' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'Makefile' '(file already exists)' else $echo 'x -' extracting 'Makefile' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'Makefile' && CC = cc CFLAGS = -O SHAR = shar -T # SHAR = shar PERL = perl5 X nkf : nkf.c X $(CC) $(CFLAGS) -o nkf nkf.c X clean: X rm -fr nkf.o nkf nkf.in nkf.out nkf17 *~ test: nkf X perl nkf_test.pl X perl: X ( cd NKF ; \ X $(PERL) Makefile.PL ; \ X make ; \ X make test ) X shar: X -mkdir nkf17 X -mkdir nkf17/NKF X for file in `cat MANIFEST`; \ X do \ X nkf -j $$file > nkf17/$$file ; \ X done X ( cd nkf17 ; $(SHAR) `cat ../MANIFEST` ) > nkf17.shar SHAR_EOF $shar_touch -am 1116192198 'Makefile' && chmod 0644 'Makefile' || $echo 'restore of' 'Makefile' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'Makefile:' 'MD5 check failed' fe6ea72e60f25f8149351f8a5f5105cb Makefile SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'Makefile'`" test 434 -eq "$shar_count" || $echo 'Makefile:' 'original size' '434,' 'current size' "$shar_count!" fi fi # ============= nkf.1 ============== if test -f 'nkf.1' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'nkf.1' '(file already exists)' else $echo 'x -' extracting 'nkf.1' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'nkf.1' && X.TH NKF 1L 8/NOV/97 X.SH NAME nkf \- Network Kanji code conversion Filter v1.7 X.SH SYNOPSIS X.B nkf [ X.B options ] [ X.B file ] X.SH DESCRIPTION X.PP X.B Nkf is a yet another kanji code converter among networks, hosts and terminals. It converts input kanji code to designated kanji code such as 7-bit JIS, MS-kanji (shifted-JIS) or EUC. X.PP One of the most unique facicility of X.B nkf is the guess of the input kanji code. It currently recognizes 7-bit JIS, MS-kanji (shifted-JIS) and EUC. So users needn't the input kanji code specification. X By default X0201 kana is converted into X0208 kana. For XX0201 kana, SO/SI, SSO and ESC-(-I methods are supported. For automatic code detection, nkf assumes no X0201 kana in MS-Kanji. To accept X0201 in MS-Kanji, use \-X, \-x or \-S. X.PP Options are bellow: X.TP X.B \-b bufferd output. This is a default. X.TP X.B \-u unbufferd output. X.TP X.B \-t no operations. X.TP X.B \-j output 7-bit JIS code. This is a default. X.TP X.B \-s output MS-kanji (shifted-JIS) code. X.TP X.B \-e output EUC (AT&T) code. X.TP X.BI \-i c output X.BI ESC\-$\- c as sequence to designate JIS-kanji (Default is X.BR B .) X.TP X.BI \-o c output X.BI ESC\-(\- c as sequence to designate single-byte roman characters (Default is X.BR B .) X.TP X.B \-r {de/en}crypt ROT13/47 X.TP X.B \-v display Version X.TP X.B \-T Text mode output (MS-DOS) X.TP X.B \-m MIME ISO-2022-JP/ISO8859-1 decode. (default) To see ISO8859-1 (Latin-1) \-l is necessary. X.TP X.B \-mB Decode MIME base64 encoded stream. Remove header or other part before conversion. X.TP X.B \-mQ Decode MIME quoted stream. '_' in quoted is converted to space. X.TP X.B \-m0 No MIME decode. X.TP X.B \-l Input and output code is ISO8859-1 (Latin-1) and ISO-2022-JP. \-s, \-e and \-x are not compatible with this option. X.TP X.BI \-f n Folding on X.BI n length in a line. Default 60. X.TP X.B \-X Allow X0201 kana in MS-Kanji. XX0201 is converted into X0208 by default. This is default in MSDOS. X.TP X.B \-x Try to preseve X0208 kana. Assume X0201 kana in MS-Kanji. And do not convert X0201 kana to X0208. In JIS output, ESC-(-I is used. In EUC output, SSO is used. X.TP X.B \-Z Convert X0208 alphabet to ASCII. \-Z1 converts X0208 kankaku to one ASCII space. \-Z2 converts X0208 kankaku to two ASCII spaces. X.TP X.B \-S Assume MS-Kanji and X0201 kana input. It also accpet JIS. AT&T EUC is recognized as X0201 kana. Without \-x flag, XX0201 kana is converted into X0208. X.TP X.B \-J Assume JIS input. It also accepts Japanese EUC. This is the default. This flag does not excludde MS-Kanji. X.TP X.B \-E Assume AT&T EUC input. It also accpet JIS. Same as \-J. X.TP X.B \-B Assume broken JIS-Kanji, which lost ESC. Usefull when your site is using old B-News Nihongo patch. \-B1 allows any char after ESC-( or ESC-$. \-B2 forces ASCII after NL. X.TP X.B \-O Output result to file. The first name in arguments becomes output. Please be careful. If there are no file arguments, nkf.out is chosen. X.TP X.B \-c add CR after NL. X.TP X.B \-d delete CR after NL. X.SH "FILES" nkf - binary X.SH AUTHOR Itaru Ichikawa <ichikawa@flab.fujitsu.co.jp> (was ichikawa@fujitsu.JUNET) X.SH EDITOR a_kuroe@hoffman.cc.sophia.ac.jp (Akihiko Kuroe) kono@ie.u-ryukyu.ac.jp (Shinji KONO) X.SH BUGS X.B Nkf cannot handle some input that contains mixed kanji codes. Automatic code detection becomes very weak with \-x, \-X and \-S. X SHAR_EOF $shar_touch -am 1116192198 'nkf.1' && chmod 0644 'nkf.1' || $echo 'restore of' 'nkf.1' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'nkf.1:' 'MD5 check failed' 409579eec415c1b9c439e3e109099253 nkf.1 SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'nkf.1'`" test 3333 -eq "$shar_count" || $echo 'nkf.1:' 'original size' '3333,' 'current size' "$shar_count!" fi fi # ============= nkf.1j ============== if test -f 'nkf.1j' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'nkf.1j' '(file already exists)' else $echo 'x -' extracting 'nkf.1j' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'nkf.1j' && X.TH NKF 1 X.SH NAME nkf \- $B%M%C%H%o!<%/MQ4A;z%3!<%IJQ49%U%#%k%?(B v1.7 X.SH SYNOPSIS X.B nkf X.RI [ options ] X.RI [ file ] X.SH DESCRIPTION \fInkf\fP$B$O%M%C%H%o!<%/$G%a!<%k$d%K%e!<%9$NFI$_=q$-$r$9$k$?$a$K:n$i$l$?!"4A(B X$B;z%3!<%I$NJQ49%U%#%k%?$G$"$k!#(B X.PP X$B$3$N(B\fInkf\fP$B$NFCD'$H$7$F$O!"F~NO4A;z%3!<%I7O$NE}7WE*$J<+F0G'<15!G=$,$"$k!#(B X$B$3$N$?$a!"MxMQ<T$O!"F~NO4A;z%3!<%I7O$,2?$G$"$k$+$rCN$i$J$/$F$b!"=PNO4A;z(B X$B%3!<%I7O$N$_;XDj$9$l$PNI$$$3$H$K$J$k!#$?$@!"$3$NH=Dj5!9=$O!"M}O@E*$K$O40(B X$BA4$G$O$J$$$,!"DL>o$N%K%e!<%9$d%a!<%k$N%a%C%;!<%8$K$D$$$F$O3N<B$KF0:n$9$k(B X$B0BA4$J$b$N$K$O$J$C$F$$$k!#(B X.PP X$B8=:_!"(B\fInkf\fP$B$,G'<1$G$-$kF~NO$N4A;z%3!<%I7O$O!"$$$o$f$k!V(BJIS$B%3!<%I!W(B(ISO- 2022-JP$B$K4p$E$/$b$N(B)$B!"(BMS$B4A;z%3!<%I(B($B%7%U%H(BJIS)$B!"F|K\8l(BEUC(AT&T$B%3!<%I(B)$B$N$$(B X$B$:$l$+$G$"$k!#=PNO$9$k4A;z%3!<%I7O$b!"$3$N(B3$B<oN`$G$"$k!#(B X.PP X$BF~NO$O!"%U%!%$%k$r;XDj$7$J$1$l$P!"I8=`F~NO$H$J$k!#=PNO$OI8=`=PNO$G$"$k!#(B X.PP X$B;XDj$G$-$k%*%W%7%g%s$O!"0J2<$NDL$j!#(B\fB\-mu\fP $B$N$h$&$KB3$1$k$3$H$,$G$-$k!#(B X.TP X.B \-b X$B%P%C%U%!%j%s%0=PNO$r9T$&!#(B($B%G%U%)%k%H(B) X.TP X.B \-u X$B=PNO;~$K!"%P%C%U%!%j%s%0$7$J$$!#(B rsh localhost | nkf \-u $B$H$$$&$h$&$K;H$&!#(B X.TP X.B \-t X$B2?$b$7$J$$!#(B X.TP X.B \-j JIS$B%3!<%I$r=PNO$9$k!#(B($B%G%U%)%k%H(B) X.TP X.B \-e EUC$B%3!<%I$r=PNO$9$k!#(B X.TP X.B \-s X$B%7%U%H(BJIS$B%3!<%I$r=PNO$9$k!#(B X.TP X.BI \-i ? JIS$B4A;z$r;X<($9$k%7!<%1%s%9$H$7$F(B \fBESC-'$'-\fP\fI?\fP$B$r;HMQ$9$k!#(B ($B%G%U%)%k%H$O!"(BESC-'$'-'B') X.TP X.BI \-o ? 1$B%P%$%H1Q?tJ8;z%;%C%H$r;X<($9$k%7!<%1%s%9$H$7$F!"(B\fBESC-'('-\fP\fI?\fP$B$r;HMQ$9(B X$B$k!#(B ($B%G%U%)%k%H$O!"(BESC-'('-'B') X.TP X.B \-r ROT13/47$B$NJQ49$r$9$k!#(B X.TP X.B \-v X$B%P!<%8%g%s$rI=<($9$k!#(B X.TP X.B \-T X$B%F%-%9%H%b!<%I$G=PNO$9$k!#(B(MS-DOS$B>e$G$N$_8zNO$r;}$D(B) X.TP X.B \-m[QB0] MIME $B$r2rFI$9$k!#(B($B%G%U%)%k%H(B) ISO-2022-JP(base64)$B$H(BISO-8859-1(Q encode) X$B$N$_$r2rFI$9$k!#(BISO-8859-1 (Latin-1) $B$r2rFI$9$k;~$O!"(B -l$B%U%i%0$bI,MW$G$"$k!#(B\-m0 $B$G$O(BMIME$B$r2rFI$7$J$$!#(B\-mQ, \-mB$B$G$O!"(B Q encode, B encode $B$5$l$F$$$k$b$N$H$7$F=hM}$9$k!#(B X.TP X.B \-l 0x80-0xfe$B$N%3!<%I$r(BISO-8859-1 (Latin-1)$B$H$7$F07$&!#(B JIS$B%3!<%I%"%&%H%W%C%H$H$NAH9g$;$_$N$_M-8z!#(B \-s, \-e, \-x$B$H$ON>N)$7$J$$!#(B X.TP X.BI \-f ? X$B0l9T(B\fI?\fP$BJ8;z$K$J$k$h$&$K4JC1$J@07A$r$*$3$J$&!#%G%U%)%k%H$O(B 60$BJ8;z$G$"$k!#(B X.TP X.B \-Z XX0208$BCf$N1Q?t;z$H<c43$N5-9f$r(BASCII$B$KJQ49$9$k!#(B\-Z1 $B$O(BX0208$B4V3V$r(BASCII space$B$KJQ49$9$k!#(B\-Z2$B$O(BX0208$B4V3V$r(BASCII space $BFs$D$KJQ49$9$k!#<qL#$K$h$C$F(B X$B;H$$J,$1$F$[$7$$!#(B X.TP X.B "\-J \-E \-S \-X \-B" X$B4|BT$5$l$kF~NO%3!<%I$N@-<A$r;XDj$9$k!#(B X.RS X.IP \fB\-J\fP ISO-2022-JP$B$r2>Dj$9$k!#(B X.IP \fB\-E\fP X$BF|K\8l(BEUC(AT&T)$B$r2>Dj$9$k!#(B X.IP \fB\-S\fP MS$B4A;z$r2>Dj$9$k!#(BX0201$B2>L>$b2>Dj$5$l$k!#(B X.IP \fB\-X\fP MS$B4A;zCf$K(BX0201$B2>L>$,$"$k$H2>Dj$9$k!#(B X.IP \fB\-B\fP X$B2u$l$?(B(Broken)JIS$B%3!<%I!#(BESC$B$,$J$/$J$C$?$H2>Dj$9$k!#(B X.RS X.IP \fB\-B1\fP X \fBESC-(\fP, \fBESC-$\fP $B$N$"$H$N%3!<%I$rLd$o$J$$(B X.IP \fB\-B2\fP X$B2~9T$N$"$H$K6/@)E*$K(BASCII$B$NLa$9(B X.RE X.RE X.TP X.B \-x X$BDL>o$*$3$J$o$l$k(BX0201$B2>L>(B->X0208$B$N2>L>JQ49$r$7$J$$$G!"(B X X0201$B2>L>$rJ]B8$9$k!#F~NO$O!"(BMS-Kanji$B$N(B1byte$B2>L>!"(BSO/SI$B!"(B ESC-(-I, SSO$B$r<u$1IU$1$k!#=PNO$O!"F|K\8l(BEUC$BCf$G$O(BSSO$B!"(B JIS$B$G$O(B ESC-'('-I $B$r;H$&!#(B X.TP X.B \-O X$B%U%!%$%k$K=PNO$9$k!#(BUnix$B$G$OITMW$J5!G=$@$,(BWindows$B$d(BMSDOS$B$G$O(B X$BI,MW$i$7$$!#D>8e$N0z$-?t$G$J$/!":G8e$N%U%!%$%kL>$,=PNO%U%!%$(B X$B%kL>$H$J$j>e=q$-$5$l$F$7$^$&$N$GCm0U!#%U%!%$%kL>$,$J$$>l9g$O!"(B X$BE,Ev$K7h$a$i$l$k(B(nkf.out$B$J$I(B)$B!#(B X.TP X.B \-c NL$B$"$H$K(BCR$B$rIU2C$9$k!#(B X.TP X.B \-d NL$B$"$H$N(BCR$B$r:o=|$9$k!#(B X X.SH AUTHOR X X$B;T@n(B $B;j(B ichikawa@flab.fujitsu.co.jp (was ichikawa@fujitsu.JUNET) X X.SH ACKNOWLEDGE X morb@fujitsu, kiss@ayumi.stars.flab.fujitsu, cen122@flab.fujitsu, yuki@flab.fujitsu $BB>!"(Bfujitsu & flab.fujitsu$B$N3'$5$s$N6(NO$K46<U!#(B shinoda@cs.titech, kato@cs.titech, uematsu@cs.titech TNX kono@ie.u-ryukyu.ac.jp X X.SH BUGS X X$B<B$O!"F~NO$N%3!<%I7O$NH=Dj$O!"(BEUC$B$H%7%U%H(BJIS$B$H$N<+F0H=Dj$G$"$j!":G=i$K(B X$BFCDj$G$-$kJ8;z$,Mh$?;~E@$G3NDj$7$F$7$^$&!#$=$7$F!"FCDjITG=$N4V$OJ]N1%P%C(B X$B%U%!$K$?$a$F$*$+$l!"3NDj8e$K=hM}$5$l$k!#$3$N$?$a!"(B X.IP 1) 7$B%S%C%H(BJIS$B$O>o$KG'<1$5$l$k!#%7%U%H(BJIS$B!"(BEUC$B:.9g$b$[$H$s$I$N(B X$B>l9g$OLdBj$,$J$$!#$?$@$7!"(B X.IP 2) X$B%7%U%H(BJIS$B$N(BX0201$B2>L>$H(BEUC$B$,<1JL$G$-$J$$!#$7$?$,$C$F!"(B X$B%G%U%)%k%H$G$O%7%U%H(BJIS$B$N(BX0201$B2>L>$O$J$$$H2>Dj$7$F$$$k!#(B X.IP 3) X$B$A$g$C$H!"$N$m$$!#(B($B=i4|$NHG$h$j$O2~NI$5$l$F$$$k(B) X.PP JIS$B4A;z$N?75lHG$N6hJL$H$+!"(BASCII$B$H(BJIS$B%m!<%^;z$N6hJL$J$I$K$D$$$F$OJ]B8$5(B X$B$l$J$$!#(B X.PP X$B$3$N%U%#%k%?$NJQ49$O!"%3!<%I7O$KBP1~$7$?0l3g<LA|$r;\$9$@$1$J$N$G!"30;z(B X$B$dFC<l5-9f$d7S@~AGJR$J$I!"(BJIS$BBh0l!"BhFs?e=`I=$K$*$$$FDj5A$5$l$F$$$J$$%3!<(B X$B%I$K3F<R$K$h$j3d$jEv$F$i$l$?J8;z$,$I$&$J$k$+$^$G$O4XCN$7$J$$!#$=$7$F!"Bh(B X$BFs?e=`$,$J$$$H$+$"$k$H$+$K$h$kLdBj$O!"$3$N%U%#%k%?$NHO0O30$H;W$($k!#$=$l(B X$B$i$O!"=q$-<j$N@UG$$G$J$s$H$+$7$F$b$i$$$?$$!#(B X.PP X$B$$$:$l$K$;$h!"DL>o$N%K%e!<%9$N5-;v$K$D$$$F$OLdBj$O$J$/JQ49$G$-$k$O$:$G(B X$B$"$k!#(B($B$H;W$&$N$@$,!":#$R$H$D<+?.$O$J$$(B) X X.SH "kono@csl.sony.co.jp (Shinji Kono) $B$K$h$kJQ99!#(B" X nkf 1.4 $B$N>iD9$@$1$I@N$OJXMx$@$C$?%*%W%7%g%s$N$$$/$D$+$O:o=|$5$l$F$$$k!#(B \- \-n \-B$B$J$I!#(B X.PP XX0201$B2>L>$O%G%U%)%k%H$G(BX0208$B$KJQ49$5$l$k!#$?$@$7!"%7%U%H(BJIS$B$N(BX0201$B2>L>(B X$B$O%G%U%)%k%H$G$O(BEUC$B$@$H2r<a$5$l$F$7$^$&!#$3$l$,K>$^$7$/$J$$;~$K$O(B \-S $B$d(B \- \-X $B$J$I$N%U%i%0$r;H$($PNI$$!#(B\-X$B$r;XDj$9$k$H0lC63NDj$7$?%7%U%H(BJIS$B$+$i(B EUC$B$K0\9T$9$k$3$H$O$J$$!#(BESC-(-I$B$K$h$k(B X0201$B$O>o$KG'<1$5$l$k!#(BSI/SO SSO$B$O!"(B\-l$B$,;XDj$5$l$F$$$J$1$l$P(BX0201$B$H2r<a$9$k!#(B X.PP MIME decode$B$O!"(BISO-2022-JP$B$N(Bbase64$B$H!"(BISO-8859-1$B$N(B16$B?J(Bencode$B$N$_(B decode$B$9$k!#(B MIME decode$B$O!"C1=c$J2~9T$d6uGr$O0BA4$KFI$_Ht$P$5$l$k!#(B X$B$H$$$&$3$H$O!"(B MIME decode$BCf$N6uGr$OJ]B8$5$l$J$$!#(Bless$B$d(Brn$B$G9T$,J,3d(B X$B$5$l$?;~$O!"(B Terminal$B$K$h$C$F0[$J$k(B ESC-[-K $B$J$I$,A^F~$5$l$k$N$G!"(B X$B40A4$K$O(Bdecode $B$G$-$J$$!#(BISO-8859-1 $B=PNO$O(BJIS $B%3!<%I=PNO$H$7$+N>N)$7$J$$!#(B X.PP Fold $B5!G=$O(Bfmt$B$H0[$J$j9TF,$N6uGr$rL5;k$9$k!#6XB'=hM}$O$"$k$,;XDj$5$l$?(B X$BD9$5(B+5$B$G6/@)2~9T$9$k!#(B X.PP XX0201$B2>L>$O(Brot47$B$5$l$J$$!#(B X X.SH nkf 1.6 "kono@ie.u-ryukyu.ac.jp (Shinji Kono) $B$K$h$kJQ99!#(B" X MIME $B$N%A%'%C%/$r$-$S$7$/$7$F(B($BCY$/$J$C$?J,(B)$B0BA4$K$J$C$?!#(B X$B$7$?$,$C$FJ#?t9T$K$^$?$,$k(BMIME$B$O(Bdecode$B$5$l$J$$!#(B MIME $B$ND>8e$N6uGr$OFI$_Ht$P$9!#(BQ-Encding $B$N(B_$B$O6uGr$KJQ49$5$l$k!#(B X -B $B$N(Blevel$B$r(B0,1,2 $B$KA}$d$7$?!#(BMIME$B$N(Bbase64, Q-Encoding$B$r2rFI$9$k(B X$B5!G=$rIU$1$?!#%X%C%@$J$I$O2rFI$7$J$$$N$G!"(BEncode$B$5$l$?ItJ,$@$1$r(B X$BDL$9I,MW$,$"$k!#(B -mB $B$O!"(Bnkf1.5$B$H0c$&F0$-$r$9$k$N$G!"(B-B -m $B$H$9$k$3$H!#(B X X.SH nkf 1.6.1 X \-Z $B$G!A(B \-> ~$B$NJQ49$r;_$a$?!#(B \-Z1 $B$G(BX0208$B4V3V(B\->ASCII space$B$NJQ49$r$*$3$J$&!#(B \-Z2 $B$G(BX0208$B4V3V(B\->ASCII space 2$B8D$NJQ49$r$*$3$J$&!#(B X.PP kabe@dais.is.tohoku.ac.jp (Taketo Kabe) $B$K$h$kF|K\8l(Broff $B$N%=!<%9$,(B X$B$G$-$^$7$?!#(B X X.SH nkf 1.7 X.PP ESC-$-(-B $B$J$I$K$bBP1~$9$k$h$&$K$7$^$7$?!#(B X.PP MIME$B$N%A%'%C%/$,87$7$9$.$k$h$&$K;W$&$N$G!"(BSTRICT_MIME $B$r(Bdefine X$B$7$?;~$K$N$_$K87$7$$%A%'%C%/$r9T$&MQ$K$7$^$7$?!#(B X.PP nkf $B$O!"K\Mh!"(Bnetwork $B>e$K=P$7$F0BA4$J%3!<%I$r%G%U%)%k%H$G=PNO$9$Y$-(B X$B$G$"$k$N$G!"%G%U%)%k%H$N=PNO%3!<%I$r(BShift JIS, EUC $B$J$I$K$9$k$N$O(B X$BK>$^$7$/$J$$$G$7$g$&!#(B X.PP X$BB>$N?M$H>/$7OC$7$F!"(Bcopy right $B$NHs1DMx$N>r7o$r4K$a$^$7$?!#(B X.PP Perl Extension $B$H$7$F;H$($k$h$&$K$J$j$^$7$?!#(B X SHAR_EOF $shar_touch -am 1116192198 'nkf.1j' && chmod 0644 'nkf.1j' || $echo 'restore of' 'nkf.1j' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'nkf.1j:' 'MD5 check failed' 64a33d755e31a97df9c7a76d6df45567 nkf.1j SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'nkf.1j'`" test 8015 -eq "$shar_count" || $echo 'nkf.1j:' 'original size' '8015,' 'current size' "$shar_count!" fi fi # ============= nkf.c ============== if test -f 'nkf.c' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'nkf.c' '(file already exists)' else $echo 'x -' extracting 'nkf.c' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'nkf.c' && /** Network Kanji Filter. (PDS Version) ************************************************************************ ** Copyright (C) 1987, Fujitsu LTD. (Itaru ICHIKAWA) ** $BO"Mm@h!'(B $B!J3t!KIY;NDL8&5f=j!!%=%U%H#38&!!;T@n!!;j(B ** $B!J(BE-Mail Address: ichikawa@flab.fujitsu.co.jp$B!K(B ** Copyright (C) 1996,1998 ** $BO"Mm@h!'(B $BN05eBg3X>pJs9)3X2J(B $B2OLn(B $B??<#(B mine/X0208 support ** $B!J(BE-Mail Address: kono@ie.u-ryukyu.ac.jp$B!K(B ** $BO"Mm@h!'(B COW for DOS & Win16 & Win32 & OS/2 ** $B!J(BE-Mail Address: GHG00637@niftyserve.or.p$B!K(B ** $B$3$N%=!<%9$N$$$+$J$kJ#<L!$2~JQ!$=$@5$b5vBz$7$^$9!#$?$@$7!"(B ** $B$=$N:]$K$O!"C/$,9W8%$7$?$r<($9$3$NItJ,$r;D$9$3$H!#(B ** $B:FG[I[$d;(;o$NIUO?$J$I$NLd$$9g$o$;$bI,MW$"$j$^$;$s!#(B ** $B$3$N%W%m%0%i%`$K$D$$$F$OFC$K2?$NJ]>Z$b$7$J$$!"0-$7$+$i$:!#(B ** Everyone is permitted to do anything on this program ** including copying, modifying, improving. ** as long as you don't try to pretend that you wrote it. ** i.e., the above copyright notice has to appear in all copies. ** You don't have to ask before copying or publishing. ** THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. ***********************************************************************/ X static char *CopyRight = X "Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa),1998 S. Kono, COW"; static char *Version = X "1.7"; static char *Patchlevel = X "1/9811/Shinji Kono"; X /* ** ** ** ** USAGE: nkf [flags] [file] ** ** Flags: ** b Output is bufferred (DEFAULT) ** u Output is unbufferred ** ** t no operation ** ** j Outout code is JIS 7 bit (DEFAULT SELECT) ** s Output code is MS Kanji (DEFAULT SELECT) ** e Output code is AT&T JIS (DEFAULT SELECT) ** l Output code is JIS 7bit and ISO8859-1 Latin-1 ** ** m MIME conversion for ISO-2022-JP ** i_ Output sequence to designate JIS-kanji (DEFAULT_J) ** o_ Output sequence to designate single-byte roman characters (DEFAULT_R) ** ** r {de/en}crypt ROT13/47 ** ** v display Version ** ** T Text mode output (for MS-DOS) ** ** x Do not convert X0201 kana into X0208 ** Z Convert X0208 alphabet to ASCII ** ** f60 fold option ** ** m MIME decode ** B try to fix broken JIS, missing Escape ** B[1-9] broken level ** ** O Output to 'nkf.out' file ** d Delete \r in line feed ** c Add \r in line feed **/ /******************************/ /* $B%G%U%)%k%H$N=PNO%3!<%IA*Br(B */ /* Select DEFAULT_CODE */ #define DEFAULT_CODE_JIS /* #define DEFAULT_CODE_SJIS */ /* #define DEFAULT_CODE_EUC */ /******************************/ X #if (defined(__TURBOC__) || defined(LSI_C)) && !defined(MSDOS) #define MSDOS #endif X #ifndef PERL_XS #include <stdio.h> #endif X #if defined(MSDOS) || defined(__OS2__) #include <stdlib.h> #include <fcntl.h> #include <io.h> #endif X #ifdef MSDOS #ifdef LSI_C #define setbinmode(fp) fsetbin(fp) #else /* Microsoft C, Turbo C */ #define setbinmode(fp) setmode(fileno(fp), O_BINARY) #endif #else /* UNIX,OS/2 */ #define setbinmode(fp) #endif X #ifdef _IOFBF /* SysV and MSDOS */ #define setvbuffer(fp, buf, size) setvbuf(fp, buf, _IOFBF, size) #else /* BSD */ #define setvbuffer(fp, buf, size) setbuffer(fp, buf, size) #endif X /*Borland C++ 4.5 EasyWin*/ #if defined(__TURBOC__) && defined(_Windows) && !defined(__WIN32__) /*Easy Win */ #define EASYWIN #include <windows.h> #endif X #define FALSE 0 #define TRUE 1 X /* state of output_mode and input_mode */ X #define ASCII 0 #define X0208 1 #define X0201 2 #define NO_X0201 3 #define JIS_INPUT 4 #define SJIS_INPUT 5 #define LATIN1_INPUT 6 #define FIXED_MIME 7 #define DOUBLE_SPACE -2 X #define NL 0x0a #define ESC 0x1b #define SPACE 0x20 #define AT 0x40 #define SSP 0xa0 #define DEL 0x7f #define SI 0x0f #define SO 0x0e #define SSO 0x8e X #define HOLD_SIZE 32 #define IOBUF_SIZE 16384 X #define DEFAULT_J 'B' #define DEFAULT_R 'B' X #define SJ0162 0x00e1 /* 01 - 62 ku offset */ #define SJ6394 0x0161 /* 63 - 94 ku offset */ X X /* MIME preprocessor */ X #define STRICT_MIME /* do stupid strict mime integrity check */ #define GETC(p) ((!mime_mode)?getc(p):mime_getc(p)) #define UNGETC(c,p) ((!mime_mode)?ungetc(c,p):mime_ungetc(c)) X X #ifdef EASYWIN /*Easy Win */ extern POINT _BufferSize; #endif X /* function prototype */ X static int noconvert(FILE *f); static int kanji_convert(FILE *f); static int h_conv(FILE *f,int c2,int c1); static int push_hold_buf(int c2,int c1); static int s_iconv(int c2,int c1); static int e_oconv(int c2,int c1); static int s_oconv(int c2,int c1); static int j_oconv(int c2,int c1); static int line_fold(int c2,int c1); static int pre_convert(int c1,int c2); static int mime_begin(FILE *f); static int mime_getc(FILE *f); static int mime_ungetc(unsigned int c); static int mime_integrity(FILE *f,unsigned char *p); static int base64decode(int c); static int usage(void); static void arguments(char *c); static void reinit(); X /* buffers */ X static char stdibuf[IOBUF_SIZE]; static char stdobuf[IOBUF_SIZE]; static unsigned char hold_buf[HOLD_SIZE*2]; static int hold_count; X /* MIME preprocessor fifo */ X #define MIME_BUF_SIZE (1024) /* 2^n ring buffer */ #define MIME_BUF_MASK (MIME_BUF_SIZE-1) #define Fifo(n) mime_buf[(n)&MIME_BUF_MASK] static unsigned char mime_buf[MIME_BUF_SIZE]; static unsigned int mime_top = 0; static unsigned int mime_last = 0; /* decoded */ static unsigned int mime_input = 0; /* undecoded */ X /* flags */ static int unbuf_f = FALSE; static int estab_f = FALSE; static int nop_f = FALSE; static int binmode_f = TRUE; /* binary mode */ static int rot_f = FALSE; /* rot14/43 mode */ static int input_f = FALSE; /* non fixed input code */ static int alpha_f = FALSE; /* convert JIx0208 alphbet to ASCII */ static int mime_f = TRUE; /* convert MIME B base64 or Q */ static int mimebuf_f = FALSE; /* MIME buffered input */ static int broken_f = FALSE; /* convert ESC-less broken JIS */ static int iso8859_f = FALSE; /* ISO8859 through */ #if defined(MSDOS) || defined(__OS2__) static int x0201_f = TRUE; /* Assume JISX0201 kana */ #else static int x0201_f = NO_X0201; /* Assume NO JISX0201 */ #endif X /* X0208 -> ASCII converter */ X static int c1_return; X /* fold parameter */ static int line = 0; /* chars in line */ static int prev = 0; static int fold_f = FALSE; static int fold_len = 0; X /* options */ static char kanji_intro = DEFAULT_J, X ascii_intro = DEFAULT_R; X /* Folding */ X int line_fold(); #define FOLD_MARGIN 10 #define DEFAULT_FOLD 60 X /* converters */ X #ifdef DEFAULT_CODE_JIS # define DEFAULT_CONV j_oconv #endif #ifdef DEFAULT_CODE_SJIS # define DEFAULT_CONV s_oconv #endif #ifdef DEFAULT_CODE_EUC # define DEFAULT_CONV e_oconv #endif X static int (*iconv)(int c2,int c1); X /* s_iconv or oconv */ static int (*oconv)(int c2,int c1) = DEFAULT_CONV; X /* [ejs]_oconv */ X /* Global states */ static int output_mode = ASCII, /* output kanji mode */ X input_mode = ASCII, /* input kanji mode */ X shift_mode = FALSE; /* TRUE shift out, or X0201 */ static int mime_mode = FALSE; /* MIME mode B base64, Q hex */ X /* X0201 / X0208 conversion tables */ X /* X0201 kana conversion table */ /* 90-9F A0-DF */ unsigned char cv[]= { 0x21,0x21,0x21,0x23,0x21,0x56,0x21,0x57, 0x21,0x22,0x21,0x26,0x25,0x72,0x25,0x21, 0x25,0x23,0x25,0x25,0x25,0x27,0x25,0x29, 0x25,0x63,0x25,0x65,0x25,0x67,0x25,0x43, 0x21,0x3c,0x25,0x22,0x25,0x24,0x25,0x26, 0x25,0x28,0x25,0x2a,0x25,0x2b,0x25,0x2d, 0x25,0x2f,0x25,0x31,0x25,0x33,0x25,0x35, 0x25,0x37,0x25,0x39,0x25,0x3b,0x25,0x3d, 0x25,0x3f,0x25,0x41,0x25,0x44,0x25,0x46, 0x25,0x48,0x25,0x4a,0x25,0x4b,0x25,0x4c, 0x25,0x4d,0x25,0x4e,0x25,0x4f,0x25,0x52, 0x25,0x55,0x25,0x58,0x25,0x5b,0x25,0x5e, 0x25,0x5f,0x25,0x60,0x25,0x61,0x25,0x62, 0x25,0x64,0x25,0x66,0x25,0x68,0x25,0x69, 0x25,0x6a,0x25,0x6b,0x25,0x6c,0x25,0x6d, 0x25,0x6f,0x25,0x73,0x21,0x2b,0x21,0x2c, 0x00,0x00}; X X /* X0201 kana conversion table for daguten */ /* 90-9F A0-DF */ unsigned char dv[]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x25,0x2c,0x25,0x2e, 0x25,0x30,0x25,0x32,0x25,0x34,0x25,0x36, 0x25,0x38,0x25,0x3a,0x25,0x3c,0x25,0x3e, 0x25,0x40,0x25,0x42,0x25,0x45,0x25,0x47, 0x25,0x49,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x25,0x50,0x25,0x53, 0x25,0x56,0x25,0x59,0x25,0x5c,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00}; X /* X0201 kana conversion table for han-daguten */ /* 90-9F A0-DF */ unsigned char ev[]= { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x25,0x51,0x25,0x54, 0x25,0x57,0x25,0x5a,0x25,0x5d,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00}; X X /* X0208 kigou conversion table */ /* 0x8140 - 0x819e */ unsigned char fv[] = { X 0x00,0x00,0x00,0x00,0x2c,0x2e,0x00,0x3a, 0x3b,0x3f,0x21,0x00,0x00,0x27,0x60,0x00, 0x5e,0x00,0x5f,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x2d,0x00,0x2f, 0x5c,0x00,0x00,0x7c,0x00,0x00,0x60,0x27, 0x22,0x22,0x28,0x29,0x00,0x00,0x5b,0x5d, 0x7b,0x7d,0x3c,0x3e,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x2b,0x2d,0x00,0x00, 0x00,0x3d,0x00,0x3c,0x3e,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x24,0x00,0x00,0x25,0x23,0x26,0x2a,0x40, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } ; X X static int file_out = FALSE; static int add_cr = FALSE; static int del_cr = FALSE; static int end_check; X #ifndef PERL_XS int main(argc, argv) X int argc; X char **argv; { X FILE *fin; X char *cp; X #ifdef EASYWIN /*Easy Win */ X _BufferSize.y = 400;/*Set Scroll Buffer Size*/ #endif X X for (argc--,argv++; (argc > 0) && **argv == '-'; argc--, argv++) { X cp = *argv; X arguments(cp); X } X X if(iso8859_f && (oconv != j_oconv || !x0201_f )) { X fprintf(stderr,"Mixed ISO8859/JISX0201/SJIS/EUC output is not allowed.\n"); X exit(1); X } X X if(binmode_f == TRUE) #ifdef __OS2__ X if(freopen("","wb",stdout) == NULL) X return (-1); #else X setbinmode(stdout); #endif X X if(unbuf_f) X setbuf(stdout, (char *) NULL); X else X setvbuffer(stdout, stdobuf, IOBUF_SIZE); X X if(argc == 0) { X if(binmode_f == TRUE) #ifdef __OS2__ X if(freopen("","rb",stdin) == NULL) return (-1); #else X setbinmode(stdin); #endif X setvbuffer(stdin, stdibuf, IOBUF_SIZE); X if(nop_f) X noconvert(stdin); X else X kanji_convert(stdin); X } else { X while (argc--) { X if((fin = fopen(*argv++, "r")) == NULL) { X perror(*--argv); X return(-1); X } else { /* reopen file for stdout */ X if(file_out == TRUE){ X if(argc == 1 ) { X if(freopen(*argv++, "w", stdout) == NULL) { X perror(*--argv); X return (-1); X } X argc--; X } else { X if(freopen("nkf.out", "w", stdout) == NULL) { X perror(*--argv); X return (-1); X } X } X if(binmode_f == TRUE) { #ifdef __OS2__ X if(freopen("","wb",stdout) == NULL) X return (-1); #else X setbinmode(stdout); #endif X } X } X if(binmode_f == TRUE) #ifdef __OS2__ X if(freopen("","rb",fin) == NULL) X return (-1); #else X setbinmode(fin); #endif X setvbuffer(fin, stdibuf, IOBUF_SIZE); X if(nop_f) X noconvert(fin); X else X kanji_convert(fin); X fclose(fin); X } X } X } #ifdef EASYWIN /*Easy Win */ X if(file_out == FALSE) X scanf("%d",&end_check); X else X fclose(stdout); #else /* for Other OS */ X if(file_out == TRUE) X fclose(stdout); #endif X return (0); } #endif X void arguments(char *cp) { X while (*cp) { X switch (*cp++) { X case 'b': /* buffered mode */ X unbuf_f = FALSE; X continue; X case 'u': /* non bufferd mode */ X unbuf_f = TRUE; X continue; X case 't': /* transparent mode */ X nop_f = TRUE; X continue; X case 'j': /* JIS output */ X case 'n': X oconv = j_oconv; X continue; X case 'e': /* AT&T EUC output */ X oconv = e_oconv; X continue; X case 's': /* SJIS output */ X oconv = s_oconv; X continue; X case 'l': /* ISO8859 Latin-1 support, no conversion */ X iso8859_f = TRUE; /* Only compatible with ISO-2022-JP */ X input_f = LATIN1_INPUT; X continue; X case 'i': /* Kanji IN ESC-$-@/B */ X if(*cp=='@'||*cp=='B') X kanji_intro = *cp++; X continue; X case 'o': /* ASCII IN ESC-(-J/B */ X if(*cp=='J'||*cp=='B'||*cp=='H') X ascii_intro = *cp++; X continue; X case 'r': X rot_f = TRUE; X continue; #if defined(MSDOS) || defined(__OS2__) X case 'T': X binmode_f = FALSE; X continue; #endif #ifndef PERL_XS X case 'v': X usage(); X exit(1); X break; #endif X /* Input code assumption */ X case 'J': /* JIS input */ X case 'E': /* AT&T EUC input */ X input_f = JIS_INPUT; X continue; X case 'S': /* MS Kanji input */ X input_f = SJIS_INPUT; X if(x0201_f==NO_X0201) x0201_f=TRUE; X continue; X case 'Z': /* Convert X0208 alphabet to asii */ X /* bit:0 Convert X0208 X bit:1 Convert Kankaku to one space X bit:2 Convert Kankaku to two spaces X */ X if('9'>= *cp && *cp>='0') X alpha_f |= 1<<(*cp++ -'0'); X else X alpha_f |= TRUE; X continue; X case 'x': /* Convert X0201 kana to X0208 or X0201 Conversion */ X x0201_f = FALSE; /* No X0201->X0208 conversion */ X /* accept X0201 X ESC-(-I in JIS, EUC, MS Kanji X SI/SO in JIS, EUC, MS Kanji X SSO in EUC, JIS, not in MS Kanji X MS Kanji (0xa0-0xdf) X output X0201 X ESC-(-I in JIS (0x20-0x5f) X SSO in EUC (0xa0-0xdf) X 0xa0-0xd in MS Kanji (0xa0-0xdf) X */ X continue; X case 'X': /* Assume X0201 kana */ X /* Default value is NO_X0201 for EUC/MS-Kanji mix */ X x0201_f = TRUE; X continue; X case 'f': /* folding -f60 or -f */ X fold_f = TRUE; X fold_len = atoi(cp); X if(!(0<fold_len && fold_len<BUFSIZ)) X fold_len = DEFAULT_FOLD; X while('0'<= *cp && *cp <='9') cp++; X continue; X case 'm': /* MIME support */ X mime_f = TRUE; X if(*cp=='B'||*cp=='Q') { X mime_mode = *cp++; X mimebuf_f = FIXED_MIME; X } else if (*cp=='0') { X mime_f = FALSE; X } X continue; X case 'M': /* MIME output */ X oconv = j_oconv; /* sorry... not yet done.. */ X continue; X case 'B': /* Broken JIS support */ X /* bit:0 no ESC JIS X bit:1 allow any x on ESC-(-x or ESC-$-x X bit:2 reset to ascii on NL X */ X if('9'>= *cp && *cp>='0') X broken_f |= 1<<(*cp++ -'0'); X else X broken_f |= TRUE; X continue; #ifndef PERL_XS X case 'O':/* for Output file */ X file_out = TRUE; X continue; #endif X case 'c':/* add cr code */ X add_cr = TRUE; X continue; X case 'd':/* delete cr code */ X del_cr = TRUE; X continue; X default: X /* bogus option but ignored */ X continue; X } X } } X int noconvert(f) X FILE *f; { X int c; X X while ((c = getc(f)) != EOF) X putchar(c); X return 1; } X X X X int kanji_convert(f) X FILE *f; { X int c1, X c2; X X c2 = 0; X X if(input_f == JIS_INPUT || input_f == LATIN1_INPUT) { X estab_f = TRUE; iconv = oconv; X } else if(input_f == SJIS_INPUT) { X estab_f = TRUE; iconv = s_iconv; X } else { X estab_f = FALSE; iconv = oconv; X } X input_mode = ASCII; X output_mode = ASCII; X shift_mode = FALSE; X #define NEXT continue /* no output, get next */ #define SEND ; /* output c1 and c2, get next */ #define LAST break /* end of loop, go closing */ X X while ((c1 = GETC(f)) != EOF) { X if(c2) { X /* second byte */ X if(c2 > DEL) { X /* in case of 8th bit is on */ X if(!estab_f) { X /* in case of not established yet */ X if(c1 > SSP) { X /* It is still ambiguious */ X h_conv(f, c2, c1); X c2 = 0; X NEXT; X } else if(c1 < AT) { X /* ignore bogus code */ X c2 = 0; X NEXT; X } else { X /* established */ X /* it seems to be MS Kanji */ X estab_f = TRUE; X iconv = s_iconv; X SEND; X } X } else X /* in case of already established */ X if(c1 < AT) { X /* ignore bogus code */ X c2 = 0; X NEXT; X } else X SEND; X } else X /* 7 bit code */ X /* it might be kanji shitfted */ X if((c1 == DEL) || (c1 <= SPACE)) { X /* ignore bogus first code */ X c2 = 0; X NEXT; X } else X SEND; X } else { X /* first byte */ X if(c1 > DEL) { X /* 8 bit code */ X if(!estab_f && !iso8859_f) { X /* not established yet */ X if(c1 < SSP) { X /* it seems to be MS Kanji */ X estab_f = TRUE; X iconv = s_iconv; X } else if(c1 < 0xe0) { X /* it seems to be EUC */ X estab_f = TRUE; X iconv = oconv; X } else { X /* still ambiguious */ X } X c2 = c1; X NEXT; X } else { /* estab_f==TRUE */ X if(iso8859_f) { X SEND; X } else if(SSP<=c1 && c1<0xe0 && iconv == s_iconv) { X /* SJIS X0201 Case... */ X /* This is too arrogant, but ... */ X if(x0201_f==NO_X0201) { X iconv = oconv; X c2 = c1; X NEXT; X } else X if(x0201_f) { X if(dv[(c1-SSP)*2]||ev[(c1-SSP)*2]) { X /* look ahead for X0201/X0208conversion */ X if((c2 = GETC(f)) == EOF) { X (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]); X LAST; X } else if(c2==(0xde)) { /* $BByE@(B */ X (*oconv)(dv[(c1-SSP)*2],dv[(c1-SSP)*2+1]); X c2=0; X NEXT; X } else if(c2==(0xdf)&&ev[(c1-SSP)*2]) { X /* $BH>ByE@(B */ X (*oconv)(ev[(c1-SSP)*2],ev[(c1-SSP)*2+1]); X c2=0; X NEXT; X } X UNGETC(c2,f); c2 = 0; X } X (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]); X NEXT; X } else X SEND; X } else if(c1==SSO && iconv != s_iconv) { X /* EUC X0201 Case */ X /* This is too arrogant X if(x0201_f == NO_X0201) { X estab_f = FALSE; X c2 = 0; X NEXT; X } */ X c1 = GETC(f); /* skip SSO */ X euc_1byte_check: X if(x0201_f && SSP<=c1 && c1<0xe0) { X if(dv[(c1-SSP)*2]||ev[(c1-SSP)*2]) { X if((c2 = GETC(f)) == EOF) { X (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]); X LAST; X } X /* forward lookup $BByE@(B/$BH>ByE@(B */ X if(c2 != SSO) { X UNGETC(c2,f); c2 = 0; X (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]); X NEXT; X } else if((c2 = GETC(f)) == EOF) { X (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]); X (*oconv)(0,SSO); X LAST; X } else if(c2==(0xde)) { /* $BByE@(B */ X (*oconv)(dv[(c1-SSP)*2],dv[(c1-SSP)*2+1]); X c2=0; X NEXT; X } else if(c2==(0xdf)&&ev[(c1-SSP)*2]) { X /* $BH>ByE@(B */ X (*oconv)(ev[(c1-SSP)*2],ev[(c1-SSP)*2+1]); X c2=0; X NEXT; X } else { X (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]); X /* we have to check this c2 */ X /* and no way to push back SSO */ X c1 = c2; c2 = 0; X goto euc_1byte_check; X } X } X (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]); X NEXT; X } else X SEND; X } else if(c1 < SSP && iconv != s_iconv) { X /* strange code in EUC */ X iconv = s_iconv; /* try SJIS */ X c2 = c1; X NEXT; X } else { X /* already established */ X c2 = c1; X NEXT; X } X } X } else if((c1 > SPACE) && (c1 != DEL)) { X /* in case of Roman characters */ X if(shift_mode) { X c1 |= 0x80; X /* output 1 shifted byte */ X if(x0201_f && (!iso8859_f||input_mode==X0201) && X SSP<=c1 && c1<0xe0 ) { X if(dv[(c1-SSP)*2]||ev[(c1-SSP)*2]) { X if((c2 = GETC(f)) == EOF) { X (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]); X LAST; X } else if(c2==(0xde&0x7f)) { /* $BByE@(B */ X (*oconv)(dv[(c1-SSP)*2],dv[(c1-SSP)*2+1]); X c2=0; X NEXT; X } else if(c2==(0xdf&0x7f)&&ev[(c1-SSP)*2]) { X /* $BH>ByE@(B */ X (*oconv)(ev[(c1-SSP)*2],ev[(c1-SSP)*2+1]); X c2=0; X NEXT; X } X UNGETC(c2,f); c2 = 0; X } X (*oconv)(cv[(c1-SSP)*2],cv[(c1-SSP)*2+1]); X NEXT; X } else X SEND; X } else if(c1 == '(' && broken_f && input_mode == X0208 X && !mime_mode ) { X /* Try to recover missing escape */ X if((c1 = GETC(f)) == EOF) { X (*oconv)(0, '('); X LAST; X } else { X if(c1 == 'B' || c1 == 'J' || c1 == 'H') { X input_mode = ASCII; shift_mode = FALSE; X NEXT; X } else { X (*oconv)(0, '('); X /* do not modify various input_mode */ X /* It can be vt100 sequence */ X SEND; X } X } X } else if(input_mode == X0208) { X /* in case of Kanji shifted */ X c2 = c1; X NEXT; X /* goto next_byte */ X } else if(c1 == '=' && mime_f && !mime_mode ) { X if((c1 = getc(f)) == EOF) { X (*oconv)(0, '='); X LAST; X } else if(c1 == '?') { X /* =? is mime conversiooon start sequence */ X if(mime_begin(f) == EOF) /* check in detail */ X LAST; X else X NEXT; X } else { X (*oconv)(0, '='); X ungetc(c1,f); X NEXT; X } X } else if(c1 == '$' && broken_f && !mime_mode) { X /* try to recover missing escape */ X if((c1 = GETC(f)) == EOF) { X (*oconv)(0, '$'); X LAST; X } else if(c1 == '@'|| c1 == 'B') { X /* in case of Kanji in ESC sequence */ X input_mode = X0208; X shift_mode = FALSE; X NEXT; X } else { X /* sorry */ X (*oconv)(0, '$'); X (*oconv)(0, c1); X NEXT; X } X } else X SEND; X } else if(c1 == SI) { X shift_mode = FALSE; X NEXT; X } else if(c1 == SO) { X shift_mode = TRUE; X NEXT; X } else if(c1 == ESC ) { X if((c1 = GETC(f)) == EOF) { X (*oconv)(0, ESC); X LAST; X } else if(c1 == '$') { X if((c1 = GETC(f)) == EOF) { X (*oconv)(0, ESC); X (*oconv)(0, '$'); X LAST; X } else if(c1 == '@'|| c1 == 'B') { X /* This is kanji introduction */ X input_mode = X0208; X shift_mode = FALSE; X NEXT; X } else if(c1 == '(') { X if((c1 = GETC(f)) == EOF) { X (*oconv)(0, ESC); X (*oconv)(0, '$'); X (*oconv)(0, '('); X LAST; X } else if(c1 == '@'|| c1 == 'B') { X /* This is kanji introduction */ X input_mode = X0208; X shift_mode = FALSE; X NEXT; X } else { X (*oconv)(0, ESC); X (*oconv)(0, '$'); X (*oconv)(0, '('); X (*oconv)(0, c1); X NEXT; X } X } else if(broken_f&0x2) { X input_mode = X0208; X shift_mode = FALSE; X NEXT; X } else { X (*oconv)(0, ESC); X (*oconv)(0, '$'); X (*oconv)(0, c1); X NEXT; X } X } else if(c1 == '(') { X if((c1 = GETC(f)) == EOF) { X (*oconv)(0, ESC); X (*oconv)(0, '('); X LAST; X } else { X if(c1 == 'I') { X /* This is X0201 kana introduction */ X input_mode = X0201; shift_mode = X0201; X NEXT; X } else if(c1 == 'B' || c1 == 'J' || c1 == 'H') { X /* This is X0208 kanji introduction */ X input_mode = ASCII; shift_mode = FALSE; X NEXT; X } else if(broken_f&0x2) { X input_mode = ASCII; shift_mode = FALSE; X NEXT; X } else { X (*oconv)(0, ESC); X (*oconv)(0, '('); X /* maintain various input_mode here */ X SEND; X } X } X } else { X /* lonely ESC */ X (*oconv)(0, ESC); X SEND; X } X } else if(c1 == NL && broken_f&4) { X input_mode = ASCII; X SEND; X } else X SEND; X } X /* send: */ X if(input_mode == X0208) X (*oconv)(c2, c1); /* this is JIS, not SJIS/EUC case */ X else X (*iconv)(c2, c1); /* can be EUC/SJIS */ X c2 = 0; X continue; X /* goto next_word */ X } X X /* epilogue */ X (*iconv)(EOF, 0); X return 1; } X X X X int h_conv(f, c2, c1) X FILE *f; X int c1, X c2; { X int wc; X X X /** it must NOT be in the kanji shifte sequence */ X /** it must NOT be written in JIS7 */ X /** and it must be after 2 byte 8bit code */ X X hold_count = 0; X push_hold_buf(c2, c1); X c2 = 0; X X while ((c1 = GETC(f)) != EOF) { X if(c2) { X /* second byte */ X if(!estab_f) { X /* not established */ X if(c1 > SSP) { X /* it is still ambiguious yet */ X SEND; X } else if(c1 < AT) { X /* ignore bogus first byte */ X c2 = 0; X SEND; X } else { X /* now established */ X /* it seems to be MS Kanji */ X estab_f = TRUE; X iconv = s_iconv; X SEND; X } X } else X SEND; X } else { X /* First byte */ X if(c1 > DEL) { X /* 8th bit is on */ X if(c1 < SSP) { X /* it seems to be MS Kanji */ X estab_f = TRUE; X iconv = s_iconv; X } else if(c1 < 0xe0) { X /* it seems to be EUC */ X estab_f = TRUE; X iconv = oconv; X } else { X /* still ambiguious */ X } X c2 = c1; X NEXT; X } else X /* 7 bit code , then send without any process */ X SEND; X } X /* send: */ X if((push_hold_buf(c2, c1) == EOF) || estab_f) X break; X c2 = 0; X continue; X } X X /** now, X ** 1) EOF is detected, or X ** 2) Code is established, or X ** 3) Buffer is FULL (but last word is pushed) X ** X ** in 1) and 3) cases, we continue to use X ** Kanji codes by oconv and leave estab_f unchanged. X **/ X X for (wc = 0; wc < hold_count; wc += 2) { X c2 = hold_buf[wc]; X c1 = hold_buf[wc+1]; X (*iconv)(c2, c1); X } X return; } X X X int push_hold_buf(c2, c1) X int c2, X c1; { X if(hold_count >= HOLD_SIZE*2) X return (EOF); X hold_buf[hold_count++] = c2; X hold_buf[hold_count++] = c1; X return ((hold_count >= HOLD_SIZE*2) ? EOF : hold_count); } X X int s_iconv(c2, c1) X int c2, X c1; { X if((c2 == EOF) || (c2 == 0)) { X /* NOP */ X } else { X c2 = c2 + c2 - ((c2 <= 0x9f) ? SJ0162 : SJ6394); X if(c1 < 0x9f) X c1 = c1 - ((c1 > DEL) ? SPACE : 0x1f); X else { X c1 = c1 - 0x7e; X c2++; X } X } X (*oconv)(c2, c1); X return 1; } X X e_oconv(c2, c1) X int c2, X c1; { X c2 = pre_convert(c1,c2); c1 = c1_return; X if(fold_f) { X switch(line_fold(c2,c1)) { X case '\n': X if(add_cr == TRUE) { X putchar('\r'); X c1 = '\n'; X } X putchar('\n'); X break; X case 0: return; X case '\r': X c1 = '\n'; c2 = 0; X break; X case '\t': X case ' ': X c1 = ' '; c2 = 0; X break; X } X } X if(c2==DOUBLE_SPACE) { X putchar(' '); putchar(' '); X return; X } X if(c2 == EOF) X return; X else if(c2 == 0 && (c1&0x80)) { X putchar(SSO); putchar(c1); X } else if(c2 == 0) { X if(c1 == '\n' && add_cr == TRUE) X putchar('\r'); X if(c1 != '\r') X putchar(c1); X else if(del_cr == FALSE) X putchar(c1); X } else { X if((c1<0x20 || 0x7e<c1) || X (c2<0x20 || 0x7e<c2)) { X estab_f = FALSE; X return; /* too late to rescue this char */ X } X putchar(c2 | 0x080); X putchar(c1 | 0x080); X } X return; } X X X X s_oconv(c2, c1) X int c2, X c1; { X c2 = pre_convert(c1,c2); c1 = c1_return; X if(fold_f) { X switch(line_fold(c2,c1)) { X case '\n': X if(add_cr == TRUE) { X putchar('\r'); X c1 = '\n'; X } X putchar('\n'); X break; X case '\r': X c1 = '\n'; c2 = 0; X break; X case 0: return; X case '\t': X case ' ': X c1 = ' '; c2 = 0; X break; X } X } X if(c2==DOUBLE_SPACE) { X putchar(' '); putchar(' '); X return; X } X if(c2 == EOF) X return; X else if(c2 == 0) { X if(c1 == '\n' && add_cr == TRUE) X putchar('\r'); X if(c1 != '\r') X putchar(c1); X else if(del_cr == FALSE) X putchar(c1); X } else { X if((c1<0x20 || 0x7e<c1) || X (c2<0x20 || 0x7e<c2)) { X estab_f = FALSE; X return; /* too late to rescue this char */ X } X putchar((((c2 - 1) >> 1) + ((c2 <= 0x5e) ? 0x71 : 0xb1))); X putchar((c1 + ((c2 & 1) ? ((c1 < 0x60) ? 0x1f : 0x20) : 0x7e))); X } X return; } X j_oconv(c2, c1) X int c2, X c1; { X c2 = pre_convert(c1,c2); c1 = c1_return; X if(fold_f) { X switch(line_fold(c2,c1)) { X case '\n': X if(output_mode) { X putchar(ESC); X putchar('('); X putchar(ascii_intro); X } X if(add_cr == TRUE) { X putchar('\r'); X c1 = '\n'; X } X putchar('\n'); X output_mode = ASCII; X break; X case '\r': X c1 = '\n'; c2 = 0; X break; X case '\t': X case ' ': X c1 = ' '; c2 = 0; X break; X case 0: return; X } X } X if(c2 == EOF) { X if(output_mode) { X putchar(ESC); X putchar('('); X putchar(ascii_intro); X } X } else if(c2 == 0 && (c1 & 0x80)) { X if(input_mode==X0201 || !iso8859_f) { X if(output_mode!=X0201) { X putchar(ESC); X putchar('('); X putchar('I'); X output_mode = X0201; X } X c1 &= 0x7f; X } else { X /* iso8859 introduction, or 8th bit on */ X /* Can we convert in 7bit form using ESC-'-'-A ? X Is this popular? */ X } X putchar(c1); X } else if(c2 == 0) { X if(output_mode) { X putchar(ESC); X putchar('('); X putchar(ascii_intro); X output_mode = ASCII; X } X if(c1 == '\n' && add_cr == TRUE) X putchar('\r'); X if(c1 != '\r') X putchar(c1); X else if(del_cr == FALSE) X putchar(c1); X } else if(c2 == DOUBLE_SPACE) { X if(output_mode) { X putchar(ESC); X putchar('('); X putchar(ascii_intro); X output_mode = ASCII; X } X putchar(' '); X if(c1 == '\n' && add_cr == TRUE) X putchar('\r'); X if(c1 != '\r') X putchar(c1); X else if(del_cr == FALSE) X putchar(c1); X } else { X if(output_mode != X0208) { X putchar(ESC); X putchar('$'); X putchar(kanji_intro); X output_mode = X0208; X } X if(c1<0x20 || 0x7e<c1) X return; X if(c2<0x20 || 0x7e<c2) X return; X putchar(c2); X if(c1 == '\n' && add_cr == TRUE) X putchar('\r'); X if(c1 != '\r') X putchar(c1); X else if(del_cr == FALSE) X putchar(c1); X } X return; } X X X #define rot13(c) ( \ X ( c < 'A' ) ? c: \ X (c <= 'M') ? (c + 13): \ X (c <= 'Z') ? (c - 13): \ X (c < 'a') ? (c): \ X (c <= 'm') ? (c + 13): \ X (c <= 'z') ? (c - 13): \ X (c) \ ) X #define rot47(c) ( \ X ( c < '!' ) ? c: \ X ( c <= 'O' ) ? (c + 47) : \ X ( c <= '~' ) ? (c - 47) : \ X c \ ) X X /* X Return value of line_fold() X X \n add newline and output char X \r add newline and output nothing X ' ' space X 0 skip X 1 (or else) normal output X X fold state in prev (previous character) X X >0x80 Japanese (X0208/X0201) X <0x80 ASCII X \n new line X ' ' space X X This fold algorthm does not preserve heading space in a line. X This is the main difference from fmt. */ X int line_fold(c2,c1) int c2,c1; { X int prev0; X if(c1=='\r') X return 0; /* ignore cr */ X if(c1== 8) { X if(line>0) line--; X return 1; X } X if(c2==EOF && line != 0) /* close open last line */ X return '\n'; X /* new line */ X if(c1=='\n') { X if(prev == c1) { /* duplicate newline */ X if(line) { X line = 0; X return '\n'; /* output two newline */ X } else { X line = 0; X return 1; X } X } else { X if(prev&0x80) { /* Japanese? */ X prev = c1; X return 0; /* ignore given single newline */ X } else if(prev==' ') { X return 0; X } else { X prev = c1; X if(++line<=fold_len) X return ' '; X else { X line = 0; X return '\r'; /* fold and output nothing */ X } X } X } X } X if(c1=='\f') { X prev = '\n'; X if(line==0) X return 1; X line = 0; X return '\n'; /* output newline and clear */ X } X /* X0208 kankaku or ascii space */ X if( (c2==0&&c1==' ')|| X (c2==0&&c1=='\t')|| X (c2==DOUBLE_SPACE)|| X (c2=='!'&& c1=='!')) { X if(prev == ' ') { X return 0; /* remove duplicate spaces */ X } X prev = ' '; X if(++line<=fold_len) X return ' '; /* output ASCII space only */ X else { X prev = ' '; line = 0; X return '\r'; /* fold and output nothing */ X } X } X prev0 = prev; /* we still need this one... , but almost done */ X prev = c1; X if(c2 || (SSP<=c1 && c1<=0xdf)) X prev |= 0x80; /* this is Japanese */ X line += (c2==0)?1:2; X if(line<=fold_len) { /* normal case */ X return 1; X } X if(line>=fold_len+FOLD_MARGIN) { /* too many kinsou suspension */ X line = (c2==0)?1:2; X return '\n'; /* We can't wait, do fold now */ X } X /* simple kinsoku rules return 1 means no folding */ X if(c2==0) { X if(c1==0xde) return 1; /* $B!+(B*/ X if(c1==0xdf) return 1; /* $B!,(B*/ X if(c1==0xa4) return 1; /* $B!#(B*/ X if(c1==0xa3) return 1; /* $B!$(B*/ X if(c1==0xa1) return 1; /* $B!W(B*/ X if(c1==0xb0) return 1; /* - */ X if(SSP<=c1 && c1<=0xdf) { /* X0201 */ X line = 1; X return '\n';/* add one new line before this character */ X } X /* fold point in ASCII { [ ( */ X if(( c1!=')'&& X c1!=']'&& X c1!='}'&& X c1!='.'&& X c1!=','&& X c1!='!'&& X c1!='?'&& X c1!='/'&& X c1!=':'&& X c1!=';')&& X ((prev0=='\n')|| (prev0==' ')|| /* ignored new line */ X (prev0&0x80)) /* X0208 - ASCII */ X ) { X line = 1; X return '\n';/* add one new line before this character */ X } X return 1; /* default no fold in ASCII */ X } else { X if(c2=='!') { X if(c1=='"') return 1; /* $B!"(B */ X if(c1=='#') return 1; /* $B!#(B */ X if(c1=='$') return 1; /* $B!$(B */ X if(c1=='%') return 1; /* $B!%(B */ X if(c1=='\'') return 1; /* $B!\(B */ X if(c1=='(') return 1; /* $B!((B */ X if(c1==')') return 1; /* $B!)(B */ X if(c1=='*') return 1; /* $B!*(B */ X if(c1=='+') return 1; /* $B!+(B */ X if(c1==',') return 1; /* $B!,(B */ X } X line = 2; X return '\n'; /* add one new line before this character */ X } } X int pre_convert(c1,c2) int c1,c2; { X if(c2) c1 &= 0x7f; X c1_return = c1; X if(c2==EOF) return c2; X c2 &= 0x7f; X if(rot_f) { X if(c2) { X c1 = rot47(c1); X c2 = rot47(c2); X } else { X if(!(c1 & 0x80)) X c1 = rot13(c1); X } X c1_return = c1; X } X /* JISX0208 Alphabet */ X if(alpha_f && c2 == 0x23 ) return 0; X /* JISX0208 Kigou */ X if(alpha_f && c2 == 0x21 ) { X if(0x21==c1) { X if(alpha_f&0x2) { X c1_return = ' '; X return 0; X } else if(alpha_f&0x4) { X c1_return = ' '; X return DOUBLE_SPACE; X } else { X return c2; X } X } else if(0x20<c1 && c1<0x7f && fv[c1-0x20]) { X c1_return = fv[c1-0x20]; X return 0; X } X } X return c2; } X X #ifdef STRICT_MIME /* This converts =?ISO-2022-JP?B?HOGE HOGE */ X unsigned char *mime_pattern[] = { X (unsigned char *)"\075?ISO-8859-1?Q?", X (unsigned char *)"\075?ISO-2022-JP?B?", X (unsigned char *)"\075?ISO-2022-JP?Q?", X (unsigned char *)"\075?JAPANESE_EUC?B?", X (unsigned char *)"\075?SHIFT_JIS?B?", X NULL }; X int mime_encode[] = { X 'Q', 'B', 'Q', X 0 }; #endif X #define MAXRECOVER 20 int iso8859_f_save; X #ifdef STRICT_MIME X #define nkf_toupper(c) (('a'<=c && c<='z')?(c-('a'-'A')):c) /* I don't trust portablity of toupper */ X int mime_begin(f) FILE *f; { X int c1; X int i,j,k; X unsigned char *p,*q; X int r[MAXRECOVER]; /* recovery buffer, max mime pattern lenght */ X X mime_mode = FALSE; X /* =? has been checked */ X j = 0; X p = mime_pattern[j]; X r[0]='='; r[1]='?'; X X for(i=2;p[i]>' ';i++) { /* start at =? */ X if( ((r[i] = c1 = getc(f))==EOF) || nkf_toupper(c1) != p[i] ) { X /* pattern fails, try next one */ X q = p; X while (p = mime_pattern[++j]) { X for(k=2;k<i;k++) /* assume length(p) > i */ X if(p[k]!=q[k]) break; X if(k==i && nkf_toupper(c1)==p[k]) break; X } X if(p) continue; /* found next one, continue */ X /* all fails, output from recovery buffer */ X ungetc(c1,f); X for(j=0;j<i;j++) { X (*oconv)(0,r[j]); X } X return c1; X } X } X mime_mode = mime_encode[j]; X iso8859_f_save = iso8859_f; X if(j==0) { X iso8859_f = TRUE; X } X if(mime_mode=='B') { X mimebuf_f = unbuf_f; X if(!unbuf_f) { X /* do MIME integrity check */ X return mime_integrity(f,mime_pattern[j]); X } X } X mimebuf_f = TRUE; X return c1; } X #define mime_getc0(f) (mimebuf_f?getc(f):Fifo(mime_input++)) #define mime_ungetc0(c,f) (mimebuf_f?ungetc(c,f):mime_input--) X #else int mime_begin(f) FILE *f; { X int c1; X int i,j,k; X int r[MAXRECOVER]; /* recovery buffer, max mime pattern lenght */ X X mime_mode = FALSE; X /* =? has been checked */ X j = 0; X r[0]='='; r[1]='?'; X for(i=2;i<MAXRECOVER;i++) { /* start at =? */ X /* We accept any charcter type even if it is breaked by new lines */ X if( (r[i] = c1 = getc(f))==EOF) break; X if(c1=='=') break; X if(c1<' '&& c1!='\r' && c1!='\n') break; X if(!(('A'<=c1&&c1<='Z')||('a'<=c1&&c1<='z')||('0'<=c1&&c1<='9') X ||c1=='_'||c1=='-'||c1=='?')) break; X if(c1=='?') { X i++; X if(!(i<MAXRECOVER) || (r[i] = c1 = getc(f))==EOF) break; X if(c1=='b'||c1=='B') { X mime_mode = 'B'; X } else if(c1=='q'||c1=='Q') { X mime_mode = 'Q'; X } else { X break; X } X i++; X if(!(i<MAXRECOVER) || (r[i] = c1 = getc(f))==EOF) break; X if(c1=='?') { X break; X } else { X mime_mode = FALSE; X } X break; X } X } X if(!mime_mode || c1==EOF || i==MAXRECOVER) { X ungetc(c1,f); X for(j=0;j<i;j++) { X (*oconv)(0,r[j]); X } X return c1; X } X iso8859_f_save = iso8859_f; X /* do no MIME integrity check */ X return c1; /* used only for checking EOF */ } X #define mime_getc0(f) getc(f) #define mime_ungetc0(c,f) ungetc(c,f) X #endif X int mime_getc(f) FILE *f; { X int c1, c2, c3, c4, cc; X int t1, t2, t3, t4, mode, exit_mode; X X if(mime_top != mime_last) { /* Something is in FIFO */ X return Fifo(mime_top++); X } X X if(mimebuf_f == FIXED_MIME) X exit_mode = mime_mode; X else X exit_mode = FALSE; X if(mime_mode == 'Q') { X if((c1 = mime_getc0(f)) == EOF) return (EOF); X if(c1=='_') return ' '; X if(c1!='=' && c1!='?') X return c1; X mime_mode = exit_mode; /* prepare for quit */ X if(c1<=' ') return c1; X if((c2 = mime_getc0(f)) == EOF) return (EOF); X if(c2<=' ') return c2; X if(c1=='?'&&c2=='=') { X /* end Q encoding */ X input_mode = exit_mode; X iso8859_f = iso8859_f_save; X return getc(f); X } X if(c1=='?') { X mime_mode = 'Q'; /* still in MIME */ X mime_ungetc0(c2,f); X return c1; X } X if((c3 = mime_getc0(f)) == EOF) return (EOF); X if(c2<=' ') return c2; X mime_mode = 'Q'; /* still in MIME */ #define hex(c) (('0'<=c&&c<='9')?(c-'0'):\ X ('A'<=c&&c<='F')?(c-'A'+10):('a'<=c&&c<='f')?(c-'a'+10):0) X return ((hex(c2)<<4) + hex(c3)); X } X X if(mime_mode != 'B') { X mime_mode = FALSE; X return getc(f); X } X X X /* Base64 encoding */ X /* X MIME allows line break in the middle of X Base64, but we are very pessimistic in decoding X in unbuf mode because MIME encoded code may broken by X less or editor's control sequence (such as ESC-[-K in unbuffered X mode. ignore incomplete MIME. X */ X mode = mime_mode; X mime_mode = exit_mode; /* prepare for quit */ X X while ((c1 = mime_getc0(f))<=' ') { X if(c1==EOF) X return (EOF); X } X if((c2 = mime_getc0(f))<=' ') { X if(c2==EOF) X return (EOF); X if(mimebuf_f!=FIXED_MIME) input_mode = ASCII; X return c2; X } X if((c1 == '?') && (c2 == '=')) { X input_mode = ASCII; X while((c1 = getc(f))==' ' /* || c1=='\n' || c1=='\r' */); X return c1; X } X if((c3 = mime_getc0(f))<=' ') { X if(c3==EOF) X return (EOF); X if(mimebuf_f!=FIXED_MIME) input_mode = ASCII; X return c3; X } X if((c4 = mime_getc0(f))<=' ') { X if(c4==EOF) X return (EOF); X if(mimebuf_f!=FIXED_MIME) input_mode = ASCII; X return c4; X } X X mime_mode = mode; /* still in MIME sigh... */ X X /* BASE 64 decoding */ X X t1 = 0x3f & base64decode(c1); X t2 = 0x3f & base64decode(c2); X t3 = 0x3f & base64decode(c3); X t4 = 0x3f & base64decode(c4); X cc = ((t1 << 2) & 0x0fc) | ((t2 >> 4) & 0x03); X if(c2 != '=') { X Fifo(mime_last++) = cc; X cc = ((t2 << 4) & 0x0f0) | ((t3 >> 2) & 0x0f); X if(c3 != '=') { X Fifo(mime_last++) = cc; X cc = ((t3 << 6) & 0x0c0) | (t4 & 0x3f); X if(c4 != '=') X Fifo(mime_last++) = cc; X } X } else { X return c1; X } X return Fifo(mime_top++); } X int mime_ungetc(c) unsigned int c; { X Fifo(mime_last++) = c; X return c; } X #ifdef STRICT_MIME int mime_integrity(f,p) FILE *f; unsigned char *p; { X int c,d; X unsigned int q; X /* In buffered mode, read until =? or NL or buffer fffull X */ X mime_input = mime_top; X mime_last = mime_top; X while(*p) Fifo(mime_input++) = *p++; X d = 0; X q = mime_input; X while((c=getc(f))!=EOF) { X if(((mime_input-mime_top)&MIME_BUF_MASK)==0) break; X if(c=='=' && d=='?') { X /* checked. skip header, start decode */ X Fifo(mime_input++) = c; X mime_input = q; X return 1; X } X if(!( (c=='+'||c=='/'|| c=='=' || c=='?' || X ('a'<=c && c<='z')||('A'<= c && c<='Z')||('0'<=c && c<='9')))) X break; X /* Should we check length mod 4? */ X Fifo(mime_input++) = c; X d=c; X } X /* In case of Incomplete MIME, no MIME decode */ X Fifo(mime_input++) = c; X mime_last = mime_input; /* point undecoded buffer */ X mime_mode = 1; /* no decode on Fifo last in mime_getc */ X return 1; } #endif X int base64decode(c) X int c; { X int i; X if(c > '@') X if(c < '[') X i = c - 'A'; /* A..Z 0-25 */ X else X i = c - 'G' /* - 'a' + 26 */ ; /* a..z 26-51 */ X else if(c > '/') X i = c - '0' + '4' /* - '0' + 52 */ ; /* 0..9 52-61 */ X else if(c == '+') X i = '>' /* 62 */ ; /* + 62 */ X else X i = '?' /* 63 */ ; /* / 63 */ X return (i); } X void reinit() { X unbuf_f = FALSE; X estab_f = FALSE; X nop_f = FALSE; X binmode_f = TRUE; X rot_f = FALSE; X input_f = FALSE; X alpha_f = FALSE; X mime_f = TRUE; X mimebuf_f = FALSE; X broken_f = FALSE; X iso8859_f = FALSE; X x0201_f = TRUE; X x0201_f = NO_X0201; X fold_f = FALSE; X kanji_intro = DEFAULT_J; X ascii_intro = DEFAULT_R; X oconv = DEFAULT_CONV; X output_mode = ASCII; X input_mode = ASCII; X shift_mode = FALSE; X mime_mode = FALSE; X file_out = FALSE; X add_cr = FALSE; X del_cr = FALSE; } X #ifndef PERL_XS int usage() { X fprintf(stderr,"USAGE: nkf(nkf32,wnkf,nkf2) -[flags] [in file] .. [out file for -O flag]\n"); X fprintf(stderr,"Flags:\n"); X fprintf(stderr,"b,u Output is bufferred (DEFAULT),Output is unbufferred\n"); #ifdef DEFAULT_CODE_SJIS X fprintf(stderr,"j,s,e Outout code is JIS 7 bit, Shift JIS (DEFAULT), AT &T JIS (EUC)\n"); #endif #ifdef DEFAULT_CODE_JIS X fprintf(stderr,"j,s,e Outout code is JIS 7 bit (DEFAULT), Shift JIS, AT&T JIS (EUC)\n"); #endif #ifdef DEFAULT_CODE_EUC X fprintf(stderr,"j,s,e Outout code is JIS 7 bit, Shift JIS, AT&T JIS (EU C) (DEFAULT)\n"); #endif X fprintf(stderr,"J,S,E Input assumption is JIS 7 bit , Shift JIS, AT&T JIS (EUC)\n"); X fprintf(stderr,"t no conversion\n"); X fprintf(stderr,"i_ Output sequence to designate JIS-kanji (DEFAULT B)\n"); X fprintf(stderr,"o_ Output sequence to designate ASCII (DEFAULT B)\n" ); X fprintf(stderr,"r {de/en}crypt ROT13/47\n"); X fprintf(stderr,"v Show this usage\n"); X fprintf(stderr,"m[BQ0] MIME decode [B:base64,Q:quoted,0:no decode]\n"); X fprintf(stderr,"l ISO8859-1 (Latin-1) support\n"); X fprintf(stderr,"f Folding: -f60 or -f\n"); X fprintf(stderr,"Z[0-2] Convert X0208 alphabet to ASCII 1: Kankaku to space,2: 2 spaces\n"); X fprintf(stderr,"X,x Assume X0201 kana in MS-Kanji, -x preserves X0201 \n"); X fprintf(stderr,"B[0-2] Broken input 0: missing ESC,1: any X on ESC-[($]-X,2: ASCII on NL\n"); #ifdef MSDOS X fprintf(stderr,"T Text mode output\n"); #endif X fprintf(stderr,"O Output to File (DEFAULT 'nkf.out')\n"); X fprintf(stderr,"d,c Delete \\r in line feed, Add \\r in line feed\n") ; X fprintf(stderr,"Network Kanji Filter Version %s (%s) " #if defined(MSDOS) && !defined(_Windows) X "for DOS" #endif #if !defined(__WIN32__) && defined(_Windows) X "for Win16" #endif #if defined(__WIN32__) && defined(_Windows) X "for Win32" #endif #ifdef __OS2__ X "for OS/2" #endif X ,Version,Patchlevel); X fprintf(stderr,"\n%s\n",CopyRight); X return 0; } #endif X /** X ** $B%Q%C%A@):n<T(B X ** void@merope.pleiades.or.jp (Kusakabe Youichi) X ** NIDE Naoyuki <nide@ics.nara-wu.ac.jp> X ** ohta@src.ricoh.co.jp (Junn Ohta) X ** inouet@strl.nhk.or.jp (Tomoyuki Inoue) X ** kiri@pulser.win.or.jp (Tetsuaki Kiriyama) X ** Kimihiko Sato <sato@sail.t.u-tokyo.ac.jp> X ** a_kuroe@kuroe.aoba.yokohama.jp (Akihiko Kuroe) X ** kono@ie.u-ryukyu.ac.jp (Shinji Kono) X ** GHG00637@nifty-serve.or.jp (COW) X ** X ** $B:G=*99?7F|(B X ** 1998.11.16 X **/ X /* end */ SHAR_EOF $shar_touch -am 1116192198 'nkf.c' && chmod 0644 'nkf.c' || $echo 'restore of' 'nkf.c' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'nkf.c:' 'MD5 check failed' f22548c7ba685348f7a5a53449740389 nkf.c SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'nkf.c'`" test 56296 -eq "$shar_count" || $echo 'nkf.c:' 'original size' '56296,' 'current size' "$shar_count!" fi fi # ============= nkf_test.pl ============== if test -f 'nkf_test.pl' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'nkf_test.pl' '(file already exists)' else $echo 'x -' extracting 'nkf_test.pl' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'nkf_test.pl' && #!/usr/local/bin/perl # # nkf test program for nkf 1.7 # Shinji KONO <kono@ie.u-ryukyu.ac.jp> # Sun Aug 18 12:25:40 JST 1996 # Sun Nov 8 00:16:06 JST 1998 # # This is useful when you add new patch on nkf. # Since this test is too strict, faileurs may not mean # wrong conversion. # # nkf 1.5 differs on MIME decoding # nkf 1.4 passes Basic Conversion tests # nkf PDS version passes Basic Conversion tests using "nkf -iB -oB " # X $nkf = "./nkf"; # $nkf = "doscmd nkf.exe"; X # If you want to see the testing process, set next flag. X $detail_all = 0; X # &library_test0(); sub test { # use NKF; # &library_test(@_); X &command_test(@_); } X sub command_test { X local ($nkf,$in,$ans,$detail) = @_; X local ($result); X X $result = ''; X open(OUT,"> nkf.in"); X print OUT $in; X close(OUT); X system("$nkf <nkf.in >nkf.out"); # easy X open(IN,"< nkf.out"); X print STDERR "\nINPUT:\n",$in if ($detail || $detail_all); X print STDERR "\nEXPECT:\n", $ans if ($detail || $detail_all); X while(<IN>) { X $result .= $_; X } X print STDERR "\nGOT:\n",$result if ($detail || $detail_all); X print (($result eq $ans)?"Ok\n":"Fail\n"); X return $result; } X sub library_test { X local ($nkf,$in,$ans,$detail) = @_; X local ($result); X X X $nkf =~ s/^[^_]* //; X print "\nINPUT:\n",$in if ($detail || $detail_all); X print "\nEXPECT:\n", $ans if ($detail || $detail_all); X $result = NKF::nkf($nkf,$in); X print "\nGOT:\n",$result if ($detail || $detail_all); X X print (($result eq $ans)?"Ok\n":"Fail\n"); X return $result; } X sub librrary_test0 { BEGIN { $| = 1; print "1..3\n"; } END {print "not ok 1\n" unless $loaded;} X use NKF; X $loaded = 1; X print "ok 1\n"; X X ######################### End of black magic. X X # Insert your test code below (better if it prints "ok 13" X # (correspondingly "not ok 13") depending on the success of chunk 13 X # of the test code): X X if ( nkf("-m","-e","1") ) { X print "ok 2\n"; X } else { X print "no 2\n"; X } X X $output = nkf("\033\$@#1#3#2%B"); X if ($output) { X # print $output,"\n"; X print "ok 3\n"; X } else { X print "no 3\n"; X } X X $output = nkf("-Zj","\033\$@#1#3#2%B"); X if ($output) { X # print $output,"\n"; X print "ok 4\n"; X } else { X print "no 4\n"; X } X X # conversion makes strings longer X $output = "\244\306 " x 1024; X $old = length($output); X $output = nkf("-j",$output); X if ($output) { X # print $output,"\n"; X print "ok 5 $old ",length($output),"\n"; X } else { X print "no 5\n"; X } X X } X # Basic Conversion print "\nBasic Conversion test\n\n"; X # I gave up simple literal quote because there are big difference # on perl4 and perl5 on literal quote. Of course we cannot use # jperl. X $example{'jis'} = unpack('u',<<'eofeof'); M1FER<W0@4W1A9V4@&R1"(3DQ(3%^2R%+?D]3&RA"(%-E8V]N9"!3=&%G92`; M)$)0)TU:&RA"($AI<F%G86YA(!LD0B0B)"0D)B0H)"HD;R1R)',;*$(*2V%T M86MA;F$@&R1")2(E)"4F)2@E*B5O)7(E<QLH0B!+:6=O=2`;)$(A)B%G(S`C /029!)E@G(B=!*$`;*$(* eofeof X $example{'sjis'} = unpack('u',<<'eofeof'); M1FER<W0@4W1A9V4@@5B)0(F>ED"6GIAR(%-E8V]N9"!3=&%G92"8I9=Y($AI M<F%G86YA((*@@J*"I(*F@JB"[8+P@O$*2V%T86MA;F$@@T�X-%@T>#28./ >@Y*#DR!+:6=O=2"!18&'@D^"8(._@]:$081@A+X* eofeof X $example{'euc'} = unpack('u',<<'eofeof'); M1FER<W0@4W1A9V4@H;FQH;'^RZ'+_L_3(%-E8V]N9"!3=&%G92#0I\W:($AI M<F%G86YA(*2BI*2DIJ2HI*JD[Z3RI/,*2V%T86MA;F$@I:*EI*6FI:BEJJ7O >I?*E\R!+:6=O=2"AIJ'GH["CP:;!IMBGHJ?!J,`* eofeof X X # From JIS X print "JIS to JIS ... ";&test("$nkf ",$example{'jis'},$example{'jis'}); print "JIS to SJIS... ";&test("$nkf -s",$example{'jis'},$example{'sjis'}); print "JIS to EUC ... ";&test("$nkf -e",$example{'jis'},$example{'euc'}); X # From SJIS X print "SJIS to JIS ... ";&test("$nkf -j",$example{'sjis'},$example{'jis'}); print "SJIS to SJIS... ";&test("$nkf -s",$example{'sjis'},$example{'sjis'}); print "SJIS to EUC ... ";&test("$nkf -e",$example{'sjis'},$example{'euc'}); X # From EUC X print "EUC to JIS ... ";&test("$nkf ",$example{'euc'},$example{'jis'}); print "EUC to SJIS... ";&test("$nkf -s",$example{'euc'},$example{'sjis'}); print "EUC to EUC ... ";&test("$nkf -e",$example{'euc'},$example{'euc'}); X # Ambigous Case X $example{'amb'} = unpack('u',<<'eofeof'); MI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&E MPK"QI<*PL:7"L+&EPK"QI<(*I<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*P ML:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<(*I<*PL:7"L+&E MPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7" ML+&EPK"QI<(*I<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"Q MI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<(*I<*PL:7"L+&EPK"QI<*PL:7" ML+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<(* eofeof X $example{'amb.euc'} = unpack('u',<<'eofeof'); M&R1")4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25" M,#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*&R1")4(P,25",#$E0C`Q)4(P,25" M,#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(; M*$(*&R1")4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P M,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*&R1")4(P,25",#$E0C`Q)4(P M,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q M)4(;*$(*&R1")4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q >)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(* eofeof X $example{'amb.sjis'} = unpack('u',<<'eofeof'); M&RA))4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25" M,#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*&RA))4(P,25",#$E0C`Q)4(P,25" M,#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(; M*$(*&RA))4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P M,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*&RA))4(P,25",#$E0C`Q)4(P M,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q M)4(;*$(*&RA))4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q >)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(* eofeof X print "Ambiguous Case. "; X &test("$nkf",$example{'amb'},$example{'amb.euc'}); X # Input assumption X print "SJIS Input assumption "; X &test("$nkf -Sx",$example{'amb'},$example{'amb.sjis'}); X # X0201 $B2>L>(B # X0201->X0208 conversion # X0208 aphabet -> ASCII # X0201 $BAj8_JQ49(B X print "\nX0201 test\n\n"; X $example{'x0201.sjis'} = unpack('u',<<'eofeof'); MD5.*<(-*@TR#3H-0@U*#2X--@T^#48-3"I%3B7""8()A@F*"8X)D@F6"9H*! M@H*"@X*$@H6"AH*'"I%3BTR-AH%)@9>!E(&0@9.!3X&5@9:!:8%J@7R!>X&! M@6V!;H%O@7"!CPJ4O(IPMK>X/;FZMMZWWKC>N=ZZWH+&"I2\BG#*W\O?S-_- MW\[?M]^QW@K*W\O?S`IH86YK86MU(,K?R]_,I`K*W\O?S-VA"I2\BG""S(SC !"@!" eofeof X $example{'x0201.euc'} = unpack('u',<<'eofeof'); MP;2ST:6KI:VEKZ6QI;.EK*6NI;"ELJ6T"L&TL=&CP:/"H\.CQ*/%H\:CQZ/A MH^*CXZ/DH^6CYJ/G"L&TM:VYYJ&JH?>A]*'PH?.AL*'UH?:ARJ'+H=VAW*'A MH<ZASZ'0H=&A[PK(OK/1CK:.MXZX/8ZYCKJ.MH[>CK>.WHZXCMZ.N8[>CKJ. MWJ3("LB^L]&.RH[?CLN.WX[,CM^.S8[?CLZ.WXZWCM^.L8[>"H[*CM^.RX[? MCLP*:&%N:V%K=2".RH[?CLN.WX[,CJ0*CLJ.WX[+CM^.S([=CJ$*R+ZST:3. #N.4* eofeof X $example{'x0201.jis'} = unpack('u',<<'eofeof'); M&R1"030S424K)2TE+R4Q)3,E+"4N)3`E,B4T&RA""ALD0D$T,5$C02-"(T,C M1"-%(T8C1R-A(V(C8R-D(V4C9B-G&RA""ALD0D$T-2TY9B$J(7<A="%P(7,A M,"%U(78A2B%+(5TA7"%A(4XA3R%0(5$A;QLH0@H;)$)(/C-1&RA)-C<X&RA" M/1LH23DZ-EXW7CA>.5XZ7ALD0B1(&RA""ALD0D@^,U$;*$E*7TM?3%]-7TY? M-U\Q7ALH0@H;*$E*7TM?3!LH0@IH86YK86MU(!LH24I?2U],)!LH0@H;*$E* 97TM?3%TA&RA""ALD0D@^,U$D3CAE&RA""@`` eofeof X $example{'x0201.sosi'} = unpack('u',<<'eofeof'); M&R1"030S424K)2TE+R4Q)3,E+"4N)3`E,B4T&RA*"ALD0D$T,5$C02-"(T,C M1"-%(T8C1R-A(V(C8R-D(V4C9B-G&RA*"ALD0D$T-2TY9B$J(7<A="%P(7,A M,"%U(78A2B%+(5TA7"%A(4XA3R%0(5$A;QLH2@H;)$)(/C-1&RA*#C8W.`\; M*$H]#CDZ-EXW7CA>.5XZ7@\;)$(D2!LH2@H;)$)(/C-1&RA*#DI?2U],7TU? M3E\W7S%>#PH.2E]+7TP/&RA*"FAA;FMA:W4@#DI?2U],)`\;*$H*#DI?2U], 672$/&RA*"ALD0D@^,U$D3CAE&RA""@`` eofeof X $example{'x0201.x0208'} = unpack('u',<<'eofeof'); M&R1"030S424K)2TE+R4Q)3,E+"4N)3`E,B4T&RA""ALD0D$T,5$;*$)!0D-$ M149'86)C9&5F9PH;)$)!-#4M.68;*$(A0",D)5XF*B@I+2L]6UU[?1LD0B%O M&RA""ALD0D@^,U$E*R4M)2\;*$(]&R1")3$E,R4L)2XE,"4R)30D2!LH0@H; M)$)(/C-1)5$E5"57)5HE724M(2PE(B$K&RA""ALD0B51)50E51LH0@IH86YK M86MU(!LD0B51)50E52$B&RA""ALD0B51)50E525S(2,;*$(*&R1"2#XS421. &.&4;*$(* eofeof X # -X is necessary to allow X0201 in SJIS # -Z convert X0208 alphabet to ASCII print "X0201 conversion: SJIS "; X &test("$nkf -XZ",$example{'x0201.sjis'},$example{'x0201.x0208'}); print "X0201 conversion: JIS "; X &test("$nkf -Z",$example{'x0201.jis'},$example{'x0201.x0208'}); print "X0201 conversion:SI/SO "; X &test("$nkf -Z",$example{'x0201.sosi'},$example{'x0201.x0208'}); print "X0201 conversion: EUC "; X &test("$nkf -Z",$example{'x0201.euc'},$example{'x0201.x0208'}); # -x means X0201 output print "X0201 output: SJIS "; X &test("$nkf -xs",$example{'x0201.euc'},$example{'x0201.sjis'}); print "X0201 output: JIS "; X &test("$nkf -xj",$example{'x0201.sjis'},$example{'x0201.jis'}); print "X0201 output: EUC "; X &test("$nkf -xe",$example{'x0201.jis'},$example{'x0201.euc'}); X # MIME decode X print "\nMIME test\n\n"; X # MIME ISO-2022-JP X $example{'mime.iso2022'} = unpack('u',<<'eofeof'); M/3])4T\M,C`R,BU*4#]"/T=Y4D%.144W96E23TI566Q/4U9)1WEH2S\]"CT_ M:7-O+3(P,C(M2E`_0C]'>5)!3D5%-V5I4D]*55EL3U-624=Y:$L_/0H]/VES M;RTR,#(R+4I0/U$_/3%")$(D1B11/3%"*$)?96YD/ST*&R1`)#TD)B0K)$H; M*$H@/3])4T\M,C`R,BU*4#]"/T=Y4D%.144W96E23U!Y:S=D:'-O4V<]/3\] M(&5N9"!O9B!L:6YE"CT_25-/+3(P,C(M2E`_0C]'>5)!3D5%-V5I4D]0>6LW M9&AS;U-G/3T_/2`]/TE33RTR,#(R+4I0/T(_1WE204Y%13=E:5)/4'EK-V1H M<V]39ST]/ST*0G)O:V5N(&-A<V4*/3])4T\M,C`R,BU*4#]"/T=Y4D%.144W M96E23U!Y:S=D"FAS;U-G/3T_/2`]/TE33RTR,`HR,BU*4#]"/T=Y4D%.144W M96E23U!Y:S=D:'-O4V<]/3\]"CT_25-/+3(P,C(M2E`_0C]'>5)!3D5%-V5I 44D]*55EL3QM;2U-624=Y:$L_/0H_ eofeof X $example{'mime.ans.strict'} = unpack('u',<<'eofeof'); M&R1"-$$[>B1.)48E.25(&RA""ALD0C1!.WHD3B5&)3DE2!LH0@H;)$(D1B11 M&RA"(&5N9`H;)$(D/20F)"LD2ALH0B`;)$(T03MZ)$X_*3MV&RA"96YD(&]F M(&QI;F4*&R1"-$$[>B1./RD[=C1!.WHD3C\I.W8;*$(*0G)O:V5N(&-A<V4* M/3])4T\M,C`R,BU*4#]"/T=Y4D%.144W96E23U!Y:S=D"FAS;U-G/3T_/2`] M/TE33RTR,`HR,BU*4#]"/T=Y4D%.144W96E23U!Y:S=D:'-O4V<]/3\]"CT_ L25-/+3(P,C(M2E`_0C]'>5)!3D5%-V5I4D]*55EL3QM;2U-624=Y:$L_/0H_ eofeof X $example{'mime.unbuf.strict'} = unpack('u',<<'eofeof'); M&R1"-$$[>B1.)48E.25(&RA""ALD0C1!.WHD3B5&)3DE2!LH0@H;)$(D1B11 M&RA"(&5N9`H;)$(D/20F)"LD2ALH0B`;)$(T03MZ)$X_*3MV&RA"96YD(&]F M(&QI;F4*&R1"-$$[>B1./RD[=C1!.WHD3C\I.W8;*$(*0G)O:V5N(&-A<V4* M&R1"-$$[>B1./RD;*$)H<V]39ST]/ST@/3])4T\M,C`*,C(M2E`_0C]'>5)! M3D5%-V5I4D]0>6LW9&AS;U-G/3T_/0H;)$(T03MZ)$XE1ALH0EM+4U9)1WEH $2S\]"F5I eofeof X $example{'mime.ans'} = unpack('u',<<'eofeof'); M&R1"-$$[>B1.)48E.25(&RA""ALD0C1!.WHD3B5&)3DE2!LH0@H;)$(D1B11 M&RA"(&5N9`H;)$(D/20F)"LD2ALH0B`;)$(T03MZ)$X_*3MV&RA"96YD(&]F M(&QI;F4*&R1"-$$[>B1./RD[=C1!.WHD3C\I.W8;*$(*0G)O:V5N(&-A<V4* M&R1"-$$[>B1./RD;*$)H<V]39ST]/ST@&R1"-$$[>B1./RD[=ALH0@H;)$(T 603MZ)$XE1ALH0EM+4U9)1WEH2S\]"@`* eofeof X $example{'mime.unbuf'} = unpack('u',<<'eofeof'); M&R1"-$$[>B1.)48E.25(&RA""ALD0C1!.WHD3B5&)3DE2!LH0@H;)$(D1B11 M&RA"(&5N9`H;)$(D/20F)"LD2ALH0B`;)$(T03MZ)$X_*3MV&RA"96YD(&]F M(&QI;F4*&R1"-$$[>B1./RD[=C1!.WHD3C\I.W8;*$(*0G)O:V5N(&-A<V4* M&R1"-$$[>B1./RD;*$)H<V]39ST]/ST@&R1"-$$[>B1./RD[=ALH0@H;)$(T 603MZ)$XE1ALH0EM+4U9)1WEH2S\]"@`* eofeof X $example{'mime.base64'} = unpack('u',<<'eofeof'); M9W-M5"])3&YG<FU#>$I+-&=Q=4,S24LS9W%Q0E%:3TUI-39,,S0Q-&=S5T)1 M43!+9VUA1%9O3T@*9S)+1%1O3'=K8C)1;$E+;V=Q2T-X24MG9W5M0W%*3EEG <<T=#>$E+9V=U;4,X64Q&9W)70S592VMG<6U""F=Q eofeof X $example{'mime.base64.ans'} = unpack('u',<<'eofeof'); M&R1")$M&?B1I)#LD1D0Z)"TD7B0Y)"PA(D5L-7XV83E9)$<A(ALH0@T*&R1" M(T<E-R5G)4,E+R1R0C\_="0J)"0D1B0B)&LD*D4Y)$,D1B0B)&LD<R1')#<D (9R0F)"L;*$(E eofeof X print "Next test is expeced to Fail.\n"; print "MIME decode (strict) "; X $tmp = &test("$nkf -m",$example{'mime.iso2022'},$example{'mime.ans.strict'}); print "MIME decode (nonstrict)"; X $tmp = &test("$nkf -m",$example{'mime.iso2022'},$example{'mime.ans'}); # open(OUT,">tmp1");print OUT pack('u',$tmp);close(OUT); # unbuf mode implies more pessimistic decode print "MIME decode (unbuf) "; X &test("$nkf -mu",$example{'mime.iso2022'},$example{'mime.unbuf'}); print "MIME decode (base64) "; X &test("$nkf -mB",$example{'mime.base64'},$example{'mime.base64.ans'}); X # MIME ISO-8859-1 X $example{'mime.is8859'} = unpack('u',<<'eofeof'); M/3])4T\M.#@U.2TQ/U$_*CU#-V%V83\_/2`*4&5E<B!4]G)N9W)E;@I,87-S M92!(:6QL97+X92!0971E<G-E;B`@7"`B36EN(&MA97!H97-T(&AA<B!F86%E M="!E="!F;V5L(2(*06%R:'5S(%5N:79E<G-I='DL($1%3DU!4DL@(%P@(DUI <;B!KYG!H97-T(&AA<B!FY65T(&5T(&;X;"$B"@!K eofeof X $example{'mime.is8859.ans'} = unpack('u',<<'eofeof'); M*L=A=F$_(`I0965R(%3V<FYG<F5N"DQA<W-E($AI;&QE<OAE(%!E=&5R<V5N M("!<(")-:6X@:V%E<&AE<W0@:&%R(&9A865T(&5T(&9O96PA(@I!87)H=7,@ M56YI=F5R<VET>2P@1$5.34%22R`@7"`B36EN(&OF<&AE<W0@:&%R(&;E970@ )970@9OAL(2(* eofeof X # Without -l, ISO-8859-1 was handled as X0201. X print "MIME ISO-8859-1 (Q) "; X &test("$nkf -ml",$example{'mime.is8859'},$example{'mime.is8859.ans'}); X # test for -f is not so simple. X # end X SHAR_EOF $shar_touch -am 1116192198 'nkf_test.pl' && chmod 0644 'nkf_test.pl' || $echo 'restore of' 'nkf_test.pl' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'nkf_test.pl:' 'MD5 check failed' 24aa993a19b2f0bbf04b264cfd596593 nkf_test.pl SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'nkf_test.pl'`" test 12697 -eq "$shar_count" || $echo 'nkf_test.pl:' 'original size' '12697,' 'current size' "$shar_count!" fi fi # ============= NKF/Changes ============== if test ! -d 'NKF'; then $echo 'x -' 'creating directory' 'NKF' mkdir 'NKF' fi if test -f 'NKF/Changes' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'NKF/Changes' '(file already exists)' else $echo 'x -' extracting 'NKF/Changes' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'NKF/Changes' && Revision history for Perl extension NKF. X 1.7 Sat Nov 7 16:50:33 1998 X - original version; created by h2xs 1.18 X SHAR_EOF $shar_touch -am 1116192198 'NKF/Changes' && chmod 0644 'NKF/Changes' || $echo 'restore of' 'NKF/Changes' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'NKF/Changes:' 'MD5 check failed' b1b0cbf68cdd7895dd686206ba22a825 NKF/Changes SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'NKF/Changes'`" test 115 -eq "$shar_count" || $echo 'NKF/Changes:' 'original size' '115,' 'current size' "$shar_count!" fi fi # ============= NKF/MANIFEST ============== if test -f 'NKF/MANIFEST' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'NKF/MANIFEST' '(file already exists)' else $echo 'x -' extracting 'NKF/MANIFEST' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'NKF/MANIFEST' && Changes MANIFEST Makefile.PL NKF.pm NKF.xs test.pl SHAR_EOF $shar_touch -am 1116192198 'NKF/MANIFEST' && chmod 0644 'NKF/MANIFEST' || $echo 'restore of' 'NKF/MANIFEST' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'NKF/MANIFEST:' 'MD5 check failed' 0deb2997670573a1f5acba661e2320cf NKF/MANIFEST SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'NKF/MANIFEST'`" test 51 -eq "$shar_count" || $echo 'NKF/MANIFEST:' 'original size' '51,' 'current size' "$shar_count!" fi fi # ============= NKF/Makefile.PL ============== if test -f 'NKF/Makefile.PL' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'NKF/Makefile.PL' '(file already exists)' else $echo 'x -' extracting 'NKF/Makefile.PL' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'NKF/Makefile.PL' && use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( X 'NAME' => 'NKF', X 'VERSION_FROM' => 'NKF.pm', # finds $VERSION X 'LIBS' => [''], # e.g., '-lm' X 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING' X 'INC' => '', # e.g., '-I/usr/include/other' ); SHAR_EOF $shar_touch -am 1116192198 'NKF/Makefile.PL' && chmod 0644 'NKF/Makefile.PL' || $echo 'restore of' 'NKF/Makefile.PL' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'NKF/Makefile.PL:' 'MD5 check failed' eb12f97e09146970e9810c944fb690f4 NKF/Makefile.PL SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'NKF/Makefile.PL'`" test 367 -eq "$shar_count" || $echo 'NKF/Makefile.PL:' 'original size' '367,' 'current size' "$shar_count!" fi fi # ============= NKF/NKF.pm ============== if test -f 'NKF/NKF.pm' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'NKF/NKF.pm' '(file already exists)' else $echo 'x -' extracting 'NKF/NKF.pm' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'NKF/NKF.pm' && package NKF; X use strict; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); X require Exporter; require DynaLoader; X @ISA = qw(Exporter DynaLoader); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = qw( X nkf ); $VERSION = '0.01'; X bootstrap NKF $VERSION; X # Preloaded methods go here. X # Autoload methods go after =cut, and are processed by the autosplit program. X 1; __END__ # Below is the stub of documentation for your module. You better edit it! X =head1 NAME X NKF - Perl extension for Network Kanji Filter X =head1 SYNOPSIS X X use NKF; X $output = nkf("-s",$input); X =head1 DESCRIPTION X This is a Perl Extension version of nkf (Netowrk Kanji Filter ) 1.7. It converts the last argument and return converted result. Conversion details are specified by flags before the last argument. X Flags: X C<b,u Output is bufferred (DEFAULT),Output is unbufferred> X C<j,s,e Outout code is JIS 7 bit (DEFAULT), Shift JIS, AT&T JIS (EUC)> X C<J,S,E Input assumption is JIS 7 bit , Shift JIS, AT&T JIS (EUC)> X C<t no conversion> X C<i_ Output sequence to designate JIS-kanji (DEFAULT B)> X C<o_ Output sequence to designate ASCII (DEFAULT B)> X C<r {de/en}crypt ROT13/47> X C<m[BQ] MIME decode [B:base64 stream,Q:quoted stream]> X C<l ISO8859-1 (Latin-1) support> X C<f Folding: C<-f60> or C<-f>> X C<Z[0-2] Convert X0208 alphabet to ASCII 1: Kankaku to space,2: 2 spaces> X C<X,x Assume X0201 kana in MS-Kanji, C<-x> preserves X0201> X C<B[0-2] Broken input 0: missing ESC,1: any X on ESC-[($]-X,2: ASCII on NL> X C<d,c Delete \r in line feed, Add \r in line feed> X =head1 AUTHOR X Network Kanji Filter Version 1.7 (1/9811/Shinji Kono) Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa),1997 S. Kono, COW X =head1 SEE ALSO X perl(1). nkf(1) X =cut SHAR_EOF $shar_touch -am 1116192198 'NKF/NKF.pm' && chmod 0644 'NKF/NKF.pm' || $echo 'restore of' 'NKF/NKF.pm' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'NKF/NKF.pm:' 'MD5 check failed' dacebedefea6799a98bf1bd68e95aa98 NKF/NKF.pm SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'NKF/NKF.pm'`" test 1957 -eq "$shar_count" || $echo 'NKF/NKF.pm:' 'original size' '1957,' 'current size' "$shar_count!" fi fi # ============= NKF/NKF.xs ============== if test -f 'NKF/NKF.xs' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'NKF/NKF.xs' '(file already exists)' else $echo 'x -' extracting 'NKF/NKF.xs' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'NKF/NKF.xs' && #ifdef __cplusplus extern "C" { #endif #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #ifdef __cplusplus } #endif X /* we never use getc, ungetc */ X #undef getc #undef ungetc #define getc(f) (input_ctr>i_len?-1:input[input_ctr++]) #define ungetc(c,f) input_ctr-- X #define INCSIZE 32 #undef putchar #undef TRUE #undef FALSE #define putchar(c) nkf_putchar(c) X static unsigned char *output; static unsigned char *input; static STRLEN input_ctr; static STRLEN i_len; static STRLEN output_ctr; static STRLEN o_len; static STRLEN incsize; int nkf_putchar(unsigned int c); X SV *result; X int nkf_putchar(unsigned int c) { X if(output_ctr>=o_len) { X o_len += incsize; X SvGROW(result, o_len); X incsize *= 2; X output = SvPVX(result); X } X return output[output_ctr++] = c; } X #define PERL_XS 1 #include "../nkf.c" X MODULE = NKF PACKAGE = NKF X SV * nkf(...) X PROTOTYPE: @ X PREINIT: X SV* sv; X SV* last; X char **argv; X char *cp; X char *data; X STRLEN cplen,rlen; X int i,argc; X CODE: X X reinit(); X X argc = items - 1; X X for (i=0;i<argc;i++) { X sv = ST(i); X cp = SvPV(sv,cplen); X if(*cp != '-') continue; X arguments(cp); X } X data = SvPV(ST(argc),i_len); X input_ctr = 0; X X if(iso8859_f && (oconv != j_oconv || !x0201_f )) { X iso8859_f = FALSE; X } X /* allocate a result buffer */ X incsize = INCSIZE; X rlen = i_len+INCSIZE; X result = newSV(rlen); X input = data; X output = SvPVX(result); X o_len = rlen; X output_ctr = 0; X kanji_convert(NULL); X nkf_putchar(0); X RETVAL = result; X SvPOK_on(RETVAL); X SvCUR_set(RETVAL, strlen(output)); X OUTPUT: X RETVAL X SHAR_EOF $shar_touch -am 1116192198 'NKF/NKF.xs' && chmod 0644 'NKF/NKF.xs' || $echo 'restore of' 'NKF/NKF.xs' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'NKF/NKF.xs:' 'MD5 check failed' 8e9ed77c2c6a57ceeb8f648ba2033fa4 NKF/NKF.xs SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'NKF/NKF.xs'`" test 1689 -eq "$shar_count" || $echo 'NKF/NKF.xs:' 'original size' '1689,' 'current size' "$shar_count!" fi fi # ============= NKF/README ============== if test -f 'NKF/README' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'NKF/README' '(file already exists)' else $echo 'x -' extracting 'NKF/README' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'NKF/README' && X v1.7 $B2OLn??<#(B kono@ie.u-ryukyu.ac.jp X Sun Nov 8 00:42:15 JST 1998 X X$B$3$l$O!"(BPerl $B$+$i(B nkf $B$r;H$&3HD%%b%8%e!<%k$G$9!#(B X$B$$$D$b$N$h$&$K!"(B X perl5 Makefile.PL X make X make install X$B$H$9$k$3$H$K$h$j;H$($k$h$&$K$J$j$^$9!#(B X X$B;H$$J}$O!"(B X use NKF; X $output = nkf($flag,$input); X X$B$N$h$&$K;H$$$^$9!#(Bflag $B$O!"(Bnkf $B$HF1$8$G$9!#(B X X$BG[I[$N>r7o$O!"(Bnkf $B$HF1MM$H$7$^$9!#(B SHAR_EOF $shar_touch -am 1116192198 'NKF/README' && chmod 0644 'NKF/README' || $echo 'restore of' 'NKF/README' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'NKF/README:' 'MD5 check failed' 38b5ec19dd6ffeeb3337aed16005d301 NKF/README SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'NKF/README'`" test 423 -eq "$shar_count" || $echo 'NKF/README:' 'original size' '423,' 'current size' "$shar_count!" fi fi # ============= NKF/test.pl ============== if test -f 'NKF/test.pl' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'NKF/test.pl' '(file already exists)' else $echo 'x -' extracting 'NKF/test.pl' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'NKF/test.pl' && #!/usr/local/bin/perl # # nkf test program for nkf 1.7 # Shinji KONO <kono@ie.u-ryukyu.ac.jp> # Sun Aug 18 12:25:40 JST 1996 # Sun Nov 8 00:16:06 JST 1998 # # This is useful when you add new patch on nkf. # Since this test is too strict, faileurs may not mean # wrong conversion. # # nkf 1.5 differs on MIME decoding # nkf 1.4 passes Basic Conversion tests # nkf PDS version passes Basic Conversion tests using "nkf -iB -oB " # X $nkf = "./nkf"; # $nkf = "doscmd nkf.exe"; X # If you want to see the testing process, set next flag. X $detail_all = 0; X &library_test0(); sub test { X use NKF; X &library_test(@_); # &command_test(@_); } X sub command_test { X local ($nkf,$in,$ans,$detail) = @_; X local ($result); X X $result = ''; X open(OUT,"> nkf.in"); X print OUT $in; X close(OUT); X system("$nkf <nkf.in >nkf.out"); # easy X open(IN,"< nkf.out"); X print STDERR "\nINPUT:\n",$in if ($detail || $detail_all); X print STDERR "\nEXPECT:\n", $ans if ($detail || $detail_all); X while(<IN>) { X $result .= $_; X } X print STDERR "\nGOT:\n",$result if ($detail || $detail_all); X print (($result eq $ans)?"Ok\n":"Fail\n"); X return $result; } X sub library_test { X local ($nkf,$in,$ans,$detail) = @_; X local ($result); X X X $nkf =~ s/^[^_]* //; X print "\nINPUT:\n",$in if ($detail || $detail_all); X print "\nEXPECT:\n", $ans if ($detail || $detail_all); X $result = NKF::nkf($nkf,$in); X print "\nGOT:\n",$result if ($detail || $detail_all); X X print (($result eq $ans)?"Ok\n":"Fail\n"); X return $result; } X sub library_test0 { BEGIN { $| = 1; print "1..3\n"; } END {print "not ok 1\n" unless $loaded;} X use NKF; X $loaded = 1; X print "ok 1\n"; X X ######################### End of black magic. X X # Insert your test code below (better if it prints "ok 13" X # (correspondingly "not ok 13") depending on the success of chunk 13 X # of the test code): X X if ( nkf("-m","-e","1") ) { X print "ok 2\n"; X } else { X print "no 2\n"; X } X X $output = nkf("\033\$@#1#3#2%B"); X if ($output) { X # print $output,"\n"; X print "ok 3\n"; X } else { X print "no 3\n"; X } X X $output = nkf("-Zj","\033\$@#1#3#2%B"); X if ($output) { X # print $output,"\n"; X print "ok 4\n"; X } else { X print "no 4\n"; X } X X # conversion makes strings longer X $output = "\244\306 " x 1024; X $old = length($output); X $output = nkf("-j",$output); X if ($output) { X # print $output,"\n"; X print "ok 5 $old ",length($output),"\n"; X } else { X print "no 5\n"; X } X X } X # Basic Conversion print "\nBasic Conversion test\n\n"; X # I gave up simple literal quote because there are big difference # on perl4 and perl5 on literal quote. Of course we cannot use # jperl. X $example{'jis'} = unpack('u',<<'eofeof'); M1FER<W0@4W1A9V4@&R1"(3DQ(3%^2R%+?D]3&RA"(%-E8V]N9"!3=&%G92`; M)$)0)TU:&RA"($AI<F%G86YA(!LD0B0B)"0D)B0H)"HD;R1R)',;*$(*2V%T M86MA;F$@&R1")2(E)"4F)2@E*B5O)7(E<QLH0B!+:6=O=2`;)$(A)B%G(S`C /029!)E@G(B=!*$`;*$(* eofeof X $example{'sjis'} = unpack('u',<<'eofeof'); M1FER<W0@4W1A9V4@@5B)0(F>ED"6GIAR(%-E8V]N9"!3=&%G92"8I9=Y($AI M<F%G86YA((*@@J*"I(*F@JB"[8+P@O$*2V%T86MA;F$@@T�X-%@T>#28./ >@Y*#DR!+:6=O=2"!18&'@D^"8(._@]:$081@A+X* eofeof X $example{'euc'} = unpack('u',<<'eofeof'); M1FER<W0@4W1A9V4@H;FQH;'^RZ'+_L_3(%-E8V]N9"!3=&%G92#0I\W:($AI M<F%G86YA(*2BI*2DIJ2HI*JD[Z3RI/,*2V%T86MA;F$@I:*EI*6FI:BEJJ7O >I?*E\R!+:6=O=2"AIJ'GH["CP:;!IMBGHJ?!J,`* eofeof X X # From JIS X print "JIS to JIS ... ";&test("$nkf ",$example{'jis'},$example{'jis'}); print "JIS to SJIS... ";&test("$nkf -s",$example{'jis'},$example{'sjis'}); print "JIS to EUC ... ";&test("$nkf -e",$example{'jis'},$example{'euc'}); X # From SJIS X print "SJIS to JIS ... ";&test("$nkf -j",$example{'sjis'},$example{'jis'}); print "SJIS to SJIS... ";&test("$nkf -s",$example{'sjis'},$example{'sjis'}); print "SJIS to EUC ... ";&test("$nkf -e",$example{'sjis'},$example{'euc'}); X # From EUC X print "EUC to JIS ... ";&test("$nkf ",$example{'euc'},$example{'jis'}); print "EUC to SJIS... ";&test("$nkf -s",$example{'euc'},$example{'sjis'}); print "EUC to EUC ... ";&test("$nkf -e",$example{'euc'},$example{'euc'}); X # Ambigous Case X $example{'amb'} = unpack('u',<<'eofeof'); MI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&E MPK"QI<*PL:7"L+&EPK"QI<(*I<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*P ML:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<(*I<*PL:7"L+&E MPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7" ML+&EPK"QI<(*I<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"Q MI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<(*I<*PL:7"L+&EPK"QI<*PL:7" ML+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<*PL:7"L+&EPK"QI<(* eofeof X $example{'amb.euc'} = unpack('u',<<'eofeof'); M&R1")4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25" M,#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*&R1")4(P,25",#$E0C`Q)4(P,25" M,#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(; M*$(*&R1")4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P M,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*&R1")4(P,25",#$E0C`Q)4(P M,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q M)4(;*$(*&R1")4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q >)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(* eofeof X $example{'amb.sjis'} = unpack('u',<<'eofeof'); M&RA))4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25" M,#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*&RA))4(P,25",#$E0C`Q)4(P,25" M,#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(; M*$(*&RA))4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P M,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(*&RA))4(P,25",#$E0C`Q)4(P M,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q M)4(;*$(*&RA))4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q >)4(P,25",#$E0C`Q)4(P,25",#$E0C`Q)4(;*$(* eofeof X print "Ambiguous Case. "; X &test("$nkf",$example{'amb'},$example{'amb.euc'}); X # Input assumption X print "SJIS Input assumption "; X &test("$nkf -Sx",$example{'amb'},$example{'amb.sjis'}); X # X0201 $B2>L>(B # X0201->X0208 conversion # X0208 aphabet -> ASCII # X0201 $BAj8_JQ49(B X print "\nX0201 test\n\n"; X $example{'x0201.sjis'} = unpack('u',<<'eofeof'); MD5.*<(-*@TR#3H-0@U*#2X--@T^#48-3"I%3B7""8()A@F*"8X)D@F6"9H*! M@H*"@X*$@H6"AH*'"I%3BTR-AH%)@9>!E(&0@9.!3X&5@9:!:8%J@7R!>X&! M@6V!;H%O@7"!CPJ4O(IPMK>X/;FZMMZWWKC>N=ZZWH+&"I2\BG#*W\O?S-_- MW\[?M]^QW@K*W\O?S`IH86YK86MU(,K?R]_,I`K*W\O?S-VA"I2\BG""S(SC !"@!" eofeof X $example{'x0201.euc'} = unpack('u',<<'eofeof'); MP;2ST:6KI:VEKZ6QI;.EK*6NI;"ELJ6T"L&TL=&CP:/"H\.CQ*/%H\:CQZ/A MH^*CXZ/DH^6CYJ/G"L&TM:VYYJ&JH?>A]*'PH?.AL*'UH?:ARJ'+H=VAW*'A MH<ZASZ'0H=&A[PK(OK/1CK:.MXZX/8ZYCKJ.MH[>CK>.WHZXCMZ.N8[>CKJ. MWJ3("LB^L]&.RH[?CLN.WX[,CM^.S8[?CLZ.WXZWCM^.L8[>"H[*CM^.RX[? MCLP*:&%N:V%K=2".RH[?CLN.WX[,CJ0*CLJ.WX[+CM^.S([=CJ$*R+ZST:3. #N.4* eofeof X $example{'x0201.jis'} = unpack('u',<<'eofeof'); M&R1"030S424K)2TE+R4Q)3,E+"4N)3`E,B4T&RA""ALD0D$T,5$C02-"(T,C M1"-%(T8C1R-A(V(C8R-D(V4C9B-G&RA""ALD0D$T-2TY9B$J(7<A="%P(7,A M,"%U(78A2B%+(5TA7"%A(4XA3R%0(5$A;QLH0@H;)$)(/C-1&RA)-C<X&RA" M/1LH23DZ-EXW7CA>.5XZ7ALD0B1(&RA""ALD0D@^,U$;*$E*7TM?3%]-7TY? M-U\Q7ALH0@H;*$E*7TM?3!LH0@IH86YK86MU(!LH24I?2U],)!LH0@H;*$E* 97TM?3%TA&RA""ALD0D@^,U$D3CAE&RA""@`` eofeof X $example{'x0201.sosi'} = unpack('u',<<'eofeof'); M&R1"030S424K)2TE+R4Q)3,E+"4N)3`E,B4T&RA*"ALD0D$T,5$C02-"(T,C M1"-%(T8C1R-A(V(C8R-D(V4C9B-G&RA*"ALD0D$T-2TY9B$J(7<A="%P(7,A M,"%U(78A2B%+(5TA7"%A(4XA3R%0(5$A;QLH2@H;)$)(/C-1&RA*#C8W.`\; M*$H]#CDZ-EXW7CA>.5XZ7@\;)$(D2!LH2@H;)$)(/C-1&RA*#DI?2U],7TU? M3E\W7S%>#PH.2E]+7TP/&RA*"FAA;FMA:W4@#DI?2U],)`\;*$H*#DI?2U], 672$/&RA*"ALD0D@^,U$D3CAE&RA""@`` eofeof X $example{'x0201.x0208'} = unpack('u',<<'eofeof'); M&R1"030S424K)2TE+R4Q)3,E+"4N)3`E,B4T&RA""ALD0D$T,5$;*$)!0D-$ M149'86)C9&5F9PH;)$)!-#4M.68;*$(A0",D)5XF*B@I+2L]6UU[?1LD0B%O M&RA""ALD0D@^,U$E*R4M)2\;*$(]&R1")3$E,R4L)2XE,"4R)30D2!LH0@H; M)$)(/C-1)5$E5"57)5HE724M(2PE(B$K&RA""ALD0B51)50E51LH0@IH86YK M86MU(!LD0B51)50E52$B&RA""ALD0B51)50E525S(2,;*$(*&R1"2#XS421. &.&4;*$(* eofeof X # -X is necessary to allow X0201 in SJIS # -Z convert X0208 alphabet to ASCII print "X0201 conversion: SJIS "; X &test("$nkf -XZ",$example{'x0201.sjis'},$example{'x0201.x0208'}); print "X0201 conversion: JIS "; X &test("$nkf -Z",$example{'x0201.jis'},$example{'x0201.x0208'}); print "X0201 conversion:SI/SO "; X &test("$nkf -Z",$example{'x0201.sosi'},$example{'x0201.x0208'}); print "X0201 conversion: EUC "; X &test("$nkf -Z",$example{'x0201.euc'},$example{'x0201.x0208'}); # -x means X0201 output print "X0201 output: SJIS "; X &test("$nkf -xs",$example{'x0201.euc'},$example{'x0201.sjis'}); print "X0201 output: JIS "; X &test("$nkf -xj",$example{'x0201.sjis'},$example{'x0201.jis'}); print "X0201 output: EUC "; X &test("$nkf -xe",$example{'x0201.jis'},$example{'x0201.euc'}); X # MIME decode X print "\nMIME test\n\n"; X # MIME ISO-2022-JP X $example{'mime.iso2022'} = unpack('u',<<'eofeof'); M/3])4T\M,C`R,BU*4#]"/T=Y4D%.144W96E23TI566Q/4U9)1WEH2S\]"CT_ M:7-O+3(P,C(M2E`_0C]'>5)!3D5%-V5I4D]*55EL3U-624=Y:$L_/0H]/VES M;RTR,#(R+4I0/U$_/3%")$(D1B11/3%"*$)?96YD/ST*&R1`)#TD)B0K)$H; M*$H@/3])4T\M,C`R,BU*4#]"/T=Y4D%.144W96E23U!Y:S=D:'-O4V<]/3\] M(&5N9"!O9B!L:6YE"CT_25-/+3(P,C(M2E`_0C]'>5)!3D5%-V5I4D]0>6LW M9&AS;U-G/3T_/2`]/TE33RTR,#(R+4I0/T(_1WE204Y%13=E:5)/4'EK-V1H M<V]39ST]/ST*0G)O:V5N(&-A<V4*/3])4T\M,C`R,BU*4#]"/T=Y4D%.144W M96E23U!Y:S=D"FAS;U-G/3T_/2`]/TE33RTR,`HR,BU*4#]"/T=Y4D%.144W M96E23U!Y:S=D:'-O4V<]/3\]"CT_25-/+3(P,C(M2E`_0C]'>5)!3D5%-V5I 44D]*55EL3QM;2U-624=Y:$L_/0H_ eofeof X $example{'mime.ans.strict'} = unpack('u',<<'eofeof'); M&R1"-$$[>B1.)48E.25(&RA""ALD0C1!.WHD3B5&)3DE2!LH0@H;)$(D1B11 M&RA"(&5N9`H;)$(D/20F)"LD2ALH0B`;)$(T03MZ)$X_*3MV&RA"96YD(&]F M(&QI;F4*&R1"-$$[>B1./RD[=C1!.WHD3C\I.W8;*$(*0G)O:V5N(&-A<V4* M/3])4T\M,C`R,BU*4#]"/T=Y4D%.144W96E23U!Y:S=D"FAS;U-G/3T_/2`] M/TE33RTR,`HR,BU*4#]"/T=Y4D%.144W96E23U!Y:S=D:'-O4V<]/3\]"CT_ L25-/+3(P,C(M2E`_0C]'>5)!3D5%-V5I4D]*55EL3QM;2U-624=Y:$L_/0H_ eofeof X $example{'mime.unbuf.strict'} = unpack('u',<<'eofeof'); M&R1"-$$[>B1.)48E.25(&RA""ALD0C1!.WHD3B5&)3DE2!LH0@H;)$(D1B11 M&RA"(&5N9`H;)$(D/20F)"LD2ALH0B`;)$(T03MZ)$X_*3MV&RA"96YD(&]F M(&QI;F4*&R1"-$$[>B1./RD[=C1!.WHD3C\I.W8;*$(*0G)O:V5N(&-A<V4* M&R1"-$$[>B1./RD;*$)H<V]39ST]/ST@/3])4T\M,C`*,C(M2E`_0C]'>5)! M3D5%-V5I4D]0>6LW9&AS;U-G/3T_/0H;)$(T03MZ)$XE1ALH0EM+4U9)1WEH $2S\]"F5I eofeof X $example{'mime.ans'} = unpack('u',<<'eofeof'); M&R1"-$$[>B1.)48E.25(&RA""ALD0C1!.WHD3B5&)3DE2!LH0@H;)$(D1B11 M&RA"(&5N9`H;)$(D/20F)"LD2ALH0B`;)$(T03MZ)$X_*3MV&RA"96YD(&]F M(&QI;F4*&R1"-$$[>B1./RD[=C1!.WHD3C\I.W8;*$(*0G)O:V5N(&-A<V4* M&R1"-$$[>B1./RD;*$)H<V]39ST]/ST@&R1"-$$[>B1./RD[=ALH0@H;)$(T 603MZ)$XE1ALH0EM+4U9)1WEH2S\]"@`* eofeof X $example{'mime.unbuf'} = unpack('u',<<'eofeof'); M&R1"-$$[>B1.)48E.25(&RA""ALD0C1!.WHD3B5&)3DE2!LH0@H;)$(D1B11 M&RA"(&5N9`H;)$(D/20F)"LD2ALH0B`;)$(T03MZ)$X_*3MV&RA"96YD(&]F M(&QI;F4*&R1"-$$[>B1./RD[=C1!.WHD3C\I.W8;*$(*0G)O:V5N(&-A<V4* M&R1"-$$[>B1./RD;*$)H<V]39ST]/ST@&R1"-$$[>B1./RD[=ALH0@H;)$(T 603MZ)$XE1ALH0EM+4U9)1WEH2S\]"@`* eofeof X $example{'mime.base64'} = unpack('u',<<'eofeof'); M9W-M5"])3&YG<FU#>$I+-&=Q=4,S24LS9W%Q0E%:3TUI-39,,S0Q-&=S5T)1 M43!+9VUA1%9O3T@*9S)+1%1O3'=K8C)1;$E+;V=Q2T-X24MG9W5M0W%*3EEG <<T=#>$E+9V=U;4,X64Q&9W)70S592VMG<6U""F=Q eofeof X $example{'mime.base64.ans'} = unpack('u',<<'eofeof'); M&R1")$M&?B1I)#LD1D0Z)"TD7B0Y)"PA(D5L-7XV83E9)$<A(ALH0@T*&R1" M(T<E-R5G)4,E+R1R0C\_="0J)"0D1B0B)&LD*D4Y)$,D1B0B)&LD<R1')#<D (9R0F)"L;*$(E eofeof X print "Next test is expeced to Fail.\n"; print "MIME decode (strict) "; X $tmp = &test("$nkf -m",$example{'mime.iso2022'},$example{'mime.ans.strict'}); print "MIME decode (nonstrict)"; X $tmp = &test("$nkf -m",$example{'mime.iso2022'},$example{'mime.ans'}); # open(OUT,">tmp1");print OUT pack('u',$tmp);close(OUT); # unbuf mode implies more pessimistic decode print "MIME decode (unbuf) "; X &test("$nkf -mu",$example{'mime.iso2022'},$example{'mime.unbuf'}); print "MIME decode (base64) "; X &test("$nkf -mB",$example{'mime.base64'},$example{'mime.base64.ans'}); X # MIME ISO-8859-1 X $example{'mime.is8859'} = unpack('u',<<'eofeof'); M/3])4T\M.#@U.2TQ/U$_*CU#-V%V83\_/2`*4&5E<B!4]G)N9W)E;@I,87-S M92!(:6QL97+X92!0971E<G-E;B`@7"`B36EN(&MA97!H97-T(&AA<B!F86%E M="!E="!F;V5L(2(*06%R:'5S(%5N:79E<G-I='DL($1%3DU!4DL@(%P@(DUI <;B!KYG!H97-T(&AA<B!FY65T(&5T(&;X;"$B"@!K eofeof X $example{'mime.is8859.ans'} = unpack('u',<<'eofeof'); M*L=A=F$_(`I0965R(%3V<FYG<F5N"DQA<W-E($AI;&QE<OAE(%!E=&5R<V5N M("!<(")-:6X@:V%E<&AE<W0@:&%R(&9A865T(&5T(&9O96PA(@I!87)H=7,@ M56YI=F5R<VET>2P@1$5.34%22R`@7"`B36EN(&OF<&AE<W0@:&%R(&;E970@ )970@9OAL(2(* eofeof X # Without -l, ISO-8859-1 was handled as X0201. X print "MIME ISO-8859-1 (Q) "; X &test("$nkf -ml",$example{'mime.is8859'},$example{'mime.is8859.ans'}); X # test for -f is not so simple. X # end X SHAR_EOF $shar_touch -am 1116192198 'NKF/test.pl' && chmod 0644 'NKF/test.pl' || $echo 'restore of' 'NKF/test.pl' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'NKF/test.pl:' 'MD5 check failed' cafed3817eb6fb8db8f37ce23ff4aa10 NKF/test.pl SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'NKF/test.pl'`" test 12693 -eq "$shar_count" || $echo 'NKF/test.pl:' 'original size' '12693,' 'current size' "$shar_count!" fi fi rm -fr _sh18783 exit 0