tm 7.95.
[elisp/tm.git] / doc / tm-view-en.texi
1 \input texinfo.tex
2 @setfilename tm-view-en.info
3 @settitle{tm-view 7.77 Reference Manual (English Version)}
4 @titlepage
5 @title tm-view 7.77 Reference Manual (English Version)
6 @author MORIOKA Tomohiko <morioka@@jaist.ac.jp>
7 @subtitle 1996/10/11
8 @end titlepage
9 @node Top, Introduction, (dir), (dir)
10 @top tm-view 7.77 Reference Manual (English Version)
11
12 @ifinfo
13
14 This file documents tm-view, a MIME Viewer for GNU Emacs.
15 @end ifinfo
16
17 @menu
18 * Introduction::                What is tm-view?
19 * MIME display::                Structure of display in mime/viewer-mode
20 * mime/viewer-mode::            Navigation in mime/viewer-mode
21 * method::                      Mechanism of decoding
22 * Two buffers for an article::  raw-article-buffer and preview-buffer
23 * API::                         Functions to decode MIME message
24 * Concept Index::               
25 * Function Index::              
26 * Variable Index::              
27 @end menu
28
29 @node Introduction, MIME display, Top, Top
30 @chapter What is tm-view?
31
32 The tm-view is a general MIME viewer running on GNU Emacs.@refill
33
34 tm-view provides the major-mode called @code{mime/viewer-mode}
35 (@ref{mime/viewer-mode}) to read MIME message for MUA.  MUA
36 (@ref{(tm-en)MUA}) implementer can use it to add MIME function.@refill
37
38 tm-view is a user interface kernel to view and navigate MIME message.
39 tm-view drives some programs to navigate each content-type
40 (@ref{(tm-en)content-type})s, they are called
41 @cindex{method}@strong{method} (@ref{method}).  tm-view calls some
42 programs to display each contents and headers in preview buffer, they
43 are called @cindex{filter}@strong{filter} (@ref{Two buffers for an
44 article}).  Method and filters are tm-view application program.  They
45 expand tm-view to treat various kinds of MIME types.
46
47
48 @node MIME display, mime/viewer-mode, Introduction, Top
49 @chapter Structure of display in mime/viewer-mode
50
51 In mime/viewer-mode (@ref{mime/viewer-mode}), following are displayed
52 for each parts:@refill
53
54 @example
55         [content-button]
56         (content-header)
57         
58         (content-body)
59         (content-separator)
60 @end example
61
62 You can change design or stop to display if you specify for each
63 conditions, such as content-types.@refill
64
65 Example:
66
67 @example
68 From: morioka@@jaist.ac.jp (MORIOKA Tomohiko)
69 Subject: Re: Question
70 Newsgroups: zxr.message.mime
71 Date: 22 Oct 93 11:02:44
72 Mime-Version: 1.0
73 Organization: Japan Advanced Institute of Science and Technology,
74         Ishikawa, Japan
75
76 [1  (text/plain)]
77   How to compose MIME message in MIME-Edit mode.
78
79   Press `C-c C-x ?' then help message will be displayed:
80
81 C-c C-x C-t     insert a text message.
82 C-c C-x TAB     insert a (binary) file.
83 C-c C-x C-e     insert a reference to external body.
84 C-c C-x C-v     insert a voice message.
85 C-c C-x C-y     insert a mail or news message.
86 C-c C-x RET     insert a mail message.
87 C-c C-x C-s     insert a signature file at end.
88 C-c C-x t       insert a new MIME tag.
89 C-c C-x a       enclose as multipart/alternative.
90 C-c C-x p       enclose as multipart/parallel.
91 C-c C-x m       enclose as multipart/mixed.
92 C-c C-x d       enclose as multipart/digest.
93 C-c C-x s       enclose as PGP signed.
94 C-c C-x e       enclose as PGP encrypted.
95 C-c C-x C-k     insert PGP public key.
96 C-c C-x C-p     preview editing MIME message.
97 ...
98
99 So press `C-c C-x C-i' and specify file name you want to include.
100
101   MIME encoding for binary file is normally Base64.
102
103 [2  (image/gif)]
104
105 [3  (text/plain)]
106
107   In this way, it is finish a message attaching a picture.
108
109 ======================== A cup of Russian tea ========================
110 ============  * not by jam, not by marmalade, by honey *  ============
111 ============               MORIOKA Tomohiko               ============
112 =============== Internet E-mail: <morioka@@jaist.ac.jp> ===============
113 @end example
114
115
116
117 @menu
118 * content-button::              
119 * content-header::              
120 * content-body::                
121 * content-separator::           
122 @end menu
123
124 @node content-button, content-header, MIME display, MIME display
125 @section content-button
126
127 content-subject displays abstract for the part.  It is placed in top of
128 the part.@refill
129
130 In default, it is displayed following design:
131
132 @example
133         [1.3 test (text/plain)]
134 @end example
135
136
137 First number field represents position of a content in the part.  It is
138 called @cindex{content-number}@strong{content-number}.  It can be
139 considered as the chapter number in the message.@refill
140
141 Second string part represents title.  It is created by following:
142
143 @enumerate
144 @item
145 name paramater or x-name parameter in Content-Type field
146 (@ref{(tm-en)Content-Type field})
147 @item
148 Content-Description field (@ref{(tm-en)Content-Description field}) or
149 Subject field
150 @item
151  filename of uuencode
152 @end enumerate
153
154
155 If they are not exists, space is displayed.@refill
156
157 Third parenthesis part represents content-type/subtype of the part.  If
158 it is non-MIME part, @code{nil} is displayed.@refill
159
160 Content-button is used like icon when content-header
161 (@ref{content-header}) and content-body (@ref{content-body}) are hidden.
162 For example:
163
164 @example
165         [2  (image/gif)]
166 @end example
167
168 @noindent
169 if you press @kbd{v} key, GIF image is displayed.
170
171 If mouse operations are available, you can press content-button by mouse
172 button-2 (center button of 3 button-mouse) to play, similarly to press
173 @kbd{v} key. (cf. @ref{mime/viewer-mode}) @refill
174
175 By the way, it is annoying to display content-button if content-header
176 is displayed.  So tm-view provides a mechanism to specify conditions
177 to display content-button.
178
179
180 @defvar mime-viewer/content-button-ignored-ctype-list
181
182 List of content-types.@refill
183
184 If content-type of a part is a member of this list, its content-button
185 is not displayed.
186 @end defvar
187
188
189
190 @node content-header, content-body, content-button, MIME display
191 @section content-header
192
193 A content header displays the header portion of a part in the
194 preview-buffer.  However it is annoying to display header for every
195 parts, so tm-view provides a mechanism to specify its condition.@refill
196
197 When the function @code{mime-viewer/header-visible-p} returns @code{t}
198 for reversed-content-number of a part, content-header is
199 displayed.@refill
200
201 This judge function returns @code{t} when a part is root or content-type
202 of its parent is a member of the variable
203 @code{mime-viewer/childrens-header-showing-Content-Type-list}.@refill
204
205 If you want to change this condition, please redefine it.  Notice that
206 it refers variable
207 @code{mime-viewer/childrens-header-showing-Content-Type-list}, however
208 if you redefine function @code{mime-viewer/header-visible-p}, it may not
209 work.  So if you want to redefine it, it should be refer variable
210 @code{mime-viewer/childrens-header-showing-Content-Type-list}.@refill
211
212 When content-header is displayed, content-header are formated by the
213 program called by
214 @cindex{content-header-filter}@strong{content-header-filter}.
215 Content-header-filter is searched from variable
216 @code{mime-viewer/content-header-filter-alist}.  Its key is major-mode
217 of the raw-article-buffer (@ref{raw-article-buffer}).  If not found,
218 function @code{mime-viewer/default-content-header-filter} is
219 called.@refill
220
221
222 @defvar mime-viewer/childrens-header-showing-Content-Type-list
223
224 List of content-types.  If content-type of parent of a part is a member
225 of this variable, its content-header is displayed.  Default value is
226 @code{'("message/rfc822" "message/news")}.@refill
227
228 This variable is referred by the function
229 @code{mime-viewer/header-visible-p}.
230 @end defvar
231
232
233
234 @defun mime-viewer/header-visible-p rcnum cinfo  &optional  ctype
235
236 Returns @code{t} if a part which reversed-content-number is @var{rcnum}
237 in content-info @var{cinfo} is displayed.@refill
238
239 If you know content-type, you can specify by @var{ctype}.
240 @end defun
241
242
243
244 @defvar mime-viewer/content-header-filter-alist
245
246 Association-list whose key is major-mode of a raw-article-buffer, value
247 is content-header-filter.
248 @end defvar
249
250
251
252 @defun mime-viewer/default-content-header-filter
253
254 It is called when content-header-filter is not found in variable
255 @code{mime-viewer/content-header-filter-alist}.@refill
256
257 It refers @code{mime-viewer/ignored-field-regexp}.
258 @end defun
259
260
261
262 @defvar mime-viewer/ignored-field-list
263
264 List of regular expression to represent invisible fields even if
265 content-header is displayed.@refill
266
267 Variable @code{mime-viewer/ignored-field-regexp} is created from
268 it.@refill
269
270 Please use function @code{tm:add-fields} or @code{tm:delete-fields} to
271 set it.
272 @end defvar
273
274
275
276 @node content-body, content-separator, content-header, MIME display
277 @section content-body
278
279 @cindex{content-body}@strong{content-body} represents content of the
280 part.@refill
281
282 tm-view does not display raw content body.  For example, if a content
283 has binary, it is hidden.  If a content has text/enriched, it is
284 formated.  Namely content body is hidden or formated.@refill
285
286 Function @code{mime-viewer/body-visible-p} is a judge function whether
287 content-body of a content is displayed.  If it returns @code{nil},
288 content-body is hidden.  In default, it returns non-@code{nil} when
289 content-type of a part is a member of variable
290 @code{mime-viewer/default-showing-Content-Type-list}.@refill
291
292 When content-body of a content is displayed, content-body is formated by
293 @cindex{content-filter}@strong{content-filter}.  Content-filter is
294 searched from variable @code{mime-viewer/content-filter-alist}.  At this
295 time, major-mode of the raw-article-buffer (@ref{raw-article-buffer}) is
296 used as the key.
297
298 If it is not found, function
299 @code{mime-viewer/default-content-filter} is called.
300
301
302 @defvar mime-viewer/default-showing-Content-Type-list
303
304 List of content-type.  If content-type of a part is a member of this
305 variable, its body is displayed.
306 @end defvar
307
308
309
310 @defun mime-viewer/body-visible-p rcnum cinfo  &optional  ctype
311
312 Return non-@code{nil}, if content-type of a part is displayed.
313 @var{rcnum} is reversed-content-number of a part.  @var{cinfo} is
314 content-info of the message.  If you know content-type of a part, you
315 can specify it as argument @var{ctype}.
316 @end defun
317
318
319
320 @defvar mime-viewer/content-filter-alist
321
322 Association-list whose key is major-mode of a raw-article-buffer, value
323 is content-filter.
324 @end defvar
325
326
327
328 @defun mime-viewer/default-content-filter rcnum cinfo ctype params subj
329
330 It is called when content-body of a part should be displayed and
331 content-filter is not found in
332 @code{mime-viewer/content-filter-alist}.@refill
333
334 In default, it does nothing.
335 @end defun
336
337
338
339 @node content-separator,  , content-body, MIME display
340 @section content-separator
341
342 @cindex{content-separator}@strong{content-separator} is displayed to
343 represent boundary of contents.@refill
344
345 Content-separator is displayed by function
346 @code{mime-viewer/default-content-separator}.  In default, it displays
347 line-break when content-header and content-body are not
348 displayed.@refill
349
350 If you want to change this condition, please redefine this function.
351
352
353 @defun mime-viewer/default-content-separator rcnum cinfo ctype params subj
354
355 Display content-separator.  @var{cnum} is content-number of a content.
356 @var{cinfo} is content-info of the message.  @var{ctype} is content-type
357 of a content.  @var{params} is Content-Type field parameters of a
358 content.  @var{subj} is subject.@refill
359
360 In default, it displays line-break when content-header and content-body
361 are not displayed.
362 @end defun
363
364
365
366 @node mime/viewer-mode, method, MIME display, Top
367 @chapter Navigation in mime/viewer-mode
368
369 @code{mime/viewer-mode} has following functions:@refill
370
371 @table @kbd
372 @item @key{u}
373 goes to the upper content (returns to the Summary mode if the cursor
374 is sitting on the top content (*1))
375
376 @item @key{p}
377 goes to the previous content
378
379 @item @key{n}
380 goes to the next content
381
382 @item @key{SPC}
383 scrolls up
384
385 @item @key{M-SPC}
386 scrolls down
387
388 @item @key{DEL}
389 scrolls down
390
391 @item @key{RET}
392 goes to the next line
393
394 @item @key{M-RET}
395 goes to the previous line
396
397 @item @key{<}
398 goes to the beginning of message
399
400 @item @key{>}
401 goes to the end of message
402
403 @item @key{v}
404 playbacks a part (*2)
405
406 @item @key{e}
407 extracts a file from a part (*2)
408
409 @item @key{C-c C-p}
410 prints a part (*2)
411
412 @item @key{f}
413 displays X-Face in the message
414
415 @item @key{mouse-button-2}
416 drives mouse button in preview-buffer.
417
418 For content-button, it playbacks a part (*2)@refill
419
420 For URL-button, it drives WWW browser@refill
421
422 @end table
423
424 @noindent
425 @strong{[Notice]}
426 @quotation
427
428 (*1) Not return to the Summary mode unless tm-view has been setup using
429 tm-mh-e, tm-vm, gnus-mime, tm-gnus, tm-rmail etc.@refill
430
431 (*2) Actual playback/extract/print will be performed by a method.
432 @end quotation
433
434
435
436 @node method, Two buffers for an article, mime/viewer-mode, Top
437 @chapter Mechanism of decoding
438
439 In @code{mime/viewer-mode}, you can do play (@kbd{v}), extract
440 (@kbd{e}), or print (@kbd{C-c C-p}) for each parts.  These operations
441 are called @cindex{decoding operation(s) (for a part)}@strong{decoding
442 operation(s) (for a part)}.  And kind of decoding operations are called
443 @cindex{decoding-mode}@strong{decoding-mode}.@refill
444
445 When decoding operation is driven, tm-view calls a procedure matched for
446 the condition, such as content-type (@ref{(tm-en)content-type}) of the
447 part or its environment.  This procedure is called
448 @cindex{method}@strong{method}.@refill
449
450 There are two kinds of methods.  One is Emacs Lisp function, called
451 @cindex{internal method}@strong{internal method}.  Another one is
452 external program, called @cindex{external method}@strong{external
453 method}.@refill
454
455 Internal method operates in Emacs, so it can do carefully.@refill
456
457 External method is called as asynchronous process, so Emacs does not
458 wait while method is running.  So it is good for big data, such as
459 audio, image or video.
460
461
462 @menu
463 * decoding-condition::          Setting decoding condition for parts
464 * environment variables::       Environment variables
465 @end menu
466
467 @node decoding-condition, environment variables, method, method
468 @section Setting decoding condition for parts
469
470 When decoding operation is driven, tm-view calls a method matched for
471 the condition searched from the variable
472 @code{mime/content-decoding-condition}.@refill
473
474 Variable @code{mime/content-decoding-condition} is defined as a list
475 with the following syntax:@refill
476
477 @lisp
478         (condition_1 condition_2 ...)
479 @end lisp
480
481 Each condition are association-list with the following syntax:@refill
482
483 @lisp
484         ((field-type_1 . value_1)
485          (field-type_2 . value_2)
486          ...)
487 @end lisp
488
489 For example, if you want to call the external method named tm-plain to
490 decode every text/plain (@ref{(tm-en)text/plain}) type parts, you can
491 define the condition like:@refill
492
493 @lisp
494         ((type . "text/plain")
495          (method "tm-plain" nil 'file 'type 'encoding 'mode 'name))
496 @end lisp
497
498 This condition definition will match all parts whose content-type
499 (@ref{(tm-en)content-type}) are text/plain.  Here is an another
500 example:@refill
501
502 @lisp
503         ((type . "text/plain")
504          (method "tm-plain" nil 'file 'type 'encoding 'mode 'name)
505          (mode . "play"))
506 @end lisp
507
508 This will match the part whose type is text/plain and the mode is
509 play.@refill
510
511 Here is an another example:@refill
512
513 @lisp
514         ((method "metamail" t "-m" "tm" "-x" "-d" "-z" "-e" 'file)
515          (mode . "play"))
516 @end lisp
517
518 This will match all parts which have a mode of play.@refill
519
520 The conditions defined in a variable
521 @code{mime/content-decoding-condition} are examined from top to
522 bottom.  The first matching condition becomes valid and the method
523 specified in that condition definition will be executed.
524
525
526 @menu
527 * method value::                Format of method value
528 * Example of decoding-condition::  
529 @end menu
530
531 @node method value, Example of decoding-condition, decoding-condition, decoding-condition
532 @subsection Format of method value
533
534 You can specify the method field of the decoding-condition definition in
535 two different ways,@refill
536
537 @lisp
538         (method . SYMBOL)
539 @end lisp
540
541 @noindent
542 or
543
544 @lisp
545         (method  STRING  FLAG  arg1  arg2  ...)
546 @end lisp
547
548 @noindent
549 can be accepted.
550
551 When a symbol is specified in the method field, a function whose name is
552 SYMBOL will be called as an internal method.@refill
553
554 When a list is specified in the method field, it will be called as an
555 external method.@refill
556
557 The list below shows the meaning of the parameters when the external
558 method is specified in the method field.@refill
559
560 @table @samp
561 @item STRING
562 name of an external method
563
564 @item FLAG
565 If @code{t}, both the content-header and the content-body
566 are passed to an external method.
567
568 If @code{nil}, only the content-body is passed to an external
569 method.@refill
570
571 @item ARGUMENTs
572 list of arguments passed to an external method
573
574 @end table
575
576 An argument passed to an external method can be in one of the following
577 formats:@refill
578
579 @table @samp
580 @item STRING
581 string itself
582
583 @item 'SYMBOL
584 value gotten using SYMBOL as a key from decoding-condition
585
586 @item 'STRING
587 value gotten using STRING as a key from decoding-condition
588
589 @end table
590
591 @code{'SYMBOL} can be one of the following:@refill
592
593 @table @samp
594 @item 'file
595 name of a file holding the original content
596
597 @item 'type
598 content-type/sub-type of Content-Type field
599
600 @item 'encoding
601 field body of Content-Transfer-Encoding field
602
603 @item 'mode
604 decoding-mode
605
606 @item 'name
607 name of a file created by decode operation
608
609 @end table
610
611
612 @code{'STRING} is used to search a parameter of the Content-Type
613 field whose name matches with it, and pass the value of that parameter
614 to the external method.
615
616
617 @node Example of decoding-condition,  , method value, decoding-condition
618 @subsection Example of decoding-condition
619
620 Following is an example of decoding-condition:
621
622 @lisp
623 (defvar mime/content-decoding-condition
624   '(((type . "text/plain")
625      (method "tm-plain" nil 'file 'type 'encoding 'mode 'name))
626     ((type . "text/x-latex")
627      (method "tm-latex" nil 'file 'type 'encoding 'mode 'name))
628     ((type . "audio/basic")
629      (method "tm-au"    nil 'file 'type 'encoding 'mode 'name))
630     ((type . "image/gif")
631      (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
632     ((type . "image/jpeg")
633      (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
634     ((type . "image/tiff")
635      (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
636     ((type . "image/x-tiff")
637      (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
638     ((type . "image/x-xbm")
639      (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
640     ((type . "image/x-pic")
641      (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
642     ((type . "video/mpeg")`
643      (method "tm-mpeg"  nil 'file 'type 'encoding 'mode 'name))
644     ((type . "application/octet-stream")
645      (method "tm-file"  nil 'file 'type 'encoding 'mode 'name))
646     ((type . "message/partial")
647      (method . mime/decode-message/partial-region))
648     ((method "metamail" t
649              "-m" "tm" "-x" "-d" "-z" "-e" 'file)(mode . "play"))
650     ))
651 @end lisp
652
653
654 For example, if you want to use metamail to decode any contents,
655
656 @lisp
657 (setq mime/content-decoding-condition
658       '(
659         ((method "metamail" t "-m" "tm" "-x" "-d" "-z" "-e" 'file))
660        ))
661 @end lisp
662
663 @noindent
664 will work.
665
666 Variable @code{mime/content-decoding-condition} provides you of very
667 flexible way to define the conditions of decoding.  It can be simple if
668 you only need the a few decoding methods, while it can be very
669 complicated if you want to use the separate decoding method for each
670 type/mode combination.@refill
671
672 Following function may be useful to set decoding-condition.  It is a
673 function of @file{tl-atype.el}.
674
675
676 @defun set-atype symbol alist
677
678 Add condition @var{alist} to @var{symbol}.
679
680 @noindent
681 @strong{[Example]}
682 @quotation
683
684 @lisp
685 (set-atype 'mime/content-decoding-condition
686            '((type . "message/external-body")
687              ("access-type" . "anon-ftp")
688              (method . mime/decode-message/external-ftp)
689              ))
690 @end lisp
691 @end quotation
692 @end defun
693
694
695
696 @node environment variables,  , decoding-condition, method
697 @section Environment variables
698
699 Standard methods of tm-view reference some environment variables.  You
700 can specify them to customize.
701
702 @table @var
703 @item TM_TMP_DIR
704 Directory for temporary files or extracted files.  If it is omitted,
705 @file{/tmp/} is used.
706
707 @item VIDEO_DITHER
708 Dither for mpeg_play.  If it is omitted, `gray' is used.
709
710 @item TM_WWW_BROWSER
711 WWW browser name.  If it is omitted, `netscape' is used.
712
713 @end table
714
715
716
717 @node Two buffers for an article, API, method, Top
718 @chapter raw-article-buffer and preview-buffer
719
720 tm-view managements two buffers, one is for raw message called
721 @cindex{raw-article-buffer}@strong{raw-article-buffer}, another one is
722 to preview for user called
723 @cindex{preview-buffer}@strong{preview-buffer}.  major-mode of
724 raw-article-buffer is same as major-mode for article of original MUA,
725 major-mode of preview-buffer is @code{mime/viewer-mode}
726 (@ref{mime/viewer-mode}).@refill
727
728 When called @code{mime/viewer-mode}, tm-view analyzes
729 raw-article-buffer, and sets its result to the variable
730 @code{mime::article/content-info}.@refill
731
732 After that, tm-view create a preview-buffer corresponded to the
733 raw-article-buffer.  As this time, tm-view modifies header and body of
734 each parts of the message by specified conditions.  Filter program for
735 header is called @cindex{header-filter}@strong{header-filter}
736 (@ref{content-header}), filter program for body is called
737 @cindex{content-filter}@strong{content-filter} (@ref{content-body}), and
738 they are called @cindex{filter}@strong{filter}.@refill
739
740 When preview-buffer is made, buffer local variable of preview-buffer
741 @code{mime::preview/content-list} is made to register structure of
742 preview-buffer.  tm-view manages message by
743 @code{mime::article/content-info} in raw-article-buffer and
744 @code{mime::preview/content-list} in preview-buffer.@refill
745
746 @noindent
747 @strong{[Notice]}
748 @quotation
749 In this document, I call ``content-type'' as content-type/subtype of
750 Content-Type field.
751 @end quotation
752
753
754
755 @menu
756 * raw-article-buffer::          buffer local variables of raw-article-buffer
757 * preview-buffer::              Buffer local variables of preview-buffer
758 @end menu
759
760 @node raw-article-buffer, preview-buffer, Two buffers for an article, Two buffers for an article
761 @section buffer local variables of raw-article-buffer
762
763 @deffn{Structure} mime::content-info rcnum point-min point-max type parameters encoding children
764
765 structure to represent MIME content in raw-article-buffer.  It is called
766 by @cindex{content-info}@strong{content-info}.@refill
767
768 Please use reference function @code{mime::content-info/SLOT-NAME} to
769 reference slot of content-info.  Their argument is only
770 content-info.@refill
771
772 Following is a list of slots of the structure:
773
774 @table @var
775 @item rcnum
776 ``reversed content-number'' (list)
777
778 @item point-min
779 beginning point of region in raw-article-buffer
780
781 @item point-max
782 end point of region in raw-article-buffer
783
784 @item type
785 content-type/sub-type (string or nil)
786
787 @item parameters
788 parameter of Content-Type field (association list)
789
790 @item encoding
791 Content-Transfer-Encoding (string or nil)
792
793 @item children
794 parts included in this part (list of content-infos)
795
796 @end table
797
798 If a part includes other parts in its contents, such as multipart or
799 message/rfc822, content-infos of other parts are included in
800 @var{children}, so content-info become a tree.
801 @end deffn
802
803
804 @defvar mime::article/content-info
805
806 result of MIME parsing of raw-article-buffer (content-info)
807 @end defvar
808
809
810 @defvar mime::article/preview-buffer
811
812 preview-buffer corresponded by this buffer
813 @end defvar
814
815
816 @defun mime-article/point-content-number point  &optional  cinfo
817
818 In a region managed by content-info @var{cinfo}, it returns
819 content-number corresponded by @var{point}.@refill
820
821 If @var{cinfo} is omitted, @code{mime::article/content-info} is used as
822 default value.
823 @end defun
824
825
826 @defun mime-article/rcnum-to-cinfo rcnum  &optional  cinfo
827
828 In a region managed by content-info @var{cinfo}, it returns content-info
829 corresponded by reversed-content-number @var{rcnum}.@refill
830
831 If @var{cinfo} is omitted, @code{mime::article/content-info} is used as
832 default value.
833 @end defun
834
835
836 @defun mime-article/cnum-to-cinfo rcnum  &optional  cinfo
837
838 In a region managed by content-info @var{cinfo}, it returns content-info
839 corresponded by content-number @var{rcnum}.@refill
840
841 If @var{cinfo} is omitted, @code{mime::article/content-info} is used as
842 default value.
843 @end defun
844
845
846 @defun mime/flatten-content-info  &optional  cinfo
847
848 It returns flatten list of content-info from content-info @var{cinfo}
849 tree.@refill
850
851 If @var{cinfo} is omitted, @code{mime::article/content-info} is used as
852 default value.
853 @end defun
854
855
856
857 @node preview-buffer,  , raw-article-buffer, Two buffers for an article
858 @section Buffer local variables of preview-buffer
859
860 @defvar mime::preview/mother-buffer
861
862 Mother buffer of this preview-buffer.
863 @end defvar
864
865
866 @deffn{Structure} mime::preview-content-info point-min point-max buffer content-info
867
868 structure to represent MIME content in preview-buffer.  It is called by
869 @cindex{preview-content-info}@strong{preview-content-info}.@refill
870
871 Please use reference function
872 @code{mime::preview-content-info/SLOT-NAME} to reference slot of
873 preview-content-info.  Their argument is only
874 preview-content-info.@refill
875
876 Following is a list of slots of the structure:
877
878 @table @var
879 @item point-min
880 beginning point of region in preview-buffer
881
882 @item  point-max
883 end point of region in preview-buffer
884
885 @item buffer
886 raw-article-buffer corresponding a part
887
888 @item content-info
889 content-info corresponding a part
890
891 @end table
892 @end deffn
893
894
895
896 @defvar mime::preview/content-list
897
898 List of preview-content-info to represent structure of this
899 preview-buffer.
900 @end defvar
901
902
903
904 @defvar mime::preview/article-buffer
905
906 raw-article-buffer corresponded by this preview-buffer.
907 @end defvar
908
909
910
911 @defvar mime::preview/original-major-mode
912
913 major-mode of original buffer.
914 @end defvar
915
916
917
918 @defvar mime::preview/original-window-configuration
919
920 window-configuration just before made this preview-buffer.
921 @end defvar
922
923
924
925 @defun mime-preview/point-pcinfo point  &optional  pcl
926
927 In a region of preview-buffer managed by preview-content-info @var{pcl},
928 it returns preview-content-info corresponded by @var{point}.@refill
929
930 If @var{cinfo} is omitted, @code{mime::preview/content-list} is used.
931 @end defun
932
933
934
935 @node API, Concept Index, Two buffers for an article, Top
936 @chapter Functions to decode MIME message
937
938 tm-view provides some available functions to decode and navigate MIME
939 message to each MUA (@ref{(tm-en)MUA})s.@refill
940
941 There are 2 kinds of functions, one is for MIME preview, another one is
942 to decode RFC 1522 encoded-word (@ref{(tm-en)encoded-word}).
943
944
945 @menu
946 * API about MIME preview::      Function to preview MIME message
947 * encoded-word decoding::       encoded-word decoder
948 @end menu
949
950 @node API about MIME preview, encoded-word decoding, API, API
951 @section Function to preview MIME message
952
953
954 @deffn{Command} mime/viewer-mode &optional  mother ctl encoding ibuf obuf mother-keymap
955
956 Parse @var{ibuf} as a MIME message, and create preview-buffer into
957 @var{obuf} to display to user, then enter @code{mime/viewer-mode}
958 (@ref{mime/viewer-mode}).@refill
959
960 If @var{ibuf} is omitted, current buffer is used.@refill
961
962 @var{mother} is used to specify original raw-article-buffer.  It may be
963 useful when a raw-article-buffer is assembled from message/partial
964 messages.@refill
965
966 @var{ctl} is used to specify Content-Type field
967 (@ref{(tm-en)Content-Type field}) information.  Its format is output
968 format of @code{mime/Content-Type}.  When @var{ctl} is specified,
969 tm-view uses it instead of Content-Type field of the
970 raw-article-buffer.@refill
971
972 @var{encoding} is used to specify field-body of
973 Content-Transfer-Encoding field.  When is is specified, tm-view uses it
974 instead of Content-Type field of the raw-article-buffer.@refill
975
976 If @var{mother-keymap} is specified, keymap of @code{mime/viewer-mode}
977 includes it.
978 @end deffn
979
980
981
982 @node encoded-word decoding,  , API about MIME preview, API
983 @section encoded-word decoder
984
985 tm-view has functions to decode RFC 1522 encoded-word
986 (@ref{(tm-en)encoded-word}).
987
988
989 @deffn{Command} mime/decode-message-header
990
991 It decodes encoded-words in message header of current buffer.@refill
992
993 If an encoded-word is broken or invalid, or it has non supported MIME
994 charset (@ref{(tm-en)MIME charset}), it is not decoded.
995 @end deffn
996
997
998
999 @deffn{Command} mime-eword/decode-region start end  &optional  unfolding must-unfold
1000
1001 It decodes encoded-words in region @var{start} to @var{end}.@refill
1002
1003 If an encoded-word is broken or invalid, or it has non supported MIME
1004 charset (@ref{(tm-en)MIME charset}), it is not decoded.@refill
1005
1006 If @var{unfolding} is non-nil, it unfolds folded fields.@refill
1007
1008 If @var{must-fold} is non-nil and decoded result of an encoded-word has
1009 folding or raw CR or LF, it unfolds or delete raw CR or LF.
1010 @end deffn
1011
1012
1013
1014 @defun mime-eword/decode-string string  &optional  must-unfold
1015
1016 It decodes encoded-words in @var{string} and returns decoded
1017 string.@refill
1018
1019 If an encoded-word is broken or invalid, or it has non supported MIME
1020 charset (@ref{(tm-en)MIME charset}), it is not decoded.@refill
1021
1022 If @var{string} is folded, it unfolds @var{string} before
1023 decoding.@refill
1024
1025 If @var{must-fold} is non-nil and decoded result of an encoded-word has
1026 folding or raw CR or LF, it unfolds or delete raw CR or LF.
1027 @end defun
1028
1029
1030
1031 @node Concept Index, Function Index, API, Top
1032 @chapter Concept Index
1033
1034 @printindex cp
1035
1036 @node Function Index, Variable Index, Concept Index, Top
1037 @chapter Function Index
1038
1039 @printindex fn
1040
1041 @node Variable Index,  , Function Index, Top
1042 @chapter Variable Index
1043
1044 @printindex vr
1045 @bye