\documentstyle[a4j]{jarticle}
\setcounter{secnumdepth}{6}
\setcounter{tocdepth}{6}
\topsep=0.1cm
\parsep=0.1cm
\itemsep=0.0cm
\begin{document}
\title{
tiny-mime.el 説明書}
\author{
守岡 知彦\\
}
\date{
1994年7月27日}
\maketitle
\medskip
\par
この説明書は ol2 と plain2 を用いることによって LaTeX 形式に変換する
ことができます。
\medskip
\medskip

\section{tiny-mime.el とは}
\medskip
\par
tiny-mime.el は Mule, NEmacs, NEpoch 上で動作する MIME message
header の encoder/decoder です。オリジナルは、昔、えなみ つぐとも さん
が fj.editor.emacs に投稿された MIME message header の decoder です。
\medskip
\par
現在では、当時のものに比べ、
\medskip
\begin{itemize}
\item decoding 時における unfolding 機能
\item ISO-2022-JP に加え、ISO-8859-*, US-ASCII などの encoding/decoding
\item Q-encoding の decoding
\medskip
\end{itemize}
\par
といった機能を持っています。
\medskip
\medskip

\section{tiny-mime.el のサポートする character set, encoding}
\medskip
\par
tiny-mime.el は、次の character set, encoding をサポートします。
\medskip

\subsection{Mule}
\medskip
\par
ISO-2022-JP, US-ASCII, ISO-8859-1..9, ISO-2022-CN, ISO-2022-KR,
EUC-KR などの encoding/decoding をサポートします。また、関数
mime/set-charset-and-encoding で追加・変更ができます。
\medskip

\subsection{NEmacs, NEpoch}
\medskip
\par
ISO-2022-JP, US-ASCII の encoding/decoding をサポートします。
\medskip
\par
また、ISO-8859-*であっても、encoded-text に含まれる文字列が実際には
ASCII で表せる範囲なら表示します。
\medskip
\medskip

\section{tiny-mime.el の簡単な使い方}
\medskip

\subsection{decode}
\medskip
\par
tiny-mime.el を load して、decode したい buffer 上で、
\medskip
{\list{}{\leftmargin=8ex}\item[]
\par
M-x mime/decode-message-header
\endlist}
\medskip
\par
を実行します。
\medskip
\par
また、decode したい region を
\medskip
{\baselineskip=10pt
\begin{verbatim}
        M-x mime/decode-region
\end{verbatim}}
\medskip
\par
で decode することができます。引用などで body-part に残った
encoded-word を decode するのに便利でしょう。
\medskip

\subsection{encode}
\medskip
\par
tiny-mime.el を load して、encode したい buffer 上で、
\medskip
{\list{}{\leftmargin=8ex}\item[]
\par
M-x mime/encode-message-header
\endlist}
\medskip
\par
を実行します。
\medskip
\medskip

\section{tiny-mime.el の変数}
\medskip

