\input texinfo.tex
@setfilename tm-view-en.info
@settitle tm-view 7.80 Reference Manual (English Version)
@titlepage
@title tm-view 7.80 Reference Manual (English Version)
@direntry
* Tm-View-En::            MIME viewer for Emacs
@end direntry
@author MORIOKA Tomohiko <morioka@@jaist.ac.jp>
@subtitle 1997/1/31
@end titlepage
@node Top, Introduction, (dir), (dir)
@top tm-view 7.80 Reference Manual (English Version)

@ifinfo

This file documents tm-view, a MIME Viewer for GNU Emacs.
@end ifinfo

@menu
* Introduction::                What is tm-view?
* MIME display::                Structure of display in mime/viewer-mode
* mime/viewer-mode::            Navigation in mime/viewer-mode
* method::                      Mechanism of decoding
* Two buffers for an article::  raw-article-buffer and preview-buffer
* API::                         Functions to decode MIME message
* Acknowledgments::             
* Concept Index::               
* Function Index::              
* Variable Index::              
@end menu

@node Introduction, MIME display, Top, Top
@chapter What is tm-view?
@cindex filter
@cindex method

The tm-view is a general MIME viewer running on GNU Emacs.@refill

tm-view provides the major-mode called @code{mime/viewer-mode}
(@ref{mime/viewer-mode}) to read MIME message for MUA.  MUA
(@ref{(tm-en)MUA}) implementer can use it to add MIME function.@refill

tm-view is a user interface kernel to view and navigate MIME message.
tm-view drives some programs to navigate each content-type
(@ref{(tm-en)content-type})s, they are called @strong{method}
(@ref{method}).  tm-view calls some programs to display each contents
and headers in preview buffer, they are called @strong{filter} (@ref{Two buffers for an article}).  Method and filters are tm-view application
program.  They expand tm-view to treat various kinds of MIME types.


@node MIME display, mime/viewer-mode, Introduction, Top
@chapter Structure of display in mime/viewer-mode

In mime/viewer-mode (@ref{mime/viewer-mode}), following are displayed
for each parts:@refill

@example
	[content-button]
	(content-header)
	
	(content-body)
	(content-separator)
@end example

You can change design or stop to display if you specify for each
conditions, such as content-types.@refill

Example:

@example
From: morioka@@jaist.ac.jp (MORIOKA Tomohiko)
Subject: Re: Question
Newsgroups: zxr.message.mime
Date: 22 Oct 93 11:02:44
Mime-Version: 1.0
Organization: Japan Advanced Institute of Science and Technology,
        Ishikawa, Japan

[1  (text/plain)]
  How to compose MIME message in MIME-Edit mode.

  Press `C-c C-x ?' then help message will be displayed:

C-c C-x C-t	insert a text message.
C-c C-x TAB	insert a (binary) file.
C-c C-x C-e	insert a reference to external body.
C-c C-x C-v	insert a voice message.
C-c C-x C-y	insert a mail or news message.
C-c C-x RET	insert a mail message.
C-c C-x C-s	insert a signature file at end.
C-c C-x t	insert a new MIME tag.
C-c C-x a	enclose as multipart/alternative.
C-c C-x p	enclose as multipart/parallel.
C-c C-x m	enclose as multipart/mixed.
C-c C-x d	enclose as multipart/digest.
C-c C-x s	enclose as PGP signed.
C-c C-x e	enclose as PGP encrypted.
C-c C-x C-k	insert PGP public key.
C-c C-x C-p	preview editing MIME message.
...

So press `C-c C-x C-i' and specify file name you want to include.

  MIME encoding for binary file is normally Base64.

[2  (image/gif)]

[3  (text/plain)]

  In this way, it is finish a message attaching a picture.

======================== A cup of Russian tea ========================
============  * not by jam, not by marmalade, by honey *  ============
============               MORIOKA Tomohiko               ============
=============== Internet E-mail: <morioka@@jaist.ac.jp> ===============
@end example



@menu
* content-button::              
* content-header::              
* content-body::                
* content-separator::           
@end menu

@node content-button, content-header, MIME display, MIME display
@section content-button
@cindex content-number

