update.
[elisp/flim.git] / mime-en.texi
index a95ec3d..e04f744 100644 (file)
@@ -1,18 +1,19 @@
 \input texinfo.tex
+@c Generated automatically from mime-en.sgml by sinfo 3.7.
 @setfilename mime-en.info
-@settitle{FLIM 1.9 Manual about MIME Features}
+@settitle{FLIM 1.14 Reference Manual about MIME Features}
 @titlepage
-@title FLIM 1.9 Manual about MIME Features
+@title FLIM 1.14 Reference Manual about MIME Features
 @author MORIOKA Tomohiko <morioka@@jaist.ac.jp>
-@subtitle 1998/07/01
+@subtitle 1999-01-27
 @end titlepage
 @node Top, Introduction, (dir), (dir)
-@top FLIM 1.9 Manual about MIME Features
+@top FLIM 1.14 Reference Manual about MIME Features
 
 @ifinfo
 
-This file documents MIME features of FLIM, a Internet message
-parsing/encoding library for GNU Emacs.
+This file documents MIME features of FLIM, a fundamental library to
+process Internet Messages for GNU Emacsen.
 @end ifinfo
 
 @menu
@@ -24,10 +25,10 @@ parsing/encoding library for GNU Emacs.
 * Content-Transfer-Encoding::   Encoding Method
 * encoded-word::                Network representation of header
 * custom::                      Various Customization
-* Appendix::                    
-* Concept Index::               
-* Function Index::              
-* Variable Index::              
+* Appendix::
+* Concept Index::
+* Function Index::
+* Variable Index::
 @end menu
 
 @node Introduction, How to use, Top, Top
@@ -50,8 +51,6 @@ Please eval following to use MIME features provided by FLIM:
 
 @node Entity, Content-Type, How to use, Top
 @chapter Message and Entity
-@cindex node-id
-@cindex entity-number
 @cindex mime-entity
 @cindex entity
 
@@ -61,53 +60,24 @@ message or one of the parts in the body of a multipart entity.'  In this
 document, the term @strong{entity} indicates all of header fields and
 body.@refill
 
-The definition of RFC 2045 indicates that a MIME message is a tree.  An
-message is a tree, each node is an entity, like following figure.
-Namely MIME extends message to tree structure.@refill
-
-FLIM uses @strong{mime-entity} structure to represent information of
-entity.  In this document, it is called simply `mime-entity'.@refill
-
-\e$BA0=R$N$h$&$K!"\e(Bmessage \e$BCf$N3F\e(B entity \e$B$OLZ$N@a$KEv$?$j$^$9$,!"$3$NLZ$K$O\e(B
-\e$B?<$5$HF1$8?<$5$NCf$N=gHV$K=>$C$FHV9f$,IU$1$k$3$H$,$G$-$^$9!#B($A!"\e(B
-@example
-
-                              \e$B(#(!(!(!($\e(B
-                              \e$B("\e(B  nil \e$B("\e(B
-                              \e$B(&(!(((!(%\e(B
-              \e$B(#(!(!(!(!(!(!(!(!(!(+(!(!(!(!(!(!(!(!(!($\e(B
-            \e$B(#(*($\e(B              \e$B(#(*($\e(B              \e$B(#(*($\e(B
-            \e$B("#0("\e(B              \e$B("#1("\e(B              \e$B("#2("\e(B
-            \e$B(&(((%\e(B              \e$B(&(((%\e(B              \e$B(&(((%\e(B
-              \e$B("\e(B        \e$B(#(!(!(!(!(+(!(!(!(!($\e(B        \e$B("\e(B
-          \e$B(#(!(*(!($(#(!(*(!($(#(!(*(!($(#(!(*(!($(#(!(*(!($\e(B
-          \e$B("\e(B \e$B#0\e(B.\e$B#0("("\e(B \e$B#1\e(B.\e$B#0("("\e(B \e$B#1\e(B.\e$B#1("("\e(B \e$B#1\e(B.\e$B#2("("\e(B \e$B#2\e(B.\e$B#0("\e(B
-          \e$B(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%(&(!(!(!(%\e(B
-@end example
-
-@noindent
-\e$B$N$h$&$K?<$5\e(B n \e$B$N@a$K$OD9$5\e(B n \e$B$N@0?tNs$N@aHV9f$,?6$l$^$9!#$3$l\e(B
-\e$B$r\e(B @strong{entity-number} \e$B$H8F$S$^$9!#\e(Bentity-number \e$B$O\e(B S \e$B<0$H\e(B
-\e$B$7$F$O\e(B @code{(1 2 3)} \e$B$N$h$&$J@0?t$N%j%9%H$H$7$FI=8=$5$l$^$9!#\e(B
+The definition of RFC 2045 indicates that a MIME message is a tree, and
+each node of the tree is an entity.  Namely MIME extends message to tree
+structure.@refill
 
-mime-entity \e$B$G$O!"$3$l$HF1MM$N\e(B @strong{node-id} \e$B$rMQ$$$^$9!#\e(Bnode-id \e$B$O$A$g\e(B
-\e$B$&$I\e(B entity-number \e$B$r5U$K$7$?%j%9%H$G!"\e(Bentity-number 1.2.3 \e$B$KBP1~$9$k\e(B 
-node-id \e$B$O\e(B @code{(3 2 1)} \e$B$G$9!#\e(B@refill
-
-\e$BA0=R$N$h$&$K!"\e(BMIME message \e$B$O\e(B entity \e$B$rC10L$H$7$?LZ9=B$$K$J$C$F$$$k$N$G!"\e(B
-\e$B$3$N:,$G$"$k\e(B message \e$BA4BN$b\e(B mime-entity \e$B$GI=8=$9$k$3$H$,$G$-!"\e(Bbuffer
-local \e$BJQ?t\e(B @code{mime-message-structure} \e$B$K3JG<$9$k$3$H$K$7$^$9!#\e(B
-\e$B$=$7$F!"\e(Bentity-number \e$B$d\e(B node-id \e$B$rMQ$$$k$3$H$G\e(B 
-@code{mime-message-structure} \e$B$K$*$1$k\e(B entity \e$B$NAjBPE*$J0LCV4X78$r\e(B
-\e$B07$&$3$H$,$G$-$^$9!#\e(B
+FLIM uses @strong{mime-entity} structure to represent
+information of entity.  In this document, it is called simply
+`mime-entity'.
 
 
 @menu
 * Entity creation::             Functions to create mime-entity
 * Entity hierarchy::            Features about message tree
