update.
[elisp/flim.git] / mime-def.el
index bb18d8e..91e33f7 100644 (file)
@@ -24,8 +24,7 @@
 
 ;;; Code:
 
-(defconst mime-spadework-module-version-string
-  "FLIM 1.3.0 - \"Fushimi\"")
+(defconst mime-library-version-string "FLIM 1.8.0 - \"\e,DR\e(Bkubo\"")
 
 
 ;;; @ variables
@@ -33,6 +32,8 @@
 
 (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
 ;;;
 (defconst std11-quoted-string-regexp
   (concat "\""
          (regexp-*
-          (regexp-or std11-qtext-regexp std11-quoted-pair-regexp)
-          )
+          (regexp-or std11-qtext-regexp std11-quoted-pair-regexp))
          "\""))
 
 
          "][" 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 (representation-type
+                                    location
+                                    &optional content-type children
+                                    node-id
+                                    buffer
+                                    header-start header-end
+                                    body-start body-end)
+  (vector representation-type location
+         content-type children nil nil node-id
+         buffer header-start header-end body-start body-end
+         nil nil))
+
+(defsubst mime-entity-representation-type-internal (entity) (aref entity  0))
+(defsubst mime-entity-location-internal            (entity) (aref entity  1))
+
+(defsubst mime-entity-content-type-internal (entity)        (aref entity  2))
+(defsubst mime-entity-children-internal (entity)            (aref entity  3))
+(defsubst mime-entity-content-disposition-internal (entity) (aref entity  4))
+(defsubst mime-entity-encoding-internal (entity)            (aref entity  5))
+(defsubst mime-entity-node-id-internal (entity)             (aref entity  6))
+
+(defsubst mime-entity-buffer-internal (entity)              (aref entity  7))
+(defsubst mime-entity-header-start-internal (entity)        (aref entity  8))
+(defsubst mime-entity-header-end-internal (entity)          (aref entity  9))
+(defsubst mime-entity-body-start-internal (entity)          (aref entity 10))
+(defsubst mime-entity-body-end-internal (entity)            (aref entity 11))
+
+(defsubst mime-entity-original-header-internal (entity)     (aref entity 12))
+(defsubst mime-entity-parsed-header-internal (entity)       (aref entity 13))
+
+(defsubst mime-entity-set-representation-type-internal (entity type)
+  (aset entity  0 type))
+(defsubst mime-entity-set-content-type-internal (entity type)
+  (aset entity  2 type))
+(defsubst mime-entity-set-children-internal (entity children)
+  (aset entity  3 children))
+(defsubst mime-entity-set-content-disposition-internal (entity disposition)
+  (aset entity  4 disposition))
+(defsubst mime-entity-set-encoding-internal (entity encoding)
+  (aset entity  5 encoding))
+(defsubst mime-entity-set-original-header-internal (entity header)
+  (aset entity 12 header))
+(defsubst mime-entity-set-parsed-header-internal (entity header)
+  (aset entity 13 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
 ;;;