\subsection{mime/no-encoding-header-fields}
\medskip
\par
tiny-mime.el で encode しない message header の field を指定します。
\medskip
\par
default では X-Nsubject が指定されています。
\medskip
\par
例： X-Nsubject と Subject を encode しないようにする。
\medskip
{\baselineskip=10pt
\begin{verbatim}
----------------------------------------------------------------------
(setq mime/no-encoding-header-fields '("X-Nsubject" "Subject"))
----------------------------------------------------------------------
\end{verbatim}}
\medskip
\par
［注意］ mime.el と併用する場合、tiny-mime.el が encode しなくても、
mime.el が encode するので、mime.el の message header encoder が働かな
いようにに設定します。
\medskip

\subsection{mime/use-X-Nsubject}
\medskip
\par
この変数の値が t の場合、message header を encode する時、encode し
た結果、Subject に encoded-word が含まれる場合、Subject を decode した
ものを入れた X-Nsubject を作成します。
\medskip
\par
default では nil が指定されています。
\medskip
\par
［注意］Mule で ISO-2022-JP に含まれるもの以外の文字集合を使う場合は、
これを指定しない方が賢明です。
\medskip

\subsection{mail-header-separator}
\medskip
\par
関数 mime/encode-message-header における message header と body part
の区切りを表す変数です。例えば、GNUS では "--text follows this line--"
が指定されます。
\medskip
\par
［注意］この変数の文字列は、version 2.6 より正規表現ではなくなりました。
\medskip
\medskip

\section{mailer, news reader への組み込み}
\medskip
\par
日常的に、無意識に MIME header を本来の言語で見たいというのは当然の
欲求です。そこで、tiny-mime.el を mailer や news reader に組み込むと自
動的に MIME header の encode/decode ができます。
\medskip
\par
また、metamail を使っておられる方でも、普段は message header の
decode だけで良くて、絵や音などを再生する時だけ metamail を使うという
ような使い方もできます。
\medskip
\par
この目的を実現するには、mailer や news reader の適切な hook に
mime/decode-message-header を入れれば良いでしょう。また、文字列の
decode をしたい場合のために、
\medskip
{\list{}{\leftmargin=8ex}\item[]
\par
(mime/decode-string 文字列)
\endlist}
\medskip
\par
という関数も用意しています。
\medskip
\par
GNUS と mh-e に関しては、tm-gnus, tm-mh-e という MIME 対応化モジュー
ルを用意しています。
\medskip
\par
これらの、各 MUA に対応するモジュールを load すると tiny-mime.el に
よる MIME header の復元と tm-body を利用した MIME body の再生が行なえ
ます。
\medskip
\par
詳しくは、それぞれの説明書をお読み下さい。
\medskip
\medskip

\section{mime.el との併用}
\medskip
\par
mime.el と併用する例を示します。この例の場合、ISO-2022-JP 文字列の
encode は tiny-mime.el が行ない、それ以外の文字集合に属する文字列は
mime.el が encode します。
\medskip
\par
また、tiny-mime.el が encode しなかった文字列も mime.el が encode す
るので、結果的に、必ず全ての field が encode されることに注意して下さ
い。
\medskip
{\baselineskip=10pt
\begin{verbatim}
----------------------------------------------------------------------
;;;
;;; for Edit MIME mode
;;;
(autoload 'mime-mode "mime" "Edit MIME message." t)
(autoload 'mime-convert-buffer "mime" "convert to MIME." t)
(autoload 'insert-signature "signature" "Insert signature" t)
(add-hook 'mime-mode-hook
          (function
           (lambda ()
             (define-key (current-local-map)
               "\C-c\C-s" (function insert-signature))
             )))

;; MIME header の encoder を tiny-mime のものを使う。
(setq mime-translate-hook 'mime/encode-message-header)

;;;
;;; for GNUS
;;;
(add-hook 'news-reply-mode-hook (function mime-mode))
(setq gnus-signature-file nil)

;;;
;;; for mh-e
;;;
(add-hook 'mh-letter-mode-hook
          (function
           (lambda ()
             (mime/decode-message-header)
             (mime-mode)
             (make-local-variable 'mail-header-separator)
             (setq mail-header-separator "--------"))
           ))
----------------------------------------------------------------------
\end{verbatim}}
\medskip

\subsection{特定の field を encode したくない場合}
\medskip
\par
特定の field を encode したくない場合、tiny-mime.el の変数
mime/no-encoding-header-fields によって、tiny-mime.el による encode を
やめることができますが、mime.el が encode するのでは意味がありません。
そこで、次のように設定することで、mime.el でも encode しないようにでき
ます。
\medskip
{\baselineskip=10pt
\begin{verbatim}
----------------------------------------------------------------------
(if (boundp 'MULE)
    (progn
      (defun mime-header-charset-chooser-for-mule-no-encode-ISO-2022-JP (begin end)
        (let ((lclist (find-charset-region begin end)))
          (cond ((null lclist) nil)             ;US-ASCII requres no encoding.
                ((memq lc-ltn1 lclist)
                 '("ISO-8859-1" . "Q"))
                ((memq lc-ltn2 lclist)
                 '("ISO-8859-2" . "Q"))
                ((memq lc-ltn3 lclist)
                 '("ISO-8859-3" . "Q"))
                ((memq lc-ltn4 lclist)
                 '("ISO-8859-4" . "Q"))
                ((memq lc-crl lclist)
                 '("ISO-8859-5" . "Q"))
                ;;((memq lc-arb lclist)
                ;; '("ISO-8859-6" . "Q"))
                ((memq lc-grk lclist)
                 '("ISO-8859-7" . "Q"))
                ((memq lc-hbw lclist)
                 '("ISO-8859-8" . "Q"))
                ((memq lc-ltn5 lclist)
                 '("ISO-8859-9" . "Q"))
                ((memq lc-jp lclist) nil)
                (t                              ;Unknown charset.  It must be Mule!
                 '("ISO-2022-JP-2" . "B"))
                )))
      (setq mime-header-charset-chooser
            'mime-header-charset-chooser-for-mule-no-encode-ISO-2022-JP)
      )
  (progn
    (defun mime-header-charset-chooser-for-nemacs-no-encode-ISO-2022-JP (begin end))
    (setq mime-header-charset-chooser
          'mime-header-charset-chooser-for-nemacs-no-encode-ISO-2022-JP)
    ))
----------------------------------------------------------------------
\end{verbatim}}
\medskip
\par
要するに、ISO-2022-JP 文字列の encode を mime.el にさせなくする訳で
す。
\medskip
\medskip

\section{charset の追加・変更}
\medskip
\par
Mule では、関数 mime/set-charset-and-encoding で、charset の追加・変
更ができます。
\medskip
\begin{description}
\item[関数:]mime/set-charset-and-encoding lc cs charset encoding
\medskip
\begin{description}
\item[lc:]charset に対応する leading-char を指定する。
\item[cs:]charset に対応する coding-system を指定する。1 octet 文字
集合で coding-system を作らない場合は、nil を指定する。
\item[charset:]MIME の charset.
\item[encoding:]encode する際の encoding.
\medskip
\medskip
\end{description}
\end{description}
\par
例： KS C5601-1987 を EUC-KR の B encoding するように設定する
\medskip
{\list{}{\leftmargin=8ex}\item[]
\par
(mime/set-charset-and-encoding lc-kr *euc-kr* "EUC-KR" "B")
\endlist}
\medskip
\medskip
\par
例： koi8-r を Q encoding するように設定する。
\medskip
{\list{}{\leftmargin=8ex}\item[]
\par
(mime/set-charset-and-encoding lc-prv11 nil "KOI8-R" "Q")
\endlist}
\medskip
\medskip
\par
［注意］現在のところ、private character の設定は難ありです。(\verb+^+\_\verb+^+;
\end{document}
