Merge flim-1_11_3_9.
[elisp/flim.git] / mime-ja.sgml
index 8240d6b..fe6794b 100644 (file)
@@ -1,6 +1,6 @@
 <!doctype sinfo system>
 <head>
-<title>FLIM 1.9 MIME \e$B5!G=@bL@=q\e(B
+<title>FLIM 1.10 MIME \e$B5!G=@bL@=q\e(B
 <author>\e$B<i2,\e(B \e$BCNI'\e(B <mail>morioka@jaist.ac.jp</mail>
 <date>1998/07/01
 
@@ -263,7 +263,11 @@ code-converted.
 <var>field-name</var> \e$BMs$,B8:_$7$J$$>l9g$O\e(B nil \e$B$rJV$9!#\e(B
 </defun>
 
-<defun name="mime-insert-decoded-header">
+
+<h2> Entity \e$B$NJ8;zI=8=\e(B
+<node> entity formatting
+<p>
+<defun name="mime-insert-header">
            <args> entity <opts> invisible-fields visible-fields
 <p>
 \e$B8=:_0LCV$K\e(B <var>entity</var> \e$B$NI|9f$7$?\e(B header \e$B$rA^F~$9$k!#\e(B
@@ -273,9 +277,32 @@ list \e$B$G!"$=$l$>$l!"I=<($7$?$/$J$$\e(B field \e$BL>$HI=<($7$?$$MsL>$rI=8=$7$?$b$
 \e$B$G$"$k!#\e(B
 <p>
 <var>invisible-fields</var> \e$B$NMWAG$N$I$l$+$K\e(B match \e$B$7!"$+$D!"\e(B
-<var>visible-fields</var> \e$B$NMWAG$N$I$l$K$b\e(B match \e$B$7$J$$Ms$OI=<($5$l$J$$!#\e(B
+<var>visible-fields</var> \e$B$NMWAG$N$I$l$K$b\e(B match \e$B$7$J$$Ms$OI=<($5$l$J\e(B
+\e$B$$!#\e(B
+<p>
+<dref>encoded-word</dref> \e$B$OI|9f$5$l$k!#!X@8$NHs\e(B us-ascii \e$BJ8;z!Y$O\e(B 
+<code>default-mime-charset</code> \e$B$H$7$F2r<a$5$l$k!#\e(B
 </defun>
 
+<defun name="mime-insert-text-content">
+           <args> entity
+<p>
+Insert before point a contents of <var>entity</var> as text entity.
+<p>
+Contents of the <var>entity</var> are decoded as <dref>MIME
+charset</dref>.  If the <var>entity</var> does not have charset
+parameter of Content-Type field, <code>default-mime-charset</code> is
+used as default value.
+</defun>
+
+<defvar name="default-mime-charset">
+<p>
+\e$BE,@Z$J\e(B <dref>MIME charset</dref> \e$B$,8+$D$+$i$J$+$C$?>l9g$KMQ$$$i$l$k\e(B
+MIME charset.
+<p>
+\e$BK\Mh$O\e(B APEL \e$B$NJQ?t$G$"$k!#\e(B
+</defvar>
+
 
 <h2> Entity \e$B$NFbMF\e(B
 <node> Entity-content
@@ -396,9 +423,39 @@ representation-type \e$B$NL>A0$N@hF,$K\e(B <code>mm</code> \e$B$rIU$1$?$b$N$K$J$C$F
 <h3> mm-backend \e$B$N:n$jJ}\e(B
 <node> mm-backend module
 <p>
-\e$B!J$9$_$^$;$s!#$=$N$&$A=q$-$^$9\e(B (^_^;\e$B!K\e(B
+<defmacro name="mm-define-backend">
+<args> type
+<opts> parents
+<p>
+Define <var>type</var> as a mm-backend.
+<p>
+If <var>PARENTS</var> is specified, <var>type</var> inherits parents.
+Each parent must be representation-type.
 <p>
-\e$B!J$H$j$"$($:!"\e(Bmm*.el \e$B$r;29M$K$7$F$/$@$5$$!K\e(B
+Example:
+<p>
+<lisp>
+(mm-define-backend chao (generic))
+</lisp>
+</defmacro>
+
+<defmacro name="mm-define-method">
+<args> name args <rest> body
+<p>
+Define <var>name</var> as a method function of (nth 1 (car
+<var>args</var>)) backend.
+<p>
+<var>args</var> is like an argument list of lambda, but (car
+<var>args</var>) must be specialized parameter.  (car (car
+<var>args</var>)) is name of variable and (nth 1 (car
+<var>args</var>)) is name of backend (representation-type).
+<p>
+Example:
+<p>
+<lisp>
+(mm-define-method entity-cooked-p ((entity chao)) nil)
+</lisp>
+</defmacro>
 
 
 <h1> Content-Type \e$BMs$N>pJs\e(B
@@ -632,8 +689,8 @@ Content-Transfer-Encoding \e$BMs$,B8:_$7$J$$>l9g$O\e(B
 </defun>
 
 
-<h2> \e$BNN0h$NId9f2=!&I|9f2=\e(B
-<node> Region encoder/decoder
+<h2> \e$BId9f2=!&I|9f2=\e(B
+<node> encoder/decoder
 <p>
 <defun name="mime-encode-region">
            <args> start end encoding
@@ -649,49 +706,14 @@ Decode region <var>start</var> to <var>end</var> of current buffer
 using <var>encoding</var>.
 </defun>
 
-<defvar name="mime-encoding-method-alist">
-<p>
-Alist of encoding vs. corresponding method to encode region.
-<p>
-Each element looks like <code>(STRING . FUNCTION)</code> or
-<code>(STRING . nil)</code>.  <var>string</var> is
-content-transfer-encoding.  <code>function</code> is region encoder
-and <code>nil</code> means not to encode.
-</defvar>
-
-<defvar name="mime-decoding-method-alist">
-<p>
-Alist of encoding vs. corresponding method to decode region.
-<p>
-Each element looks like <code>(STRING . FUNCTION)</code> or
-<code>(STRING . nil)</code>.  <var>string</var> is
-content-transfer-encoding.  <code>function</code> is region decoder
-and <code>nil</code> means not to decode.
-</defvar>
-
 
-<h2> \e$BJ8;zNs$NId9f2=!&I|9f2=\e(B
-<node> String encoder/decoder
-<p>
 <defun name="mime-decode-string">
-             <args> string encoding
+           <args> string encoding
 <p>
-<var>string</var> \e$B$r\e(B <var>encoding</var> \e$B$H$7$FI|9f$7$?7k2L$rJV$7$^$9!#\e(B
+<var>string</var> \e$B$r\e(B <var>encoding</var> \e$B$H$7$FI|9f$7$?7k2L$rJV$9!#\e(B
 </defun>
 
-<defvar name="mime-string-decoding-method-alist">
-<p>
-Alist of encoding vs. corresponding method to decode string.
-<p>
-Each element looks like <code>(STRING . FUNCTION)</code>.
-STRING is content-transfer-encoding.
-FUNCTION is string decoder.
-</defvar>
 
-
-<h2> File \e$B$NId9f2=!&I|9f2=\e(B
-<node> File encoder/decoder
-<p>
 <defun name="mime-insert-encoded-file">
            <args> filename encoding
 <p>
@@ -707,24 +729,102 @@ Decode and write current region encoded by <var>encoding</var> into
 <var>start</var> and <var>end</var> are buffer positions.
 </defun>
 
-<defvar name="mime-file-encoding-method-alist">
+
+<h2> Other utilities
+<node> Encoding information
 <p>
-Alist of encoding vs. corresponding method to insert encoded file.
+<defun name="mime-encoding-list">
+           <opts> SERVICE
 <p>
-Each element looks like <code>(STRING . FUNCTION)</code>.  STRING is
-content-transfer-encoding.  FUNCTION is function to insert encoded
-file.
-</defvar>
+Return list of Content-Transfer-Encoding.
+<p>
+If <var>service</var> is specified, it returns available list of
+Content-Transfer-Encoding for it.
+</defun>
 
-<defvar name="mime-file-decoding-method-alist">
+<defun name="mime-encoding-alist">
+           <opts> SERVICE
 <p>
-Alist of encoding vs. corresponding method to write decoded region to
-file.
+Return table of Content-Transfer-Encoding for completion.
 <p>
-Each element looks like <code>(STRING . FUNCTION)</code>.  STRING is
-content-transfer-encoding.  FUNCTION is function to write decoded
-region to file.
-</defvar>
+If <var>service</var> is specified, it returns available list of
+Content-Transfer-Encoding for it.
+</defun>
+
+
+<h2> How to write encoder/decoder module
+<node> mel-backend
+<p>
+<defmacro name="mel-define-method">
+<args> name args <rest> body
+<p>
+Define <var>name</var> as a method function of (nth 1 (car (last
+<var>args</var>))) backend.
+<p>
+<var>args</var> is like an argument list of lambda, but (car (last
+<var>args</var>)) must be specialized parameter.  (car (car (last
+<var>args</var>))) is name of variable and (nth 1 (car (last
+<var>args</var>))) is name of backend (encoding).
+<p>
+Example:
+<p>
+<lisp>
+(mel-define-method mime-write-decoded-region (start end filename
+                                                   (nil "base64"))
+  "Decode and write current region encoded by base64 into FILENAME.
+START and END are buffer positions."
+  (interactive
+   (list (region-beginning) (region-end)
+        (read-file-name "Write decoded region to file: ")))
+  (let ((str (buffer-substring start end)))
+    (with-temp-buffer
+      (insert (decode-base64-string str))
+      (write-region-as-binary (point-min) (point-max) filename)
+      )))
+</lisp>
+</defmacro>
+
+<defmacro name="mel-define-method-function">
+<args> spec function
+<p>
+Set <var>spec</var>'s function definition to <var>function</var>.
+<p>
+First element of <var>spec</var> is service.
+<p>
+Rest of <var>args</var> is like an argument list of lambda, but (car
+(last <var>args</var>)) must be specialized parameter.  (car (car
+(last <var>args</var>))) is name of variable and (nth 1 (car (last
+<var>args</var>))) is name of backend (encoding).
+<p>
+Example:
+<p>
+<lisp>
+(mel-define-method-function (mime-encode-string string (nil "base64"))
+                           'encode-base64-string)
+</lisp>
+</defmacro>
+
+
+<h2> How to add encoding/decoding service
+<node> generic function for mel-backend
+<p>
+<defmacro name="mel-define-service">
+<args> name
+<opts> args doc-string
+<p>
+Define <var>name</var> as a service for Content-Transfer-Encodings.
+<p>
+If <var>args</var> is specified, <var>name</var> is defined as a
+generic function for the service.
+<p>
+Example:
+<p>
+<lisp>
+(mel-define-service encoded-text-encode-string (string encoding)
+  "Encode STRING as encoded-text using ENCODING.
+ENCODING must be string.")
+</lisp>
+</defmacro>
 
 
 <h1> Header \e$B$N\e(B network \e$BI=8=\e(B
@@ -747,28 +847,49 @@ FLIM \e$B$O$3$l$i$rId9f2=!&I|9f2=$9$k5!G=$rDs6!$7$^$9!#\e(B
 <h2> Header \e$B$NId9f2=!&I|9f2=\e(B
 <node> Header encoder/decoder
 <p>
-<defun name="eword-encode-header">
-             <opts> code-conversion separator
+<defun name="eword-decode-header">
+           <opts> code-conversion separator
 <p>
-Decode MIME encoded-words in header fields.
+Header \e$BCf$N\e(B encoded-word \e$B$rI|9f$9$k!#\e(B
 <p>
-If <var>code-conversion</var> is <code>nil</code>, it decodes only
-encoded-words.  If it is mime-charset, it decodes non-ASCII bit
-patterns as the mime-charset.  Otherwise it decodes non-ASCII bit
-patterns as the default-mime-charset.
+\e$B$b$7\e(B <var>code-conversion</var> \e$B$,\e(B <code>nil</code> \e$B$J$i!"\e(Bencoded-word 
+\e$B$@$1$,I|9f$5$l$k!#$b$7!"\e(B<var>code-conversion</var> \e$B$,\e(B <dref>MIME
+charset</dref> \e$B$J$i!"Hs\e(B ASCII bit patterns \e$B$O$=$N\e(B MIME charset \e$B$H$7$F\e(B
+\e$BI|9f$5$l$k!#$3$l0J30$N>l9g!"Hs\e(B ASCII bit patterns \e$B$O\e(B
+<code>default-mime-charset</code>. \e$B$H$7$FI|9f$5$l$k!#\e(B<cf node="entity
+formatting">
 <p>
-If <var>separator</var> is not nil, it is used as header separator.
+\e$B$b$7\e(B <var>separator</var> \e$B$,\e(B <code>nil</code> \e$B$G$J$1$l$P!"$=$NCM$,\e(B
+header separator \e$B$H$7$FMQ$$$i$l$k!#\e(B
 </defun>
 
 <defun name="eword-encode-header">
-             <opts> code-conversion
+           <opts> code-conversion
 <p>
-Encode header fields to network representation, such as MIME
-encoded-word.
+Header \e$B$r\e(B network \e$BI=8=$KId9f2=$9$k!#\e(B
 <p>
-It refer variable <code>eword-field-encoding-method-alist</code>.
+\e$B3F\e(B field \e$B$O\e(B <code>eword-field-encoding-method-alist</code> \e$B$G;XDj$5$l\e(B
+\e$B$?J}<0$GId9f2=$5$l$k!#\e(B
 </defun>
 
+<defvar name="eword-field-encoding-method-alist">
+<p>
+Association list to specify field encoding method.  Each element looks
+like (FIELD . METHOD).
+<p>
+If METHOD is <code>mime</code>, the FIELD will be encoded into MIME
+format (encoded-word).
+<p>
+If METHOD is <code>nil</code>, the FIELD will not be encoded.
+<p>
+If METHOD is a MIME charset, the FIELD will be encoded as the charset
+when it must be convert into network-code.
+<p>
+Otherwise the FIELD will be encoded as variable
+<code>default-mime-charset</code> when it must be convert into
+network-code.
+</defvar>
+
 
 <h1> \e$B0lHL@_Dj\e(B
 <node> custom
@@ -780,14 +901,6 @@ MIME \e$B4XO"5!G=$K4X$9$k\e(B group.
 <code>mail</code> \e$B$H\e(B <code>news</code> \e$B$KB0$9$k!#\e(B
 </define>
 
-<defvar name="default-mime-charset">
-<p>
-\e$BE,@Z$J\e(B <dref>MIME charset</dref> \e$B$,8+$D$+$i$J$+$C$?>l9g$KMQ$$$i$l$k\e(B
-MIME charset.
-<p>
-\e$BK\Mh$O\e(B APEL \e$B$NJQ?t$G$"$k!#\e(B
-</defvar>
-
 <defvar name="mime-temp-directory">
 <p>
 MIME \e$B5!G=$K4X$9$k<BAu$,0l;~E*$K;HMQ$9$k\e(B file \e$B$r:n@.$9$k\e(B directory.