update.
[elisp/flim.git] / mime-en.texi
1 \input texinfo.tex
2 @c Generated automatically from mime-en.sgml by sinfo 3.7.
3 @setfilename mime-en.info
4 @settitle{FLIM 1.10 Manual about MIME Features}
5 @titlepage
6 @title FLIM 1.10 Manual about MIME Features
7 @author MORIOKA Tomohiko <morioka@@jaist.ac.jp>
8 @subtitle 1998/07/01
9 @end titlepage
10 @node Top, Introduction, (dir), (dir)
11 @top FLIM 1.10 Manual about MIME Features
12
13 @ifinfo
14
15 This file documents MIME features of FLIM, a Internet message
16 parsing/encoding library for GNU Emacs.
17 @end ifinfo
18
19 @menu
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
28 * Appendix::                    
29 * Concept Index::               
30 * Function Index::              
31 * Variable Index::              
32 @end menu
33
34 @node Introduction, How to use, Top, Top
35 @chapter What is FLIM?
36
37 FLIM is a library to provide basic features about message
38 representation or encoding.
39
40
41 @node How to use, Entity, Introduction, Top
42 @chapter How to use MIME features
43
44 Please eval following to use MIME features provided by FLIM:
45
46 @lisp
47 (require 'mime)
48 @end lisp
49
50
51
52 @node Entity, Content-Type, How to use, Top
53 @chapter Message and Entity
54 @cindex mime-entity
55 @cindex entity
56
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
61 body.@refill
62
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
65 structure.@refill
66
67 FLIM uses @strong{mime-entity} structure to represent
68 information of entity.  In this document, it is called simply
69 `mime-entity'.
70
71
72 @menu
73 * Entity creation::             Functions to create mime-entity
74 * Entity hierarchy::            Features about message tree
75 * Entity Attributes::           Functions about attributes of mime-entity
76 * Entity-header::               Information of entity header
77 * entity formatting::           Text presentation of entity
78 * Entity-content::              Contents of Entity
79 * Entity buffer::               Entity as buffer representation
80 * mm-backend::                  Entity representations and implementations
81 @end menu
82
83 @node Entity creation, Entity hierarchy, Entity, Entity
84 @section Functions to create mime-entity
85
86 @defun mime-open-entity &optional  type location
87
88 Open an entity and return it.@refill
89
90 @var{type} is representation-type. (cf. @ref{mm-backend}) @refill
91
92 @var{location} is location of entity.  Specification of it is depended
93 on representation-type.
94 @end defun
95
96
97 @defun mime-parse-buffer &optional  buffer type
98
99 Parse @var{buffer} as message, and set the result to buffer local
100 variable @code{mime-message-structure} of @var{buffer} as
101 mime-entity.@refill
102
103 If @var{buffer} is omitted, current buffer is used.@refill
104
105 @var{type} is representation-type of created
106 mime-entity. (cf. @ref{mm-backend})
107  Default value is @var{buffer}.
108 @end defun
109
110
111
112 @node Entity hierarchy, Entity Attributes, Entity creation, Entity
113 @section Features about message tree
114 @cindex node-id
115 @cindex entity-number
116 @cindex message
117 @cindex root-entity
118
119 Structure of a MIME message is tree.@refill
120
121 In the tree, root node is the entity indicates all of the message.  In
122 this document, it is called @strong{root-entity} or @strong{message}.
123 In FLIM, it is indicated by buffer local variable
124 @code{mime-message-structure}.@refill
125
126 Each entity except root-entity has a parent.  An entity may have
127 children.  We can indicate an entity by relative position from a base
128 entity, based on the parent-child relationship.@refill
129
130 In addition, we can indicate an entity by absolute position of the
131 message.@refill
132
133 Each entity, which is a node of the tree, can be numbered by
134 depth and left-to-right order of the depth.
135 @example
136
137                               +-------+
138                               |  nil  |
139                               +---+---+
140               +-------------------+-------------------+
141             +-+-+               +-+-+               +-+-+
142             | 0 |               | 1 |               | 2 |
143             +-+-+               +-+-+               +-+-+
144               |         +---------+---------+         |
145            +--+--+   +--+--+   +--+--+   +--+--+   +--+--+
146            | 0.0 |   | 1.0 |   | 1.1 |   | 1.2 |   | 2.0 |
147            +-----+   +-----+   +-----+   +-----+   +-----+
148 @end example
149
150 Namely, if depth of a node is n, the node has a node-number, which is
151 consists of n integers.  In this document, it is called
152 @strong{entity-number}.  An entity-number is represented by list of
153 integer, like @code{(1 2 3)}.@refill
154
155 mime-entity has also @strong{node-id}.  A node-id is represented by
156 reversed list of entity-number.  For example, node-id corresponding with
157 1.2.3 is @code{(3 2 1)}.@refill
158
159 Each entity can be indicated by entity-number or node-id in
160 @code{mime-message-structure}.
161
162 @defvar mime-message-structure
163
164 Buffer local variable to store mime-entity structure of message.
165 @end defvar
166
167
168 @defun mime-entity-children entity
169
170 Return list of entities included in the @var{entity}.
171 @end defun
172
173
174 @defun mime-entity-parent entity  &optional  message
175
176 Return parent entity of the @var{entity}.@refill
177
178 If @var{message} is specified, it is regarded as root instead of
179 @code{mime-message-structure}.
180 @end defun
181
182
183 @defun mime-root-entity-p entity
184
185 Return non-@code{nil} if @var{entity} is root entity (message).
186 @end defun
187
188
189 @defun mime-entity-node-id entity
190
191 Return node-id of @var{entity}.
192 @end defun
193
194
195 @defun mime-entity-number entity
196
197 Return entity-number of @var{entity}.
198 @end defun
199
200
201 @defun mime-find-entity-from-number entity-number  &optional  message
202
203 Return entity from @var{entity-number} in @var{message}.@refill
204
205 If @var{message} is not specified, @code{mime-message-structure} is
206 used.
207 @end defun
208
209
210 @defun mime-find-entity-from-node-id entity-node-id  &optional  message
211
212 Return entity from @var{entity-node-id} in @var{message}.@refill
213
214 If @var{message} is not specified, @code{mime-message-structure} is
215 used.
216 @end defun
217
218
219
220 @node Entity Attributes, Entity-header, Entity hierarchy, Entity
221 @section Functions about attributes of mime-entity
222
223 @defun mime-entity-content-type entity
224
225 Return content-type of @var{entity}.  (cf. @ref{mime-content-type})
226 @end defun
227
228
229 @defun mime-entity-content-disposition entity
230
231 Return content-disposition of
232 @var{entity}. (cf. @ref{mime-content-disposition})
233 @end defun
234
235
236 @defun mime-entity-filename entity
237
238 Return file name of @var{entity}.
239 @end defun
240
241
242 @defun mime-entity-encoding entity  &optional  default-encoding
243
244 Return content-transfer-encoding of @var{entity}.
245 (cf. @ref{Content-Transfer-Encoding}) @refill
246
247 If the @var{entity} does not have Content-Transfer-Encoding field, this
248 function returns @var{default-encoding}.  If it is nil, @code{"7bit"} is
249 used as default value.
250 @end defun
251
252
253 @defun mime-entity-cooked-p entity
254
255 Return non-nil if contents of @var{entity} has been already
256 code-converted.
257 @end defun
258
259
260
261 @node Entity-header, entity formatting, Entity Attributes, Entity
262 @section Information of entity header
263
264 @defun mime-fetch-field field-name  &optional  entity
265
266 Return field-body of @var{field-name} field in header of
267 @var{entity}.@refill
268
269 The results is network representation.@refill
270
271 If @var{entity} is omitted, @code{mime-message-structure} is used as
272 default value.@refill
273
274 If @var{field-name} field is not found, this function returns
275 @code{nil}.
276 @end defun
277
278
279 @defun mime-read-field field-name  &optional  entity
280
281 Parse @var{field-name} field in header of @var{entity}, and return the
282 result.@refill
283
284 Format of result is depended on kind of field.  For non-structured
285 field, this function returns string.  For structured field, it returns
286 list corresponding with structure of the field.@refill
287
288 Strings in the result will be converted to internal representation of
289 Emacs.@refill
290
291 If @var{entity} is omitted, @code{mime-message-structure} is used as
292 default value.@refill
293
294 If @var{field-name} field is not found, this function returns
295 @code{nil}.
296 @end defun
297
298
299
300 @node entity formatting, Entity-content, Entity-header, Entity
301 @section Text presentation of entity
302
303 @defun mime-insert-header entity  &optional  invisible-fields visible-fields
304
305 Insert before point a decoded contents of header of @var{entity}.@refill
306
307 @var{invisible-fields} is list of regexps to match field-name to hide.
308 @var{visible-fields} is list of regexps to match field-name to
309 hide.@refill
310
311 If a field-name is matched with some elements of @var{invisible-fields}
312 and matched with none of @var{visible-fields}, this function don't
313 insert the field.@refill
314
315 Each encoded-word (@ref{encoded-word}) in the header is decoded.  ``Raw
316 non us-ascii characters'' are also decoded as
317 @code{default-mime-charset}.
318 @end defun
319
320
321 @defun mime-insert-text-content entity
322
323 Insert before point a contents of @var{entity} as text entity.@refill
324
325 Contents of the @var{entity} are decoded as MIME charset (@ref{MIME charset}).  If the @var{entity} does not have charset parameter of
326 Content-Type field, @code{default-mime-charset} is used as default
327 value.
328 @end defun
329
330
331 @defvar default-mime-charset
332
333 Symbol to indicate default value of MIME-charset
334 (@ref{MIME-charset}).@refill
335
336 It is used when MIME-charset is not specified.@refill
337
338 It is originally variable of APEL.
339 @end defvar
340
341
342
343 @node Entity-content, Entity buffer, entity formatting, Entity
344 @section Contents of Entity
345
346 @defun mime-entity-content entity
347
348 Return content of @var{entity} as byte sequence.
349 @end defun
350
351
352 @defun mime-write-entity-content entity filename
353
354 Write content of @var{entity} into @var{filename}.
355 @end defun
356
357
358 @defun mime-write-entity entity filename
359
360 Write representation of @var{entity} into @var{filename}.
361 @end defun
362
363
364 @defun mime-write-entity-body entity filename
365
366 Write body of @var{entity} into @var{filename}.
367 @end defun
368
369
370
371 @node Entity buffer, mm-backend, Entity-content, Entity
372 @section Entity as buffer representation
373
374 @defun mime-entity-buffer entity
375
376 Return buffer, which contains @var{entity}.
377 @end defun
378
379
380 @defun mime-entity-point-min entity
381
382 Return the start point of @var{entity} in the buffer which contains
383 @var{entity}.
384 @end defun
385
386
387 @defun mime-entity-point-max entity
388
389 Return the end point of @var{entity} in the buffer which contains
390 @var{entity}.
391 @end defun
392
393
394 @defun mime-entity-header-start entity
395
396 Return the start point of header of @var{entity} in the buffer which
397 contains @var{entity}.
398 @end defun
399
400
401 @defun mime-entity-header-end entity
402
403 Return the end point of header of @var{entity} in the buffer which
404 contains @var{entity}.
405 @end defun
406
407
408 @defun mime-entity-body-start entity
409
410 Return the start point of body of @var{entity} in the buffer which
411 contains @var{entity}.
412 @end defun
413
414
415 @defun mime-entity-body-end entity
416
417 Return the end point of body of @var{entity} in the buffer which
418 contains @var{entity}.
419 @end defun
420
421
422
423 @node mm-backend,  , Entity buffer, Entity
424 @section Entity representations and implementations
425 @cindex mm-backend
426 @cindex entity processing method
427 @cindex representation-type
428
429 Entity is an abstraction.  It is designed to use various data
430 representations for their purposes.@refill
431
432 Each entity has @strong{representation-type}.  It must be specified when
433 an entity is created. (cf. @ref{Entity Creation}) @refill
434
435 Functions about entity are implemented by request processing to the
436 entity.  Each entity knows its representation-type.  Each entity calls
437 processing function corresponding with the representation-type.  Such
438 kind of function is called @strong{entity processing method}.  A module,
439 consists of them corresponding with a representation-type, is called
440 @strong{mm-backend}.@refill
441
442 Module name of each mm-backend consists of the prefix @code{mm}
443 and its representation-type.  The module is required automatically
444 when its entity is created at first.
445
446
447 @menu
448 * Request for entity::          Message-passing for entity
449 * mm-backend module::           Definition of mm-backend
450 @end menu
451
452 @node Request for entity, mm-backend module, mm-backend, mm-backend
453 @subsection Message-passing for entity
454
455 @defun mime-entity-send entity message  &rest  args
456
457 Send @var{message} to @var{entity} with @var{args}, and return the
458 result.@refill
459
460 @var{args} is arguments of the @var{message}.
461 @end defun
462
463
464
465 @node mm-backend module,  , Request for entity, mm-backend
466 @subsection Definition of mm-backend
467
468 @defmac mm-define-backend type &optional  parents
469
470 Define @var{type} as a mm-backend.@refill
471
472 If @var{PARENTS} is specified, @var{type} inherits parents.  Each parent
473 must be representation-type.@refill
474
475 Example:@refill
476
477 @lisp
478 (mm-define-backend chao (generic))
479 @end lisp
480 @end defmac
481
482
483 @defmac mm-define-method name args  &rest  body
484
485 Define @var{name} as a method function of (nth 1 (car @var{args}))
486 backend.@refill
487
488 @var{args} is like an argument list of lambda, but (car @var{args}) must
489 be specialized parameter.  (car (car @var{args})) is name of variable
490 and (nth 1 (car @var{args})) is name of backend
491 (representation-type).@refill
492
493 Example:@refill
494
495 @lisp
496 (mm-define-method entity-cooked-p ((entity chao)) nil)
497 @end lisp
498 @end defmac
499
500
501
502 @node Content-Type, Content-Disposition, Entity, Top
503 @chapter Information of Content-Type field
504 @cindex mime-content-type
505 @cindex Content-Type field
506
507 @strong{Content-Type field} is a field to indicate kind of contents or
508 data format, such as media-type (@ref{media-type}) and MIME charset.  It
509 is defined in RFC 2045 (@ref{RFC 2045}).
510
511 @noindent
512 @strong{[Memo]}
513 @quotation
514
515 Historically, Content-Type field was proposed in RFC 1049.  In it,
516 Content-Type did not distinguish type and subtype, and there are no
517 mechanism to represent kind of character code like MIME charset.
518 @end quotation
519
520
521 FLIM provides parser for Content-Type field and structure
522 @strong{mime-content-type} to store information of
523 Content-Type field.
524
525
526 @menu
527 * Content-Type field::          Format of Content-Type field
528 * mime-content-type::           mime-content-type structure
529 * Content-Type parser::         Parser
530 * Content-Type utility::        Utility functions
531 @end menu
532
533 @node Content-Type field, mime-content-type, Content-Type, Content-Type
534 @section Format of Content-Type field
535 @cindex parameter
536 @cindex subtype
537 @cindex type
538
539 Format of Content-Type field is defined as follows:
540
541 @quotation
542 ``Content-Type'' ``:'' @strong{type} ``/''
543 @strong{subtype} *( ``;'' @strong{parameter} )
544 @end quotation
545
546 For example:
547
548 @quotation
549 @example
550 Content-Type: image/jpeg
551 @end example
552 @end quotation
553
554
555 @quotation
556 @example
557 Content-Type: text/plain; charset=iso-2022-jp
558 @end example
559 @end quotation
560
561 `type' and `subtype' indicate format of an entity.  In this document,
562 pair of them is called `media-type'.  `image/jpeg' or `text/plain' is
563 a media-type.
564
565 @noindent
566 @strong{[Memo]}
567 @quotation
568
569 If an entity does not have Content-Type field, it is regarded as
570 following:
571
572 @quotation
573 @example
574 Content-Type: text/plain; charset=us-ascii
575 @end example
576 @end quotation
577
578 @noindent
579 (cf. @ref{us-ascii})
580 @end quotation
581
582
583
584 @node mime-content-type, Content-Type parser, Content-Type field, Content-Type
585 @section mime-content-type structure
586
587 @deffn{Structure} mime-content-type
588
589 Structure to store information of a Content-Type field.@refill
590
591 Applications should use reference functions
592 @code{mime-content-type-SLOT} to refer information of the
593 structure.@refill
594
595 Slots of the structure are following:
596
597 @table @var
598 @item primary-type
599 primary type of media-type (symbol).
600
601 @item subtype
602 subtype of media-type (symbol).
603
604 @item parameters
605 parameters of Content-Type field (association-list).
606
607 @end table
608 @end deffn
609
610
611 @defun make-mime-content-type type subtype
612            &optional  parameters
613
614 Constructor of content-type.
615 @end defun
616
617
618 @defun mime-content-type-parameter content-type parameter
619
620 Return value of @var{parameter} of @var{content-type}.
621 @end defun
622
623
624
625 @node Content-Type parser, Content-Type utility, mime-content-type, Content-Type
626 @section Parser
627
628 @defun mime-parse-Content-Type string
629
630 Parse @var{string} as a field-body of Content-Type field, and return the
631 result as mime-content-type (@ref{mime-content-type}) structure.
632 @end defun
633
634
635 @defun mime-read-Content-Type
636
637 Parse Content-Type field of the current buffer, and return the result as
638 mime-content-type (@ref{mime-content-type}) structure.@refill
639
640 Return @code{nil} if Content-Type field is not found.
641 @end defun
642
643
644
645 @node Content-Type utility,  , Content-Type parser, Content-Type
646 @section Utility functions
647
648 @defun mime-type/subtype-string type  &optional  subtype
649
650 Return type/subtype string from @var{type} and @var{subtype}.
651 @end defun
652
653
654
655 @node Content-Disposition, Content-Transfer-Encoding, Content-Type, Top
656 @chapter Information of Content-Disposition field
657 @cindex mime-content-disposition
658 @cindex RFC 2183
659 @cindex Standards Track
660 @cindex Content-Disposition field
661
662 @strong{Content-Disposition field} is an optional field to
663 specify presentation of an entity or attributes of an entity, such as
664 file name.
665
666
667 @noindent
668 [RFC 2183]
669 @quotation
670 S. Dorner, K. Moore and R. Troost, ``Communicating Presentation
671 Information in Internet Messages: The Content-Disposition Header'',
672 August 1997, Standards Track.
673 @end quotation
674
675 FLIM provides parser for Content-Disposition field and structure
676 @strong{mime-content-disposition} to store information of
677 Content-Disposition field.
678
679
680 @menu
681 * mime-content-disposition::    mime-content-disposition structure
682 * Content-Disposition parser::  Parser for Content-Disposition field
683 @end menu
684
685 @node mime-content-disposition, Content-Disposition parser, Content-Disposition, Content-Disposition
686 @section mime-content-disposition structure
687
688 @deffn{Structure} mime-content-disposition
689
690 Structure to store information of a Content-Disposition field.@refill
691
692 Applications should use reference functions
693 @code{mime-content-disposition-SLOT} to refer information of the
694 structure.@refill
695
696 Slots of the structure are following:
697
698 @table @var
699 @item disposition-type
700 disposition-type (symbol).
701
702 @item parameters
703 parameters of Content-Disposition field
704 (association-list).
705
706 @end table
707 @end deffn
708
709
710 @defun mime-content-disposition-parameter content-disposition parameter
711
712 Return value of @var{parameter} of @var{content-disposition}.
713 @end defun
714
715
716 @defun mime-content-disposition-filename content-disposition
717
718 Return filename of @var{content-disposition}.
719 @end defun
720
721
722
723 @node Content-Disposition parser,  , mime-content-disposition, Content-Disposition
724 @section Parser for Content-Disposition field
725
726 @defun mime-parse-Content-Disposition string
727
728 Parse @var{string} as field-body of Content-Disposition field, and
729 return the result as mime-content-disposition
730 (@ref{mime-content-disposition}) structure.
731 @end defun
732
733
734 @defun mime-read-Content-Disposition
735
736 Parse Content-Disposition field of the current buffer, and return the
737 result as mime-content-disposition (@ref{mime-content-disposition})
738 structure.@refill
739
740 Return @code{nil} if Content-Disposition field is not found.
741 @end defun
742
743
744
745 @node Content-Transfer-Encoding, encoded-word, Content-Disposition, Top
746 @chapter Encoding Method
747 @cindex Content-Transfer-Encoding field
748
749 @strong{Content-Transfer-Encoding field} is a header field to indicate
750 body encoding of a entity.@refill
751
752 FLIM provides parser functions for Content-Transfer-Encoding field.
753 They represent information of Content-Transfer-Encoding field as
754 string.@refill
755
756 In addition, FLIM provides encoder/decoder functions by
757 Content-Transfer-Encoding.
758
759
760 @menu
761 * Content-Transfer-Encoding parser::  Parser
762 * encoder/decoder::             Encoder/decoder
763 * Encoding information::        Other utilities
764 * mel-backend::                 How to write encoder/decoder module
765 * generic function for mel-backend::  How to add encoding/decoding service
766 @end menu
767
768 @node Content-Transfer-Encoding parser, encoder/decoder, Content-Transfer-Encoding, Content-Transfer-Encoding
769 @section Parser
770
771 @defun mime-parse-Content-Transfer-Encoding string
772
773 Parse @var{string} as a field-body of Content-Transfer-Encoding field,
774 and return the result.
775 @end defun
776
777
778 @defun mime-read-Content-Transfer-Encoding &optional default-encoding
779
780 Parse Content-Transfer-Encoding field of the current buffer, and return
781 the result.@refill
782
783 Return @var{default-encoding} if Content-Transfer-Encoding field is not
784 found.  If it is not specified, @code{nil} is used as the default value.
785 @end defun
786
787
788
789 @node encoder/decoder, Encoding information, Content-Transfer-Encoding parser, Content-Transfer-Encoding
790 @section Encoder/decoder
791
792 @defun mime-encode-region start end encoding
793
794 Encode region @var{start} to @var{end} of current buffer using
795 @var{encoding}.
796 @end defun
797
798
799 @defun mime-decode-region start end encoding
800
801 Decode region @var{start} to @var{end} of current buffer using
802 @var{encoding}.
803 @end defun
804
805
806
807 @defun mime-decode-string string encoding
808
809 @var{string} \e$B$r\e(B @var{encoding} \e$B$H$7$FI|9f$7$?7k2L$rJV$7$^$9!#\e(B
810 @end defun
811
812
813
814 @defun mime-insert-encoded-file filename encoding
815
816 Insert file @var{FILENAME} encoded by @var{ENCODING} format.
817 @end defun
818
819
820 @defun mime-write-decoded-region start end filename encoding
821
822 Decode and write current region encoded by @var{encoding} into
823 @var{filename}.@refill
824
825 @var{start} and @var{end} are buffer positions.
826 @end defun
827
828
829
830 @node Encoding information, mel-backend, encoder/decoder, Content-Transfer-Encoding
831 @section Other utilities
832
833 @defun mime-encoding-list &optional  SERVICE
834
835 Return list of Content-Transfer-Encoding.@refill
836
837 If @var{service} is specified, it returns available list of
838 Content-Transfer-Encoding for it.
839 @end defun
840
841
842 @defun mime-encoding-alist &optional  SERVICE
843
844 Return table of Content-Transfer-Encoding for completion.@refill
845
846 If @var{service} is specified, it returns available list of
847 Content-Transfer-Encoding for it.
848 @end defun
849
850
851
852 @node mel-backend, generic function for mel-backend, Encoding information, Content-Transfer-Encoding
853 @section How to write encoder/decoder module
854
855 @defmac mel-define-method name args  &rest  body
856
857 Define @var{name} as a method function of (nth 1 (car (last
858 @var{args}))) backend.@refill
859
860 @var{args} is like an argument list of lambda, but (car (last
861 @var{args})) must be specialized parameter.  (car (car (last
862 @var{args}))) is name of variable and (nth 1 (car (last @var{args}))) is
863 name of backend (encoding).@refill
864
865 Example:@refill
866
867 @lisp
868 (mel-define-method mime-write-decoded-region (start end filename
869                                                     (nil "base64"))
870   "Decode and write current region encoded by base64 into FILENAME.
871 START and END are buffer positions."
872   (interactive
873    (list (region-beginning) (region-end)
874          (read-file-name "Write decoded region to file: ")))
875   (let ((str (buffer-substring start end)))
876     (with-temp-buffer
877       (insert (decode-base64-string str))
878       (write-region-as-binary (point-min) (point-max) filename)
879       )))
880 @end lisp
881 @end defmac
882
883
884 @defmac mel-define-method-function spec function
885
886 Set @var{spec}'s function definition to @var{function}.@refill
887
888 First element of @var{spec} is service.@refill
889
890 Rest of @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
894
895 Example:@refill
896
897 @lisp
898 (mel-define-method-function (mime-encode-string string (nil "base64"))
899                             'encode-base64-string)
900 @end lisp
901 @end defmac
902
903
904
905 @node generic function for mel-backend,  , mel-backend, Content-Transfer-Encoding
906 @section How to add encoding/decoding service
907
908 @defmac mel-define-service name &optional  args doc-string
909
910 Define @var{name} as a service for Content-Transfer-Encodings.@refill
911
912 If @var{args} is specified, @var{name} is defined as a generic function
913 for the service.@refill
914
915 Example:@refill
916
917 @lisp
918 (mel-define-service encoded-text-encode-string (string encoding)
919   "Encode STRING as encoded-text using ENCODING.
920 ENCODING must be string.")
921 @end lisp
922 @end defmac
923
924
925
926 @node encoded-word, custom, Content-Transfer-Encoding, Top
927 @chapter Network representation of header
928 @cindex RFC 2047
929 @cindex Standards Track
930 @cindex RFC 2047
931
932 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
933 \e$B$G!"\e(B@strong{RFC 2047} \e$B$GDj5A$5$l$F$$$^$9!#\e(B@refill
934
935
936 @noindent
937 [RFC 2047]
938 @quotation
939 K. Moore, ``MIME (Multipurpose Internet Mail Extensions) Part Three:
940 Message Header Extensions for Non-ASCII Text'', November 1996, Standards
941 Track (obsolete RFC 1521,1522,1590).
942 @end quotation
943
944 \e$B$^$?!"9T57$N0-$$$3$H$@$H8@$($^$9$,!"\e(Bencoded-word \e$B$rMQ$$$:$KHs\e(B ASCII
945 (@ref{ASCII}) \e$BJ8;z$r\e(B header \e$B$KF~$l$?5-;v$bB8:_$7$^$9!#\e(B@refill
946
947 FLIM \e$B$O$3$l$i$rId9f2=!&I|9f2=$9$k5!G=$rDs6!$7$^$9!#\e(B
948
949
950 @menu
951 * Header encoder/decoder::      Header encoding/decoding
952 @end menu
953
954 @node Header encoder/decoder,  , encoded-word, encoded-word
955 @section Header encoding/decoding
956
957 @defun eword-encode-header &optional  code-conversion separator
958
959 Decode MIME encoded-words in header fields.@refill
960
961 If @var{code-conversion} is @code{nil}, it decodes only encoded-words.
962 If it is mime-charset, it decodes non-ASCII bit patterns as the
963 mime-charset.  Otherwise it decodes non-ASCII bit patterns as the
964 default-mime-charset.@refill
965
966 If @var{separator} is not nil, it is used as header separator.
967 @end defun
968
969
970 @defun eword-encode-header &optional  code-conversion
971
972 Encode header fields to network representation, such as MIME
973 encoded-word.@refill
974
975 It refer variable @code{eword-field-encoding-method-alist}.
976 @end defun
977
978
979
980 @node custom, Appendix, encoded-word, Top
981 @chapter Various Customization
982
983 @deffn{group} mime
984
985 MIME \e$B4XO"5!G=$K4X$9$k\e(B group.@refill
986
987 @code{mail} \e$B$H\e(B @code{news} \e$B$KB0$9$k!#\e(B
988 @end deffn
989
990
991 @defvar mime-temp-directory
992
993 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 
994 directory.@refill
995
996 \e$B4D6-JQ?t\e(B @code{MIME_TMP_DIR}, @code{TM_TMP_DIR}, @code{TMPDIR},
997 @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
998 \e$BMQ$$$k!#2?$b@_Dj$5$l$F$$$J$$>l9g!"\e(B@code{"/tmp/"} \e$B$rMQ$$$k!#\e(B
999 @end defvar
1000
1001
1002
1003 @node Appendix, Concept Index, custom, Top
1004 @chapter Appendix
1005
1006
1007 @menu
1008 * Glossary::                    
1009 * Bug report::                  How to report bugs
1010 * CVS::                         CVS based development
1011 * History::                     History of FLIM
1012 @end menu
1013
1014 @node Glossary, Bug report, Appendix, Appendix
1015 @section Glossary
1016
1017
1018 @menu
1019 * 7bit::                        
1020 * 8bit::                        
1021 * ASCII::                       
1022 * Base64::                      
1023 * binary::                      
1024 * coded character set::         Coded character set, Character code
1025 * media-type::                  
1026 * message::                     
1027 * MIME::                        
1028 * MIME charset::                
1029 * MTA::                         
1030 * MUA::                         
1031 * Quoted-Printable::            
1032 * RFC 822::                     
1033 * RFC 1036::                    
1034 * RFC 2045::                    
1035 * RFC 2046::                    
1036 * RFC 2048::                    
1037 * RFC 2049::                    
1038 * plain text::                  
1039 * us-ascii::                    
1040 @end menu
1041
1042 @node 7bit, 8bit, Glossary, Glossary
1043 @subsection 7bit
1044 @cindex 7bit (textual) string
1045 @cindex 7bit data
1046 @cindex 7bit
1047
1048 @strong{7bit} means any integer between 0 .. 127.@refill
1049
1050 Any data represented by 7bit integers is called @strong{7bit data}.@refill
1051
1052 Textual string consisted of Control characters between 0 .. 31 and 127,
1053 and space represented by 32, and graphic characters between 33 .. 236
1054 are called @strong{7bit (textual) string}.@refill
1055
1056 Conventional Internet MTA (@ref{MTA}) can translate 7bit data, so it is
1057 no need to translate by Quoted-Printable (@ref{Quoted-Printable}) or
1058 Base64 (@ref{Base64}) for 7bit data.@refill
1059
1060 However if there are too long lines, it can not translate by 7bit MTA
1061 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
1062 ``7bit data'' has a line more than 999 bytes, it is regarded as binary
1063 (@ref{binary}).  For example, Postscript file should be encoded by
1064 Quoted-Printable.
1065
1066
1067 @node 8bit, ASCII, 7bit, Glossary
1068 @subsection 8bit
1069 @cindex 8bit (textual) string
1070 @cindex 8bit data
1071 @cindex 8bit
1072
1073 @strong{8bit} means any integer between 0 .. 255.@refill
1074
1075 Any data represented by 8bit integers is called @strong{8bit data}.@refill
1076
1077 Textual string consisted of Control characters between 0 .. 31, 127, and
1078 128 .. 159, and space represented by 32, and graphic characters between
1079 33 .. 236 and 160 .. 255 are called @strong{8bit (textual) string}.@refill
1080
1081 For example, iso-8859-1 (@ref{iso-8859-1}) or euc-kr (@ref{euc-kr}) are
1082 coded-character-set represented by 8bit textual string.@refill
1083
1084 Traditional Internet MTA (@ref{MTA}) can translate only 7bit
1085 (@ref{7bit}) data, so if a 8bit data will be translated such MTA, it
1086 must be encoded by Quoted-Printable (@ref{Quoted-Printable}) or Base64
1087 (@ref{Base64}).@refill
1088
1089 However 8bit MTA are increasing today.@refill
1090
1091 However if there are too long lines, it can not translate by 8bit MTA
1092 even if it is 8bit data.  RFC 2045 (@ref{RFC 2045}) require lines in
1093 8bit data must be less than 998 bytes.  So if a ``8bit data'' has a line
1094 more than 999 bytes, it is regarded as binary (@ref{binary}), so it must
1095 be encoded by Base64 or Quoted-Printable.
1096
1097
1098 @node ASCII, Base64, 8bit, Glossary
1099 @subsection ASCII
1100 @cindex ANSI X3.4:1986
1101 @cindex ASCII
1102 @cindex ASCII
1103
1104 @strong{ASCII} is a 94-character set contains primary latin characters
1105 (A-Z, a-z), numbers and some characters.  It is a standard of the United
1106 States of America.  It is a variant of ISO 646 (@ref{ISO 646}).
1107
1108
1109 @noindent
1110 [ASCII]
1111 @quotation
1112 ``Coded Character Set -- 7-Bit American Standard Code for Information
1113 Interchange'', ANSI X3.4:1986.
1114 @end quotation
1115
1116
1117
1118 @node Base64, binary, ASCII, Glossary
1119 @subsection Base64
1120 @cindex pad
1121 @cindex Base64
1122
1123 @strong{Base64} is a transfer encoding method of MIME (@ref{MIME})
1124 defined in RFC 2045 (@ref{RFC 2045}).@refill
1125
1126 The encoding process represents 24-bit groups of input bits as output
1127 strings of 4 encoded characters.  Encoded characters represent integer 0
1128 .. 63 or @strong{pad}.  Base64 data must be 4 * n bytes, so pad is used
1129 to adjust size.@refill
1130
1131 These 65 characters are subset of all versions of ISO 646, including
1132 US-ASCII, and all versions of EBCDIC.  So it is safe even if it is
1133 translated by non-Internet gateways.
1134
1135
1136 @node binary, coded character set, Base64, Glossary
1137 @subsection binary
1138 @cindex binary
1139
1140 Any byte stream is called @strong{binary}.@refill
1141
1142 It does not require structureof lines.  It differs from from 8bit
1143 (@ref{8bit}).@refill
1144
1145 In addition, if line structured data contain too long line (more than
1146 998 bytes), it is regarded as binary.
1147
1148
1149 @node coded character set, media-type, binary, Glossary
1150 @subsection Coded character set, Character code
1151
1152 A set of unambiguous rules that establishes a character set and the
1153 one-to-one relationship between the characters of the set and their
1154 bit combinations.
1155
1156
1157 @node media-type, message, coded character set, Glossary
1158 @subsection media-type
1159 @cindex x-token
1160 @cindex message
1161 @cindex multipart
1162 @cindex application
1163 @cindex video
1164 @cindex audio
1165 @cindex image
1166 @cindex text
1167 @cindex subtype
1168 @cindex type
1169 @cindex media-type
1170
1171 @strong{media-type} specifies the nature of the data in the body of MIME
1172 (@ref{MIME}) entity (@ref{entity}).  It consists of @strong{type} and
1173 @strong{subtype}.  It is defined in RFC 2046 (@ref{RFC 2046}).@refill
1174
1175 Currently there are following standard primary-types:
1176
1177 @itemize @bullet
1178 @item
1179 @strong{text}
1180 @item
1181 @strong{image}
1182 @item
1183 @strong{audio}
1184 @item
1185 @strong{video}
1186 @item
1187 @strong{application}
1188 @item
1189 @strong{multipart} (@ref{multipart})
1190 @item
1191 @strong{message}
1192 @end itemize
1193
1194
1195 And there are various subtypes, for example, application/octet-stream,
1196 audio/basic, image/jpeg, multipart/mixed (@ref{multipart/mixed}),
1197 text/plain (@ref{text/plain}), video/mpeg...  @refill
1198
1199 You can refer registered media types at MEDIA TYPES
1200 (ftp://ftp.isi.edu/in-notes/iana/assignments/media-types).@refill
1201
1202 In addition, you can use private type or subtype using @strong{x-token},
1203 which as the prefix `x-'.  However you can not use them in
1204 public.@refill
1205
1206 (cf. @ref{Content-Type field})
1207
1208
1209
1210 @node message, MIME, media-type, Glossary
1211 @subsection message
1212
1213 In this document, it means mail defined in RFC 822 (@ref{RFC 822}) and
1214 news message defined in RFC 1036 (@ref{RFC 1036}).
1215
1216
1217 @node MIME, MIME charset, message, Glossary
1218 @subsection MIME
1219 @cindex Multipurpose Internet Mail Extensions
1220
1221 MIME stands for @strong{Multipurpose Internet Mail Extensions}, it is an
1222 extension for RFC 822 (@ref{RFC 822}).@refill
1223
1224 According to RFC 2045:@refill
1225
1226 STD 11, RFC 822, defines a message representation protocol specifying
1227 considerable detail about US-ASCII message headers, and leaves the
1228 message content, or message body, as flat US-ASCII text.  This set of
1229 documents, collectively called the Multipurpose Internet Mail
1230 Extensions, or MIME, redefines the format of messages to allow for
1231
1232 @enumerate
1233 @item
1234 textual message bodies in character sets other than US-ASCII,
1235 @item
1236 an extensible set of different formats for non-textual message
1237 bodies,
1238 @item
1239 multi-part message bodies, and
1240 @item
1241 textual header information in character sets other than US-ASCII.
1242 @end enumerate
1243
1244
1245 It is defined in RFC 2045 (@ref{RFC 2045}), RFC 2046 (@ref{RFC 2046}),
1246 RFC 2047 (@ref{encoded-word}), RFC 2048 (@ref{RFC 2048}) and RFC 2049
1247 (@ref{RFC 2049}).
1248
1249
1250 @node MIME charset, MTA, MIME, Glossary
1251 @subsection MIME charset
1252
1253 Coded character set (@ref{coded character set}) used in Content-Type
1254 field (@ref{Content-Type field}) or charset parameter of encoded-word
1255 (@ref{encoded-word}).@refill
1256
1257 It is defined in RFC 2045 (@ref{RFC 2045}).@refill
1258
1259 iso-2022-jp (@ref{iso-2022-jp}) or euc-kr (@ref{euc-kr}) are kinds of
1260 it.  (In this document, MIME charsets are written by small letters to
1261 distinguish graphic character set (@ref{graphic character set}).  For
1262 example, ISO 8859-1 is a graphic character set, and iso-8859-1 is a MIME
1263 charset)
1264
1265
1266 @node MTA, MUA, MIME charset, Glossary
1267 @subsection MTA
1268 @cindex Message Transfer Agent
1269
1270 @strong{Message Transfer Agent}.  It means mail transfer programs
1271 (ex. sendmail) and news servers.@refill
1272
1273 (cf. @ref{MUA})
1274
1275
1276
1277 @node MUA, Quoted-Printable, MTA, Glossary
1278 @subsection MUA
1279 @cindex Message User Agent
1280
1281 @strong{Message User Agent}.  It means mail readers and news
1282 readers.@refill
1283
1284 (cf. @ref{MTA})
1285
1286
1287
1288 @node Quoted-Printable, RFC 822, MUA, Glossary
1289 @subsection Quoted-Printable
1290 @cindex Quoted-Printable
1291
1292 @strong{Quoted-Printable} is a transfer encoding method of MIME
1293 (@ref{MIME}) defined in RFC 2045 (@ref{RFC 2045}).@refill
1294
1295 If the data being encoded are mostly US-ASCII text, the encoded form of
1296 the data remains largely recognizable by humans.@refill
1297
1298 (cf. @ref{Base64})
1299
1300
1301
1302 @node RFC 822, RFC 1036, Quoted-Printable, Glossary
1303 @subsection RFC 822
1304 @cindex RFC 822
1305 @cindex STD 11
1306 @cindex Internet mail
1307 @cindex Internet message
1308 @cindex message header
1309
1310 A RFC defines format of Internet mail message, mainly @strong{message header}.
1311
1312 @noindent
1313 @strong{[Memo]}
1314 @quotation
1315
1316 news message is based on RFC 822, so @strong{Internet message} may be
1317 more suitable than @strong{Internet mail} .
1318 @end quotation
1319
1320
1321
1322 @noindent
1323 [RFC 822]
1324 @quotation
1325 D. Crocker, ``Standard for the Format of ARPA Internet Text Messages'',
1326 August 1982, STD 11.
1327 @end quotation
1328
1329
1330
1331 @node RFC 1036, RFC 2045, RFC 822, Glossary
1332 @subsection RFC 1036
1333 @cindex RFC 1036
1334 @cindex USENET
1335
1336 A RFC defines format of USENET message.  It is a subset of RFC 822
1337 (@ref{RFC 822}).  It is not Internet standard, but a lot of netnews
1338 excepting Usenet uses it.
1339
1340
1341 @noindent
1342 [USENET: RFC 1036]
1343 @quotation
1344 M. Horton and R. Adams, ``Standard for Interchange of USENET Messages'',
1345 December 1987, (obsolete RFC 850).
1346 @end quotation
1347
1348
1349
1350 @node RFC 2045, RFC 2046, RFC 1036, Glossary
1351 @subsection RFC 2045
1352 @cindex RFC 2045
1353 @cindex Standards Track
1354
1355
1356 @noindent
1357 [RFC 2045]
1358 @quotation
1359 N. Freed and N. Borenstein, ``Multipurpose Internet Mail Extensions
1360 (MIME) Part One: Format of Internet Message Bodies'', November 1996,
1361 Standards Track (obsolete RFC 1521, 1522, 1590).
1362 @end quotation
1363
1364
1365
1366 @node RFC 2046, RFC 2048, RFC 2045, Glossary
1367 @subsection RFC 2046
1368 @cindex RFC 2046
1369 @cindex Standards Track
1370
1371
1372 @noindent
1373 [RFC 2046]
1374 @quotation
1375 N. Freed and N. Borenstein, ``Multipurpose Internet Mail Extensions
1376 (MIME) Part Two: Media Types'', November 1996, Standards Track (obsolete
1377 RFC 1521, 1522, 1590).
1378 @end quotation
1379
1380
1381
1382 @node RFC 2048, RFC 2049, RFC 2046, Glossary
1383 @subsection RFC 2048
1384 @cindex RFC 2048
1385 @cindex Standards Track
1386
1387
1388 @noindent
1389 [RFC 2048]
1390 @quotation
1391 N. Freed, J. Klensin and J. Postel, ``Multipurpose Internet Mail
1392 Extensions (MIME) Part Four: Registration Procedures'', November 1996,
1393 Standards Track (obsolete RFC 1521, 1522, 1590).
1394 @end quotation
1395
1396
1397
1398 @node RFC 2049, plain text, RFC 2048, Glossary
1399 @subsection RFC 2049
1400 @cindex RFC 2049
1401 @cindex Standards Track
1402
1403
1404 @noindent
1405 [RFC 2049]
1406 @quotation
1407 N. Freed and N. Borenstein, ``Multipurpose Internet Mail Extensions
1408 (MIME) Part Five: Conformance Criteria and Examples'', November 1996,
1409 Standards Track (obsolete RFC 1521, 1522, 1590).
1410 @end quotation
1411
1412
1413
1414 @node plain text, us-ascii, RFC 2049, Glossary
1415 @subsection plain text
1416
1417 A textual data represented by only coded character set (@ref{coded character set}).  It does not have information about font or
1418 typesetting.  (cf. @ref{text/plain})
1419
1420
1421
1422 @node us-ascii,  , plain text, Glossary
1423 @subsection us-ascii
1424 @cindex ASCII
1425 @cindex us-ascii
1426
1427 A MIME charset (@ref{MIME charset}) for primary Latin script mainly
1428 written by English or other languages.@refill
1429
1430 It is a 7bit coded character set (@ref{coded character set}) based on
1431 ISO 2022 (@ref{ISO 2022}), it contains only ASCII (@ref{ASCII}) and code
1432 extension (@ref{code extension}) is not allowed.@refill
1433
1434 It is standard coded character set of Internet mail.  If MIME charset is
1435 not specified, @strong{us-ascii} is used as default.@refill
1436
1437 In addition, @strong{ASCII} of RFC 822 (@ref{RFC 822}) should be
1438 interpreted as us-ascii.
1439
1440
1441 @node Bug report, CVS, Glossary, Appendix
1442 @section How to report bugs
1443 @cindex good bug report
1444
1445 If you write bug-reports and/or suggestions for improvement, please
1446 send them to the tm Mailing List:
1447
1448 @itemize @bullet
1449 @item
1450  Japanese <bug-tm-ja@@chamonix.jaist.ac.jp>
1451 @item
1452  English <bug-tm-en@@chamonix.jaist.ac.jp>
1453 @end itemize
1454
1455
1456 Notice that, we do not welcome bug reports about too old version.  Bugs
1457 in old version might be fixed.  So please try latest version at
1458 first.@refill
1459
1460 You should write @strong{good bug report}.  If you write only ``FLIM
1461 does not work'', we can not find such situations.  At least, you should
1462 write name, type, variants and version of OS, emacs, APEL, FLIM, SEMI
1463 and MUA, and setting.  In addition, if error occurs, to send backtrace
1464 is very important. (cf. @ref{(emacs)Bugs}) @refill
1465
1466 Bug may not appear only your environment, but also in a lot of
1467 environment (otherwise it might not bug).  Therefor if you send mail
1468 to author directly, we must write a lot of mails.  So please send mail
1469 to address for tm bugs instead of author.
1470
1471 Via the tm ML, you can report FLIM bugs, obtain the latest release of
1472 FLIM, and discuss future enhancements to FLIM.  To join the tm ML,
1473 send empty e-mail to:
1474
1475 @itemize @bullet
1476 @item
1477  Japanese <tm-ja-help@@chamonix.jaist.ac.jp>
1478 @item
1479  English  <tm-en-help@@chamonix.jaist.ac.jp>
1480 @end itemize
1481
1482
1483
1484 @node CVS, History, Bug report, Appendix
1485 @section CVS based development
1486
1487 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
1488 \e$B?7$N\e(B FLIM \e$B$rF~<j$9$k$3$H$,$G$-$^$9!'\e(B
1489
1490 @example
1491 (0) cvs login
1492
1493     % cvs -d :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root \
1494         login
1495
1496     CVS password: [CR] # NULL string
1497
1498 (1) checkout
1499
1500     % cvs -d :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root \
1501         checkout [-r TAG] flim
1502 @end example
1503
1504
1505 CVS \e$B$rMQ$$$?3+H/$K;22C$7$?$$J}$O\e(B
1506
1507 @itemize @bullet
1508 @item
1509  <cvs@@chamonix.jaist.ac.jp>
1510 @end itemize
1511
1512 @noindent
1513 \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
1514 \e$B$r1h$($F8fO"Mm$/$@$5$$!#\e(B
1515
1516
1517 @node History,  , CVS, Appendix
1518 @section History of FLIM
1519
1520 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
1521 \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 
1522 \e$B@lMQ$N\e(B encoded-word \e$B$NI|9f2=%W%m%0%i%`$G$7$?!#\e(B@refill
1523
1524 \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
1525 \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
1526 \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 
1527 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
1528 charset (@ref{MIME charset}) \e$B$rF1;~$K;H$&$3$H$,$G$-$^$7$?!#$3$N;~!"\e(B
1529 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
1530 package \e$B$K$^$H$a$i$l$^$9!#\e(B@refill
1531
1532 \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
1533 \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 
1534 package \e$B$K$^$H$a$i$l!"\e(Btm \e$B$H$$$&L>A0$GG[I[$5$l$^$9!#\e(B@refill
1535
1536 \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
1537 @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
1538 \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
1539 \e$B3K$H$J$j$^$9!#\e(B@refill
1540
1541 @file{tm-view.el} \e$B$OEvA3!"\e(BContent-Transfer-Encoding \e$B$r07$&I,MW$,$"$j$^$9!#\e(B
1542 \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 
1543 @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 
1544 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
1545 \e$B$^$7$?!#\e(B@refill
1546
1547 \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
1548 \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
1549 \e$B$7$?!#\e(B@refill
1550
1551 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
1552 \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 
1553 @file{std11.el} \e$B$KEv$?$j$^$9!#$^$?!"$3$N2aDx$G\e(B @file{tiny-mime.el} \e$B$OI|\e(B
1554 \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
1555 \e$B$^$7$?!#$3$NN><T$,8=:_$N\e(B @file{eword-decode.el} \e$B$H\e(B 
1556 @file{eword-encode.el} \e$B$N@hAD$KEv$?$j$^$9!#\e(B@refill
1557
1558 \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 
1559 \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
1560 \e$B$N$&$A$N\e(B MEL \e$B$,\e(B FLIM \e$B$ND>@\$N@hAD$KEv$?$j$^$9!#\e(B@refill
1561
1562 \e$B8e$K!"\e(BAPEL \e$B$+$i\e(B @file{std11.el} \e$B$,0\$5$l!"$^$?!"\e(B@file{mailcap.el},
1563 @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
1564 package \e$B$NL>A0$,\e(B FLIM\e$B$H$J$j$^$9!#\e(B@refill
1565
1566 \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
1567 FLIM \e$B$N;^$G$"$k\e(B ``FLIM-FLAM'' \e$B$H$J$C$F$$$^$9!#\e(B
1568
1569
1570 @node Concept Index, Function Index, Appendix, Top
1571 @chapter Concept Index
1572
1573 @printindex cp
1574
1575 @node Function Index, Variable Index, Concept Index, Top
1576 @chapter Function Index
1577
1578 @printindex fn
1579
1580 @node Variable Index,  , Function Index, Top
1581 @chapter Variable Index
1582
1583 @printindex vr
1584 @bye