+2000-12-19 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+ * FLIM-1.14-API.en: New file.
+
+ * smtp.el (smtp-open-connection-function): Add autoload cookie.
+
+ * qmtp.el (qmtp-open-connection-function): Add autoload cookie.
+
+ * mime.el (mime-entity-children): Add DOC.
+ (mime-entity-node-id): Add DOC.
+ (mime-entity-content-type): Add DOC.
+ (mime-entity-content-disposition): Add DOC.
+ (mime-entity-encoding): Add DOC.
+
+2000-12-19 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+ * mime.el (mime-encode-field-body): Add autoload setting.
+
+ * eword-encode.el (mime-encode-field-body): Renamed from
+ `eword-encode-field-body'; declare `eword-encode-field-body' as
+ obsolete alias.
+ (mime-encode-header-in-buffer): Use `mime-encode-field-body'
+ instead of `eword-encode-field-body'.
+
+2000-12-19 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+ * mime.el (mime-encode-header-in-buffer): Renamed from
+ `eword-encode-header'.
+
+ * mmdbuffer.el: Deleted.
+
+ * mime-def.el (mime-header): New group.
+ (mime-field-decoding-max-size): New user option [moved from
+ eword-decode.el].
+ (mime-field-encoding-method-alist): New user option [moved from
+ eword-encode.el].
+
+ * eword-encode.el (eword-field-encoding-method-alist): Moved to
+ mime-def.el and renamed to `mime-field-encoding-method-alist'.
+ (mime-header-charset-encoding-alist): Renamed from
+ `eword-charset-encoding-alist'.
+ (mime-header-default-charset-encoding): New variable.
+ (ew-find-charset-rule): Use
+ `mime-header-default-charset-encoding'.
+ (eword-in-subject-p): Declare as obsolete function.
+ (mime-encode-header-in-buffer): Renamed from
+ `eword-encode-header'; declare `eword-encode-header' as obsolete
+ alias.
+
+ * eword-decode.el (eword-max-size-to-decode): Moved to mime-def.el
+ and renamed to `mime-field-decoding-max-size'.
+ (mime-header-lexical-analyzer): Renamed from
+ `eword-lexical-analyzer'; switch to variable.
+
+2000-12-19 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+ * eword-encode.el (eword-encode-default-start-column): Switch to
+ variable.
+
+2000-12-17 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+ * mime-parse.el: Require `luna'.
+
+2000-12-16 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+ * eword-encode.el Use `find-charset-string' instead of
+ `find-non-ascii-charset-string'.
+ (eword-encode-addr-seq-to-rword-list): Don't use `butlast'.
+ (eword-encode-header): Use `find-charset-region' instead of
+ `find-non-ascii-charset-string'.
+
+2000-12-15 MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
+
+ * mime/eword-decode.el: Don't use
+ `define-obsolete-function-alias'; so `eword-decode-header' is
+ deleted.
+
+2000-12-15 TAKAHASHI Kaoru <kaoru@kaisei.org>
+
+ * Makefile (tar): Use `cvs tag -R' instead of `cvs tag -RF'.
+
2000-12-15 Daiki Ueno <ueno@unixuser.org>
* smtp.el (smtp-send-buffer): Pass the BUFFER argument to
--- /dev/null
+* MIME entity
+
+** How to use
+
+(require 'mime)
+
+
+** Level 1 features
+
+[Function] mime-open-entity (type location)
+ Open an entity and return it.
+
+TYPE is representation-type.
+
+LOCATION is location of entity. Specification of it is depended on
+representation-type.
+
+
+[Function] mime-entity-children (entity)
+ Return list of entities included in the ENTITY.
+
+
+[Function] mime-entity-node-id (entity)
+ Return node-id of ENTITY.
+
+
+[Function] mime-find-entity-from-node-id (entity-node-id message)
+ Return entity from ENTITY-NODE-ID in MESSAGE.
+ (mime-find-entity-from-number (reverse entity-node-id) message))
+
+
+[Function] mime-find-entity-from-content-id (cid message)
+ Return entity from CID in MESSAGE.
+
+
+[Function] mime-insert-entity (entity)
+ Insert header and body of ENTITY at point.
+
+
+[Function] mime-write-entity (entity filename)
+ Write header and body of ENTITY into FILENAME.
+
+
+[Function] mime-entity-body (entity)
+ Return network representation of ENTITY body.
+
+
+[Function] mime-insert-entity-body (entity)
+ Insert network representation of ENTITY body at point.
+
+
+[Function] mime-write-entity-body (entity filename)
+ Write body of ENTITY into FILENAME.
+
+
+[Function] mime-entity-content (entity)
+ Return content of ENTITY as byte sequence (string).
+
+
+[Function] mime-insert-entity-content (entity)
+ Insert content of ENTITY at point.
+
+
+[Function] mime-write-entity-content (entity filename)
+ Write content of ENTITY into FILENAME.
+
+
+[Function] mime-insert-text-content (entity)
+ Insert decoded text body of ENTITY.
+
+
+[Function] mime-entity-fetch-field (entity field-name)
+ Return the value of the ENTITY's header field whose type is
+FIELD-NAME.
+
+
+** Level 2 features
+
+[Function] mime-entity-content-type (entity)
+ Return content-type of ENTITY.
+
+
+[Function] mime-entity-content-disposition (entity)
+ Return content-disposition of ENTITY.
+
+
+[Function] mime-entity-encoding (entity &optional default-encoding)
+ Return content-transfer-encoding of ENTITY.
+
+If the ENTITY does not have Content-Transfer-Encoding field, this
+function returns DEFAULT-ENCODING. If it is nil, "7bit" is used as
+default value.
+
+
+[Function] mime-entity-number (entity)
+ Return entity-number of ENTITY.
+ (reverse (mime-entity-node-id-internal entity)))
+
+
+[Function] mime-entity-parent (entity &optional message)
+ Return mother entity of ENTITY.
+
+If MESSAGE is specified, it is regarded as root entity.
+
+
+[Function] mime-root-entity-p (entity &optional message)
+ Return t if ENTITY is root-entity (message).
+
+If MESSAGE is specified, it is regarded as root entity.
+
+
+[Function] mime-find-root-entity (entity)
+ Return root entity of ENTITY.
+
+
+[Function] mime-entity-read-field (entity field-name)
+ Parse FIELD-NAME field in header of ENTITY, and return the result.
+
+Format of result is depended on kind of field. For non-structured
+field, this function returns string. For structured field, it returns
+list corresponding with structure of the field.
+
+Strings in the result will be converted to internal representation of
+Emacs.
+
+If FIELD-NAME field is not found, this function returns nil.
+
+
+[Function] mime-insert-header (entity &optional invisible-fields
+ visible-fields)
+ Insert before point a decoded header of ENTITY.
+
+
+[Function] mime-entity-name (entity)
+ Return name of the ENTITY.
+
+
+[Function] mime-entity-filename (entity)
+ Return filename of ENTITY.
+
+
+** Level 3 features
+
+[Function] mime-entity-cooked-p (entity)
+ Return non-nil if contents of ENTITY has been already
+ code-converted.
+
+[Function] mime-entity-set-content-type (entity content-type)
+ Set ENTITY's content-type to CONTENT-TYPE.
+
+
+[Function] mime-entity-set-encoding (entity encoding)
+ Set ENTITY's content-transfer-encoding to ENCODING.
+
+
+* encoded-word decoder
+
+** How to use
+
+(require 'mime)
+
+
+** Level 1 features
+
+[Function] mime-decode-header-in-buffer (&optional code-conversion separator)
+ Decode MIME encoded-words in header fields.
+
+If CODE-CONVERSION is nil, it decodes only encoded-words. If it is
+mime-charset, it decodes non-ASCII bit patterns as the mime-charset.
+Otherwise it decodes non-ASCII bit patterns as the
+default-mime-charset.
+
+If SEPARATOR is not nil, it is used as header separator.
+
+
+[Function] mime-decode-header-in-region (start end
+ &optional code-conversion)
+ Decode MIME encoded-words in region between START and END.
+
+If CODE-CONVERSION is nil, it decodes only encoded-words. If it is
+mime-charset, it decodes non-ASCII bit patterns as the mime-charset.
+Otherwise it decodes non-ASCII bit patterns as the
+default-mime-charset.
+
+
+[Function] mime-decode-field-body (field-body field-name
+ &optional mode max-column)
+ Decode FIELD-BODY as FIELD-NAME in MODE, and return the result.
+
+Optional argument MODE must be `plain', `wide', `summary' or `nov'.
+Default mode is `summary'.
+
+If MODE is `wide' and MAX-COLUMN is non-nil, the result is folded with
+MAX-COLUMN.
+
+Non MIME encoded-word part in FILED-BODY is decoded with
+`default-mime-charset'.
+
+
+** Level 2 features
+
+[Function] mime-set-field-decoder (field &rest specs)
+ Set decoder of FIELD.
+
+SPECS must be like `MODE1 DECODER1 MODE2 DECODER2 ...'.
+
+Each mode must be `nil', `plain', `wide', `summary' or `nov'.
+If mode is `nil', corresponding decoder is set up for every modes.
+
+
+[Macro] mime-find-field-presentation-method (name)
+ Return field-presentation-method from NAME.
+
+NAME must be `plain', `wide', `summary' or `nov'.
+
+
+[Function] mime-find-field-decoder (field &optional mode)
+ Return function to decode field-body of FIELD in MODE.
+
+Optional argument MODE must be object or name of
+field-presentation-method. Name of field-presentation-method must be
+`plain', `wide', `summary' or `nov'.
+Default value of MODE is `summary'.
+
+
+[Function] mime-update-field-decoder-cache (field mode &optional function)
+ Update field decoder cache `mime-field-decoder-cache'.
+
+
+* encoded-word encoder
+
+** How to use
+
+(require 'mime)
+
+
+** Level 1 features
+
+[Function] mime-encode-header-in-buffer (&optional code-conversion)
+ Encode header fields to network representation, such as MIME encoded-word.
+
+It refer variable `mime-field-encoding-method-alist'.
+
+
+[Function] mime-encode-field-body (field-body field-name)
+ Encode FIELD-BODY as FIELD-NAME, and return the result.
+
+A lexical token includes non-ASCII character is encoded as MIME
+encoded-word. ASCII token is not encoded.
+
+
+* Content-Transfer-Encoding
+
+** How to use
+
+(require 'mel)
+
+
+** Level 1 features
+
+[Function] mime-encode-region (start end encoding)
+ Encode region START to END of current buffer using ENCODING.
+
+ENCODING must be string.
+
+
+[Function] mime-decode-region (start end encoding)
+ Decode region START to END of current buffer using ENCODING.
+
+ENCODING must be string.
+
+
+[Function] mime-decode-string (string encoding)
+ Decode STRING using ENCODING.
+
+ENCODING must be string. If ENCODING is found in
+`mime-string-decoding-method-alist' as its key, this function decodes
+the STRING by its value.
+
+
+[Function] mime-insert-encoded-file (filename encoding)
+ Insert file FILENAME encoded by ENCODING format.
+
+
+[Function] mime-write-decoded-region (start end filename encoding)
+ Decode and write current region encoded by ENCODING into FILENAME.
+
+START and END are buffer positions.
+
+
+* Mailcap
+
+** How to use
+
+(require 'mime-conf)
+
+
+** Level 1 features
+
+[Function] mime-parse-mailcap-buffer (&optional buffer order)
+ Parse BUFFER as a mailcap, and return the result.
+
+If optional argument ORDER is a function, result is sorted by it.
+If optional argument ORDER is not specified, result is sorted original
+order. Otherwise result is not sorted.
+
+
+[Variable] mime-mailcap-file (default value is "~/.mailcap")
+ File name of user's mailcap file.
+
+
+[Function] mime-parse-mailcap-file (&optional filename order)
+ Parse FILENAME as a mailcap, and return the result.
+
+If optional argument ORDER is a function, result is sorted by it.
+If optional argument ORDER is not specified, result is sorted original
+order. Otherwise result is not sorted.
+
+
+[Function] mime-format-mailcap-command (mtext situation)
+ Return formated command string from MTEXT and SITUATION.
+
+MTEXT is a command text of mailcap specification, such as
+view-command.
+
+SITUATION is an association-list about information of entity. Its key
+may be:
+
+ 'type primary media-type
+ 'subtype media-subtype
+ 'filename filename
+ STRING parameter of Content-Type field
+
+
+* MIME Field parsing
+
+** How to use
+
+(require 'mime)
+
+
+** Level 2 features
+
+[Variable] mime-field-parser-alist
+ Alist to specify field parser.
+
+
+[Function] mime-parse-Content-Type (string)
+ Parse STRING as field-body of Content-Type field.
+
+Return value is
+ (PRIMARY-TYPE SUBTYPE (NAME1 . VALUE1)(NAME2 . VALUE2) ...)
+or nil. PRIMARY-TYPE and SUBTYPE are symbol and NAME_n and VALUE_n
+are string.
+
+
+[Function] mime-read-Content-Type ()
+ Read field-body of Content-Type field from current-buffer,
+and return parsed it. Format of return value is as same as
+`mime-parse-Content-Type'.
+
+
+[Function] mime-parse-Content-Disposition (string)
+ Parse STRING as field-body of Content-Disposition field.
+
+
+[Function] mime-read-Content-Disposition ()
+ Read field-body of Content-Disposition field from current-buffer,
+and return parsed it.
+
+
+[Function] mime-parse-Content-Transfer-Encoding (string)
+ Parse STRING as field-body of Content-Transfer-Encoding field.
+
+
+[Function] mime-read-Content-Transfer-Encoding (&optional default-encoding)
+ Read field-body of Content-Transfer-Encoding field from
+current-buffer, and return it.
+
+If is is not found, return DEFAULT-ENCODING.
+
+
+[Function] mime-parse-msg-id (tokens)
+ Parse TOKENS as msg-id of Content-Id or Message-Id field.
+
+
+[Function] mime-uri-parse-cid (string)
+ Parse STRING as cid URI.
+
+
+* MIME message parsing
+
+** How to use
+
+(require 'mime)
+
+
+** Level 3 features
+
+[Function] mime-parse-buffer (&optional buffer representation-type)
+ Parse BUFFER as a MIME message.
+
+If buffer is omitted, it parses current-buffer.
+
+
+* STD 11 parsing
+
+** How to use
+
+(require 'std11)
+
+
+** Level 1 features
+
+[Function] std11-fetch-field (name)
+ Return the value of the header field NAME.
+
+The buffer is expected to be narrowed to just the headers of the message.
+
+
+[Function] std11-narrow-to-header (&optional boundary)
+ Narrow to the message header.
+
+If BOUNDARY is not nil, it is used as message header separator.
+
+
+[Function] std11-field-body (name &optional boundary)
+ Return the value of the header field NAME.
+
+If BOUNDARY is not nil, it is used as message header separator.
+
+
+[Function] std11-unfold-string (string)
+ Unfold STRING as message header field.
+
+
+** Level 2 features
+
+[Function] std11-lexical-analyze (string &optional analyzer start)
+ Analyze STRING as lexical tokens of STD 11.
+
+
+[Function] std11-address-string (address)
+ Return string of address part from parsed ADDRESS of RFC 822.
+
+
+[Function] std11-full-name-string (address)
+ Return string of full-name part from parsed ADDRESS of RFC 822.
+
+
+[Function] std11-msg-id-string (msg-id)
+ Return string from parsed MSG-ID of RFC 822.
+
+
+[Function] std11-fill-msg-id-list-string (string &optional column)
+ Fill list of msg-id in STRING, and return the result.
+
+
+[Function] std11-parse-address-string (string)
+ Parse STRING as mail address.
+
+
+[Function] std11-parse-addresses-string (string)
+ Parse STRING as mail address list.
+
+
+[Function] std11-parse-msg-id-string (string)
+ Parse STRING as msg-id.
+
+
+[Function] std11-parse-msg-ids-string (string)
+ Parse STRING as `*(phrase / msg-id)'.
+
+
+[Function] std11-extract-address-components (string)
+ Extract full name and canonical address from STRING.
+
+Returns a list of the form (FULL-NAME CANONICAL-ADDRESS).
+If no name can be extracted, FULL-NAME will be nil.
+
+
+* SMTP
+
+** How to use
+
+(require 'smtp)
+
+
+** Level 1 features
+
+[Function] smtp-send-buffer (sender recipients buffer)
+
+
+* QMTP
+
+** How to use
+
+(require 'qmtp)
+
+
+** Level 1 features
+
+[Function] qmtp-send-buffer (sender recipients buffer)
tar:
cvs commit
- sh -c 'cvs tag -RF $(PACKAGE)-`echo $(VERSION) | tr . _`; \
+ sh -c 'cvs tag -R $(PACKAGE)-`echo $(VERSION) | tr . _`; \
cd /tmp; \
cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/root \
export -d $(PACKAGE)-$(VERSION) \
(eval-when-compile (require 'cl)) ; list*, pop
-(defgroup eword-decode nil
- "Encoded-word decoding"
- :group 'mime)
-
-(defcustom eword-max-size-to-decode 1000
- "*Max size to decode header field."
- :group 'eword-decode
- :type '(choice (integer :tag "Limit (bytes)")
- (const :tag "Don't limit" nil)))
-
;;; @ MIME encoded-word definition
;;;
start-column
&optional max-column
start)
- (if (and eword-max-size-to-decode
- (> (length string) eword-max-size-to-decode))
+ (if (and mime-field-decoding-max-size
+ (> (length string) mime-field-decoding-max-size))
string
(or max-column
(setq max-column fill-column))
(point-max)))
code-conversion))
-(define-obsolete-function-alias 'eword-decode-header
- 'mime-decode-header-in-buffer)
+;; (define-obsolete-function-alias 'eword-decode-header
+;; 'mime-decode-header-in-buffer)
;;; @ encoded-word decoder
"*Max position of eword-lexical-analyze-cache.
It is max size of eword-lexical-analyze-cache - 1.")
-(defcustom eword-lexical-analyzer
+(defvar mime-header-lexical-analyzer
'(eword-analyze-quoted-string
eword-analyze-domain-literal
eword-analyze-comment
Previous function is preferred to next function. If a function
returns nil, next function is used. Otherwise the return value will
-be the result."
- :group 'eword-decode
- :type '(repeat function))
+be the result.")
(defun eword-analyze-quoted-string (string start &optional must-unfold)
(let ((p (std11-check-enclosure string ?\" ?\" nil start)))
dest ret)
(while (< start len)
(setq ret
- (let ((rest eword-lexical-analyzer)
+ (let ((rest mime-header-lexical-analyzer)
func r)
(while (and (setq func (car rest))
(null
;;; @ variables
;;;
-(defgroup eword-encode nil
- "Encoded-word encoding"
- :group 'mime)
-
-(defcustom eword-field-encoding-method-alist
- '(("X-Nsubject" . iso-2022-jp-2)
- ("Newsgroups" . nil)
- ("Message-ID" . nil)
- (t . mime)
- )
- "*Alist to specify field encoding method.
-Its key is field-name, value is encoding method.
-
-If method is `mime', this field will be encoded into MIME format.
-
-If method is a MIME-charset, this field will be encoded as the charset
-when it must be convert into network-code.
-
-If method is `default-mime-charset', this field will be encoded as
-variable `default-mime-charset' when it must be convert into
-network-code.
-
-If method is nil, this field will not be encoded."
- :group 'eword-encode
- :type '(repeat (cons (choice :tag "Field"
- (string :tag "Name")
- (const :tag "Default" t))
- (choice :tag "Method"
- (const :tag "MIME conversion" mime)
- (symbol :tag "non-MIME conversion")
- (const :tag "no-conversion" nil)))))
-
-(defvar eword-charset-encoding-alist
+;; User options are defined in mime-def.el.
+
+(defvar mime-header-charset-encoding-alist
'((us-ascii . nil)
(iso-8859-1 . "Q")
(iso-8859-2 . "Q")
(utf-8 . "B")
))
+(defvar mime-header-default-charset-encoding "Q")
+
;;; @ encoded-text encoder
;;;
(defun ew-find-charset-rule (charsets)
(if charsets
(let* ((charset (find-mime-charset-by-charsets charsets))
- (encoding (cdr (or (assq charset eword-charset-encoding-alist)
- '(nil . "Q")))))
- (list charset encoding)
- )))
+ (encoding
+ (cdr (or (assq charset mime-header-charset-encoding-alist)
+ (cons charset mime-header-default-charset-encoding)))))
+ (list charset encoding))))
(defun tm-eword::words-to-ruled-words (wl &optional mode)
(mapcar (function
(append dest
(list
(let ((ret (ew-find-charset-rule
- (find-non-ascii-charset-string str))))
+ (find-charset-string str))))
(make-ew-rword
str (car ret)(nth 1 ret) 'phrase)
)
(if (or (eq pname 'spaces)
(eq pname 'comment))
(nconc dest (list (list (cdr token) nil nil)))
- (nconc (butlast dest)
+ (nconc (nreverse (cdr (reverse dest)))
+ ;; (butlast dest)
(list
(list (concat (car (car (last dest)))
(cdr token))
;;; @ application interfaces
;;;
-(defcustom eword-encode-default-start-column 10
- "Default start column if it is omitted."
- :group 'eword-encode
- :type 'integer)
+(defvar eword-encode-default-start-column 10
+ "Default start column if it is omitted.")
(defun eword-encode-string (string &optional column mode)
"Encode STRING as encoded-words, and return the result.
(or column eword-encode-default-start-column)
(eword-encode-split-string string 'text))))
-(defun eword-encode-field-body (field-body field-name)
+(defun mime-encode-field-body (field-body field-name)
"Encode FIELD-BODY as FIELD-NAME, and return the result.
A lexical token includes non-ASCII character is encoded as MIME
encoded-word. ASCII token is not encoded."
Resent-Sender To Resent-To
Cc Resent-Cc Bcc Resent-Bcc
Dcc))
- (eword-encode-address-list field-body start)
- )
+ (eword-encode-address-list field-body start))
((eq field-name 'In-Reply-To)
- (eword-encode-in-reply-to field-body start)
- )
+ (eword-encode-in-reply-to field-body start))
((memq field-name '(Mime-Version User-Agent))
- (eword-encode-structured-field-body field-body start)
- )
+ (eword-encode-structured-field-body field-body start))
(t
- (eword-encode-unstructured-field-body field-body start)
- ))
- )))
+ (eword-encode-unstructured-field-body field-body start))))))
+(defalias 'eword-encode-field-body 'mime-encode-field-body)
+(make-obsolete 'eword-encode-field-body 'mime-encode-field-body)
(defun eword-in-subject-p ()
(let ((str (std11-field-body "Subject")))
(if (and str (string-match eword-encoded-word-regexp str))
str)))
+(make-obsolete 'eword-in-subject-p "Don't use it.")
(defsubst eword-find-field-encoding-method (field-name)
(setq field-name (downcase field-name))
- (let ((alist eword-field-encoding-method-alist))
+ (let ((alist mime-field-encoding-method-alist))
(catch 'found
(while alist
(let* ((pair (car alist))
(throw 'found (cdr pair))
))
(setq alist (cdr alist)))
- (cdr (assq t eword-field-encoding-method-alist))
+ (cdr (assq t mime-field-encoding-method-alist))
)))
-(defun eword-encode-header (&optional code-conversion)
+;;;###autoload
+(defun mime-encode-header-in-buffer (&optional code-conversion)
"Encode header fields to network representation, such as MIME encoded-word.
-It refer variable `eword-field-encoding-method-alist'."
+It refer variable `mime-field-encoding-method-alist'."
(interactive "*")
(save-excursion
(save-restriction
(setq bbeg (match-end 0)
field-name (buffer-substring (match-beginning 0) (1- bbeg))
end (std11-field-end))
- (and (find-non-ascii-charset-region bbeg end)
+ (and (delq 'ascii (find-charset-region bbeg end))
(let ((method (eword-find-field-encoding-method
(downcase field-name))))
(cond ((eq method 'mime)
(buffer-substring-no-properties bbeg end)
))
(delete-region bbeg end)
- (insert (eword-encode-field-body field-body
- field-name))
- ))
+ (insert (mime-encode-field-body field-body
+ field-name))))
(code-conversion
(let ((cs
(or (mime-charset-to-coding-system
))
))
)))
+(defalias 'eword-encode-header 'mime-encode-header-in-buffer)
+(make-obsolete 'eword-encode-header 'mime-encode-header-in-buffer)
;;; @ end
:type '(repeat string))
+;;; @@ for encoded-word
+;;;
+
+(defgroup mime-header nil
+ "Header representation, specially encoded-word"
+ :group 'mime)
+
+;;; @@@ decoding
+;;;
+
+(defcustom mime-field-decoding-max-size 1000
+ "*Max size to decode header field."
+ :group 'mime-header
+ :type '(choice (integer :tag "Limit (bytes)")
+ (const :tag "Don't limit" nil)))
+
+;;; @@@ encoding
+;;;
+
+(defcustom mime-field-encoding-method-alist
+ '(("X-Nsubject" . iso-2022-jp-2)
+ ("Newsgroups" . nil)
+ ("Message-ID" . nil)
+ (t . mime)
+ )
+ "*Alist to specify field encoding method.
+Its key is field-name, value is encoding method.
+
+If method is `mime', this field will be encoded into MIME format.
+
+If method is a MIME-charset, this field will be encoded as the charset
+when it must be convert into network-code.
+
+If method is `default-mime-charset', this field will be encoded as
+variable `default-mime-charset' when it must be convert into
+network-code.
+
+If method is nil, this field will not be encoded."
+ :group 'mime-header
+ :type '(repeat (cons (choice :tag "Field"
+ (string :tag "Name")
+ (const :tag "Default" t))
+ (choice :tag "Method"
+ (const :tag "MIME conversion" mime)
+ (symbol :tag "non-MIME conversion")
+ (const :tag "no-conversion" nil)))))
+
+
;;; @ required functions
;;;
;;; Code:
(require 'mime-def)
+(require 'luna)
(require 'std11)
(autoload 'mime-entity-body-buffer "mime")
(eval-and-compile
+(autoload 'mime-encode-header-in-buffer "eword-encode"
+ "Encode header fields to network representation, such as MIME encoded-word.")
+
(autoload 'eword-encode-header "eword-encode"
"Encode header fields to network representation, such as MIME encoded-word.")
+(make-obsolete 'eword-encode-header 'mime-encode-header-in-buffer)
(autoload 'mime-parse-Content-Type "mime-parse"
"Parse STRING as field-body of Content-Type field.")
)
+(autoload 'mime-encode-field-body "eword-encode"
+ "Encode FIELD-BODY as FIELD-NAME, and return the result.")
+
+
;;; @ Entity Representation and Implementation
;;;
;;;
(defun mime-entity-children (entity)
+ "Return list of entities included in the ENTITY."
(or (mime-entity-children-internal entity)
(luna-send entity 'mime-entity-children entity)))
(defun mime-entity-node-id (entity)
+ "Return node-id of ENTITY."
(mime-entity-node-id-internal entity))
(defun mime-entity-number (entity)
;; (make-obsolete 'mime-fetch-field 'mime-entity-fetch-field)
(defun mime-entity-content-type (entity)
+ "Return content-type of ENTITY."
(or (mime-entity-content-type-internal entity)
(let ((ret (mime-entity-fetch-field entity "Content-Type")))
(if ret
))))
(defun mime-entity-content-disposition (entity)
+ "Return content-disposition of ENTITY."
(or (mime-entity-content-disposition-internal entity)
(let ((ret (mime-entity-fetch-field entity "Content-Disposition")))
(if ret
))))
(defun mime-entity-encoding (entity &optional default-encoding)
+ "Return content-transfer-encoding of ENTITY.
+If the ENTITY does not have Content-Transfer-Encoding field, this
+function returns DEFAULT-ENCODING. If it is nil, \"7bit\" is used as
+default value."
(or (mime-entity-encoding-internal entity)
(let ((ret (mime-entity-fetch-field entity "Content-Transfer-Encoding")))
(mime-entity-set-encoding-internal
+++ /dev/null
-;;; mmdual.el --- MIME entity module for dual buffers
-
-;; Copyright (C) 1998,1999,2000 Free Software Foundation, Inc.
-
-;; Author: MORIOKA Tomohiko <tomo@m17n.org>
-;; Keywords: MIME, multimedia, mail, news
-
-;; This file is part of FLIM (Faithful Library about Internet Message).
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation; either version 2, or (at
-;; your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Code:
-
-(require 'mime)
-
-(eval-and-compile
- (luna-define-class mime-dual-entity (mime-entity)
- (header-buffer
- body-buffer))
-
- (luna-define-internal-accessors 'mime-dual-entity)
- )
-
-(luna-define-method initialize-instance :after ((entity mime-dual-entity)
- &rest init-args)
- (let ((buf (mime-dual-entity-header-buffer-internal entity)))
- (if buf
- (with-current-buffer buf
- (or (mime-entity-content-type-internal entity)
- (mime-entity-set-content-type-internal
- entity
- (let ((str (std11-fetch-field "Content-Type")))
- (if str
- (mime-parse-Content-Type str)
- )))))))
- entity)
-
-(luna-define-method mime-entity-name ((entity mime-dual-entity))
- (buffer-name (mime-dual-entity-header-buffer-internal entity))
- )
-
-
-(luna-define-method mime-insert-header ((entity mime-dual-entity)
- &optional invisible-fields
- visible-fields)
- (let* ((buf (mime-dual-entity-header-buffer-internal entity))
- header-start header-end)
- (with-current-buffer buf
- (setq header-start (point-min)
- header-end (point-max)))
- (mime-insert-header-from-buffer buf header-start header-end
- invisible-fields visible-fields)
- ))
-
-(luna-define-method mime-entity-content ((entity mime-dual-entity))
- (mime-decode-string
- (with-current-buffer (mime-dual-entity-body-buffer-internal entity)
- (buffer-string))
- (mime-entity-encoding entity)))
-
-(luna-define-method mime-entity-fetch-field :around
- ((entity mime-dual-entity) field-name)
- (or (luna-call-next-method)
- (with-current-buffer (mime-dual-entity-header-buffer-internal entity)
- (let ((ret (std11-fetch-field field-name)))
- (when ret
- (or (symbolp field-name)
- (setq field-name
- (intern (capitalize (capitalize field-name)))))
- (mime-entity-set-original-header-internal
- entity
- (put-alist field-name ret
- (mime-entity-original-header-internal entity)))
- ret)))))
-
-(luna-define-method mime-insert-entity-content ((entity mime-dual-entity))
- (insert
- (mime-decode-string
- (with-current-buffer (mime-dual-entity-body-buffer-internal entity)
- (buffer-substring (point-min)(point-max)))
- (mime-entity-encoding entity))))
-
-(luna-define-method mime-write-entity-content ((entity mime-dual-entity)
- filename)
- (with-current-buffer (mime-dual-entity-body-buffer-internal entity)
- (mime-write-decoded-region (point-min)
- (point-max)
- filename
- (or (mime-entity-encoding entity) "7bit"))))
-
-(luna-define-method mime-insert-entity ((entity mime-dual-entity))
- (let (buf)
- (setq buf (mime-dual-entity-header-buffer-internal entity))
- (when buf
- (insert-buffer (mime-dual-entity-header-buffer-internal entity))
- (setq buf (mime-dual-entity-body-buffer-internal entity))
- (when buf
- (insert "\n")
- (insert-buffer buf)))))
-
-(luna-define-method mime-write-entity ((entity mime-dual-entity) filename)
- (let (buf)
- (setq buf (mime-dual-entity-header-buffer-internal entity))
- (if (null buf)
- (error "No header buffer.")
- (with-current-buffer buf
- (write-region-as-raw-text-CRLF
- (point-min)(point-max) filename))
- (setq buf (mime-dual-entity-body-buffer-internal entity))
- (when buf
- (with-temp-buffer
- (insert "\n")
- (write-region-as-raw-text-CRLF
- (point-min)(point-max)
- filename 'append))
- (with-current-buffer buf
- (write-region-as-raw-text-CRLF
- (point-min)(point-max)
- filename 'append))))))
-
-(luna-define-method mime-write-entity-body ((entity mime-dual-entity) filename)
- (with-current-buffer (mime-dual-entity-body-buffer-internal entity)
- (write-region-as-binary (point-min)(point-max)
- filename)))
-
-
-;;; @ buffer
-;;;
-
-(luna-define-method mime-entity-header-buffer ((entity mime-dual-entity))
- (mime-dual-entity-header-buffer-internal entity))
-
-(luna-define-method mime-entity-body-buffer ((entity mime-dual-entity))
- (mime-dual-entity-body-buffer-internal entity))
-
-(luna-define-method mime-entity-buffer ((entity mime-dual-entity))
- (message "mime-dual-entity does not have mime-entity-buffer.")
- nil)
-
-(luna-define-method mime-entity-body-start-point ((entity mime-dual-entity))
- (with-current-buffer (mime-entity-body-buffer entity)
- (point-min)))
-
-(luna-define-method mime-entity-body-end-point ((entity mime-dual-entity))
- (with-current-buffer (mime-entity-body-buffer entity)
- (point-max)))
-
-(luna-define-method mime-entity-point-min ((entity mime-dual-entity))
- (message "mime-dual-entity does not have mime-entity-point-min.")
- nil)
-
-(luna-define-method mime-entity-point-max ((entity mime-dual-entity))
- (message "mime-dual-entity does not have mime-entity-point-max.")
- nil)
-
-(luna-define-method mime-goto-header-start-point ((entity mime-dual-entity))
- (set-buffer (mime-dual-entity-header-buffer-internal entity))
- (goto-char (point-min)))
-
-(luna-define-method mime-goto-body-start-point ((entity mime-dual-entity))
- (set-buffer (mime-dual-entity-body-buffer-internal entity))
- (goto-char (point-min)))
-
-(luna-define-method mime-goto-body-end-point ((entity mime-dual-entity))
- (set-buffer (mime-dual-entity-body-buffer-internal entity))
- (goto-char (point-max)))
-
-
-;;; @ end
-;;;
-
-(provide 'mmdual)
-
-;;; mmdual.el ends here
:type 'integer
:group 'qmtp)
+;;;###autoload
(defvar qmtp-open-connection-function (function open-network-stream))
(defvar qmtp-error-response-alist
:group 'smtp-extensions)
(defvar sasl-mechanisms)
-
+;;;###autoload
(defvar smtp-open-connection-function (function open-network-stream))
(defvar smtp-read-point nil)