2 @c Generated automatically from mime-en.sgml by sinfo 3.7.
3 @setfilename mime-en.info
4 @settitle{FLIM 1.14 Reference Manual about MIME Features}
6 @title FLIM 1.14 Reference Manual about MIME Features
7 @author MORIOKA Tomohiko <morioka@@jaist.ac.jp>
10 @node Top, Introduction, (dir), (dir)
11 @top FLIM 1.14 Reference Manual about MIME Features
15 This file documents MIME features of FLIM, a fundamental library to
16 process Internet Messages for GNU Emacsen.
20 * Introduction:: What is FLIM?
21 * How to use:: How to use MIME features
22 * Entity:: Message and Entity
23 * Content-Type:: Information of Content-Type field
24 * Content-Disposition:: Information of Content-Disposition field
25 * Content-Transfer-Encoding:: Encoding Method
26 * encoded-word:: Network representation of header
27 * custom:: Various Customization
34 @node Introduction, How to use, Top, Top
35 @chapter What is FLIM?
37 FLIM is a library to provide basic features about message
38 representation or encoding.
41 @node How to use, Entity, Introduction, Top
42 @chapter How to use MIME features
44 Please eval following to use MIME features provided by FLIM:
52 @node Entity, Content-Type, How to use, Top
53 @chapter Message and Entity
57 According to RFC 2045 (@ref{RFC 2045}), `The term ``entity'', refers
58 specifically to the MIME-defined header fields and contents of either a
59 message or one of the parts in the body of a multipart entity.' In this
60 document, the term @strong{entity} indicates all of header fields and
63 The definition of RFC 2045 indicates that a MIME message is a tree, and
64 each node of the tree is an entity. Namely MIME extends message to tree
67 FLIM uses @strong{mime-entity} structure to represent
68 information of entity. In this document, it is called simply
73 * Entity creation:: Functions to create mime-entity
74 * Entity hierarchy:: Features about message tree
75 * Entity Search:: Find Entity
76 * Entity Attributes:: Functions about attributes of mime-entity
77 * Entity-header:: Information of entity header
78 * entity formatting:: Text presentation of entity
79 * Entity-content:: Contents of Entity
80 * Entity-network-representation:: Network representation of Entity
81 * Entity buffer:: Entity as buffer representation
82 * mm-backend:: Entity representations and implementations
85 @node Entity creation, Entity hierarchy, Entity, Entity
86 @section Functions to create mime-entity
88 @defun mime-open-entity &optional type location
90 Open an entity and return it.@refill
92 @var{type} is representation-type. (cf. @ref{mm-backend}) @refill
94 @var{location} is location of entity. Specification of it is depended
95 on representation-type.
99 @defun mime-parse-buffer &optional buffer type
101 Parse @var{buffer} as message, and set the result to buffer local
102 variable @code{mime-message-structure} of @var{buffer} as
105 If @var{buffer} is omitted, current buffer is used.@refill
107 @var{type} is representation-type of created
108 mime-entity. (cf. @ref{mm-backend}) Default value is @var{buffer}.
113 @node Entity hierarchy, Entity Search, Entity creation, Entity
114 @section Features about message tree
116 @cindex entity-number
120 Structure of a MIME message is tree.@refill
122 In the tree, root node is the entity indicates all of the message. In
123 this document, it is called @strong{root-entity} or @strong{message}.
124 In FLIM, it is indicated by buffer local variable
125 @code{mime-message-structure}.@refill
127 Each entity except root-entity has a parent. An entity may have
128 children. We can indicate an entity by relative position from a base
129 entity, based on the parent-child relationship.@refill
131 In addition, we can indicate an entity by absolute position of the
134 Each entity, which is a node of the tree, can be numbered by
135 depth and left-to-right order of the depth.
141 +-------------------+-------------------+
145 | +---------+---------+ |
146 +--+--+ +--+--+ +--+--+ +--+--+ +--+--+
147 | 0.0 | | 1.0 | | 1.1 | | 1.2 | | 2.0 |
148 +-----+ +-----+ +-----+ +-----+ +-----+
151 Namely, if depth of a node is n, the node has a node-number, which is
152 consists of n integers. In this document, it is called
153 @strong{entity-number}. An entity-number is represented by list of
154 integer, like @code{(1 2 3)}.@refill
156 mime-entity has also @strong{node-id}. A node-id is represented by
157 reversed list of entity-number. For example, node-id corresponding with
158 1.2.3 is @code{(3 2 1)}.@refill
160 Each entity can be indicated by entity-number or node-id in
161 @code{mime-message-structure}.
163 @defvar mime-message-structure
165 Buffer local variable to store mime-entity structure of message.
169 @defun mime-entity-children entity
171 Return list of entities included in the @var{entity}.
175 @defun mime-entity-parent entity &optional message
177 Return parent entity of the @var{entity}.@refill
179 If @var{message} is specified, it is regarded as root instead of
180 @code{mime-message-structure}.
184 @defun mime-root-entity-p entity
186 Return non-@code{nil} if @var{entity} is root entity (message).
190 @defun mime-entity-node-id entity
192 Return node-id of @var{entity}.
196 @defun mime-entity-number entity
198 Return entity-number of @var{entity}.
203 @node Entity Search, Entity Attributes, Entity hierarchy, Entity
206 @defun mime-find-entity-from-number entity-number &optional message
208 Return entity from @var{entity-number} in @var{message}.@refill
210 If @var{message} is not specified, @code{mime-message-structure} is
215 @defun mime-find-entity-from-node-id entity-node-id &optional message
217 Return entity from @var{entity-node-id} in @var{message}.@refill
219 If @var{message} is not specified, @code{mime-message-structure} is
224 @defun mime-find-entity-from-content-id cid &optional message
226 Return entity from @var{cid} in @var{message}.@refill
228 If @var{message} is not specified, @code{mime-message-structure} is
234 @node Entity Attributes, Entity-header, Entity Search, Entity
235 @section Functions about attributes of mime-entity
237 @defun mime-entity-content-type entity
239 Return content-type of @var{entity}. (cf. @ref{mime-content-type})
243 @defun mime-entity-content-disposition entity
245 Return content-disposition of
246 @var{entity}. (cf. @ref{mime-content-disposition})
250 @defun mime-entity-filename entity
252 Return file name of @var{entity}.
256 @defun mime-entity-encoding entity &optional default-encoding
258 Return content-transfer-encoding of @var{entity}.
259 (cf. @ref{Content-Transfer-Encoding}) @refill
261 If the @var{entity} does not have Content-Transfer-Encoding field, this
262 function returns @var{default-encoding}. If it is nil, @code{"7bit"} is
263 used as default value.
267 @defun mime-entity-cooked-p entity
269 Return non-nil if contents of @var{entity} has been already
275 @node Entity-header, entity formatting, Entity Attributes, Entity
276 @section Information of entity header
278 @defun mime-fetch-field field-name &optional entity
280 Return field-body of @var{field-name} field in header of
283 The results is network representation.@refill
285 If @var{entity} is omitted, @code{mime-message-structure} is used as
286 default value.@refill
288 If @var{field-name} field is not found, this function returns
293 @defun mime-read-field field-name &optional entity
295 Parse @var{field-name} field in header of @var{entity}, and return the
298 Format of result is depended on kind of field. For non-structured
299 field, this function returns string. For structured field, it returns
300 list corresponding with structure of the field.@refill
302 Strings in the result will be converted to internal representation of
305 If @var{entity} is omitted, @code{mime-message-structure} is used as
306 default value.@refill
308 If @var{field-name} field is not found, this function returns
314 @node entity formatting, Entity-content, Entity-header, Entity
315 @section Text presentation of entity
317 @defun mime-insert-header entity &optional invisible-fields visible-fields
319 Insert before point a decoded contents of header of @var{entity}.@refill
321 @var{invisible-fields} is list of regexps to match field-name to hide.
322 @var{visible-fields} is list of regexps to match field-name to
325 If a field-name is matched with some elements of @var{invisible-fields}
326 and matched with none of @var{visible-fields}, this function don't
327 insert the field.@refill
329 Each encoded-word (@ref{encoded-word}) in the header is decoded. ``Raw
330 non us-ascii characters'' are also decoded as
331 @code{default-mime-charset}.
335 @defun mime-insert-text-content entity
337 Insert before point a contents of @var{entity} as text entity.@refill
339 Contents of the @var{entity} are decoded as MIME charset (@ref{MIME charset}). If the @var{entity} does not have charset parameter of
340 Content-Type field, @code{default-mime-charset} is used as default
345 @defvar default-mime-charset
347 Symbol to indicate default value of MIME charset (@ref{MIME charset}).@refill
349 It is used when MIME charset is not specified.@refill
351 It is originally variable of APEL.
356 @node Entity-content, Entity-network-representation, entity formatting, Entity
357 @section Contents of Entity
359 @defun mime-entity-content entity
361 Return content of @var{entity} as byte sequence.
365 @defun mime-insert-entity-content entity
367 Insert content of @var{entity} at point.
371 @defun mime-write-entity-content entity filename
373 Write content of @var{entity} into @var{filename}.
378 @node Entity-network-representation, Entity buffer, Entity-content, Entity
379 @section Network representation of Entity
381 @defun mime-insert-entity entity
383 Insert header and body of @var{entity} at point.
387 @defun mime-write-entity entity filename
389 Write representation of @var{entity} into @var{filename}.
393 @defun mime-write-entity-body entity filename
395 Write body of @var{entity} into @var{filename}.
400 @node Entity buffer, mm-backend, Entity-network-representation, Entity
401 @section Entity as buffer representation
403 @defun mime-entity-buffer entity
405 Return buffer, which contains @var{entity}.
409 @defun mime-entity-point-min entity
411 Return the start point of @var{entity} in the buffer which contains
416 @defun mime-entity-point-max entity
418 Return the end point of @var{entity} in the buffer which contains
423 @defun mime-entity-header-start entity
425 Return the start point of header of @var{entity} in the buffer which
426 contains @var{entity}.
430 @defun mime-entity-header-end entity
432 Return the end point of header of @var{entity} in the buffer which
433 contains @var{entity}.
437 @defun mime-entity-body-start entity
439 Return the start point of body of @var{entity} in the buffer which
440 contains @var{entity}.
444 @defun mime-entity-body-end entity
446 Return the end point of body of @var{entity} in the buffer which
447 contains @var{entity}.
452 @node mm-backend, , Entity buffer, Entity
453 @section Entity representations and implementations
455 @cindex entity processing method
456 @cindex representation-type
458 Entity is an abstraction. It is designed to use various data
459 representations for their purposes.@refill
461 Each entity has @strong{representation-type}. It must be specified when
462 an entity is created. (cf. @ref{Entity Creation}) @refill
464 Functions about entity are implemented by request processing to the
465 entity. Each entity knows its representation-type. Each entity calls
466 processing function corresponding with the representation-type. Such
467 kind of function is called @strong{entity processing method}. A module,
468 consists of them corresponding with a representation-type, is called
469 @strong{mm-backend}.@refill
471 Module name of each mm-backend consists of the prefix @code{mm}
472 and its representation-type. The module is required automatically
473 when its entity is created at first.
477 * Request for entity:: Message-passing for entity
478 * mm-backend module:: Definition of mm-backend
481 @node Request for entity, mm-backend module, mm-backend, mm-backend
482 @subsection Message-passing for entity
484 @defun mime-entity-send entity message &rest args
486 Send @var{message} to @var{entity} with @var{args}, and return the
489 @var{args} is arguments of the @var{message}.
494 @node mm-backend module, , Request for entity, mm-backend
495 @subsection Definition of mm-backend
497 @defmac mm-define-backend type &optional parents
499 Define @var{type} as a mm-backend.@refill
501 If @var{PARENTS} is specified, @var{type} inherits parents. Each parent
502 must be representation-type.@refill
507 (mm-define-backend chao (generic))
512 @defmac mm-define-method name args &rest body
514 Define @var{name} as a method function of (nth 1 (car @var{args}))
517 @var{args} is like an argument list of lambda, but (car @var{args}) must
518 be specialized parameter. (car (car @var{args})) is name of variable
519 and (nth 1 (car @var{args})) is name of backend
520 (representation-type).@refill
525 (mm-define-method entity-cooked-p ((entity chao)) nil)
531 @node Content-Type, Content-Disposition, Entity, Top
532 @chapter Information of Content-Type field
533 @cindex mime-content-type
534 @cindex Content-Type field
536 @strong{Content-Type field} is a field to indicate kind of contents or
537 data format, such as media-type (@ref{media-type}) and MIME charset. It
538 is defined in RFC 2045 (@ref{RFC 2045}).
544 Historically, Content-Type field was proposed in RFC 1049. In it,
545 Content-Type did not distinguish type and subtype, and there are no
546 mechanism to represent kind of character code like MIME charset.
550 FLIM provides parser for Content-Type field and structure
551 @strong{mime-content-type} to store information of
556 * Content-Type field:: Format of Content-Type field
557 * mime-content-type:: mime-content-type structure
558 * Content-Type parser:: Parser
559 * Content-Type utility:: Utility functions
562 @node Content-Type field, mime-content-type, Content-Type, Content-Type
563 @section Format of Content-Type field
568 Format of Content-Type field is defined as follows:
571 ``Content-Type'' ``:'' @strong{type} ``/''
572 @strong{subtype} *( ``;'' @strong{parameter} )
579 Content-Type: image/jpeg
586 Content-Type: text/plain; charset=iso-2022-jp
590 `type' and `subtype' indicate format of an entity. In this document,
591 pair of them is called `media-type'. `image/jpeg' or `text/plain' is
598 If an entity does not have Content-Type field, it is regarded as
603 Content-Type: text/plain; charset=us-ascii
613 @node mime-content-type, Content-Type parser, Content-Type field, Content-Type
614 @section mime-content-type structure
616 @deffn{Structure} mime-content-type
618 Structure to store information of a Content-Type field.@refill
620 Applications should use reference functions
621 @code{mime-content-type-SLOT} to refer information of the
624 Slots of the structure are following:
628 primary type of media-type (symbol).
631 subtype of media-type (symbol).
634 parameters of Content-Type field (association-list).
640 @defun make-mime-content-type type subtype
643 Constructor of content-type.
647 @defun mime-content-type-parameter content-type parameter
649 Return value of @var{parameter} of @var{content-type}.
654 @node Content-Type parser, Content-Type utility, mime-content-type, Content-Type
657 @defun mime-parse-Content-Type string
659 Parse @var{string} as a field-body of Content-Type field, and return the
660 result as mime-content-type (@ref{mime-content-type}) structure.
664 @defun mime-read-Content-Type
666 Parse Content-Type field of the current buffer, and return the result as
667 mime-content-type (@ref{mime-content-type}) structure.@refill
669 Return @code{nil} if Content-Type field is not found.
674 @node Content-Type utility, , Content-Type parser, Content-Type
675 @section Utility functions
677 @defun mime-type/subtype-string type &optional subtype
679 Return type/subtype string from @var{type} and @var{subtype}.
684 @node Content-Disposition, Content-Transfer-Encoding, Content-Type, Top
685 @chapter Information of Content-Disposition field
686 @cindex mime-content-disposition
688 @cindex Standards Track
689 @cindex Content-Disposition field
691 @strong{Content-Disposition field} is an optional field to
692 specify presentation of an entity or attributes of an entity, such as
699 S. Dorner, K. Moore and R. Troost, ``Communicating Presentation
700 Information in Internet Messages: The Content-Disposition Header'',
701 August 1997, Standards Track.
704 FLIM provides parser for Content-Disposition field and structure
705 @strong{mime-content-disposition} to store information of
706 Content-Disposition field.
710 * mime-content-disposition:: mime-content-disposition structure
711 * Content-Disposition parser:: Parser for Content-Disposition field
714 @node mime-content-disposition, Content-Disposition parser, Content-Disposition, Content-Disposition
715 @section mime-content-disposition structure
717 @deffn{Structure} mime-content-disposition
719 Structure to store information of a Content-Disposition field.@refill
721 Applications should use reference functions
722 @code{mime-content-disposition-SLOT} to refer information of the
725 Slots of the structure are following:
728 @item disposition-type
729 disposition-type (symbol).
732 parameters of Content-Disposition field
739 @defun mime-content-disposition-parameter content-disposition parameter
741 Return value of @var{parameter} of @var{content-disposition}.
745 @defun mime-content-disposition-filename content-disposition
747 Return filename of @var{content-disposition}.
752 @node Content-Disposition parser, , mime-content-disposition, Content-Disposition
753 @section Parser for Content-Disposition field
755 @defun mime-parse-Content-Disposition string
757 Parse @var{string} as field-body of Content-Disposition field, and
758 return the result as mime-content-disposition
759 (@ref{mime-content-disposition}) structure.
763 @defun mime-read-Content-Disposition
765 Parse Content-Disposition field of the current buffer, and return the
766 result as mime-content-disposition (@ref{mime-content-disposition})
769 Return @code{nil} if Content-Disposition field is not found.
774 @node Content-Transfer-Encoding, encoded-word, Content-Disposition, Top
775 @chapter Encoding Method
776 @cindex Content-Transfer-Encoding field
778 @strong{Content-Transfer-Encoding field} is a header field to indicate
779 body encoding of a entity.@refill
781 FLIM provides parser functions for Content-Transfer-Encoding field.
782 They represent information of Content-Transfer-Encoding field as
785 In addition, FLIM provides encoder/decoder functions by
786 Content-Transfer-Encoding.
790 * Content-Transfer-Encoding parser:: Parser
791 * encoder/decoder:: Encoder/decoder
792 * Encoding information:: Other utilities
793 * mel-backend:: How to write encoder/decoder module
794 * generic function for mel-backend:: How to add encoding/decoding service
797 @node Content-Transfer-Encoding parser, encoder/decoder, Content-Transfer-Encoding, Content-Transfer-Encoding
800 @defun mime-parse-Content-Transfer-Encoding string
802 Parse @var{string} as a field-body of Content-Transfer-Encoding field,
803 and return the result.
807 @defun mime-read-Content-Transfer-Encoding &optional default-encoding
809 Parse Content-Transfer-Encoding field of the current buffer, and return
812 Return @var{default-encoding} if Content-Transfer-Encoding field is not
813 found. If it is not specified, @code{nil} is used as the default value.
818 @node encoder/decoder, Encoding information, Content-Transfer-Encoding parser, Content-Transfer-Encoding
819 @section Encoder/decoder
821 @defun mime-encode-region start end encoding
823 Encode region @var{start} to @var{end} of current buffer using
828 @defun mime-decode-region start end encoding
830 Decode region @var{start} to @var{end} of current buffer using
836 @defun mime-decode-string string encoding
838 Decode @var{string} which is encoded in @var{encoding}, and return the
844 @defun mime-insert-encoded-file filename encoding
846 Insert file @var{FILENAME} encoded by @var{ENCODING} format.
850 @defun mime-write-decoded-region start end filename encoding
852 Decode and write current region encoded by @var{encoding} into
853 @var{filename}.@refill
855 @var{start} and @var{end} are buffer positions.
860 @node Encoding information, mel-backend, encoder/decoder, Content-Transfer-Encoding
861 @section Other utilities
863 @defun mime-encoding-list &optional SERVICE
865 Return list of Content-Transfer-Encoding.@refill
867 If @var{service} is specified, it returns available list of
868 Content-Transfer-Encoding for it.
872 @defun mime-encoding-alist &optional SERVICE
874 Return table of Content-Transfer-Encoding for completion.@refill
876 If @var{service} is specified, it returns available list of
877 Content-Transfer-Encoding for it.
882 @node mel-backend, generic function for mel-backend, Encoding information, Content-Transfer-Encoding
883 @section How to write encoder/decoder module
885 @defmac mel-define-method name args &rest body
887 Define @var{name} as a method function of (nth 1 (car (last
888 @var{args}))) backend.@refill
890 @var{args} is like an argument list of lambda, but (car (last
891 @var{args})) must be specialized parameter. (car (car (last
892 @var{args}))) is name of variable and (nth 1 (car (last @var{args}))) is
893 name of backend (encoding).@refill
898 (mel-define-method mime-write-decoded-region (start end filename
900 "Decode and write current region encoded by base64 into FILENAME.
901 START and END are buffer positions."
903 (list (region-beginning) (region-end)
904 (read-file-name "Write decoded region to file: ")))
905 (let ((str (buffer-substring start end)))
907 (insert (decode-base64-string str))
908 (write-region-as-binary (point-min) (point-max) filename)
914 @defmac mel-define-method-function spec function
916 Set @var{spec}'s function definition to @var{function}.@refill
918 First element of @var{spec} is service.@refill
920 Rest of @var{args} is like an argument list of lambda, but (car (last
921 @var{args})) must be specialized parameter. (car (car (last
922 @var{args}))) is name of variable and (nth 1 (car (last @var{args}))) is
923 name of backend (encoding).@refill
928 (mel-define-method-function (mime-encode-string string (nil "base64"))
929 'encode-base64-string)
935 @node generic function for mel-backend, , mel-backend, Content-Transfer-Encoding
936 @section How to add encoding/decoding service
938 @defmac mel-define-service name &optional args doc-string
940 Define @var{name} as a service for Content-Transfer-Encodings.@refill
942 If @var{args} is specified, @var{name} is defined as a generic function
943 for the service.@refill
948 (mel-define-service encoded-text-encode-string (string encoding)
949 "Encode STRING as encoded-text using ENCODING.
950 ENCODING must be string.")
956 @node encoded-word, custom, Content-Transfer-Encoding, Top
957 @chapter Network representation of header
959 @cindex Standards Track
963 @strong{RFC 2047} defines the @strong{encoded-word} which is a format to
964 represent non-ASCII (@ref{ASCII}) characters in a header.@refill
970 K. Moore, ``MIME (Multipurpose Internet Mail Extensions) Part Three:
971 Message Header Extensions for Non-ASCII Text'', November 1996, Standards
972 Track (obsolete RFC 1521,1522,1590).
975 The encoded-word is the only valid format to represent non-ASCII
976 (@ref{ASCII}) characters in a header, but there are also invalid styles.
977 Such kinds of evil messages represent non-ASCII (@ref{ASCII}) characters
978 in headers without encoded-words (it is called "raw" non-ASCII
979 (@ref{ASCII}) characters).@refill
981 FLIM provides encoding/decoding features of both encoded-word and
982 invalid "raw" non-ASCII (@ref{ASCII}) characters.
986 * Header encoder/decoder:: Header encoding/decoding
989 @node Header encoder/decoder, , encoded-word, encoded-word
990 @section Header encoding/decoding
992 @defun eword-decode-header &optional code-conversion separator
994 Decode MIME encoded-words in header fields.@refill
996 If @var{code-conversion} is @code{nil}, only encoded-words are decoded.
997 If @var{code-conversion} is a MIME charset (@ref{MIME charset}),
998 non-ASCII bit patterns are decoded as the MIME charset. Otherwise
999 non-ASCII bit patterns are decoded as the
1000 @code{default-mime-charset}. (cf. @ref{entity formatting}) @refill
1002 If @var{separator} is not @code{nil}, it is used as header separator.
1006 @defun eword-encode-header &optional code-conversion
1008 Encode header fields to network representation, such as MIME
1009 encoded-word.@refill
1011 Each field is encoded as corresponding method specified by variable
1012 @code{mime-field-encoding-method-alist}.
1016 @defvar mime-field-encoding-method-alist
1018 Association list to specify field encoding method. Each element looks
1019 like (FIELD . METHOD).@refill
1021 If METHOD is @code{mime}, the FIELD will be encoded into MIME format
1022 (encoded-word).@refill
1024 If METHOD is @code{nil}, the FIELD will not be encoded.@refill
1026 If METHOD is a MIME charset, the FIELD will be encoded as the charset
1027 when it must be convert into network-code.@refill
1029 Otherwise the FIELD will be encoded as variable
1030 @code{default-mime-charset} when it must be convert into network-code.
1035 @node custom, Appendix, encoded-word, Top
1036 @chapter Various Customization
1040 The group associated with functions related to MIME.@refill
1042 It belongs to @code{mail} and @code{news}.
1046 @node Appendix, Concept Index, custom, Top
1052 * Bug report:: How to report bugs
1053 * CVS:: CVS based development
1054 * History:: History of FLIM
1057 @node Glossary, Bug report, Appendix, Appendix
1067 * coded character set:: Coded character set, Character code
1074 * Quoted-Printable::
1085 @node 7bit, 8bit, Glossary, Glossary
1087 @cindex 7bit (textual) string
1091 @strong{7bit} means any integer between 0 .. 127.@refill
1093 Any data represented by 7bit integers is called @strong{7bit data}.@refill
1095 Textual string consisted of Control characters between 0 .. 31 and 127,
1096 and space represented by 32, and graphic characters between 33 .. 236
1097 are called @strong{7bit (textual) string}.@refill
1099 Conventional Internet MTA (@ref{MTA}) can translate 7bit data, so it is
1100 no need to translate by Quoted-Printable (@ref{Quoted-Printable}) or
1101 Base64 (@ref{Base64}) for 7bit data.@refill
1103 However if there are too long lines, it can not translate by 7bit MTA
1104 even if it is 7bit data. RFC 821 (@ref{RFC 821}) and RFC 2045 (@ref{RFC 2045}) require lines in 7bit data must be less than 998 bytes. So if a
1105 ``7bit data'' has a line more than 999 bytes, it is regarded as binary
1106 (@ref{binary}). For example, Postscript file should be encoded by
1110 @node 8bit, ASCII, 7bit, Glossary
1112 @cindex 8bit (textual) string
1116 @strong{8bit} means any integer between 0 .. 255.@refill
1118 Any data represented by 8bit integers is called @strong{8bit data}.@refill
1120 Textual string consisted of Control characters between 0 .. 31, 127, and
1121 128 .. 159, and space represented by 32, and graphic characters between
1122 33 .. 236 and 160 .. 255 are called @strong{8bit (textual) string}.@refill
1124 For example, iso-8859-1 (@ref{iso-8859-1}) or euc-kr (@ref{euc-kr}) are
1125 coded-character-set represented by 8bit textual string.@refill
1127 Traditional Internet MTA (@ref{MTA}) can translate only 7bit
1128 (@ref{7bit}) data, so if a 8bit data will be translated such MTA, it
1129 must be encoded by Quoted-Printable (@ref{Quoted-Printable}) or Base64
1130 (@ref{Base64}).@refill
1132 However 8bit MTA are increasing today.@refill
1134 However if there are too long lines, it can not translate by 8bit MTA
1135 even if it is 8bit data. RFC 2045 (@ref{RFC 2045}) require lines in
1136 8bit data must be less than 998 bytes. So if a ``8bit data'' has a line
1137 more than 999 bytes, it is regarded as binary (@ref{binary}), so it must
1138 be encoded by Base64 or Quoted-Printable.
1141 @node ASCII, Base64, 8bit, Glossary
1143 @cindex ANSI X3.4:1986
1147 @strong{ASCII} is a 94-character set contains primary latin characters
1148 (A-Z, a-z), numbers and some characters. It is a standard of the United
1149 States of America. It is a variant of ISO 646 (@ref{ISO 646}).
1155 ``Coded Character Set -- 7-Bit American Standard Code for Information
1156 Interchange'', ANSI X3.4:1986.
1161 @node Base64, binary, ASCII, Glossary
1166 @strong{Base64} is a transfer encoding method of MIME (@ref{MIME})
1167 defined in RFC 2045 (@ref{RFC 2045}).@refill
1169 The encoding process represents 24-bit groups of input bits as output
1170 strings of 4 encoded characters. Encoded characters represent integer 0
1171 .. 63 or @strong{pad}. Base64 data must be 4 * n bytes, so pad is used
1172 to adjust size.@refill
1174 These 65 characters are subset of all versions of ISO 646, including
1175 US-ASCII, and all versions of EBCDIC. So it is safe even if it is
1176 translated by non-Internet gateways.
1179 @node binary, coded character set, Base64, Glossary
1183 Any byte stream is called @strong{binary}.@refill
1185 It does not require structureof lines. It differs from from 8bit
1186 (@ref{8bit}).@refill
1188 In addition, if line structured data contain too long line (more than
1189 998 bytes), it is regarded as binary.
1192 @node coded character set, media-type, binary, Glossary
1193 @subsection Coded character set, Character code
1195 A set of unambiguous rules that establishes a character set and the
1196 one-to-one relationship between the characters of the set and their
1200 @node media-type, message, coded character set, Glossary
1201 @subsection media-type
1214 @strong{media-type} specifies the nature of the data in the body of MIME
1215 (@ref{MIME}) entity (@ref{entity}). It consists of @strong{type} and
1216 @strong{subtype}. It is defined in RFC 2046 (@ref{RFC 2046}).@refill
1218 Currently there are following standard primary-types:
1230 @strong{application}
1232 @strong{multipart} (@ref{multipart})
1238 And there are various subtypes, for example, application/octet-stream,
1239 audio/basic, image/jpeg, multipart/mixed (@ref{multipart/mixed}),
1240 text/plain (@ref{text/plain}), video/mpeg... @refill
1242 You can refer registered media types at MEDIA TYPES
1243 (ftp://ftp.isi.edu/in-notes/iana/assignments/media-types).@refill
1245 In addition, you can use private type or subtype using @strong{x-token},
1246 which as the prefix `x-'. However you can not use them in
1249 (cf. @ref{Content-Type field})
1253 @node message, MIME, media-type, Glossary
1256 In this document, it means mail defined in RFC 822 (@ref{RFC 822}) and
1257 news message defined in RFC 1036 (@ref{RFC 1036}).
1260 @node MIME, MIME charset, message, Glossary
1262 @cindex Multipurpose Internet Mail Extensions
1264 MIME stands for @strong{Multipurpose Internet Mail Extensions}, it is an
1265 extension for RFC 822 (@ref{RFC 822}).@refill
1267 According to RFC 2045:@refill
1269 STD 11, RFC 822, defines a message representation protocol specifying
1270 considerable detail about US-ASCII message headers, and leaves the
1271 message content, or message body, as flat US-ASCII text. This set of
1272 documents, collectively called the Multipurpose Internet Mail
1273 Extensions, or MIME, redefines the format of messages to allow for
1277 textual message bodies in character sets other than US-ASCII,
1279 an extensible set of different formats for non-textual message
1282 multi-part message bodies, and
1284 textual header information in character sets other than US-ASCII.
1288 It is defined in RFC 2045 (@ref{RFC 2045}), RFC 2046 (@ref{RFC 2046}),
1289 RFC 2047 (@ref{encoded-word}), RFC 2048 (@ref{RFC 2048}) and RFC 2049
1293 @node MIME charset, MTA, MIME, Glossary
1294 @subsection MIME charset
1296 Coded character set (@ref{coded character set}) used in Content-Type
1297 field (@ref{Content-Type field}) or charset parameter of encoded-word
1298 (@ref{encoded-word}).@refill
1300 It is defined in RFC 2045 (@ref{RFC 2045}).@refill
1302 iso-2022-jp (@ref{iso-2022-jp}) or euc-kr (@ref{euc-kr}) are kinds of
1303 it. (In this document, MIME charsets are written by small letters to
1304 distinguish graphic character set (@ref{graphic character set}). For
1305 example, ISO 8859-1 is a graphic character set, and iso-8859-1 is a MIME
1309 @node MTA, MUA, MIME charset, Glossary
1311 @cindex Message Transfer Agent
1313 @strong{Message Transfer Agent}. It means mail transfer programs
1314 (ex. sendmail) and news servers.@refill
1320 @node MUA, Quoted-Printable, MTA, Glossary
1322 @cindex Message User Agent
1324 @strong{Message User Agent}. It means mail readers and news
1331 @node Quoted-Printable, RFC 822, MUA, Glossary
1332 @subsection Quoted-Printable
1333 @cindex Quoted-Printable
1335 @strong{Quoted-Printable} is a transfer encoding method of MIME
1336 (@ref{MIME}) defined in RFC 2045 (@ref{RFC 2045}).@refill
1338 If the data being encoded are mostly US-ASCII text, the encoded form of
1339 the data remains largely recognizable by humans.@refill
1345 @node RFC 822, RFC 1036, Quoted-Printable, Glossary
1349 @cindex Internet mail
1350 @cindex Internet message
1351 @cindex message header
1353 A RFC defines format of Internet mail message, mainly @strong{message header}.
1359 news message is based on RFC 822, so @strong{Internet message} may be
1360 more suitable than @strong{Internet mail} .
1368 D. Crocker, ``Standard for the Format of ARPA Internet Text Messages'',
1369 August 1982, STD 11.
1374 @node RFC 1036, RFC 2045, RFC 822, Glossary
1375 @subsection RFC 1036
1379 A RFC defines format of USENET message. It is a subset of RFC 822
1380 (@ref{RFC 822}). It is not Internet standard, but a lot of netnews
1381 excepting Usenet uses it.
1387 M. Horton and R. Adams, ``Standard for Interchange of USENET Messages'',
1388 December 1987, (obsolete RFC 850).
1393 @node RFC 2045, RFC 2046, RFC 1036, Glossary
1394 @subsection RFC 2045
1396 @cindex Standards Track
1402 N. Freed and N. Borenstein, ``Multipurpose Internet Mail Extensions
1403 (MIME) Part One: Format of Internet Message Bodies'', November 1996,
1404 Standards Track (obsolete RFC 1521, 1522, 1590).
1409 @node RFC 2046, RFC 2048, RFC 2045, Glossary
1410 @subsection RFC 2046
1412 @cindex Standards Track
1418 N. Freed and N. Borenstein, ``Multipurpose Internet Mail Extensions
1419 (MIME) Part Two: Media Types'', November 1996, Standards Track (obsolete
1420 RFC 1521, 1522, 1590).
1425 @node RFC 2048, RFC 2049, RFC 2046, Glossary
1426 @subsection RFC 2048
1428 @cindex Standards Track
1434 N. Freed, J. Klensin and J. Postel, ``Multipurpose Internet Mail
1435 Extensions (MIME) Part Four: Registration Procedures'', November 1996,
1436 Standards Track (obsolete RFC 1521, 1522, 1590).
1441 @node RFC 2049, plain text, RFC 2048, Glossary
1442 @subsection RFC 2049
1444 @cindex Standards Track
1450 N. Freed and N. Borenstein, ``Multipurpose Internet Mail Extensions
1451 (MIME) Part Five: Conformance Criteria and Examples'', November 1996,
1452 Standards Track (obsolete RFC 1521, 1522, 1590).
1457 @node plain text, us-ascii, RFC 2049, Glossary
1458 @subsection plain text
1460 A textual data represented by only coded character set (@ref{coded character set}). It does not have information about font or
1461 typesetting. (cf. @ref{text/plain})
1465 @node us-ascii, , plain text, Glossary
1466 @subsection us-ascii
1470 A MIME charset (@ref{MIME charset}) for primary Latin script mainly
1471 written by English or other languages.@refill
1473 It is a 7bit coded character set (@ref{coded character set}) based on
1474 ISO 2022 (@ref{ISO 2022}), it contains only ASCII (@ref{ASCII}) and code
1475 extension (@ref{code extension}) is not allowed.@refill
1477 It is standard coded character set of Internet mail. If MIME charset is
1478 not specified, @strong{us-ascii} is used as default.@refill
1480 In addition, @strong{ASCII} of RFC 822 (@ref{RFC 822}) should be
1481 interpreted as us-ascii.
1484 @node Bug report, CVS, Glossary, Appendix
1485 @section How to report bugs
1486 @cindex good bug report
1488 If you write bug-reports and/or suggestions for improvement, please
1489 send them to the EMACS-MIME Mailing List:
1493 English <emacs-mime-en@@m17n.org>
1495 Japanese <emacs-mime-ja@@m17n.org>
1499 Notice that, we do not welcome bug reports about too old version. Bugs
1500 in old version might be fixed. So please try latest version at
1503 You should write @strong{good bug report}. If you write only ``FLIM
1504 does not work'', we can not find such situations. At least, you should
1505 write name, type, variants and version of OS, emacs, APEL, FLIM, SEMI
1506 and MUA, and setting. In addition, if error occurs, to send backtrace
1507 is very important. (cf. @ref{(emacs)Bugs}) @refill
1509 Bug may not appear only your environment, but also in a lot of
1510 environment (otherwise it might not bug). Therefor if you send mail
1511 to author directly, we must write a lot of mails. So please send mail
1512 to address for EMACS-MIME Mailing List instead of author.
1514 Via the EMACS-MIME ML, you can report FLIM bugs, obtain the latest
1515 release of FLIM, and discuss future enhancements to FLIM. To join the
1516 EMACS-MIME ML, send an empty e-mail to:
1520 English <emacs-mime-en-ctl@@m17n.org>
1522 Japanese <emacs-mime-ja-ctl@@m17n.org>
1527 @node CVS, History, Bug report, Appendix
1528 @section CVS based development
1530 Files in FLIM are managed under CVS. Therefore you can obtain the
1531 newest FLIM by the following method.
1536 % cvs -d :pserver:anonymous@@cvs.m17n.org:/cvs/root login
1538 CVS password: [CR] # NULL string
1542 % cvs -d :pserver:anonymous@@cvs.m17n.org:/cvs/root checkout
1543 checkout [-r TAG] flim
1547 If you would like to join CVS based development, please send mail to
1555 with your account name and your public key for ssh.
1556 cvsroot is :ext:cvs@@cvs.m17n.org:/cvs/root.
1559 @node History, , CVS, Appendix
1560 @section History of FLIM
1562 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
1563 \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
1564 \e$B@lMQ$N
\e(B encoded-word
\e$B$NI|9f2=%W%m%0%i%`$G$7$?!#
\e(B@refill
1566 \e$B$=$N8e!"<i2,
\e(B
\e$BCNI'
\e(B
\e$B$O
\e(B @file{mime.el}
\e$B$r85$K
\e(B@file{tiny-mime.el}
\e$B$H$$$&%W%m
\e(B
1567 \e$B%0%i%`$r=q$-$^$9!#$3$l$O!"
\e(BNemacs
\e$B$H
\e(B Mule
\e$B$GF0:n$9$k
\e(B encoded-word
\e$B$NId9f
\e(B
1568 \e$B2=!&I|9f2=%W%m%0%i%`$G$7$?!#
\e(B@file{tiny-mime.el}
\e$B$O
\e(B B-encoding
\e$B$@$1$G$J$/
\e(B
1569 Q-encoding
\e$B$b
\e(Bsupport
\e$B$7!"$^$?!"
\e(BMULE
\e$B$G07$&$3$H$,$G$-$k$5$^$6$^$J
\e(B MIME
1570 charset (@ref{MIME charset})
\e$B$rF1;~$K;H$&$3$H$,$G$-$^$7$?!#$3$N;~!"
\e(B
1571 Nemacs
\e$B$H
\e(B Mule
\e$B$NAPJ}$r
\e(B support
\e$B$9$k$?$a$KMQ$$$i$l$?%F%/%K%C%/$O8e$K
\e(B emu
1572 package
\e$B$K$^$H$a$i$l$^$9!#
\e(B@refill
1574 \e$B$3$N:"!"<i2,
\e(B
\e$BCNI'
\e(B
\e$B$O
\e(B @file{tiny-mime.el}
\e$B$r$5$^$6$^$J
\e(B MUA
\e$B$G;H$&$?$a$N@_
\e(B
1575 \e$BDj=8$bG[I[$7$F$$$^$7$?$,!"$=$l$i$O8e$K
\e(B@file{tiny-mime.el}
\e$B$H$H$b$K#1$D$N
\e(B
1576 package
\e$B$K$^$H$a$i$l!"
\e(Btm
\e$B$H$$$&L>A0$GG[I[$5$l$^$9!#
\e(B@refill
1578 \e$B<i2,
\e(B
\e$BCNI'
\e(B
\e$B$O$d$,$F!"
\e(BMIME message
\e$B$r1\Mw$9$k$?$a$N%W%m%0%i%`$G$"$k
\e(B
1579 @file{tm-body.el}
\e$B$r=q$-$^$9!#$3$l$O!"$9$0$K
\e(B@file{tm-view.el}
\e$B$H$$$&L>A0
\e(B
1580 \e$B$KJQ$o$j$^$7$?$,!"$d$,$F!"$3$l$,
\e(B@file{tiny-mime.el}
\e$B$KBe$o$C$F!"
\e(Btm
\e$B$NCf
\e(B
1581 \e$B3K$H$J$j$^$9!#
\e(B@refill
1583 @file{tm-view.el}
\e$B$OEvA3!"
\e(BContent-Transfer-Encoding
\e$B$r07$&I,MW$,$"$j$^$9!#
\e(B
1584 \e$B$3$NL\E*$N$?$a$K!"
\e(BMEL
\e$B$,@0Hw$5$l$O$8$a$^$7$?!#
\e(BBase64
\e$B$K4X$7$F$O
\e(B
1585 @file{tiny-mime.el}
\e$B$N
\e(B code
\e$B$,0\$5$l!"$^$?!"?7$?$K
\e(BQuoted-Printable
\e$B$N
\e(B
1586 code
\e$B$,DI2C$5$l$^$7$?!#$3$l$i$,
\e(B@file{mel-b.el}
\e$B$H
\e(B @file{mel-q.el}
\e$B$K$J$j
\e(B
1587 \e$B$^$7$?!#
\e(B@refill
1589 \e$B$^$?!"8e$K!"<i2,
\e(B
\e$BCNI'
\e(B
\e$B$K$h$C$F
\e(B uuencode
\e$BMQ$N
\e(B @file{mel-u.el}
\e$B$,DI2C$5$l!"
\e(B
1590 \e$B$=$N8e$K!">.NS
\e(B
\e$B=$J?
\e(B
\e$B;a$K$h$C$F
\e(B x-gzip64
\e$BMQ$N
\e(B@file{mel-g.el}
\e$B$,DI2C$5$l$^
\e(B
1591 \e$B$7$?!#
\e(B@refill
1593 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<BAu$,9T$o$l!"$3
\e(B
1594 \e$B$N2aDx$G!"
\e(BSTD 11
\e$B$N
\e(B parser
\e$B$,=q$+$l$^$7$?!#$3$l$O!"8=:_$N
\e(B
1595 @file{std11.el}
\e$B$KEv$?$j$^$9!#$^$?!"$3$N2aDx$G
\e(B @file{tiny-mime.el}
\e$B$OI|
\e(B
1596 \e$B9f2=$r9T$&
\e(B @file{tm-ew-d.el}
\e$B$HId9f2=$r9T$&
\e(B @file{tm-ew-e.el}
\e$B$KJ,$1$i$l
\e(B
1597 \e$B$^$7$?!#$3$NN><T$,8=:_$N
\e(B @file{eword-decode.el}
\e$B$H
\e(B
1598 @file{eword-encode.el}
\e$B$N@hAD$KEv$?$j$^$9!#
\e(B@refill
1600 \e$B8e$K!"<i2,
\e(B
\e$BCNI'
\e(B
\e$B$i$K$h$C$F
\e(B tm
\e$B$NA4LL=q$-49$(:n6H$,9T$o$l!"$3$N2aDx$G!"
\e(Btm
1601 \e$B$O
\e(B APEL, MEL, SEMI, EMH, RMAIL-MIME, Gnus-MIME
\e$B$J$I$KJ,$1$i$l$^$7$?!#$3
\e(B
1602 \e$B$N$&$A$N
\e(B MEL
\e$B$,
\e(B FLIM
\e$B$ND>@\$N@hAD$KEv$?$j$^$9!#
\e(B@refill
1604 \e$B8e$K!"
\e(BAPEL
\e$B$+$i
\e(B @file{std11.el}
\e$B$,0\$5$l!"$^$?!"
\e(B@file{mailcap.el},
1605 @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
1606 package
\e$B$NL>A0$,
\e(B FLIM
\e$B$H$J$j$^$9!#
\e(B@refill
1608 \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
1609 FLIM
\e$B$N;^$G$"$k
\e(B ``FLIM-FLAM''
\e$B$H$J$C$F$$$^$9!#
\e(B
1612 @node Concept Index, Function Index, Appendix, Top
1613 @chapter Concept Index
1617 @node Function Index, Variable Index, Concept Index, Top
1618 @chapter Function Index
1622 @node Variable Index, , Function Index, Top
1623 @chapter Variable Index