[Kansai-pm] Jcode 1.99_05 Released -- toward 2.00

Dan Kogai dankogai at dan.co.jp
Thu Feb 17 10:21:27 PST 2005


弾です。

1.99_05をReleaseしました。

   http://www.dan.co.jp/~dankogai/Jcode-1.99_05.tar.gz

今度は日本語PODが付いてきます! makamaka at donzoko.net さんありがとうございました。

=head1 Changes

1.99_05 2005/02/18
! Jcode.pm MANIFEST Makefile.PL
+ Jcode/Nihongo.pod t/jfold.t
   Enhancements & Japanese POD with a help from makamaka at donzoko.net.

=head1 Comments

On Feb 17, 2005, at 17:59, makamaka at donzoko.net wrote:
> Dan様
> まかまか@donzoko.netです。
>
> 禁則処理のテストを書いてみました。その結果jfoldに関して気づいたことを。
>
> testは通りません :)
> これは、r_strがflagged UTF-8なのに対して禁則用の文字列がEUCのためでした。

というわけでこれは書き直しました。

> で、思ったのですが、JEncodeのjfoldは文字数で折り返していたので
> 禁則処理の意味もあると思うのですが、Jcodeのjfoldはバイト数で
> 折り返すため、そもそも禁則処理は必要ないのかもしれません。
>
> あと、EUCかUTF-8かでかなり折り返される文字数が代わるため、
> その旨PODに書いたほうがよいかなあとも思いました。

全角は2文字として数えるというのが元の jfold() 
の仕様だったので、そちらに合わせました。ドキュメントもそれにあわせて書き直しています。早い話、

> 個人的に、文字数(半角1バイト全角2バイト計算)で折り返すjfold2
> メソッド(仮)を持ったJcode継承クラスを書いてみたいと思いました。

という風になったということです。

On Feb 17, 2005, at 14:30, Kawasaki Yusuke wrote:
> 川崎です。新バージョンありがとうございます。
> Perl 5.6.1 に入れてみましたが、特に問題はありません。

この場合だと0.88と同等ですね。

> さて、今回の新バージョンでは、待望の
>              my $unistr = "\x{262f}"; # YIN YANG
>              my $j = jcode($unistr);  # $j->euc is '?'
>              print $j->fallback(Jcode::FB_XMLCREF)->euc;  # '☯'
> という手順が使えるようになりました。
>
> しかし、Perl 5.8.1 未満の環境を利用している場合は、
> このメソッド+定数FB_XMLCREF が利用できないようですね。
> 	Bareword "Jcode::FB_XMLCREF" not allowed while "strict subs" in use
> 	Can't locate object method "fallback" via package "Jcode"
> といったエラーが発生してしまいます。

まあ当然といえば当然ですね。新機能まわりはEncodeにずるずるべったりなので。

> Perl のバージョンが限定されない環境でこの機能を利用するためには、
> 予め、呼び出し元側で Jcode.pm のバージョンをチェックする必要が
> ありますね。
> 	if ( $Jcode::VERSION >= 1.99 ) {
> 	    $sjis = $j->fallback(Jcode::FB_XMLCREF)->sjis();
> 	} else {
> 	    $sjis = $j->sjis();
> 	}
> なんて条件分岐を入れずに済む方法があると良いと思いました。

いいえ、これはcroakするのが正しいのです。私としてはなるべく多くの人に Perl 5.8.1 以上に乗り換えてほしいのです。

もし条件判定が必要なら、$Jcode::USE_ENCODE 
も判定に使えます(これはまだPODに書いてないけど)。でもどちらかというとelegantなやり方としては、

	$j->can("fallbak") and $j->fallback(Jcode::FB_XMLCREF);
	$sjis = $j->sjis;

でしょうね。

> 	・ダミーのメソッド fallback を置いておく
> 		→実際には何もしないが、エラーは回避できる

という訳でこれは却下。


> 	・Unicode/uni.c 側で FB_XMLCREF に対応しちゃう
> 		→今まで避けてきた拡張になりますが・・・
>
> なども考えられますが、いかがでしょうか?

はっきり宣言します。私としては Perl 5.8.1 以前の Version 用の機能拡張はしません。現在 Jcode は
5.005, 5.6, そして 5.8 
と3世代に渡ってサポートしていますが、それがどれだけ無理をしてそうしているかはsourceを読めば分かって頂けると思います。

#すでに5.005のmake testはかなりきつくなっています(現在は FreeBSD 4-Stable の /usr/bin/perl 
でやっている)。

その辺よろしくご理解のほどをお願い致します。

以上取り急ぎ

Dan the (J|En)code Maintainer



More information about the Kansai-pm mailing list