                日本語処理について

------------------------------------------------------------
1	概要
1.1	MIME 関係の処理を ON にする (default ON)
1.2	HOOKで使うと便利な関数: &STR2JIS(文字列)
1.3	HOOKで使うと便利な関数: &STR2EUC(文字列)
1.4	HOOKで使うと便利な関数: &mimeencode(文字列)
1.5	HOOKで使うと便利な関数: &mimedecode(文字列)
1.6	例題: STR2EUC を使う

2	MIME関係の諸機能
2.1	MIMEの処理
2.2	ISO-2022-JP Trap

3	Internals
3.1	mget MIME 処理のカスタマイズ変数

Appendix A	使ってはいけない変数
Appendix A.1	記事を強引にMIME decodeする (使ってはいけない)
------------------------------------------------------------


1	概要

本来MIME関係はクライアントプログラムが処理すればいいことなのでサーバと
しては素通しでいいはずです。fmlのMIME関係の処理は基本的に素通しです。

1.1	MIME 関係の処理を ON にする (default ON)

	$USE_MIME = 1; (default 1)
See also: 2.1 

1.2	HOOKで使うと便利な関数: &STR2JIS(文字列)

	&STR2JIS(変換したい文字列);

日本語(JISコード)にする。

	$string = &STR2JIS($string);

1.3	HOOKで使うと便利な関数: &STR2EUC(文字列)

	&STR2JIS(変換したい文字列);

日本語(EUCコード)にする。
文字列をperlの正規表現でマッチさせる時はEUCが何かと便利である。
そのため文字列をEUCにする必要のある時に使われる。
主に内部用途といえよう。

	$string = &STR2EUC($string);

1.4	HOOKで使うと便利な関数: &mimeencode(文字列)

	&mimeencode(encode したい文字列);

文字列を MIME encode する。

1.5	HOOKで使うと便利な関数: &mimedecode(文字列)

	&DecodeMimeStrings(decode したい文字列);
	&MimeDecode(decode したい文字列);

文字列を MIME decode する。どっちの関数を呼んでも今は一緒

1.6	例題: STR2EUC を使う

1. EUC にして
2. MIME encoding のルーチンに渡して
3. 結果を変数 $WELCOME_STATEMNET に代入

fmlでのwelcomeメールのsubjectを日本語にする(fml-support: 07219)
この時のsubjecthさ $WELCOME_STATEMNET で決定されている。

ＭＬのHOMEにあるcfというファイルの最後(LOCAL_CONFIGという行より後)に

    $START_HOOK = q#
    	&use('MIME');
    	$WELCOME_STATEMENT  = "ようこそここへ、うふふ";
    	$WELCOME_STATEMENT  = &STR2EUC($WELCOME_STATEMENT);
    	$WELCOME_STATEMENT  = &mimeencode($WELCOME_STATEMENT);
    #;
    
    と呪文を書いておいて、その場所で
    
       % makefml update-config.ph ML名
    
    で config.ph をつくりなおす。config.ph というファイルの文字コードはEUC
    で save しなければならないことに注意。

2	MIME関係の諸機能

2.1	MIMEの処理

本来MIME関係はクライアントプログラムが処理すればいいことなのでサーバと
しては素通しでいいはずです。

fmlのMIME関係の処理は

0.	基本的に素通し

1.	可読性のためにsummary(サマリー)ファイルなどで
	base64, quoted-printableにエンコードされた
	Subjectを日本語に戻しておく

2.	MIME/Multipart形式のまとめおくりやファイルの送り返し
	をオプションとして提供する
	(デフォールトをMIME/Multipartにすることも可能)

などからなります。それ以外にも『過去に某BBSのせいで流行ったが、本来やっ
てはいけないオプション』などもあります。

前述の1は$USE_MIMEという変数が設定されていないとサマリーは生のBASE64な
どのまま書き込まれます。デフォールトでは日本語に変換します。

	$USE_MIME = 1; (default 1)

Example:
	...
	Subject: Re: TELEPHONE 
	   =?ISO-2022-JP?B?GyRCJD0kcyRKJCEhQRsoQg==?=

というメールが来たとすると、summary ファイルには

	94/04/03 20:47:47 [1:fukachan@phys.t] Re: TELEPHONE そんなぁ〜

のようにないります。

注意: subject をちょんぎったりはしませんが、一行にしてからdecodeして全
部書いてます。summaryは1行1メールがわかりやすくていいでしょ?

2.2	ISO-2022-JP Trap

ISO-2022-JP の文字がない限りは require しません(たいして軽くはならない
でしょうが…)。

RFC1522	2. Syntax of encoded-words

   encoded-word = "=?" charset "?" encoding "?" encoded-text "?="
   charset = token    ; see section 3
   encoding = token   ; see section 4
   token = 1*<Any CHAR except SPACE, CTLs, and especials>

3	Internals

3.1	mget MIME 処理のカスタマイズ変数

ＭＬ本来の配送ではなく mget やまとめおくりの際の処理に関係します。右辺
はデフォールトの値（Built-in）です。ファイルの取り寄せ等のモードにMIME
関係もありますが、その時に使われています。

   Mime-Version:
   Content-Type:

	$MIME_VERSION = '1.0';
	$MIME_CONTENT_TYPE = 'multipart/mixed;';

以下は MIME/Multipart で使う変数です。

	$MIME_MULTIPART_BOUNDARY = "--Thu_18_May_95_02:36:26--"

な形で日付を設定します。そのあと、これら↓の変数を設定してます。

	$MIME_MULTIPART_DELIMITER  = $MIME_MULTIPART_BOUNDARY;
	$MIME_MULTIPART_DELIMITER .= "\nContent-Type: message/rfc822\n";
	$MIME_MULTIPART_CLOSE_DELIMITER = $MIME_MULTIPART_BOUNDARY;

くぎり

	$MIME_MULTIPART_BOUNDARY = "--日付--"

本文の前口上

	$MIME_MULTIPART_PREAMBLE (デフォールトはなにもなし)

本文の後につく部分

	$MIME_MULTIPART_TRAILER (デフォールトはなにもなし)

Appendix A	使ってはいけない変数

Appendix A.1	記事を強引にMIME decodeする (使ってはいけない)

にふてぃ〜とかのださださ対策の一貫の名残です。
現代では使うべきではありません。

	$MIME_DECODED_ARTICLE          = 1;

と定義して下さい。$DIR/spool/数字 というファイルにＭＬの記事の保存する
時に日本語へ逆変換した内容を書き込みます。ただしこれをすると 
MIME/Multipart とかでエラーになるのでやってはいけません。


		INDEX

$MIME_CONTENT_TYPE                         ...   3.1 
$MIME_DECODED_ARTICLE                      ...   Appendix A.1 
$MIME_MULTIPART_BOUNDARY                   ...   3.1 
$MIME_MULTIPART_PREAMBLE                   ...   3.1 
$MIME_MULTIPART_TRAILER                    ...   3.1 
$MIME_VERSION                              ...   3.1 
MIME処理に関するカスタマイズ変数           ...   3.1 
RFC1522                                    ...   2.2 
$USE_MIME                                  ...   2.1 
