;;; Code:
-(defconst mime-spadework-module-version-string
- "FLIM 1.2.2 - \"Takeda\"")
+(defconst mime-library-version-string "Chao 1.6.1 - \"Ky\e,Dr\e(Bto\"")
;;; @ variables
(require 'custom)
+(eval-when-compile (require 'cl))
+
(defgroup mime nil
"Emacs MIME Interfaces"
:group 'news
:group 'mime
:type 'directory)
+(defcustom mime-uuencode-encoding-name-list '("x-uue" "x-uuencode")
+ "*List of encoding names for uuencode format."
+ :group 'mime
+ :type '(repeat string))
+
;;; @ required functions
;;;
(substring string (match-end 0))
string))
+(defsubst regexp-* (regexp)
+ (concat regexp "*"))
+
+(defsubst regexp-or (&rest args)
+ (concat "\\(" (mapconcat (function identity) args "\\|") "\\)"))
+
+
+;;; @ about STD 11
+;;;
+
+(defconst std11-quoted-pair-regexp "\\\\.")
+(defconst std11-non-qtext-char-list '(?\" ?\\ ?\r ?\n))
+(defconst std11-qtext-regexp
+ (concat "[^" (char-list-to-string std11-non-qtext-char-list) "]"))
+(defconst std11-quoted-string-regexp
+ (concat "\""
+ (regexp-*
+ (regexp-or std11-qtext-regexp std11-quoted-pair-regexp))
+ "\""))
+
-;;; @ definitions about MIME
+;;; @ about MIME
;;;
(defconst mime-tspecials "][()<>@,\;:\\\"/?=")
"][" quoted-printable-hex-chars "]"))
-;;; @ utility
+;;; @ Content-Type
;;;
+(defsubst make-mime-content-type (type subtype &optional parameters)
+ (list* (cons 'type type)
+ (cons 'subtype subtype)
+ (nreverse parameters))
+ )
+
+(defsubst mime-content-type-primary-type (content-type)
+ "Return primary-type of CONTENT-TYPE."
+ (cdr (car content-type)))
+
+(defsubst mime-content-type-subtype (content-type)
+ "Return primary-type of CONTENT-TYPE."
+ (cdr (cadr content-type)))
+
+(defsubst mime-content-type-parameters (content-type)
+ "Return primary-type of CONTENT-TYPE."
+ (cddr content-type))
+
+(defsubst mime-content-type-parameter (content-type parameter)
+ "Return PARAMETER value of CONTENT-TYPE."
+ (cdr (assoc parameter (mime-content-type-parameters content-type))))
+
+
(defsubst mime-type/subtype-string (type &optional subtype)
"Return type/subtype string from TYPE and SUBTYPE."
(if type
(format "%s" type))))
+;;; @ Content-Disposition
+;;;
+
+(defsubst mime-content-disposition-type (content-disposition)
+ "Return disposition-type of CONTENT-DISPOSITION."
+ (cdr (car content-disposition)))
+
+(defsubst mime-content-disposition-parameters (content-disposition)
+ "Return disposition-parameters of CONTENT-DISPOSITION."
+ (cdr content-disposition))
+
+(defsubst mime-content-disposition-parameter (content-disposition parameter)
+ "Return PARAMETER value of CONTENT-DISPOSITION."
+ (cdr (assoc parameter (cdr content-disposition))))
+
+(defsubst mime-content-disposition-filename (content-disposition)
+ "Return filename of CONTENT-DISPOSITION."
+ (mime-content-disposition-parameter content-disposition "filename"))
+
+
+;;; @ MIME entity
+;;;
+
+(defsubst make-mime-entity-internal (buffer
+ header-start header-end
+ body-start body-end
+ &optional node-id
+ content-type encoding children)
+ (vector buffer header-start header-end body-start body-end
+ node-id content-type nil encoding nil
+ children nil))
+
+(defsubst mime-entity-buffer-internal (entity) (aref entity 0))
+(defsubst mime-entity-header-start-internal (entity) (aref entity 1))
+(defsubst mime-entity-header-end-internal (entity) (aref entity 2))
+(defsubst mime-entity-body-start-internal (entity) (aref entity 3))
+(defsubst mime-entity-body-end-internal (entity) (aref entity 4))
+(defsubst mime-entity-node-id-internal (entity) (aref entity 5))
+(defsubst mime-entity-content-type-internal (entity) (aref entity 6))
+(defsubst mime-entity-content-disposition-internal (entity) (aref entity 7))
+(defsubst mime-entity-encoding-internal (entity) (aref entity 8))
+(defsubst mime-entity-original-header-internal (entity) (aref entity 9))
+(defsubst mime-entity-children-internal (entity) (aref entity 10))
+(defsubst mime-entity-parsed-header-internal (entity) (aref entity 11))
+
+(defsubst mime-entity-set-content-disposition-internal (entity disposition)
+ (aset entity 7 disposition))
+(defsubst mime-entity-set-original-header-internal (entity header)
+ (aset entity 9 header))
+(defsubst mime-entity-set-children-internal (entity children)
+ (aset entity 10 children))
+(defsubst mime-entity-set-parsed-header-internal (entity header)
+ (aset entity 11 header))
+
+
+;;; @ message structure
+;;;
+
+(defvar mime-message-structure nil
+ "Information about structure of message.
+Please use reference function `mime-entity-SLOT' to get value of SLOT.
+
+Following is a list of slots of the structure:
+
+buffer buffer includes this entity (buffer).
+node-id node-id (list of integers)
+header-start minimum point of header in raw-buffer
+header-end maximum point of header in raw-buffer
+body-start minimum point of body in raw-buffer
+body-end maximum point of body in raw-buffer
+content-type content-type (content-type)
+content-disposition content-disposition (content-disposition)
+encoding Content-Transfer-Encoding (string or nil)
+children entities included in this entity (list of entity)
+
+If an entity includes other entities in its body, such as multipart or
+message/rfc822, `mime-entity' structures of them are included in
+`children', so the `mime-entity' structure become a tree.")
+
+(make-variable-buffer-local 'mime-message-structure)
+
+
;;; @ end
;;;