+* Entity Search::               Find Entity
 * Entity Attributes::           Functions about attributes of mime-entity
 * Entity-header::               Information of entity header
+* entity formatting::           Text presentation of entity
 * Entity-content::              Contents of Entity
+* Entity-network-representation::  Network representation of Entity
 * Entity buffer::               Entity as buffer representation
 * mm-backend::                  Entity representations and implementations
 @end menu
@@ -140,8 +110,55 @@ mime-entity. (cf. @ref{mm-backend}) Default value is @var{buffer}.
 
 
 
-@node Entity hierarchy, Entity Attributes, Entity creation, Entity
+@node Entity hierarchy, Entity Search, Entity creation, Entity
 @section Features about message tree
+@cindex node-id
+@cindex entity-number
+@cindex message
+@cindex root-entity
+
+Structure of a MIME message is tree.@refill
+
+In the tree, root node is the entity indicates all of the message.  In
+this document, it is called @strong{root-entity} or @strong{message}.
+In FLIM, it is indicated by buffer local variable
+@code{mime-message-structure}.@refill
+
+Each entity except root-entity has a parent.  An entity may have
+children.  We can indicate an entity by relative position from a base
+entity, based on the parent-child relationship.@refill
+
+In addition, we can indicate an entity by absolute position of the
+message.@refill
+
+Each entity, which is a node of the tree, can be numbered by
+depth and left-to-right order of the depth.
+@example
+
+                              +-------+
+                              |  nil  |
+                              +---+---+
+              +-------------------+-------------------+
+            +-+-+               +-+-+               +-+-+
+            | 0 |               | 1 |               | 2 |
+            +-+-+               +-+-+               +-+-+
+              |         +---------+---------+         |
+           +--+--+   +--+--+   +--+--+   +--+--+   +--+--+
+           | 0.0 |   | 1.0 |   | 1.1 |   | 1.2 |   | 2.0 |
+           +-----+   +-----+   +-----+   +-----+   +-----+
+@end example
+
+Namely, if depth of a node is n, the node has a node-number, which is
+consists of n integers.  In this document, it is called
+@strong{entity-number}.  An entity-number is represented by list of
+integer, like @code{(1 2 3)}.@refill
+
+mime-entity has also @strong{node-id}.  A node-id is represented by
+reversed list of entity-number.  For example, node-id corresponding with
+1.2.3 is @code{(3 2 1)}.@refill
+
+Each entity can be indicated by entity-number or node-id in
+@code{mime-message-structure}.
 
 @defvar mime-message-structure
 
@@ -182,6 +199,10 @@ Return entity-number of @var{entity}.
 @end defun
 
 
+
+@node Entity Search, Entity Attributes, Entity hierarchy, Entity
+@section Find Entity
+
 @defun mime-find-entity-from-number entity-number  &optional  message
 
 Return entity from @var{entity-number} in @var{message}.@refill
@@ -200,8 +221,17 @@ used.
 @end defun
 
 
+@defun mime-find-entity-from-content-id cid  &optional  message
+
+Return entity from @var{cid} in @var{message}.@refill
+
+If @var{message} is not specified, @code{mime-message-structure} is
+used.
+@end defun
+
+
 
-@node Entity Attributes, Entity-header, Entity hierarchy, Entity
+@node Entity Attributes, Entity-header, Entity Search, Entity
 @section Functions about attributes of mime-entity
 
 @defun mime-entity-content-type entity
@@ -242,7 +272,7 @@ code-converted.
 
 
 
-@node Entity-header, Entity-content, Entity Attributes, Entity
+@node Entity-header, entity formatting, Entity Attributes, Entity
 @section Information of entity header
 
 @defun mime-fetch-field field-name  &optional  entity
@@ -280,7 +310,11 @@ If @var{field-name} field is not found, this function returns
 @end defun
 
 
-@defun mime-insert-decoded-header entity  &optional  invisible-fields visible-fields
+
+@node entity formatting, Entity-content, Entity-header, Entity
+@section Text presentation of entity
+
+@defun mime-insert-header entity  &optional  invisible-fields visible-fields
 
 Insert before point a decoded contents of header of @var{entity}.@refill
 
@@ -290,12 +324,36 @@ hide.@refill
 
 If a field-name is matched with some elements of @var{invisible-fields}
 and matched with none of @var{visible-fields}, this function don't
-insert the field.
+insert the field.@refill
+
+Each encoded-word (@ref{encoded-word}) in the header is decoded.  ``Raw
+non us-ascii characters'' are also decoded as
+@code{default-mime-charset}.
 @end defun
 
 
+@defun mime-insert-text-content entity
+
+Insert before point a contents of @var{entity} as text entity.@refill
+
+Contents of the @var{entity} are decoded as MIME charset (@ref{MIME charset}).  If the @var{entity} does not have charset parameter of
+Content-Type field, @code{default-mime-charset} is used as default
+value.
+@end defun
+
+
+@defvar default-mime-charset
 
-@node Entity-content, Entity buffer, Entity-header, Entity
+Symbol to indicate default value of MIME charset (@ref{MIME charset}).@refill
+
+It is used when MIME charset is not specified.@refill
+
+It is originally variable of APEL.
+@end defvar
+
+
+
+@node Entity-content, Entity-network-representation, entity formatting, Entity
 @section Contents of Entity
 
 @defun mime-entity-content entity
@@ -304,12 +362,28 @@ Return content of @var{entity} as byte sequence.
 @end defun
 
 
