--- Jcode-2.07/Jcode/Nihongo.pod 2005-02-19 06:50:14.000000000 +0000 +++ Jcode-2.07/Jcode/Nihongo.pod 2011-06-28 09:56:30.365310693 +0100 @@ -1,77 +1,77 @@ -=encoding euc-jp +=encoding utf8 -=head1 ̾ +=head1 名前 -Jcode - ܸʸϥɥ +Jcode - 日本語文字集合ハンドラ -=head1 +=head1 概要 use Jcode; # - # ż椫 + # 古式ゆかしく Jcode::convert($str, $ocode, $icode, "z"); - # ⤷ϥ֥Ȼظǡ + # もしくはオブジェクト指向で! print Jcode->new($str)->h2z->tr($from, $to)->utf8; -=head1 +=head1 説明 -Jcode.pmϥ֥ŪʥץȽ褫Υץξ -ݡȤƤޤ֥ŪʥץȤФʴǡ +Jcode.pmはオブジェクト的なアプローチと従来からのアプローチの両方を +サポートしています。オブジェクト的なアプローチを使えばこんな感じで; $iso_2022_jp = Jcode->new($str)->h2z->jis; -ꥨ쥬ȤǤ礦 +こちらよりエレガントでしょう: $iso_2022_jp = $str; &jcode::convert(\$iso_2022_jp, 'jis', &jcode::getcode(\$str), "z"); -֥Ȥߤ̵ͤΤˡJcode.pmϤޤC -C򥵥ݡȤƤޤ +オブジェクトに馴染みの無い人のために、Jcode.pmはまだCと +Cをサポートしています。 -PerlΥС5.8.1ʾʤ顢JcodeϡPerl 5.8ʹߤɸŪʸ -ϥɥ⥸塼ǤLΥåѡȤƿ񤤤ޤ +Perlのバージョンが5.8.1以上なら、Jcodeは、Perl 5.8以降の標準的な文字集合 +ハンドラモジュールであるLのラッパーとして振る舞います。 -=head1 ᥽å +=head1 メソッド -ä˸ڤʤ¤ꡢǵ󤲤᥽åɤJcode֥Ȥ֤ޤ +特に言及しない限り、ここで挙げるメソッドは全てJcodeオブジェクトを返します。 -=head2 󥹥ȥ饯 +=head2 コンストラクタ =over 2 =item $j = Jcode-Enew($str [, $icode]) -$strJcode֥$jޤŪ$icode򥻥åȤʤС -ϥɤϼưŪȽꤵޤѲǽʸˤĤƤϡ -L򻲾ȤƤ +$strからJcodeオブジェクト$jを生成します。明示的に$icodeをセットしなければ、 +入力コードは自動的に判定されます。利用可能な文字集合については、下の +Lを参照してください。 -Perl 5.8.1ʹߤǤϡC<$icode>ˤLǤ -I<ɤʥ󥳡ǥ̾>Ȥޤ +Perl 5.8.1以降では、C<$icode>にはLが理解できる +I<どんなエンコーディング名>も使えます。 $j = Jcode->new($european, 'iso-latin1'); -֥Ȥʸ󲽤ȡEUCѴ줿ʸ֤ޤǤ -C<< print $j->euc >>ȤˡC<< print $j >>ȤǤޤ +オブジェクトを文字列化すると、EUCに変換された文字列が返ります。ですから +C<< print $j->euc >>とする代わりに、C<< print $j >>とできます。 =over 2 -=item եϤ +=item リファレンス渡し -顼ͤˡʲΤ褦˥ե󥹤Ϥޤ +スカラー値の代わりに、以下のようにリファレンスを渡せます。 Jcode->new(\$str); -Ϥۤξ֤󤷤ޤȤơ$strͤΤΤ -Ѵޤʤ̣$strjcode֥Ȥ"tie"ΤǤˡ +これはほんの少し時間を節約します。その代償として、$strの値そのものが +変換されます(ある意味、$strはjcodeオブジェクトに"tieされる"のです)。 =back =item $j-Eset($str [, $icode]) -$jʸ$str򥻥åȤޤ֤Jcode֥ȤȤȤ -Ǥʥ֥Ȥ֤ȥˤʤޤˡ +$jの内部文字列に$strをセットします。繰り返しJcodeオブジェクトを使うときに +便利です(オブジェクトを生成する時間とメモリの節約になります)。 - # mailboxSJISѴ + # mailboxをSJIS形式に変換 my $jconv = new Jcode; $/ = 00; while(<>){ @@ -80,19 +80,19 @@ =item $j-Eappend($str [, $icode]); -$jʸ$sträޤ +$jの内部文字列に$strを加えます。 =item $j = jcode($str [, $icode]); -Jcode-Enew() û̷ʲΤ褦ˤǤޤ +Jcode-Enew() の短縮形。以下のようにできます; $sjis = jcode($str)->sjis; =back -=head2 ʸΥ󥳡 +=head2 文字列のエンコード -̤ˡ$j-EIȤ뤳ȤIѴ줿ʸޤ +一般に、$j-EIとすることでIに変換された文字列を得ます。 =over 2 @@ -108,268 +108,268 @@ =item $utf8 = $j-Eutf8 -Ǥ礦 +自明でしょう。 WYCIWYG = What you code is what you get :) =item $iso_2022_jp = $j-Eiso_2022_jp -C<< $j->h2z->jis >>ƱǤ -Ⱦѥʤ϶ŪѤѴޤ +C<< $j->h2z->jis >>と同じです。 +半角カナは強制的に全角に変換されます。 -Perl 5.8.1ʹߤǤϡEncodeݡȤɤʥ󥳡ǥ̾ -ꥢǤѤǤޤ㤨С +Perl 5.8.1以降では、Encodeがサポートするどんなエンコーディング名と +エイリアスでも利用できます。例えば: - $european = $j->iso_latin1; # ᥽å̾Ѥ'-''_'֤ޤ + $european = $j->iso_latin1; # メソッド名用に'-'は'_'に置き換えます -B<>LƱȤäƤޤ +B<参考>:Lがこれと同じ小技を使っています。 =over 2 =item $j-Efallback($fallback) -Perl 5.8.1ʹߤǤϡJcodeʸUTF-8ݻޤ -I<< -Eencoding >>˥ޥåפǤʤʸ'?'֤ޤ -LǤɸưǤ - - my $unistr = "\x{262f}"; # ۥޡ - my $j = jcode($unistr); # $j->euc η̤ '?' - -ο񤤤ϡLƱ͡եХåꤹ뤳ȤѹǤޤ -ͤLΤΤȰǤصΤᡢC -CCLΤؤ -ꥢˤʤäƤޤ +Perl 5.8.1以降では、Jcodeは内部の文字列をUTF-8で保持します。 +I<< -Eencoding >>にマップできない文字は'?'に置き換えられますが、 +これはLでの標準動作です。 + + my $unistr = "\x{262f}"; # 陰陽マーク + my $j = jcode($unistr); # $j->euc の結果は '?' に + +この振る舞いは、L同様、フォールバックを指定することで変更できます。 +値はLのものと一緒です。便宜のため、C、 +C、CがLのそれらへの +エイリアスになっています。 print $j->fallback(Jcode::FB_PERLQQ)->euc; # '\x{262f}' print $j->fallback(Jcode::FB_XMLCREF)->euc; # '☯' print $j->fallback(Jcode::FB_HTMLCREF)->euc; # '☯' -ХѿC<$Jcode::FALLBACK>˥ǥեȤΥեХåݻ -ƤޤΤǡͤ뤳ȤǥС饤ɤǤޤ +グローバル変数C<$Jcode::FALLBACK>にデフォルトのフォールバックが保持 +されていますので、この値を代入することでオーバーライドできます。 - $Jcode::FALLBACK = Jcode::FB_PERLQQ; # ǥեȤΥեХåޤ + $Jcode::FALLBACK = Jcode::FB_PERLQQ; # デフォルトのフォールバックスキーマを設定 =back =item [@lines =] $jcode-Ejfold([$width, $newline_str, $kref]) -$widthʥǥեȡ72jcodeʸιԤޤ֤ޤ -$widthϡȾѡʸοǤʸ2ʸȤƥȤޤ +$width(デフォルト:72)毎にjcode文字列内の行を折り返します。 +$widthは”半角”文字の数です。全角文字は2文字としてカウントします。 -$newline_strʥǥեȤ"\n"ˤǻꤵ줿ʸäޤ -ޤ֤줿ԤꥹȤ֤ޤ +$newline_str(デフォルトは"\n")で指定された改行文字が加わります。 +折り返された全行をリストで返します。 -Perl 5.8.1ʹߤ3ܤΰ$krefEUCʸե󥹤 -ϤȤǡʰŪʹƬ§ʤ֤鲼ˤԤޤ +Perl 5.8.1以降は3番目の引数$krefにEUCの文字列の配列リファレンスを +渡すことで、簡易的な行頭禁則処理(ぶら下がり)を行えます。 =item $length = $jcode-Ejlength(); -ХĹǤϤʤʸʸȤƿʸ֤ޤ +バイト長ではなく、全角文字も一文字として数えた場合の文字数を返します。 =back -=head2 MIME::Base64Ȥ᥽å +=head2 MIME::Base64を使うメソッド -Υ᥽åɤȤˤϡLɬפǤ󥹥ȡñ +下記のメソッドを使うには、Lが必要です。インストールは単純に perl -MCPAN -e 'CPAN::Shell->install("MIME::Base64")' -ȤޤȤPerl5.6ʹߤǤʤ顢L -Хɥ뤵ƤΤǡ󥹥ȡɬפϤޤ +とします。お使いのPerlが5.6以降であるなら、Lは +バンドルされているので、インストールの必要はありません。 =over 2 =item $mime_header = $j-Emime_encode([$lf, $bpl]) -$strRFC1522ˤMIME-HeaderѴޤ$lfꤹȡ -Ԥޤ֤$lfȤޤʥǥեȡ\nˡ -$bplꤹȡޤ֤Хȿ$bplȤޤʥǥեȡ76 -οͤ76ʲǤʤФʤޤˡ +$strをRFC1522にあるMIME-Headerに変換します。$lfを指定すると、 +行の折り返しに$lfが使われます(デフォルト:\n)。 +$bplを指定すると、折り返すバイト数に$bplが使われます(デフォルト:76; +この数値は76以下でなければなりません)。 -Perl 5.8.1ʹߤǤϡʲΤ褦ˤƤMIME Header󥳡ɤǤޤ +Perl 5.8.1以降では、以下のようにしてもMIME Headerエンコードができます: $mime_header = $j->MIME_Header; -ξC<$mime_header>ͤMIME-B-encoded UTF-8ˤʤޤ -C<< $j->mime_encode() >>MIME-B-encoded ISO-2022-JP֤ޤ -ǶΤۤȤɤΥ᡼顼Ϥɤ⥵ݡȤƤޤ +この場合C<$mime_header>の戻り値はMIME-B-encoded UTF-8になります。 +一方、C<< $j->mime_encode() >>はMIME-B-encoded ISO-2022-JPを返します。 +最近のほとんどのメーラーはどちらもサポートしています。 =item $j-Emime_decode; -Jcode֥ȤʸMIME-HeaderǥɤޤPerl 5.8.1 -ʹߤʤ顢ʲΤ褦ˤƱȤǤޤ +Jcodeオブジェクトの内部文字列をMIME-Headerデコードします。Perl 5.8.1 +以降なら、以下のようにして同じことができます: Jcode->new($str, 'MIME-Header'); -ξ硢ISO-2022-JPǤϤʤUTF-8ʤɤˤбƤꡢ -MIME B EncodingΤߤʤ餺MIME Q EncodingˤбƤ -ΤǡPerl 5.8.1ʹߤǤФȤ٤Ǥ礦 +こちらの場合、ISO-2022-JPだけではなくUTF-8などにも対応しており、 +さらにMIME B EncodingのみならずMIME Q Encodingにも対応している +ので、Perl 5.8.1以降であればこちらを使うべきでしょう。 =back -=head2 Ⱦ +=head2 半角 ←→ 全角 =over 2 =item $j-Eh2z([$keep_dakuten]) -X201ʡȾѡˤX208ʡѡˤѴޤ -$keep_dakuten˿ͤ򥻥åȤȡ򤽤Τޤޤˤޤ -(ϤĤޤꡢ֥ܡפϡ֥פѴ줺ˤΤޤ -ˤʤȤȤǤ) +X201カナ(半角)をX208カナ(全角)に変換します。 +$keep_dakutenに真値をセットすると、濁点をそのままにします +(これはつまり、「カ+゛」は「ガ」に変換されずにそのまま +になるということです) -$j->nmatch̤ƥޥåǤޤ +$j->nmatchを通じてマッチした数を取得できます。 =item $j-Ez2h -X208ʡѡˤX201ʡȾѡˤѴޤ +X208カナ(全角)をX201カナ(半角)に変換します。 -$j->nmatch̤ƥޥåǤޤ +$j->nmatchを通じてマッチした数を取得できます。 =back -=head2 ɽߥ졼 +=head2 正規表現エミュレータ -C<< -Em() >>C<< -Es() >>ȤˤϡPerl 5.8.1ʹߤ -ɬפǤ +C<< -Em() >>とC<< -Es() >>を使うには、Perl 5.8.1以降が +必要です。 =over 2 =item $j-Etr($from, $to, $opt); -Jcode֥ȤCŬѤޤ$from$to -EUC-JPʸǤPerl 5.8.1ʹߤǤϡflagդUTF-8ʸ -դޤ +JcodeオブジェクトにCを適用します。$fromと$toは +EUC-JPの文字列です。Perl 5.8.1以降では、flag付きのUTF-8文字列 +も受け付けます。 -C<$opt>򥻥åȤȡCŬѤޤC<$opt> -'c''d'뤤ϤȤ߹碌ǤʤФʤޤ +C<$opt>をセットすると、Cが適用されます。C<$opt>は +'c'、'd'あるいはそれらの組み合わせでなければなりません。 -$j->nmatch̤ƥޥåǤޤ +$j->nmatchを通じてマッチした数を取得できます。 -Perl 5.8.1ʹߤǤϡtrη˸Τä-Eerror_tr̤ơ -$@Ǥޤ +Perl 5.8.1以降では、trの形式に誤りのあった場合に-Eerror_trを通じて、 +$@を取得できます。 -ʲΥ᥽åɤPerl 5.8.1ʹߤǤΤѲǽǤ +以下のメソッドはPerl 5.8.1以降でのみ利用可能です。 =item $j-Es($patter, $replace, $opt); -ġCŬѤޤC<$opt>ɽץ -ƱǤɽΥץˤĤƤL򻲾Ȥ +個々にCを適用します。C<$opt>は正規表現オプションと +同じです。正規表現のオプションについてはLを参照ください。 -C<< $j->tr() >>C<< $j->s() >>ϤΥ֥ȼȤ֤Τǡ -ʲΤ褦ϢǤޤ +C<< $j->tr() >>、C<< $j->s() >>はそのオブジェクト自身を返すので、 +以下のように操作を連結できます。 $j->tr("A-Z", "a-z")->s("foo", "bar"); =item [@match = ] $j-Em($pattern, $opt); -CŬѤޤΥ᥽åɤϡɥ֥Ȥ֤ʤ -ΤǡC<< $j->s() >>Τ褦˥᥽åɤϢǤʤȤդƤ +Cを適用します。このメソッドは”オブジェクトを返さない” +ので、C<< $j->s() >>のようにメソッドを連結できないことに注意してください。 -ɽη˸Τä硢-Eerror_m-Eerror_s̤ -$@Ǥޤ +正規表現の形式に誤りのあった場合、-Eerror_m、-Eerror_sを通じて +$@を取得できます。 =back -=head2 󥹥ѿ +=head2 インスタンス変数 -⤷Jcode֥ȤΥ󥹥ѿ˥ʤ顢ľܤ -˥ΤǤϤʤ᥽åɤѤޤ礦ʤ줾OOP -Ǥˡ - -ͤޤǤˡJcodeϡʰŪˡǤ˥ϥåե󥹤ˡ -ե󥹤ȤȤǡԡɤŬƤޤʼºݤΤȤ -᥽åɤȤ¤ꤳΤȤΤɬפϤޤ ⤦ -ޤOOPʤΤǤˡ +もしJcodeオブジェクトのインスタンス変数にアクセスしたいなら、直接それら +にアクセスするのではなく、アクセスメソッドを利用しましょう(これぞOOP +です)。 + +参考までに、Jcodeは(一般的な方法である)ハッシュリファレンスの代わりに、 +配列リファレンスを使うことで、スピードを最適化しています(実際のところ、 +アクセスメソッドを使う限りこのことを知る必要はありません; もう一度 +いいますが、これはOOPなのです)。 -Perl 5.8.1ʹߤǤϡϥåե󥹤Ȥ褦ѹޤ -ˤꡢJcodeγĥϤΤñˤʤޤ +Perl 5.8.1以降では、ハッシュリファレンスを使うように変更されました。 +これにより、Jcodeの拡張はものすごく簡単になります。 =over 2 =item $j-Er_str -EUCʸؤΥե󥹡 +EUC文字列へのリファレンス。 -Perl 5.8.1ʹߤǤUTF-8ե饰ΩäUTF-8ʸؤΥե󥹤Ǥ +Perl 5.8.1以降ではUTF-8フラグの立ったUTF-8文字列へのリファレンスです。 =item $j-Eicode -ľˤʸɡ +直近の操作における入力文字コード。 =item $j-Enmatch -ޥå$j->trȤäȤˡ +マッチした数($j->tr等を使ったとき)。 =back -=head1 ֥롼 +=head1 サブルーチン =over 2 =item ($code, [$nmatch]) = getcode($str) -$strʸɤ֤ޤ֤륳ɤϰʲ̤Ǥ +$strの文字コードを返します。返るコードは以下の通りです。 - ascii Ascii ܸ쥳ɤޤޤʤ - binary Binary ʥƥȥեǤϤʤ + ascii Ascii (日本語コードを含まない) + binary Binary (テキストファイルではない) euc EUC-JP sjis SHIFT_JIS jis JIS (ISO-2022-JP) ucs2 UCS2 (Raw Unicode) utf8 UTF8 -顼ƥȤ󥳥ƥȤȤȡʸʬ -ɤĤäΤ֤ޤǽҤ٤褦ˡ$str\$str -Ǥ⹽ޤ - -B δؿjcode::getcode()100%̸ߴ -ޤޤۤ100% - - * ͤΤȤν֤ϵդȤʤޤ - jcode::getcode()$nmatchǽ֤ޤ - - * jcode::getcode()ϡEUCʸSJISʸοȤ'undef' - ֤ޤ Jcode::getcode()EUC֤ޤJcode.pmˤ - ֤ʤǤ +スカラーコンテキストの代わりに配列コンテキストを使うと、何文字分の +コードが見つかったのかも返します。上の方で述べたように、$strは\$str +でも構いません。 + +B この関数はjcode::getcode()と100%上位互換が +あります。――まあ、ほぼ100%; + + * 戻り値が配列のとき、その順番は逆となります; + jcode::getcode()は$nmatchを最初に返します。 + + * jcode::getcode()は、EUC文字とSJIS文字の数が等しいとき、'undef'を + 返します。 Jcode::getcode()はEUCを返します。これはJcode.pmには + 中間がないためです。 =item Jcode::convert($str, [$ocode, $icode, $opt]) -$str$ocodeǻꤷʸɤѴޤ$icodeꤹȡ -ʸgetcode()ǥåˡ$icodeȲꤷޤ -ǽҤ٤褦ˡ$str\$strǤ⹽ޤ +$strを$ocodeで指定した文字コードに変換します。$icodeも指定すると、 +入力文字列をgetcode()でチェックする代わりに、$icodeと仮定します。 +上の方で述べたように、$strは\$strでも構いません。 -B δؿjcode::convert()100%̸ߴ -ޤ +B この関数はjcode::convert()と100%上位互換が +あります! =back -=head1 Х +=head1 バグ -Perl5.8.1ʹߤξ硢JcodeLΥåѡȤƿ񤤤ޤ -ĤޤꡢJcodeEncodeΥХαƶޤ +Perlが5.8.1以降の場合、JcodeはLのラッパーとして振る舞います。 +つまり、JcodeはEncode内のバグの影響を受けます。 -=head1 ռ +=head1 謝辞 -Υѥåϡưǥ󤽤ƥɤ¿ǡ - Perl4饤֥jcode.pläƤޤ +このパッケージは、動機、デザインそしてコードの多くの点で、 +歌代 和正 氏のPerl4ライブラリjcode.plに負っています。 - ϡȯ˽ʳ -ɽ᤭򤷤Ƥޤ +大崎 博基 氏は、開発の非常に初期の段階から +正規表現を磨きあげる手助けをしてくれました。 -makamaka@donzoko.net JEncode ˤϡJcodeEncodeɤͻ礵 -礭ʷޤޤܸޥ˥奢£ -ޤ +makamaka@donzoko.net の JEncode には、JcodeとEncodeをどう融合させれば +いいか大変大きな啓示を受けました。また、本日本語マニュアルも寄贈して +いただきました。 -Jcode ML γ󡣤ãʤˤϡ -ޤǴʤäȤǤ礦 +そしてJcode ML の皆さん。この方達なしには、 +ここまで完成しなかったことでしょう。 -=head1 +=head1 参考 L L -=head1  +=head1 著作権 Copyright 1999-2005 Dan Kogai