content-subject displays abstract for the part.  It is placed in top of
the part.@refill

In default, it is displayed following design:

@example
        [1.3 test (text/plain)]
@end example


First number field represents position of a content in the part.  It is
called @strong{content-number}.  It can be considered as the chapter
number in the message.@refill

Second string part represents title.  It is created by following:

@enumerate
@item
name paramater or x-name parameter in Content-Type field
(@ref{(tm-en)Content-Type field})
@item
Content-Description field (@ref{(tm-en)Content-Description field}) or
Subject field
@item
 filename of uuencode
@end enumerate


If they are not exists, space is displayed.@refill

Third parenthesis part represents content-type/subtype of the part.  If
it is non-MIME part, @code{nil} is displayed.@refill

Content-button is used like icon when content-header
(@ref{content-header}) and content-body (@ref{content-body}) are hidden.
For example:

@example
        [2  (image/gif)]
@end example

@noindent
if you press @kbd{v} key, GIF image is displayed.

If mouse operations are available, you can press content-button by mouse
button-2 (center button of 3 button-mouse) to play, similarly to press
@kbd{v} key. (cf. @ref{mime/viewer-mode}) @refill

By the way, it is annoying to display content-button if content-header
is displayed.  So tm-view provides a mechanism to specify conditions
to display content-button.


@defvar mime-viewer/content-button-ignored-ctype-list

List of content-types.@refill

If content-type of a part is a member of this list, its content-button
is not displayed.
@end defvar



@node content-header, content-body, content-button, MIME display
@section content-header
@cindex content-header-filter

A content header displays the header portion of a part in the
preview-buffer.  However it is annoying to display header for every
parts, so tm-view provides a mechanism to specify its condition.@refill

When the function @code{mime-viewer/header-visible-p} returns @code{t}
for reversed-content-number of a part, content-header is
displayed.@refill

This judge function returns @code{t} when a part is root or content-type
of its parent is a member of the variable
@code{mime-viewer/childrens-header-showing-Content-Type-list}.@refill

If you want to change this condition, please redefine it.  Notice that
it refers variable
@code{mime-viewer/childrens-header-showing-Content-Type-list}, however
if you redefine function @code{mime-viewer/header-visible-p}, it may not
work.  So if you want to redefine it, it should be refer variable
@code{mime-viewer/childrens-header-showing-Content-Type-list}.@refill

When content-header is displayed, content-header are formated by the
program called by @strong{content-header-filter}.  Content-header-filter
is searched from variable
@code{mime-viewer/content-header-filter-alist}.  Its key is major-mode
of the raw-article-buffer (@ref{raw-article-buffer}).  If not found,
function @code{mime-viewer/default-content-header-filter} is
called.@refill


@defvar mime-viewer/childrens-header-showing-Content-Type-list