+@defun mime-insert-entity-content entity
+
+Insert content of @var{entity} at point.
+@end defun
+
+
 @defun mime-write-entity-content entity filename
 
 Write content of @var{entity} into @var{filename}.
 @end defun
 
 
+
+@node Entity-network-representation, Entity buffer, Entity-content, Entity
+@section Network representation of Entity
+
+@defun mime-insert-entity entity
+
+Insert header and body of @var{entity} at point.
+@end defun
+
+
 @defun mime-write-entity entity filename
 
 Write representation of @var{entity} into @var{filename}.
@@ -323,7 +397,7 @@ Write body of @var{entity} into @var{filename}.
 
 
 
-@node Entity buffer, mm-backend, Entity-content, Entity
+@node Entity buffer, mm-backend, Entity-network-representation, Entity
 @section Entity as buffer representation
 
 @defun mime-entity-buffer entity
@@ -378,33 +452,30 @@ contains @var{entity}.
 @node mm-backend,  , Entity buffer, Entity
 @section Entity representations and implementations
 @cindex mm-backend
-@cindex entity \e$B=hM}\e(B method
+@cindex entity processing method
 @cindex representation-type
 
-Entity \e$B$OCj>]2=$5$l$?%G!<%?I=8=$G!"<B:]$N%G!<%?I=8=$H$7$F$OMQES$K1~$8$F\e(B
-\e$B$5$^$6$^$J$b$N$,MxMQ$G$-$k$h$&$K@_7W$5$l$F$$$^$9!#\e(B@refill
+Entity is an abstraction.  It is designed to use various data
+representations for their purposes.@refill
 
-\e$B$3$3$G!"\e(Bentity \e$B$,$I$&$$$&<oN`$NI=8=$r9T$C$F$$$k$+$r<($9$N$,\e(B
-@strong{representation-type} \e$B$G!"\e(Bentity \e$B$r@8@.$9$k;~$K$O$3$l$r;XDj$7$^$9!#\e(B
-(cf. @ref{Entity Creation}) @refill
+Each entity has @strong{representation-type}.  It must be specified when
+an entity is created. (cf. @ref{Entity Creation}) @refill
 
-\e$BA0@a$^$G$K=R$Y$FMh$?\e(B entity \e$B$KBP$9$k=hM}$O!"\e(Bentity \e$B$KBP$7$F$=$N=hM}$r0M\e(B
-\e$BMj$9$k$3$H$K$h$C$F<B8=$5$l$F$$$^$9!#\e(BEntity \e$B$O<+J,$N\e(B representation-type 
-\e$B$rCN$C$F$*$j!"$=$N\e(B representation-type \e$B$K1~$8$F<B:]$N=hM}$r9T$&4X?t$r8F\e(B
-\e$B$S=P$7$^$9!#$3$N$h$&$J4X?t$r\e(B @strong{entity \e$B=hM}\e(Bmethod} \e$B$H8F$S$^$9!#$^$?!"\e(B
-representation-type \e$BKh$K$3$N$h$&$J4X?t$r$^$H$a$?$b$N$r\e(B 
-@strong{mm-backend} \e$B$H8F$S$^$9!#\e(B@refill
+Functions about entity are implemented by request processing to the
+entity.  Each entity knows its representation-type.  Each entity calls
+processing function corresponding with the representation-type.  Such
+kind of function is called @strong{entity processing method}.  A module,
+consists of them corresponding with a representation-type, is called
+@strong{mm-backend}.@refill
 
-mm-backend \e$B$O\e(B representation-type \e$B$NL>A0$N@hF,$K\e(B @code{mm} \e$B$H$$$&\e(B
-\e$B@\F,<-$rIU$1$?4X?tL>$+$i$J$k\e(B module \e$B$G!"$=$N\e(B module \e$BL>$OF1MM$K\e(B
-representation-type \e$B$NL>A0$N@hF,$K\e(B @code{mm} \e$B$rIU$1$?$b$N$K$J$C$F\e(B
-\e$B$$$^$9!#$3$N\e(B module \e$B$O\e(B representation-type \e$B$N\e(B entity \e$B$,:G=i$K@8@.$5$l$k\e(B
-\e$B;~$K<+F0E*$K\e(B require \e$B$5$l$^$9!#\e(B
+Module name of each mm-backend consists of the prefix @code{mm}
+and its representation-type.  The module is required automatically
+when its entity is created at first.
 
 
 @menu
 * Request for entity::          Message-passing for entity
-* mm-backend module::           How to make mm-backend
+* mm-backend module::           Definition of mm-backend
 @end menu
 
 @node Request for entity, mm-backend module, mm-backend, mm-backend
@@ -412,19 +483,49 @@ representation-type \e$B$NL>A0$N@hF,$K\e(B @code{mm} \e$B$rIU$1$?$b$N$K$J$C$F\e(B
 
 @defun mime-entity-send entity message  &rest  args
 
-@var{entity} \e$B$K\e(B @var{message} \e$B$rAw$k!#\e(B@refill
+Send @var{message} to @var{entity} with @var{args}, and return the
+result.@refill
 
-@var{args} \e$B$O\e(B @var{message} \e$B$N0z?t$G$"$k!#\e(B
+@var{args} is arguments of the @var{message}.
 @end defun
 
 
 
 @node mm-backend module,  , Request for entity, mm-backend
-@subsection How to make mm-backend
+@subsection Definition of mm-backend
+
+@defmac mm-define-backend type &optional  parents
+
+Define @var{type} as a mm-backend.@refill
+
+If @var{PARENTS} is specified, @var{type} inherits parents.  Each parent
+must be representation-type.@refill
+
+Example:@refill
+
+@lisp
+(mm-define-backend chao (generic))
+@end lisp
+@end defmac
 
-\e$B!J$9$_$^$;$s!#$=$N$&$A=q$-$^$9\e(B (^_^;\e$B!K\e(B@refill
 
-\e$B!J$H$j$"$($:!"\e(Bmm*.el \e$B$r;29M$K$7$F$/$@$5$$!K\e(B
+@defmac mm-define-method name args  &rest  body
+
+Define @var{name} as a method function of (nth 1 (car @var{args}))
+backend.@refill
+
+@var{args} is like an argument list of lambda, but (car @var{args}) must
+be specialized parameter.  (car (car @var{args})) is name of variable
+and (nth 1 (car @var{args})) is name of backend
+(representation-type).@refill
+
+Example:@refill
+
+@lisp
+(mm-define-method entity-cooked-p ((entity chao)) nil)
+@end lisp
+@end defmac
+
 
 
 @node Content-Type, Content-Disposition, Entity, Top
@@ -464,14 +565,14 @@ Content-Type field.
 @cindex subtype
 @cindex type
 
-Content-Type \e$BMs$N7A<0$O0J2<$N$h$&$KDj5A$5$l$F$$$^$9!'\e(B
+Format of Content-Type field is defined as follows:
 
 @quotation
 ``Content-Type'' ``:'' @strong{type} ``/''
 @strong{subtype} *( ``;'' @strong{parameter} )
 @end quotation
 
-\e$BNc$($P!"\e(B
+For example:
 
 @quotation
 @example
@@ -479,8 +580,6 @@ Content-Type: image/jpeg
 @end example
 @end quotation
 
-@noindent
-\e$B$d\e(B
 
 @quotation
 @example
@@ -488,18 +587,16 @@ Content-Type: text/plain; charset=iso-2022-jp
 @end example
 @end quotation
 
-@noindent
-\e$B$J$I$N$h$&$KMQ$$$i$l$^$9!#\e(B
-
-\e$B$3$3$G!"\e(B`type' \e$B$H\e(B `subtype' \e$B$O\e(B entity \e$B$N7A<0$r<($9$b$N$G!"N><T$rAm>N$7\e(B
-\e$B$F!"\e(B`media-type' \e$B$H8F$V$3$H$K$7$^$9!#>e5-$NNc$K$*$1$k\e(B `image/jpeg' \e$B$d\e(B
-`text/plain' \e$B$O\e(B media-type \e$B$N#1$D$G$9!#\e(B
+`type' and `subtype' indicate format of an entity.  In this document,
+pair of them is called `media-type'.  `image/jpeg' or `text/plain' is
+a media-type.
 
 @noindent
 @strong{[Memo]}
 @quotation
 
-Content-Type \e$BMs$N$J$$\e(B entity \e$B$O\e(B
+If an entity does not have Content-Type field, it is regarded as
+following:
 
 @quotation
 @example
@@ -508,7 +605,7 @@ Content-Type: text/plain; charset=us-ascii
 @end quotation
 
 @noindent
-\e$B$H$7$F2r<a$5$l$k!#\e(B(cf. @ref{us-ascii})
+(cf. @ref{us-ascii})
 @end quotation
 
 
@@ -518,22 +615,23 @@ Content-Type: text/plain; charset=us-ascii
 
 @deffn{Structure} mime-content-type
 
-Content-Type \e$BMs$N>pJs$r3JG<$9$k$?$a$N9=B$BN!#\e(B@refill
+Structure to store information of a Content-Type field.@refill
 
-\e$B$3$N9=B$BN$r;2>H$9$k$K$O\e(B @code{mime-content-type-\e$BMWAGL>\e(B} \e$B$H$$$&L>A0$N;2\e(B
-\e$B>H4X?t$rMQ$$$k!#\e(B@refill
+Applications should use reference functions
+@code{mime-content-type-SLOT} to refer information of the
+structure.@refill
 
-\e$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'\e(B
+Slots of the structure are following:
 
 @table @var
 @item primary-type
-media-type \e$B$N<g7?\e(B (symbol).
+primary type of media-type (symbol).
 
 @item subtype
-media-type \e$B$NI{7?\e(B (symbol).
+subtype of media-type (symbol).
 
 @item parameters
-Content-Type \e$BMs$N\e(B parameter (\e$BO"A[\e(B list).
+parameters of Content-Type field (association-list).
 
 @end table
 @end deffn
@@ -542,13 +640,13 @@ Content-Type \e$BMs$N\e(B parameter (\e$BO"A[\e(B list).
 @defun make-mime-content-type type subtype
           &optional  parameters
 
-content-type \e$B$N@8@.;R!#\e(B
+Constructor of content-type.
 @end defun
 
 
 @defun mime-content-type-parameter content-type parameter
 
-@var{content-type} \e$B$N\e(B @var{parameter} \e$B$NCM$rJV$9!#\e(B
+Return value of @var{parameter} of @var{content-type}.
 @end defun
 
 
@@ -558,15 +656,17 @@ content-type \e$B$N@8@.;R!#\e(B
 
 @defun mime-parse-Content-Type string
 
-@var{string} \e$B$r\e(B content-type \e$B$H$7$F2r@O$7$?7k2L$rJV$9!#\e(B
+Parse @var{string} as a field-body of Content-Type field, and return the
+result as mime-content-type (@ref{mime-content-type}) structure.
 @end defun
 
 
 @defun mime-read-Content-Type
 
-\e$B8=:_$N\e(B buffer \e$B$N\e(B Content-Type \e$BMs$rFI$_<h$j!"2r@O$7$?7k2L$rJV$9!#\e(B@refill
+Parse Content-Type field of the current buffer, and return the result as
+mime-content-type (@ref{mime-content-type}) structure.@refill
 
-Content-Type \e$BMs$,B8:_$7$J$$>l9g$O\e(B nil \e$B$rJV$9!#\e(B
+Return @code{nil} if Content-Type field is not found.
 @end defun
 
 
@@ -586,10 +686,11 @@ Return type/subtype string from @var{type} and @var{subtype}.
 @cindex mime-content-disposition
 @cindex RFC 2183
 @cindex Standards Track
-@cindex Content-Disposition \e$BMs\e(B
+@cindex Content-Disposition field
 
-@strong{Content-Disposition \e$BMs\e(B} \e$B$O\e(B entity \e$B$NI=<($d\e(B file \e$BL>$J$I\e(B
-\e$B$NB0@-$K$J$I$K4X$9$k>pJs$r5-=R$9$k$?$a$N$b$N$G$9!#\e(B
+@strong{Content-Disposition field} is an optional field to
+specify presentation of an entity or attributes of an entity, such as
+file name.
 
 
 @noindent
@@ -600,9 +701,9 @@ Information in Internet Messages: The Content-Disposition Header'',
 August 1997, Standards Track.
 @end quotation
 
-FLIM \e$B$O\e(B Content-Disposition \e$BMs$r9=J82r@O$9$k4X?t$H\e(B Content-Disposition 
-\e$BMs$N2r@O7k2L$r3JG<$9$k9=B$BN\e(B 
-@strong{mime-content-disposition} \e$B$rDs6!$7$^$9!#\e(B
+FLIM provides parser for Content-Disposition field and structure
+@strong{mime-content-disposition} to store information of
+Content-Disposition field.
 
 
 @menu
@@ -615,19 +716,21 @@ FLIM \e$B$O\e(B Content-Disposition \e$BMs$r9=J82r@O$9$k4X?t$H\e(B Content-Dispositi
 
 @deffn{Structure} mime-content-disposition
 
-Content-Disposition \e$BMs$N2r@O7k2L$r<}$a$k$?$a$N9=B$BN!#\e(B@refill
+Structure to store information of a Content-Disposition field.@refill
 
-\e$B$3$N9=B$BN$r;2>H$9$k$K$O\e(B @code{mime-content-disposition-\e$BMWAGL>\e(B} \e$B$H$$$&L>\e(B
-\e$BA0$N;2>H4X?t$rMQ$$$k!#\e(B@refill
+Applications should use reference functions
+@code{mime-content-disposition-SLOT} to refer information of the
+structure.@refill
 
-\e$B$3$N9=B$BN$NMWAG$O0J2<$NDL$j$G$"$k!'\e(B
+Slots of the structure are following:
 
 @table @var
 @item disposition-type
 disposition-type (symbol).
 
 @item parameters
-Content-Disposition \e$BMs$N\e(B parameter (\e$BO"A[\e(B list).
+parameters of Content-Disposition field
+(association-list).
 
 @end table
 @end deffn
@@ -635,13 +738,13 @@ Content-Disposition \e$BMs$N\e(B parameter (\e$BO"A[\e(B list).
 
 @defun mime-content-disposition-parameter content-disposition parameter
 
-@var{content-disposition} \e$B$N\e(B @var{parameter} \e$B$NCM$rJV$9!#\e(B
+Return value of @var{parameter} of @var{content-disposition}.
 @end defun
 
 
 @defun mime-content-disposition-filename content-disposition
 
-@var{content-disposition} \e$B$N\e(B filename \e$B$NCM$rJV$9!#\e(B
+Return filename of @var{content-disposition}.
 @end defun
 
 
@@ -651,64 +754,69 @@ Content-Disposition \e$BMs$N\e(B parameter (\e$BO"A[\e(B list).
 
 @defun mime-parse-Content-Disposition string
 
-@var{string} \e$B$r\e(B content-disposition \e$B$H$7$F2r@O$7$?7k2L$rJV$9!#\e(B
+Parse @var{string} as field-body of Content-Disposition field, and
+return the result as mime-content-disposition
+(@ref{mime-content-disposition}) structure.
 @end defun
 
 
 @defun mime-read-Content-Disposition
 
-\e$B8=:_$N\e(B buffer \e$B$N\e(B Content-Disposition \e$BMs$rFI$_<h$j!"2r@O$7$?7k2L$rJV$9!#\e(B
-@refill
+Parse Content-Disposition field of the current buffer, and return the
+result as mime-content-disposition (@ref{mime-content-disposition})
+structure.@refill
 
-Content-Disposition \e$BMs$,B8:_$7$J$$>l9g$O\e(B nil \e$B$rJV$9!#\e(B
+Return @code{nil} if Content-Disposition field is not found.
 @end defun
 
 
 
 @node Content-Transfer-Encoding, encoded-word, Content-Disposition, Top
 @chapter Encoding Method
-@cindex Content-Transfer-Encoding \e$BMs\e(B
+@cindex Content-Transfer-Encoding field
 
-@strong{Content-Transfer-Encoding \e$BMs\e(B} \e$B$O\e(B entity \e$B$NId9f2=K!$r5-=R$9$k$?$a\e(B
-\e$B$N$b$N$G$9!#\e(B@refill
+@strong{Content-Transfer-Encoding field} is a header field to indicate
+body encoding of a entity.@refill
 
-FLIM \e$B$G$O\e(B Content-Transfer-Encoding \e$BMs$r9=J82r@O$9$k4X?t$rDs6!$7$^$9!#$3\e(B
-\e$B$l$i$N4X?t$O\e(B Content-Transfer-Encoding \e$BMs$N>pJs$OJ8;zNs$GI=8=$7$^$9!#\e(B
-@refill
+FLIM provides parser functions for Content-Transfer-Encoding field.
+They represent information of Content-Transfer-Encoding field as
+string.@refill
 
-\e$B$^$?!"\e(BContent-Transfer-Encoding \e$B$K4p$E$$$FId9f2=!&I|9f2=$r9T$&4X?t$bDs\e(B
-\e$B6!$5$l$^$9!#\e(B
+In addition, FLIM provides encoder/decoder functions by
+Content-Transfer-Encoding.
 
 
 @menu
 * Content-Transfer-Encoding parser::  Parser
-* Region encoder/decoder::      Region encoding/decoding
-* String encoder/decoder::      String encoding/decoding
-* File encoder/decoder::        File encoding/decoding
+* encoder/decoder::             Encoder/decoder
+* Encoding information::        Other utilities
+* mel-backend::                 How to write encoder/decoder module
+* generic function for mel-backend::  How to add encoding/decoding service
 @end menu
 
-@node Content-Transfer-Encoding parser, Region encoder/decoder, Content-Transfer-Encoding, Content-Transfer-Encoding
+@node Content-Transfer-Encoding parser, encoder/decoder, Content-Transfer-Encoding, Content-Transfer-Encoding
 @section Parser
 
 @defun mime-parse-Content-Transfer-Encoding string
 
-@var{string} \e$B$r\e(B content-transfer-encoding \e$B$H$7$F2r@O$7$?7k2L$rJV$9!#\e(B
+Parse @var{string} as a field-body of Content-Transfer-Encoding field,
+and return the result.
 @end defun
 
 
 @defun mime-read-Content-Transfer-Encoding &optional default-encoding
 
-\e$B8=:_$N\e(B buffer \e$B$N\e(B Content-Transfer-Encoding \e$BMs$rFI$_<h$j!"2r@O$7$?7k2L$r\e(B
-\e$BJV$9!#\e(B@refill
+Parse Content-Transfer-Encoding field of the current buffer, and return
+the result.@refill
 
-Content-Transfer-Encoding \e$BMs$,B8:_$7$J$$>l9g$O\e(B@var{default-encoding} \e$B$r\e(B
-\e$BJV$9!#\e(B
+Return @var{default-encoding} if Content-Transfer-Encoding field is not
+found.  If it is not specified, @code{nil} is used as the default value.
 @end defun
 
 
 
-@node Region encoder/decoder, String encoder/decoder, Content-Transfer-Encoding parser, Content-Transfer-Encoding
-@section Region encoding/decoding
+@node encoder/decoder, Encoding information, Content-Transfer-Encoding parser, Content-Transfer-Encoding
+@section Encoder/decoder
 
 @defun mime-encode-region start end encoding
 
@@ -724,83 +832,124 @@ Decode region @var{start} to @var{end} of current buffer using
 @end defun
 
 
-@defvar mime-encoding-method-alist
-
-Alist of encoding vs. corresponding method to encode region.@refill
 
-Each element looks like @code{(STRING . FUNCTION)} or @code{(STRING
-. nil)}.  @var{string} is content-transfer-encoding.  @code{function} is
-region encoder and @code{nil} means not to encode.
-@end defvar
+@defun mime-decode-string string encoding
 
+Decode @var{string} which is encoded in @var{encoding}, and return the
+result.
+@end defun
 
-@defvar mime-decoding-method-alist
 
-Alist of encoding vs. corresponding method to decode region.@refill
 
-Each element looks like @code{(STRING . FUNCTION)} or @code{(STRING
-. nil)}.  @var{string} is content-transfer-encoding.  @code{function} is
-region decoder and @code{nil} means not to decode.
-@end defvar
+@defun mime-insert-encoded-file filename encoding
 
+Insert file @var{FILENAME} encoded by @var{ENCODING} format.
+@end defun
 
 
-@node String encoder/decoder, File encoder/decoder, Region encoder/decoder, Content-Transfer-Encoding
-@section String encoding/decoding
+@defun mime-write-decoded-region start end filename encoding
 
-@defun mime-decode-string string encoding
+Decode and write current region encoded by @var{encoding} into
+@var{filename}.@refill
 
-@var{string} \e$B$r\e(B @var{encoding} \e$B$H$7$FI|9f$7$?7k2L$rJV$7$^$9!#\e(B
+@var{start} and @var{end} are buffer positions.
 @end defun
 
 
-@defvar mime-string-decoding-method-alist
 
-Alist of encoding vs. corresponding method to decode string.@refill
+@node Encoding information, mel-backend, encoder/decoder, Content-Transfer-Encoding
+@section Other utilities
 
-Each element looks like @code{(STRING . FUNCTION)}.  STRING is
-content-transfer-encoding.  FUNCTION is string decoder.
-@end defvar
+@defun mime-encoding-list &optional  SERVICE
+
+Return list of Content-Transfer-Encoding.@refill
 
+If @var{service} is specified, it returns available list of
+Content-Transfer-Encoding for it.
+@end defun
 
 
-@node File encoder/decoder,  , String encoder/decoder, Content-Transfer-Encoding
-@section File encoding/decoding
+@defun mime-encoding-alist &optional  SERVICE
 
-@defun mime-insert-encoded-file filename encoding
+Return table of Content-Transfer-Encoding for completion.@refill
 
-Insert file @var{FILENAME} encoded by @var{ENCODING} format.
+If @var{service} is specified, it returns available list of
+Content-Transfer-Encoding for it.
 @end defun
 
 
-@defun mime-write-decoded-region start end filename encoding
 
-Decode and write current region encoded by @var{encoding} into
-@var{filename}.@refill
+@node mel-backend, generic function for mel-backend, Encoding information, Content-Transfer-Encoding
+@section How to write encoder/decoder module
 
-@var{start} and @var{end} are buffer positions.
-@end defun
+@defmac mel-define-method name args  &rest  body
 
+Define @var{name} as a method function of (nth 1 (car (last
+@var{args}))) backend.@refill
 
-@defvar mime-file-encoding-method-alist
+@var{args} is like an argument list of lambda, but (car (last
+@var{args})) must be specialized parameter.  (car (car (last
+@var{args}))) is name of variable and (nth 1 (car (last @var{args}))) is
+name of backend (encoding).@refill
 
-Alist of encoding vs. corresponding method to insert encoded
-file.@refill
+Example:@refill
 
-Each element looks like @code{(STRING . FUNCTION)}.  STRING is
-content-transfer-encoding.  FUNCTION is function to insert encoded file.
-@end defvar
+@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)
+      )))
+@end lisp
+@end defmac
 
 
-@defvar mime-file-decoding-method-alist
+@defmac mel-define-method-function spec function
 
-Alist of encoding vs. corresponding method to write decoded region to
-file.@refill
+Set @var{spec}'s function definition to @var{function}.@refill
 
-Each element looks like @code{(STRING . FUNCTION)}.  STRING is
-content-transfer-encoding.  FUNCTION is function to write decoded region
-to file.
-@end defvar
+First element of @var{spec} is service.@refill
+
+Rest of @var{args} is like an argument list of lambda, but (car (last
+@var{args})) must be specialized parameter.  (car (car (last
+@var{args}))) is name of variable and (nth 1 (car (last @var{args}))) is
+name of backend (encoding).@refill
+
+Example:@refill
+
+@lisp
+(mel-define-method-function (mime-encode-string string (nil "base64"))
+                           'encode-base64-string)
+@end lisp
+@end defmac
+
+
+
+@node generic function for mel-backend,  , mel-backend, Content-Transfer-Encoding
+@section How to add encoding/decoding service
+
+@defmac mel-define-service name &optional  args doc-string
+
+Define @var{name} as a service for Content-Transfer-Encodings.@refill
+
+If @var{args} is specified, @var{name} is defined as a generic function
+for the service.@refill
+
+Example:@refill
+
+@lisp
+(mel-define-service encoded-text-encode-string (string encoding)
+  "Encode STRING as encoded-text using ENCODING.
+ENCODING must be string.")
+@end lisp
+@end defmac
 
 
 
@@ -808,10 +957,11 @@ to file.
 @chapter Network representation of header
 @cindex RFC 2047
 @cindex Standards Track
+@cindex encoded-word
 @cindex RFC 2047
 
-encoded-word \e$B$O\e(B header \e$B$GHs\e(B ASCII (@ref{ASCII}) \e$BJ8;z$rI=8=$9$k$?$a$N7A<0\e(B
-\e$B$G!"\e(B@strong{RFC 2047} \e$B$GDj5A$5$l$F$$$^$9!#\e(B@refill
+@strong{RFC 2047} defines the @strong{encoded-word} which is a format to
+represent non-ASCII (@ref{ASCII}) characters in a header.@refill
 
 
 @noindent
@@ -822,10 +972,14 @@ Message Header Extensions for Non-ASCII Text'', November 1996, Standards
 Track (obsolete RFC 1521,1522,1590).
 @end quotation
 
-\e$B$^$?!"9T57$N0-$$$3$H$@$H8@$($^$9$,!"\e(Bencoded-word \e$B$rMQ$$$:$KHs\e(B ASCII
-(@ref{ASCII}) \e$BJ8;z$r\e(B header \e$B$KF~$l$?5-;v$bB8:_$7$^$9!#\e(B@refill
+The encoded-word is the only valid format to represent non-ASCII
+(@ref{ASCII}) characters in a header, but there are also invalid styles.
+Such kinds of evil messages represent non-ASCII (@ref{ASCII}) characters
+in headers without encoded-words (it is called "raw" non-ASCII
+(@ref{ASCII}) characters).@refill
 
-FLIM \e$B$O$3$l$i$rId9f2=!&I|9f2=$9$k5!G=$rDs6!$7$^$9!#\e(B
+FLIM provides encoding/decoding features of both encoded-word and
+invalid "raw" non-ASCII (@ref{ASCII}) characters.
 
 
 @menu
@@ -835,16 +989,17 @@ FLIM \e$B$O$3$l$i$rId9f2=!&I|9f2=$9$k5!G=$rDs6!$7$^$9!#\e(B
 @node Header encoder/decoder,  , encoded-word, encoded-word
 @section Header encoding/decoding
 
-@defun eword-encode-header &optional  code-conversion separator
+@defun eword-decode-header &optional  code-conversion separator
 
 Decode MIME encoded-words in header fields.@refill
 
-If @var{code-conversion} is @code{nil}, 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.@refill
+If @var{code-conversion} is @code{nil}, only encoded-words are decoded.
+If @var{code-conversion} is a MIME charset (@ref{MIME charset}),
+non-ASCII bit patterns are decoded as the MIME charset.  Otherwise
+non-ASCII bit patterns are decoded as the
+@code{default-mime-charset}. (cf. @ref{entity formatting}) @refill
 
-If @var{separator} is not nil, it is used as header separator.
+If @var{separator} is not @code{nil}, it is used as header separator.
 @end defun
 
 
@@ -853,41 +1008,39 @@ If @var{separator} is not nil, it is used as header separator.
 Encode header fields to network representation, such as MIME
 encoded-word.@refill
 
-It refer variable @code{eword-field-encoding-method-alist}.
+Each field is encoded as corresponding method specified by variable
+@code{mime-field-encoding-method-alist}.
 @end defun
 
 
+@defvar mime-field-encoding-method-alist
 
-@node custom, Appendix, encoded-word, Top
-@chapter Various Customization
-
-@deffn{group} mime
-
-MIME \e$B4XO"5!G=$K4X$9$k\e(B group.@refill
-
-@code{mail} \e$B$H\e(B @code{news} \e$B$KB0$9$k!#\e(B
-@end deffn
+Association list to specify field encoding method.  Each element looks
+like (FIELD . METHOD).@refill
 
+If METHOD is @code{mime}, the FIELD will be encoded into MIME format
+(encoded-word).@refill
 
-@defvar default-mime-charset
+If METHOD is @code{nil}, the FIELD will not be encoded.@refill
 
-\e$BE,@Z$J\e(B MIME charset (@ref{MIME charset}) \e$B$,8+$D$+$i$J$+$C$?>l9g$KMQ$$$i\e(B
-\e$B$l$k\e(BMIME charset.@refill
+If METHOD is a MIME charset, the FIELD will be encoded as the charset
+when it must be convert into network-code.@refill
 
-\e$BK\Mh$O\e(B APEL \e$B$NJQ?t$G$"$k!#\e(B
+Otherwise the FIELD will be encoded as variable
+@code{default-mime-charset} when it must be convert into network-code.
 @end defvar
 
 
-@defvar mime-temp-directory
 
-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.@refill
+@node custom, Appendix, encoded-word, Top
+@chapter Various Customization
+
+@deffn{group} mime
 
-\e$B4D6-JQ?t\e(B @code{MIME_TMP_DIR}, @code{TM_TMP_DIR}, @code{TMPDIR},
-@code{TMP} \e$B$b$7$/$O\e(B @code{TEMP} \e$B$,@_Dj$5$l$F$$$?>l9g!"$=$l$r=i4|CM$H$7$F\e(B
-\e$BMQ$$$k!#2?$b@_Dj$5$l$F$$$J$$>l9g!"\e(B@code{"/tmp/"} \e$B$rMQ$$$k!#\e(B
-@end defvar
+The group associated with functions related to MIME.@refill
 
+It belongs to @code{mail} and @code{news}.
+@end deffn
 
 
 @node Appendix, Concept Index, custom, Top
@@ -1333,13 +1486,13 @@ interpreted as us-ascii.
 @cindex good bug report
 
 If you write bug-reports and/or suggestions for improvement, please
-send them to the tm Mailing List:
+send them to the EMACS-MIME Mailing List:
 
 @itemize @bullet
 @item
- Japanese <bug-tm-ja@@chamonix.jaist.ac.jp>
+ English <emacs-mime-en@@m17n.org>
 @item
- English <bug-tm-en@@chamonix.jaist.ac.jp>
+ Japanese <emacs-mime-ja@@m17n.org>
 @end itemize
 
 
@@ -1356,17 +1509,17 @@ is very important. (cf. @ref{(emacs)Bugs}) @refill
 Bug may not appear only your environment, but also in a lot of
 environment (otherwise it might not bug).  Therefor if you send mail
 to author directly, we must write a lot of mails.  So please send mail
-to address for tm bugs instead of author.
+to address for EMACS-MIME Mailing List instead of author.
 
-Via the tm ML, you can report FLIM bugs, obtain the latest release of
-FLIM, and discuss future enhancements to FLIM.  To join the tm ML,
-send empty e-mail to:
+Via the EMACS-MIME ML, you can report FLIM bugs, obtain the latest
+release of FLIM, and discuss future enhancements to FLIM.  To join the
+EMACS-MIME ML, send an empty e-mail to:
 
 @itemize @bullet
 @item
- Japanese <tm-ja-help@@chamonix.jaist.ac.jp>
+ English  <emacs-mime-en-ctl@@m17n.org>
 @item
- English  <tm-en-help@@chamonix.jaist.ac.jp>
+ Japanese <emacs-mime-ja-ctl@@m17n.org>
 @end itemize
 
 
@@ -1374,40 +1527,39 @@ send empty e-mail to:
 @node CVS, History, Bug report, Appendix
 @section CVS based development
 
-FLIM \e$B$N\e(B file \e$B$O\e(B CVS \e$B$r;H$C$F4IM}$5$l$F$$$^$9!#$3$N$?$a!"0J2<$NJ}K!$G:G\e(B
-\e$B?7$N\e(B FLIM \e$B$rF~<j$9$k$3$H$,$G$-$^$9!'\e(B
+Files in FLIM are managed under CVS. Therefore you can obtain the
+newest FLIM by the following method.
 
 @example
 (0) cvs login
 
-    % cvs -d :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root \
-       login
+    % cvs -d :pserver:anonymous@@cvs.m17n.org:/cvs/root login
 
     CVS password: [CR] # NULL string
 
 (1) checkout
 
-    % cvs -d :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root \
+    % cvs -d :pserver:anonymous@@cvs.m17n.org:/cvs/root checkout
        checkout [-r TAG] flim
 @end example
 
 
-CVS \e$B$rMQ$$$?3+H/$K;22C$7$?$$J}$O\e(B
+If you would like to join CVS based development, please send mail to
 
 @itemize @bullet
 @item
- <cvs@@chamonix.jaist.ac.jp>
+ <cvs@@cvs.m17n.org>
 @end itemize
 
 @noindent
-\e$B$^$G!"\e(Baccount \e$BL>$H\e(B UNIX \e$B$N\e(B passwd \e$B$HF1$87A<0$N\e(B crypt \e$B2=$5$l$?\e(B password
-\e$B$r1h$($F8fO"Mm$/$@$5$$!#\e(B
+with your account name and your public key for ssh.
+cvsroot is :ext:cvs@@cvs.m17n.org:/cvs/root.
 
 
 @node History,  , CVS, Appendix
 @section History of FLIM
 
-FLIM \e$B$N\e(B code \e$B$N:G8E$NItJ,$O\e(B \e$B1]JB\e(B \e$B;LCR\e(B \e$B;a$,=q$$$?\e(B @file{mime.el}\e$B$K5/8;$7\e(B
+FLIM \e$B$N\e(B code \e$B$N:G8E$NItJ,$O\e(B \e$B1]JB\e(B \e$B;LCR\e(B \e$B;a$,=q$$$?\e(B @file{mime.el} \e$B$K5/8;$7\e(B
 \e$B$^$9!#$3$N>.$5$J\e(B program \e$B$O\e(B Nemacs \e$B$GF0:n$9$k\e(B iso-2022-jp \e$B$N\e(B B-encoding 
 \e$B@lMQ$N\e(B encoded-word \e$B$NI|9f2=%W%m%0%i%`$G$7$?!#\e(B@refill
 
@@ -1451,7 +1603,7 @@ tm \e$B$G$O8e$K!"<i2,\e(B \e$BCNI'\e(B \e$B$K$h$C$F\e(B @file{tiny-mime.el} \e$B$N:F<BA
 
 \e$B8e$K!"\e(BAPEL \e$B$+$i\e(B @file{std11.el} \e$B$,0\$5$l!"$^$?!"\e(B@file{mailcap.el},
 @file{eword-decode.el} \e$B$*$h$S\e(B @file{eword-encode.el} \e$B$,\e(B SEMI \e$B$+$i0\$5$l!"\e(B
-package \e$B$NL>A0$,\e(B FLIM\e$B$H$J$j$^$9!#\e(B@refill
+package \e$B$NL>A0$,\e(B FLIM \e$B$H$J$j$^$9!#\e(B@refill
 
 \e$B$3$ND>A0$+$iEDCf\e(B \e$BE/\e(B \e$B;a$,$h$j\e(B RFC \e$B$KCi<B$J<BAu$r=q$-;O$a!"$3$l$O!"8=:_!"\e(B
 FLIM \e$B$N;^$G$"$k\e(B ``FLIM-FLAM'' \e$B$H$J$C$F$$$^$9!#\e(B