List of content-types.  If content-type of parent of a part is a member
of this variable, its content-header is displayed.  Default value is
@code{'("message/rfc822" "message/news")}.@refill

This variable is referred by the function
@code{mime-viewer/header-visible-p}.
@end defvar



@defun mime-viewer/header-visible-p rcnum cinfo  &optional  ctype

Returns @code{t} if a part which reversed-content-number is @var{rcnum}
in content-info @var{cinfo} is displayed.@refill

If you know content-type, you can specify by @var{ctype}.
@end defun



@defvar mime-viewer/content-header-filter-alist

Association-list whose key is major-mode of a raw-article-buffer, value
is content-header-filter.
@end defvar



@defun mime-viewer/default-content-header-filter

It is called when content-header-filter is not found in variable
@code{mime-viewer/content-header-filter-alist}.@refill

It refers @code{mime-viewer/ignored-field-regexp}.
@end defun



@defvar mime-viewer/ignored-field-list

List of regular expression to represent invisible fields even if
content-header is displayed.@refill

Variable @code{mime-viewer/ignored-field-regexp} is created from
it.@refill

Please use function @code{tm:add-fields} or @code{tm:delete-fields} to
set it.
@end defvar



@node content-body, content-separator, content-header, MIME display
@section content-body
@cindex content-filter
@cindex content-body

@strong{content-body} represents content of the part.@refill

tm-view does not display raw content body.  For example, if a content
has binary, it is hidden.  If a content has text/enriched, it is
formated.  Namely content body is hidden or formated.@refill

Function @code{mime-viewer/body-visible-p} is a judge function whether
content-body of a content is displayed.  If it returns @code{nil},
content-body is hidden.  In default, it returns non-@code{nil} when
content-type of a part is a member of variable
@code{mime-viewer/default-showing-Content-Type-list}.@refill

When content-body of a content is displayed, content-body is formated by
@strong{content-filter}.  Content-filter is searched from variable
@code{mime-viewer/content-filter-alist}.  At this time, major-mode of
the raw-article-buffer (@ref{raw-article-buffer}) is used as the key.

If it is not found, function
@code{mime-viewer/default-content-filter} is called.


@defvar mime-viewer/default-showing-Content-Type-list

List of content-type.  If content-type of a part is a member of this
variable, its body is displayed.
@end defvar



@defun mime-viewer/body-visible-p rcnum cinfo  &optional  ctype

Return non-@code{nil}, if content-type of a part is displayed.
@var{rcnum} is reversed-content-number of a part.  @var{cinfo} is
content-info of the message.  If you know content-type of a part, you
can specify it as argument @var{ctype}.
@end defun



@defvar mime-viewer/content-filter-alist

Association-list whose key is major-mode of a raw-article-buffer, value
is content-filter.
@end defvar



@defun mime-viewer/default-content-filter rcnum cinfo ctype params subj

It is called when content-body of a part should be displayed and
content-filter is not found in
@code{mime-viewer/content-filter-alist}.@refill

In default, it does nothing.
@end defun



@node content-separator,  , content-body, MIME display
@section content-separator
@cindex content-separator

@strong{content-separator} is displayed to represent boundary of
contents.@refill

Content-separator is displayed by function
@code{mime-viewer/default-content-separator}.  In default, it displays
line-break when content-header and content-body are not
displayed.@refill

If you want to change this condition, please redefine this function.


@defun mime-viewer/default-content-separator rcnum cinfo ctype params subj

Display content-separator.  @var{cnum} is content-number of a content.
@var{cinfo} is content-info of the message.  @var{ctype} is content-type
of a content.  @var{params} is Content-Type field parameters of a
content.  @var{subj} is subject.@refill

In default, it displays line-break when content-header and content-body
are not displayed.
@end defun



@node mime/viewer-mode, method, MIME display, Top
@chapter Navigation in mime/viewer-mode

@code{mime/viewer-mode} has following functions:@refill

@table @kbd
@item @key{u}
goes to the upper content (returns to the Summary mode if the cursor
is sitting on the top content (*1))

@item @key{p}
goes to the previous content

@item @key{M-TAB}
goes to the previous content

@item @key{n}
goes to the next content

@item @key{TAB}
goes to the next content

@item @key{SPC}
scrolls up

@item @key{M-SPC}
scrolls down

@item @key{DEL}
scrolls down

@item @key{RET}
goes to the next line

@item @key{M-RET}
goes to the previous line

@item @key{<}
goes to the beginning of message

@item @key{>}
goes to the end of message

@item @key{v}
playbacks a part (*2)

@item @key{e}
extracts a file from a part (*2)

@item @key{C-c C-p}
prints a part (*2)

@item @key{f}
displays X-Face in the message

@item @key{mouse-button-2}
drives mouse button in preview-buffer.

For content-button, it playbacks a part (*2)@refill

For URL-button, it drives WWW browser@refill

@end table

@noindent
@strong{[Notice]}
@quotation

(*1) Not return to the Summary mode unless tm-view has been setup using
tm-mh-e, tm-vm, gnus-mime, tm-gnus, tm-rmail etc.@refill

(*2) Actual playback/extract/print will be performed by a method.
@end quotation



@node method, Two buffers for an article, mime/viewer-mode, Top
@chapter Mechanism of decoding
@cindex external method
@cindex internal method
@cindex method
@cindex decoding-mode
@cindex decoding operation(s) (for a part)

In @code{mime/viewer-mode}, you can do play (@kbd{v}), extract
(@kbd{e}), or print (@kbd{C-c C-p}) for each parts.  These operations
are called @strong{decoding operation(s) (for a part)}.  And kind of
decoding operations are called @strong{decoding-mode}.@refill

When decoding operation is driven, tm-view calls a procedure matched for
the condition, such as content-type (@ref{(tm-en)content-type}) of the
part or its environment.  This procedure is called
@strong{method}.@refill

There are two kinds of methods.  One is Emacs Lisp function, called
@strong{internal method}.  Another one is external program, called
@strong{external method}.@refill

Internal method operates in Emacs, so it can do carefully.@refill

External method is called as asynchronous process, so Emacs does not
wait while method is running.  So it is good for big data, such as
audio, image or video.


@menu
* decoding-condition::          Setting decoding condition for parts
* environment variables::       Environment variables
@end menu

@node decoding-condition, environment variables, method, method
@section Setting decoding condition for parts

When decoding operation is driven, tm-view calls a method matched for
the condition searched from the variable
@code{mime/content-decoding-condition}.@refill

Variable @code{mime/content-decoding-condition} is defined as a list
with the following syntax:@refill

@lisp
        (condition_1 condition_2 ...)
@end lisp

Each condition are association-list with the following syntax:@refill

@lisp
        ((field-type_1 . value_1)
         (field-type_2 . value_2)
         ...)
@end lisp

For example, if you want to call the external method named tm-plain to
decode every text/plain (@ref{(tm-en)text/plain}) type parts, you can
define the condition like:@refill

@lisp
        ((type . "text/plain")
         (method "tm-plain" nil 'file 'type 'encoding 'mode 'name))
@end lisp

This condition definition will match all parts whose content-type
(@ref{(tm-en)content-type}) are text/plain.  Here is an another
example:@refill

@lisp
        ((type . "text/plain")
         (method "tm-plain" nil 'file 'type 'encoding 'mode 'name)
         (mode . "play"))
@end lisp

This will match the part whose type is text/plain and the mode is
play.@refill

Here is an another example:@refill

@lisp
        ((method "metamail" t "-m" "tm" "-x" "-d" "-z" "-e" 'file)
         (mode . "play"))
@end lisp

This will match all parts which have a mode of play.@refill

The conditions defined in a variable
@code{mime/content-decoding-condition} are examined from top to
bottom.  The first matching condition becomes valid and the method
specified in that condition definition will be executed.


@menu
* method value::                Format of method value
* Example of decoding-condition::  
@end menu

@node method value, Example of decoding-condition, decoding-condition, decoding-condition
@subsection Format of method value

You can specify the method field of the decoding-condition definition in
two different ways,@refill

@lisp
        (method . SYMBOL)
@end lisp

@noindent
or

@lisp
        (method  STRING  FLAG  arg1  arg2  ...)
@end lisp

@noindent
can be accepted.

When a symbol is specified in the method field, a function whose name is
SYMBOL will be called as an internal method.@refill

When a list is specified in the method field, it will be called as an
external method.@refill

The list below shows the meaning of the parameters when the external
method is specified in the method field.@refill

@table @samp
@item STRING
name of an external method

@item FLAG
If @code{t}, both the content-header and the content-body
are passed to an external method.

If @code{nil}, only the content-body is passed to an external
method.@refill

@item ARGUMENTs
list of arguments passed to an external method

@end table

An argument passed to an external method can be in one of the following
formats:@refill

@table @samp
@item STRING
string itself

@item 'SYMBOL
value gotten using SYMBOL as a key from decoding-condition

@item 'STRING
value gotten using STRING as a key from decoding-condition

@end table

@code{'SYMBOL} can be one of the following:@refill

@table @samp
@item 'file
name of a file holding the original content

@item 'type
content-type/sub-type of Content-Type field

@item 'encoding
field body of Content-Transfer-Encoding field

@item 'mode
decoding-mode

@item 'name
name of a file created by decode operation

@end table


@code{'STRING} is used to search a parameter of the Content-Type
field whose name matches with it, and pass the value of that parameter
to the external method.


@node Example of decoding-condition,  , method value, decoding-condition
@subsection Example of decoding-condition

Following is an example of decoding-condition:

@lisp
(defvar mime/content-decoding-condition
  '(((type . "text/plain")
     (method "tm-plain" nil 'file 'type 'encoding 'mode 'name))
    ((type . "text/x-latex")
     (method "tm-latex" nil 'file 'type 'encoding 'mode 'name))
    ((type . "audio/basic")
     (method "tm-au"    nil 'file 'type 'encoding 'mode 'name))
    ((type . "image/gif")
     (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
    ((type . "image/jpeg")
     (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
    ((type . "image/tiff")
     (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
    ((type . "image/x-tiff")
     (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
    ((type . "image/x-xbm")
     (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
    ((type . "image/x-pic")
     (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
    ((type . "video/mpeg")`
     (method "tm-mpeg"  nil 'file 'type 'encoding 'mode 'name))
    ((type . "application/octet-stream")
     (method "tm-file"  nil 'file 'type 'encoding 'mode 'name))
    ((type . "message/partial")
     (method . mime/decode-message/partial-region))
    ((method "metamail" t
             "-m" "tm" "-x" "-d" "-z" "-e" 'file)(mode . "play"))
    ))
@end lisp


For example, if you want to use metamail to decode any contents,

@lisp
(setq mime/content-decoding-condition
      '(
        ((method "metamail" t "-m" "tm" "-x" "-d" "-z" "-e" 'file))
       ))
@end lisp

@noindent
will work.

Variable @code{mime/content-decoding-condition} provides you of very
flexible way to define the conditions of decoding.  It can be simple if
you only need the a few decoding methods, while it can be very
complicated if you want to use the separate decoding method for each
type/mode combination.@refill

Following function may be useful to set decoding-condition.  It is a
function of @file{tl-atype.el}.


@defun set-atype symbol alist

Add condition @var{alist} to @var{symbol}.

@noindent
@strong{[Example]}
@quotation

@lisp
(set-atype 'mime/content-decoding-condition
	   '((type . "message/external-body")
	     ("access-type" . "anon-ftp")
	     (method . mime/decode-message/external-ftp)
	     ))
@end lisp
@end quotation
@end defun



@node environment variables,  , decoding-condition, method
@section Environment variables

Standard methods of tm-view reference some environment variables.  You
can specify them to customize.

@table @var
@item TM_TMP_DIR
Directory for temporary files or extracted files.  If it is omitted,
@file{/tmp/} is used.

@item VIDEO_DITHER
Dither for mpeg_play.  If it is omitted, `gray' is used.

@item TM_WWW_BROWSER
WWW browser name.  If it is omitted, `netscape' is used.

@end table



@node Two buffers for an article, API, method, Top
@chapter raw-article-buffer and preview-buffer
@cindex filter
@cindex content-filter
@cindex header-filter
@cindex preview-buffer
@cindex raw-article-buffer

tm-view managements two buffers, one is for raw message called
@strong{raw-article-buffer}, another one is to preview for user called
@strong{preview-buffer}.  major-mode of raw-article-buffer is same as
major-mode for article of original MUA, major-mode of preview-buffer is
@code{mime/viewer-mode} (@ref{mime/viewer-mode}).@refill

When called @code{mime/viewer-mode}, tm-view analyzes
raw-article-buffer, and sets its result to the variable
@code{mime::article/content-info}.@refill

After that, tm-view create a preview-buffer corresponded to the
raw-article-buffer.  As this time, tm-view modifies header and body of
each parts of the message by specified conditions.  Filter program for
header is called @strong{header-filter} (@ref{content-header}), filter
program for body is called @strong{content-filter} (@ref{content-body}),
and they are called @strong{filter}.@refill

When preview-buffer is made, buffer local variable of preview-buffer
@code{mime::preview/content-list} is made to register structure of
preview-buffer.  tm-view manages message by
@code{mime::article/content-info} in raw-article-buffer and
@code{mime::preview/content-list} in preview-buffer.@refill

@noindent
@strong{[Notice]}
@quotation
In this document, I call ``content-type'' as content-type/subtype of
Content-Type field.
@end quotation



@menu
* raw-article-buffer::          buffer local variables of raw-article-buffer
* preview-buffer::              Buffer local variables of preview-buffer
@end menu

@node raw-article-buffer, preview-buffer, Two buffers for an article, Two buffers for an article
@section buffer local variables of raw-article-buffer
@cindex content-info

@deffn{Structure} mime::content-info rcnum point-min point-max type parameters encoding children

structure to represent MIME content in raw-article-buffer.  It is called
by @strong{content-info}.@refill

Please use reference function @code{mime::content-info/SLOT-NAME} to
reference slot of content-info.  Their argument is only
content-info.@refill

Following is a list of slots of the structure:

@table @var
@item rcnum
``reversed content-number'' (list)

@item point-min
beginning point of region in raw-article-buffer

@item point-max
end point of region in raw-article-buffer

@item type
content-type/sub-type (string or nil)

@item parameters
parameter of Content-Type field (association list)

@item encoding
Content-Transfer-Encoding (string or nil)

@item children
parts included in this part (list of content-infos)

@end table

If a part includes other parts in its contents, such as multipart or
message/rfc822, content-infos of other parts are included in
@var{children}, so content-info become a tree.
@end deffn


@defvar mime::article/content-info

result of MIME parsing of raw-article-buffer (content-info)
@end defvar


@defvar mime::article/preview-buffer

preview-buffer corresponded by this buffer
@end defvar


@defun mime-article/point-content-number point  &optional  cinfo

In a region managed by content-info @var{cinfo}, it returns
content-number corresponded by @var{point}.@refill

If @var{cinfo} is omitted, @code{mime::article/content-info} is used as
default value.
@end defun


@defun mime-article/rcnum-to-cinfo rcnum  &optional  cinfo

In a region managed by content-info @var{cinfo}, it returns content-info
corresponded by reversed-content-number @var{rcnum}.@refill

If @var{cinfo} is omitted, @code{mime::article/content-info} is used as
default value.
@end defun


@defun mime-article/cnum-to-cinfo rcnum  &optional  cinfo

In a region managed by content-info @var{cinfo}, it returns content-info
corresponded by content-number @var{rcnum}.@refill

If @var{cinfo} is omitted, @code{mime::article/content-info} is used as
default value.
@end defun


@defun mime/flatten-content-info  &optional  cinfo

It returns flatten list of content-info from content-info @var{cinfo}
tree.@refill

If @var{cinfo} is omitted, @code{mime::article/content-info} is used as
default value.
@end defun



@node preview-buffer,  , raw-article-buffer, Two buffers for an article
@section Buffer local variables of preview-buffer
@cindex preview-content-info

@defvar mime::preview/mother-buffer

Mother buffer of this preview-buffer.
@end defvar


@deffn{Structure} mime::preview-content-info point-min point-max buffer content-info

structure to represent MIME content in preview-buffer.  It is called by
@strong{preview-content-info}.@refill

Please use reference function
@code{mime::preview-content-info/SLOT-NAME} to reference slot of
preview-content-info.  Their argument is only
preview-content-info.@refill

Following is a list of slots of the structure:

@table @var
@item point-min
beginning point of region in preview-buffer

@item  point-max
end point of region in preview-buffer

@item buffer
raw-article-buffer corresponding a part

@item content-info
content-info corresponding a part

@end table
@end deffn



@defvar mime::preview/content-list

List of preview-content-info to represent structure of this
preview-buffer.
@end defvar



@defvar mime::preview/article-buffer

raw-article-buffer corresponded by this preview-buffer.
@end defvar



@defvar mime::preview/original-major-mode

major-mode of original buffer.
@end defvar



@defvar mime::preview/original-window-configuration

window-configuration just before made this preview-buffer.
@end defvar



@defun mime-preview/point-pcinfo point  &optional  pcl

In a region of preview-buffer managed by preview-content-info @var{pcl},
it returns preview-content-info corresponded by @var{point}.@refill

If @var{cinfo} is omitted, @code{mime::preview/content-list} is used.
@end defun



@node API, Acknowledgments, Two buffers for an article, Top
@chapter Functions to decode MIME message

tm-view provides some available functions to decode and navigate MIME
message to each MUA (@ref{(tm-en)MUA})s.@refill

There are 2 kinds of functions, one is for MIME preview, another one is
to decode RFC 1522 encoded-word (@ref{(tm-en)encoded-word}).


@menu
* API about MIME preview::      Function to preview MIME message
* encoded-word decoding::       encoded-word decoder
@end menu

@node API about MIME preview, encoded-word decoding, API, API
@section Function to preview MIME message


@deffn{Command} mime/viewer-mode &optional  mother ctl encoding ibuf obuf mother-keymap

Parse @var{ibuf} as a MIME message, and create preview-buffer into
@var{obuf} to display to user, then enter @code{mime/viewer-mode}
(@ref{mime/viewer-mode}).@refill

If @var{ibuf} is omitted, current buffer is used.@refill

@var{mother} is used to specify original raw-article-buffer.  It may be
useful when a raw-article-buffer is assembled from message/partial
messages.@refill

@var{ctl} is used to specify Content-Type field
(@ref{(tm-en)Content-Type field}) information.  Its format is output
format of @code{mime/Content-Type}.  When @var{ctl} is specified,
tm-view uses it instead of Content-Type field of the
raw-article-buffer.@refill

@var{encoding} is used to specify field-body of
Content-Transfer-Encoding field.  When it is specified, tm-view uses it
instead of Content-Type field of the raw-article-buffer.@refill

If @var{mother-keymap} is specified, keymap of @code{mime/viewer-mode}
includes it.
@end deffn



@node encoded-word decoding,  , API about MIME preview, API
@section encoded-word decoder

tm-view has functions to decode RFC 1522 encoded-word
(@ref{(tm-en)encoded-word}).


@deffn{Command} mime/decode-message-header

It decodes encoded-words in message header of current buffer.@refill

If an encoded-word is broken or invalid, or it has non supported MIME
charset (@ref{(tm-en)MIME charset}), it is not decoded.
@end deffn



@deffn{Command} mime-eword/decode-region start end  &optional  unfolding must-unfold

It decodes encoded-words in region @var{start} to @var{end}.@refill

If an encoded-word is broken or invalid, or it has non supported MIME
charset (@ref{(tm-en)MIME charset}), it is not decoded.@refill

If @var{unfolding} is non-nil, it unfolds folded fields.@refill

If @var{must-fold} is non-nil and decoded result of an encoded-word has
folding or raw CR or LF, it unfolds or delete raw CR or LF.
@end deffn



@defun mime-eword/decode-string string  &optional  must-unfold

It decodes encoded-words in @var{string} and returns decoded
string.@refill

If an encoded-word is broken or invalid, or it has non supported MIME
charset (@ref{(tm-en)MIME charset}), it is not decoded.@refill

If @var{string} is folded, it unfolds @var{string} before
decoding.@refill

If @var{must-fold} is non-nil and decoded result of an encoded-word has
folding or raw CR or LF, it unfolds or delete raw CR or LF.
@end defun



@node Acknowledgments, Concept Index, API, Top
@chapter Acknowledgments

First of all, I thank MASUTANI Yasuhiro.  He requested me a lot of
important features and gave me a lot of suggestions when tm-view was
born.  tm-view is based on his influence.@refill

I thank ENAMI Tsugutomo for work of @file{mime.el}, which is an origin
of @file{tm-ew-d.el} and @file{mel-b.el}, and permission to rewrite for
tm.@refill

I thank OKABE Yasuo for work of internal method for LaTeX and automatic
assembling method for message/partial.  I thank UENO Hiroshi for work of
internal method for tar archive.@refill

Last of all, I thank members of two tm mailing lists, Japanese and
English version.


@node Concept Index, Function Index, Acknowledgments, Top
@chapter Concept Index

@printindex cp

@node Function Index, Variable Index, Concept Index, Top
@chapter Function Index

@printindex fn

@node Variable Index,  , Function Index, Top
@chapter Variable Index

@printindex vr
@bye
